Posts by malibumanjp

Welcome to our brand new Clickteam Community Hub! We hope you will enjoy using the new features, which we will be further expanding in the coming months.

A few features including Passport are unavailable initially whilst we monitor stability of the new platform, we hope to bring these online very soon. Small issues will crop up following the import from our old system, including some message formatting, translation accuracy and other things.

Thank you for your patience whilst we've worked on this and we look forward to more exciting community developments soon!

Clickteam.

    if it works the first time and not the second time, I would assume it's linked to how you call it in the events ; are you referencing a group or an item that no longer exists ...?
    Did you change the current group in another even in a way that the item you called is no longer there...?

    By the way, not sure what you mean by ini++ doesn't have a "select file" option. If you mean opening a file at run time via events, it does have such feature. Example:

    * Start of Frame
    ini_plus_plus : Appdir$ + "data/inputs.ini" : Load file, changing the current file path, and clearing the current data in the object.

    Quick update:
    I managed to get Ping and synchronize remote clocks (frame counters).

    Here is a sample of the code I used for this, hopefully it is readable:
    // netcode is the active object where I store different alt vals.
    // lb is the lacewing blue client extension
    // microtimer is the extension to have microsecond precision
    // controller is an active object whose variables and flag store the button presses (its sort of an interface between actual joystick/keyboard input registration and game logic)

    // Send local frame timer to peer
    * netcode: AwaitingPingReply is off
    Microtimer : Reset custom timer
    lb : Clear binary to send
    lb : Select peer on channel with ID peer_id( "netcode" )
    lb : Add short self_frame_count( "netcode" )
    lb : Blast binary to peer on subchannel 200
    netcode : Set AwaitingPingReply on


    // When the peer gets the message, it automatically replies including its own frame number
    * lb : On binary message from peer on subchannel 200 (blasted)
    netcode : Set peer_frame_count to Short( "lb", 0 )

    lb : Clear binary to send
    lb : Select peer on channel with ID peer_id( "netcode" )
    lb : Add short self_frame_count( "netcode" )
    lb : Blast binary to peer on subchannel 201

    * lb : On binary message from peer on subchannel 201 (blasted)
    netcode : Set peer_frame_count to Short( "lb", 0 )
    netcode : Set ping to CustomTimerSec( "Microtimer" )
    netcode : Set AwaitingPingReply off


    * Always
    netcode : Set frame_advantage to ( peer_frame_count( "netcode" ) + ( 0.5 * ping( "netcode" ) / locked_framerate( "netcode" ) ) ) - self_frame_count( "netcode" )
    frame_adv : Set Counter to Int(frame_advantage( "netcode" ))

    * Always
    self_f_count : Set Counter to self_frame_count( "netcode" )
    peer_f_count : Set Counter to peer_frame_count( "netcode" )


    >>> Then in the Main Game Loop, I can "pause" the execution for one frame (skip conditions and stop animations) until the the frame advantage is lowered

    I am also storing local controller state (each input is an alterable flag ON/OFF which can be serialized into a single variable and sent accross network). Upon receiption of that variable, I deserialized it back into controller flags :

    // SENDING
    + Always
    lb : Clear binary to send
    lb : Add short self_controller_state( "netcode" )
    lb : Add short self_frame_count( "netcode" )
    lb : Blast binary to peer on subchannel 3

    //RECEIVING AND DESERIALIZE

    * lb : On binary message from peer on subchannel 3 (blasted)
    netcode : Set peer_input_btn to Short( "lb", 0 )
    netcode : Set remote_input_start_frame to Short( "lb", 8 )

    controller : Set b1_pressed to peer_input_btn( "netcode" ) and 1
    controller : Set b2_pressed to peer_input_btn( "netcode" ) and 2
    controller : Set b3_pressed to peer_input_btn( "netcode" ) and 4
    controller : Set b4_pressed to peer_input_btn( "netcode" ) and 8
    controller : Set l1_pressed to peer_input_btn( "netcode" ) and 16
    controller : Set r1_pressed to peer_input_btn( "netcode" ) and 32
    controller : Set u_pressed to peer_input_btn( "netcode" ) and 64
    controller : Set d_pressed to peer_input_btn( "netcode" ) and 128
    controller : Set l_pressed to peer_input_btn( "netcode" ) and 256
    controller : Set r_pressed to peer_input_btn( "netcode" ) and 512


    I'm working on storing the remote inputs received in a MagicDeque Array to keep the last n inputs and manage order properly (considering packet loss and out of order reception).

    I'm relying heavily on the "Fight the lag" document available at Please login to see this link. to think and design this implementation but it's really hard as network logic is explained rather loosely and I'm new to all this...

    Hi,

    Not sure this is answering your question, but I'm using "timer-based movements OFF" on certain active objects because I'm using logic based custom time-scale to create on-demand time-slow effects without changing the frame rate. Also, I'm working with very high frame rates for perf debugging purposes which are therefore extremely volatile. It's only affecting "visual effects" whose animation frames are not tied to game logic, so it doesn't have much impact other than animation speed consistency (I think). Everything tied to game logic, as you suggest should be handled differently, I think.

    I'm glad to know that someone else is potentially interested in this topic ; besides, I'm always happy to know there are other fighting-game enthusiasts within the Fusion community :D

    I have my base engine running for local 1v1, and for the most part it is pretty robust... but I didn't design and develop it with the idea of net play, initially thinking that was far beyond my own capacity. I've only very recently started to look into feasibility and read articles about how to build online peer-to-peer netcode. For now, I'm taking baby steps to learn and re-conceptualize the engine to allow for input latency, framelocking and so on.

    If you think you might end up trying to build netcode yourself, I can only recommend reading through this Please login to see this link. to ensure your engine is thought and designed in a way that will facilitate transition from local to online play.

    Anyways, I'll think and experiment some more in the next few days, so if I manage to get anything working, I'll post here to explain what I did !

    Cheers

    Hi Graeme, thanks a lot your ideas and interest in this topic !


    After reading through you proposal and thinking it through, I think I'll stick with only sending inputs through the network, since this is the most lightweight approach: no need to send over object states and variables (because Peer to Peer resync based on sending object state will be necessarily involve sending complementary data as well, like x/y position, x/y movement speed, animation frame, etc etc. Plus, handling the same for projectiles and other interactibles.

    Let's put it that way, the industry's standard for netcode is moving away from "lockstep" and implementing "rollback" networking instead. But in both instances, games are deterministic, meaning that on any machine/instance of the game, the same inputs from players will produce the exact same results. This is the way to go to do this properly: no need to send anything BUT player inputs because the game engine will be able to reproduce the exact same game states based on inputs alone.

    So I know this is what I want to achieve (starting with a basic lockstep implementation, for learning purposes), but my main problem is getting the initial "frame timer" sync. Sharing "counters" between the two peers is also what I had in mind, but the question is how can I ensure counters are sync (considering that sending the timer over the network will necessarily desync it because it will arrive late).. I'm guessing I have to calculate latency by sending a message back and forth, but I'm wondering if there's another way..

    Also big problem: packet loss and ensuring packets (containing player inputs) are always received and managed in the right order... Since inputs is the only thing to send across (thanks to deterministic game logic), I need to ensure inputs always arrive in order, or at least use some post-process to rearrange them in the right order..

    anyways, I guess I'll keep on looking for literature about this topic as I'm sure there is a ton and see how I can transpose this to Fusion/lacewing.

    Thanks !

    Thanks for your reply!

    However, my question was not really "is this possible?" as I know for a fact that it is: the two main implementations for this "lockstep" and "rollback" networking techniques (which are well described Please login to see this link., for those interested).

    The question I am trying to ask is "how can I implement basic lockstep netcode with fusion using lacewing"? I guess I should start by implementing a basic "ping" feature with a back and forth message, and then determine lag and frame position based on this.

    Ideally, I'm looking for the feedback from people with strong experience with the implementation of peer-to-peer netcode using Lacewing on CF2.5...

    Hi,

    I'm building a 2p fighting game, and I'm trying to get a very basic netcode system up and running to allow 1v1 online play. I'm totally new to the entire netcode thing, but I managed to setup lacewing (blue) client and do some basic data input data exchange between two peers :

      catching the player's control inputs

      sending them over to the other peer

      get data translated back into controller's input, effectively getting one char to move on the other side.

    My 1st question is: How Can I ensure that both player are synced based on an in-game timer?
    My idea was that the channel master would send over its timer, so that the other player would be in sync with him.. but if I, as the channel master, send my packet "frame_cout = 0" a t=0, there is a lag of,say, 33 ms when it is received so player two will receive "frame = 0" at t+2, being effectively 2 frames late. Since I don't know how to measure latency, I don't see how I can sync player 2 with the timer sent by player 1 (the channel master).
    am I looking at this problem the wrong way...?


    My 2nd question is: Is there an easy way to ensure packet receiving order?
    I'm assuming that once I solve problem 1, I can timestamp the packets myself when sending them over, then put them into a list or array and sort them, but maybe there's an easier way...?


    FYI, I watched this very interesting talk at Please login to see this link., but i'm quite a few steps before thinking about such things for the moment. My concern right now is

    Hi,

    Can you copy-paste your code as a forum post? I'd be better for history and legacy (rather than having to download a project example)

    Just so you know, I'm using the Ini++ extension on many projects and it is very reliable for setting, reading, updating values, etc.

    Hi Everyone,

    Any chance anyone had the time to look into the mentioned optimizations of the current Spriter Extension (1.3)?
    I'm really annoyed by the fact that once a Spriter object leaves the visible screen, some of its specific behavior stops being taken into account by the code (tags, triggers, variables, animation states, etc) which breaks a lot of stuff and forces to create workarounds which affect gameplay quite a lot...

    Thanks !

    Hi conceptgame !

    Happy to hear that the extension might get some improvements in the future.

    If you'd prefer, I can create "proper" feature requests / bug tickets within the GitHub project so it's easier to follow for you (or anyone else with C++ skills who enjoys bug crushing XD ) ?
    Let me know if/how I can help, I'd be happy to!

    Hi conceptgame. I was just looking into Spriter Pro. I have my own workflow already using Toon Boom Harmony, so up until now I've not felt the need to look at other tools. But Watching the Spriter video on the clickstore piqued my interest, when it mentioned that there are ways it can augment an existing workflow, with things like left-right flipping for example.

    I'm reluctant to spend time learning new tools and workflows, but if Spriter can give me more power within my current workflow, it might be worth it. My current workflow involves making my animations externally (Using Toon Boom Harmony, which I already like using and which has lots of features: bones, nodes, vectors, IK, etc.) and importing them into Fusion as PNG sequences. I do very little in Fusion's animation editor itself, other than importing/copying-pasting things into the appropriate animation sequences and directions. In your opinion, could Spriter and your extension be of help to a workflow like that? Does the extension actually replace the native Fusion animation editor (would I be using the Spriter Pro editor?) Could I use your extension with a PNG-sequence-based Active Object to better control its pacing, scaling, etc.?

    Hi Volnaiskra,

    I cannot reply on behalf of concept game, but I can definitely give you some insights as to why the Spriter Extension has become a very important part of my workflow, beyond simply the cut-out animation:

    * within fusion, you can use the Spriter unlimited 'trigger events' to eliminate pieces of redundant code: Most of my animation transition is done via the trigger and variables within the Spriter files, which I can set while creating new animations. Same with playing sound, or any other particular event which can occur during a given animation (change of character status, creation of hitboxes, creating visual effects, calling specific pieces of code as a call back, etc).
    * the ability to have unlimited "action points" or even get at run times data about a specific piece of animation's position and angle (for example, position of the "head" sprite). This is extremely helpful when you want visual effects to be created during a specific animation.
    * the ability to have animation Strings, integers and floats that you can define in the animation file, and then retrieve within fusion code to have specific behaviors during run time.
    * the fact that you can in real time edit and reload the spriter file, tweak the animation and have that update taken into account without doing anything in Fusion directly

    All of the above (and many more things which one could probably do to accommodate one's specific workflow) are extremely powerful tools as opposed to the native "active" objects Fusion offers. However for what you describe, and especially if active objects are already cemented into how you manage animated characters and object, what I mentioned above would probably not be of any help, as I don't think Spriter as an animation software is really as powerful and ergonomic as some of its competitors.

    Also, I should point out that the extension still has a few major issues regarding performances and visual artifacts (which you can read about in the above comments). My biggest concerns are the loading times (which is extremely slow upon creation at run time compared to that of an Fusion active object) as well as the fact that animation does not seem to work properly outside of the camera view (which is a big issue for the aforementioned Even triggers, values if used to command some specific behaviors through the Fusion events).


    I do wish these would be fixed and optimized by someone in the community who masters c++. But even with the drawbacks I mentioned, I could not go back to using active objects anymore for main characters, enemies, etc.

    I hope this helps :)

    cheers

    Hi Conceptgame,

    I'm happy to learn that you are working on some extensions again ;)

    About the Spriter extension, I am encountering 3 strange behaviors, not sure if this is by design or they are bugs.

    1. "tags" (animation meta data) seem to not automatically reset when an animation changes ; this mean that if I want to activate a tag during animation "1" and key-frame it, if I then switch to animation "2", the tag would still be active UNLESS I key-framed in this animation the deactivation of the tag.
    This seems like a design choice, but I'm not entirely sure ; to me it is a bit problematic not to have tags reset, but I'd understand that in some cases this behavior makes sense (though I would rather manage it through Fusion code than through Spriter animations tags)

    2. "Triggers" -which I use a ton- seem not to be working when Spriter object is outside of the drawn frame (screen). This is obviously very annoying because triggers are used to communicate between the Spriter animation and Fusion code, so them not being called results in broken behaviors and sloppy workarounds.
    Also, "Triggers" are not only active during the Fusion frame when they are called but sometimes a little longer (depends on framerate). This forced me to use the "Only one action when event loops" which doesn't work well for some reason if I have several instances of the same Spriter Object.
    I think this is a bug as "conceptually" speaking, Triggers are supposed to activate only when they are called.


    3. "Change Animation by name" (not sure if this is linked to frame-rate or something else) : when transitioned outside of drawn screen, sometimes it doesn't work. Maybe this is a side effect of the Trigger issue mentioned above as I use it very often for animation transitioning and I get strange behaviors "randomly" (hard to reproduce specific cases, maybe).


    ...and using this opportunity for the reminding you of this (small ?) change that would make my life easier :

    Quote

    small feature to the expression properties : you have the get point angle/x/y which is super useful as I can not only use it to retrieve data from Points, but also from any bone or sprites. I think it would be very useful if we could get the x and y scale values as well.


    I'm really sorry to burden you with more bugs and requests. Your Spriter extension is a godsend and I can do so many cool things with it that I can't help but ask for more ;)

    Cheers

    Tldr: I appreciate your input and ideas. I believe I have studied and thought enough about this to know that using a “hit registration list” is the right way to go. The question was more how can I optimize this technically since “list” is not a native value type associated to active objects in CF2.5.


    Let me describe a little bit how the system work. I apologize in advance if this is messy, I’m not sure to be able to properly explain things.


    * For the purpose of explanation, let's forget for a moment that Player and Enemies are separated objects. The idea behind this engine is that it is as generic as possible to ensure that potentially any instance in the game could generate a “hitbox” and have a “hurtbox” attached to it, which implies that hit registration must be generic and cover many different cases. It is heavily influenced by how 2d fighters work with what is commonly called "frame data".


    * Let’s call a “hurtbox” a zone in space attached to a given object which is used to know if that object was hit by an incoming attack. There is only one “hurtbox” active, and it’s linked to possibly any object using the Fixed Value as an identifier.


    * Let’s call a “hitbox” a zone in space emitted by a given object (usually physically bound to it) which is used to store attack properties of the emitter (x/y translation upon impact / hit animation to trigger / damage amount / hit stun amount / elemental property, ...) . I do not want to determine in advance how many attacks there will be and how they work. These properties are stored in a config file and grouped under a specific hitbox ID. One given hitbox could be “single hit” or “multi hit”. This determines whether it can hit multiple times during its “active frame” time or only once. Of course, when I say “once” or “multiple”, I’m referring to hit registration on one specific “hurtbox” (or hittable object, if you will).


    “hitbox” and “hurtbox” are visually rendered in my project exactly in the same way they are in Street Fighter 3, for example. Just colored square active objects, which are invisible (they work as collision mask).


    * Let's call "Attacker" any object that can generate a "hitbox". It could be the main character, an enemy, a projectile (a bullet, a fire ball, an explosion ...), an environmental hazard (flames, thunder, etc). The Attacker has one or several attack animations. These animations have the usual "startup frames" (before the attack can do anything), the "active frames" (the time during which the attack can hit) and "recovery frames". Attackers could be players, enemies, environment, anything.


    * During the first frame of the attacker’s "active frames", the hitbox active object is created and an ID is dynamically assigned to it (based on animation properties). The hitbox remains until the last “active frame”, then it is destroyed.

    * During this time, if a “hitbox” collides with any “hurtbox”, it checks whether hit can be registered and if so, it impacts the owner of the corresponding hurtbox (x/y position, life, etc).

    * To avoid a “hitbox” registering collision on the “hurtbox” of the attacker, I’m using the Fixed value of the attacker as the “owner_id”. Simply put, it the owner_id of the hitbox is the same as the owner_id of the hurtbox, hit will NOT register.


    * Upon collision, the “hitbox” could still be active for some time but the hurtbox touched should not register collision from this specific hitbox (but could be touched by another one overlapping right after). In this regard, the “invincibility flag” is not a suitable solution because there could be different hitboxes (from different attackers) hitting the same hurtbox in a small time frame and I want to ensure all hit register.

    As to storing the “last_hitbox_id” on the hurtbox upon collision, this could work in most cases, but it would not work for “multi hit” hitboxes as the first collision registration would cause the following ones to be ignored.

    EDIT : after re-reading the solution suggested by GamesterX23, i think i'll try this as it can probably handle 95% of the cases if not more. I'm looking to do something that work 100% of the time but it's probably just an overkill...


    The solution I have in mind (and I’m pretty sure is the only one which covers 100% of the cases in my current system) is to store on the “hitbox” the Fixed Values of the hurtbox it collided with within a list, and check upon collision between hit box and hurt box that the Fixed value of the hurt box is not yet in the “hit registration list “ of the hit box it collided with. This forces me to do look ups in the list since I have to use a string and parse it (which is definitely not a fast operation for the processor). For the case of “multi hit” hitboxes, I can simply clear the list whenever this hit box can hit anything again.


    I hope the above makes it clearer and that you now understand what I want to achieve and how I’m planning on doing it.


    It would be complex for me to submit a mfa example of this collision registration engine as it is currently very intricate and there are lots of cross references to other objects within it. Eventually, this is something I’d like to share with the community !


    Cheers

    Hi Graeme2408 and casleziro !

    First of all, thanks for taking the time to answer. The solution suggested by both of you (using a flag on enemies to prevent looping) is what I initially did in previous projects, and it works well to some extent, but it also has its limitations: the flag turns the enemy invinciblr for a set amount of frames, which is good to avoid registering hit detection the same hitbox but could show its limits in at least two instances:

    - if a player attack has a hitbox overlapping the enemy and that hitbox is active for more time than the invincibility, the attack will be registeeed twice. And I can deativate the hitbox upon collision otherwise other enemy will not get hit by it.
    - if another attack collides with the enemy right after the first one (which set the enemy invincibility flag on for a short period of time), it will not register.

    One might think that I'm being overly cautious and thinking about very rare cases, but my experience tells me that if I don't take them into account now, they will turn out to be real annoyances in the future which will force me to use workarounds. Besides, I'm trying to build the most flexible system right from the start, to no restrict myself in the future when designing the various attacks and their properties.

    Thanks for the help, I guess I'll try out my initial solution and resort to a simple flag mechanic if I really can't make it work or if performances are really low.

    Cheers !

    Hi warmachine,

    Thanks for the feedback. The whole point of the hitbox / hurtbox system is to have precise collision detection: if i do a simple overlap test on an active (or a group) I cannot "exclude" certain parts of the sprite from the collision detection. For example, i want the extend arm of the play to cause damage (and get hit animation) but not the player's legs and reciprocally only the body section of the enemy should be hittable and not its tail. This is a random example but it should be manageable on an animation per animation basis. I'm absolutely positive that hitboxes and hurtboxes are the right way to go as this is exactly how old school and modern 2d fighters work.

    Regardless, the thing I'm trying to optimize is not collision detection in general but specifically registering multiple collisions from one hitbox to several hurtboxes over several frames and scoping which hurtbox has already collided with the hitbox to avoid loops. In that regard, I'm not sure how your solution would work but maybe I'm missing something? Anyways thanks for the shared knowledge !

    Cheers

    Hi conceptgame,

    Thanks a lot for this extension which allows me to do some very cool stuff with my personal projects.
    I was just wondering if it was possible to add a small feature to the expression properties : you have the get point angle/x/y which is super useful as I can not only use it to retrieve data from Points, but also from any bone or sprites. I think it would be very useful if we could get the x and y scale values as well.

    I tried to look at your git repository to do the change myself but I'm very far from having the technical knowledge and skills to do so...

    Thanks !

    Hi !

    I'm working on a 2d platformer with beat'em up / fighting mechanics and I would like to have the community's feedback on how to best handle Hit Detection.

    A bit of background :I have one player and multiple instances of the same enemy active object. Each enemy has a Hurt Box active obj linked to him. This Hurt Box is used for hit detection.
    The player has several attack animations which trigger the creation of a Hit Box active obj which, when colliding which enemy hurtboxes, triggers their respective "get hit" animation.
    This system is very similar to what is done in 2d fighting games.

    The issue is that if one specific player hitbox overlaps several different enemy's hurtboxes, I need them each to register the collision only once.
    Obviously, the player's hitbox shall remain active for x number of frames and shall not be destroyed upon collision.

    With another programming language, I'll simply append the enemy's hurtbox Fixed value to a player hitbox "hit_registration" list, and check during overlap test that the hurtbox's Id is not already in that list.


    I was thinking of doing this using a alterable string on the hitbox and add to it the fixed value of each hurtbox it collides against (which is essentially doing what I described above but with a string instead of a proper list) but string search are not really fast and optimized... Maybe someone has a better idea for this...?

    Thanks a lot !

    Hi Conceptgame,

    First and foremost, thank you a lot for the spriter extension updates. I've been away from Fusion 2.5 for a while but I'm back on it now and it's great to be able to work with Spriter so well, thanks to your work !


    I'm using Spriter Object extension v1.3 and doing all of the animations at 60fps (same speed at which the game is running). I'm encountering a few issues with the implementation:


    ISSUE n°1 : Box sizes are not correct

    On Trigger event "create hitbox" (trigger in the spriter animation):
    > create "active"
    > bound "active" to (Spriter Object's "hitbox")

    >>> The object is bound, but the proportions of the "hitbox" are not applied to the "active" object (or partially, keeping its transformations relative to the xy size of the "active" object instead of resizing according to the proportions of the "hitbox").

    I was able to solve that issue with very specific ForEach loop logic, but I am wondering why this could be. Note that if the object is created at the start of the frame, I don't have this issue.


    ISSUE n°2 : impossible to have "instant bounding" even within a fastloop

    This is not a major issue, but when doing the "active" object creation and bounding, I can see the "active" object flash for a split second before being bound to the "hitbox", even if done within a fastloop which should allow to bind the object before the frame is even drawn.
    This can be a minor problem for collision detection as the bound "active" object occupies for a frame a position and size different from the box.

    Maybe we could have a "Is Box Bound ?" condition for the spriter object which could help making the bound "active" object visible only after it's effectively bound or something ?


    ISSUE n°3 : While Spriter object is flipped, Boxes are not always well aligned

    This is the most problematic issue at this point. When the Spriter object is flipped (using the animation > flip condition), the box positionning is messed up:

    - when there is a change in animation, the boxes are really out of place for a couple frames and then get back to the correct positions.

    - during the "punch" animation, the "hitbox" is create for a few frames and the "active" object is bound to it but the box is way off to the right, even though it's correctly located when the Spriter Object is NOT flipped.

    Does the spriter extension take into account the "active" hot spot location as well as the "hitbox" pivot point ? (I made sure in both cases, it is always top-left corner).

    Any insight would be greatly appreciated !


    I'm sorry for (very) long post, hopefully you'll be able to read it through ;)


    Thanks !

    Hi again,

    So after some extra testing, it turns out that I still get the crashing issue. I tried several things :
    - deleted the sub entity from the project and saved it : I now have a single entity in it
    - copy/pasted the whole project into the folder were the mfa file was
    None of which work, it still crashes. If I copy paste the AllinOneLibrary active object and the Spriter object from the example into a new frame, a copy paste the start of frame condition it works. However, I cannot get to do the same with my own project. Could it be that the sub entity I once created and used in an animation (which I removed since) is still somehow embedded in the Spriter file, which is causing the format to be misread...?

    I'm afraid I'm going to have to start my Spriter project from scratch and test the CF2.5 extension at every step to make sure I do not get errors..

    If you have any ideas, I would gladly take them.

    Cheers