My first Game Jam Experience with Stencyl

Avestron

  • Posts: 7
Greetings all. :c)

Well now that I've recovered from Game Jam 2017, I figured that I'd like to share my experience here.

For the jam I developed a game called 'Blighters' Locker' and while it may not be much to look at or play, it was also my first digital game, with a fair portion of the Jam spent learning the ins and outs of Stencyl.

And on this note I would definitely like to thank the developers of Stencyl for having enabled me to do that which I have failed to achieve in some 30 years - 'a digital game'.

I also learnt a lot from the experience and am looking forward to trying something different - with Stencyl. ^_^

Incidentally, one thing that I was a little concerned about and remain unsure of is whether it is possible for two or more persons to work on Stencyl for faster development. It does not appear so but I'd like clarification.

I intend on elaborating further about the experience gained in a subsequent reply. In the meantime, thank you Stencyl!

Avestron

  • Posts: 7
OK. So a bit of feedback about the experience.

Walking into the game jam I had an idea stuck in my head that I would not default to tabletop game development and neither would I get relegated to narrative roles. As a result of this I think I'm at least semi-responsible for ending up solo for the jam.

Which kind of ticked me off at first, even if I knew that me being a little older and less easy on the eyes than most other jammers could have resulted in this either way, but then I got determined and dug in to prove to myself that I could do develop a digital game (18 months earlier went solo on a tabletop game project during a jam - after having finished my small ideation/ narrative role in a programming-heavy team).

I was going to make it happen - and no, I wasn't going to let the fact that I'd no practical experience and quite few tutorials semi-viewed get in the way of deeming Stencyl my best hope. I took a deep breath and consigned the jam to be a mass learning experience - I was going to learn to make games using Stencyl. And I kind of did (thank you again!).

/\/\/\

Of course there were little things that got annoying or that I more likely was doing the hard way.

I found that having a single image depict all the animation states of an actor was not an effective way to set up animations because I had to remove a LOAD of frames each and every time. In the end I used Paint.NET to slice and dice the image into many smaller strips but it would have been nice if I could simply have used one animation master image and click different 'tiles' in sequence to build multiple animations (much faster).

I also found that as I built that one playable scene, I had to create an added layer so that actors would appear to go behind them (like trees). I also found that it would have been nice to have a collisions preview mode to assess the map from a collisions standpoint.

While on the subject of collisions, I didn't have time to figure out how to make bullets only collide with some tiles (buildings) but not others (deeper water).

It was also interesting trying to figure out interactions between actors, finding it a little  counter intuitive to go into the target actor and check for collisions with stuff colliding into them - like bullets. I could get used to that although I'll try to figure out a more elegant way.

Also in briefly considering making a 2 player mode, I could not figure out how to get a scene to check if one or both actors of type player were dead to go back to the title screen.

I also need to figure out a better enemy AI than 'Wander'. :cP And how to make text colorful (didn't manage to install the text extension).

It also got harrowing scrounging for quick mp3 sounds once it became apparent that it would not allow compilation with both mp3 and ogg files inserted.

Oh... and flash... slows down fast - especially on my 9.5 year old lappy (GM won't even run on this machine - yet Windows 10 does). :c) And the game ended up over 50MB in size (need to look into optimization)!

/\/\/\

Yes, I know that was a laundry list of difficulties that I encountered but things that really rocked was both approachability and documentation. :c) I am looking forward to trying different things! Learning more. Maybe producing something unique eventually.

Of course if anybody is kind enough to point me in the right direction for features that might have resolved the above mentioned "issues" the that'd be awesome also. ^_^

ceosol

  • *
  • Posts: 2260
Glad you had fun. My team used Unity for the jam and that was not an enjoyable experience. The main programmer did a fantastic job, but we were so limited on the game mechanics because of how much straight coding it all required.

Incidentally, one thing that I was a little concerned about and remain unsure of is whether it is possible for two or more persons to work on Stencyl for faster development. It does not appear so but I'd like clarification.

This is something that can create issues, I agree. There isn't a github (or other sharing/merging) link to game files. However, people can work on behaviors and "export" them. Stencyl saves the behavior as a .png file. You can then "import resource" the .png file on another computer or into another project. Local attributes (the blue ones) are transferred in. The global attributes (purple ones) will only transfer if you have the same attributes on both project files. For instance, if you make a .stencyl file with all of your global game attributes, you can share that on all systems. Every .png export would then have the same purple attributes transferring.

Quote
I found that having a single image depict all the animation states of an actor was not an effective way to set up animations because I had to remove a LOAD of frames each and every time. In the end I used Paint.NET to slice and dice the image into many smaller strips but it would have been nice if I could simply have used one animation master image and click different 'tiles' in sequence to build multiple animations (much faster).
You can do that when you import a picture. Select the file and then set the number of columns/rows you want to split it up into. It works best if all images are evenly space out.

Quote
I also found that as I built that one playable scene, I had to create an added layer so that actors would appear to go behind them (like trees). I also found that it would have been nice to have a collisions preview mode to assess the map from a collisions standpoint.

While on the subject of collisions, I didn't have time to figure out how to make bullets only collide with some tiles (buildings) but not others (deeper water).
Tiles seem to always go to the back of layers - so in that case, yes have a second layer. With actors, you can have one layer and use "move to front of layer"

Collision detection can be found with Run>Debug Drawing.

Create a new actor group for bullets and you can dictate what they collide with. If you only want to focus on tiles, then you need to use the Tile API. You can check for "get tileID at row: column". This way you can specific which ones the bullet will hit.

Quote
Also in briefly considering making a 2 player mode, I could not figure out how to get a scene to check if one or both actors of type player were dead to go back to the title screen.
As with any engine, you would need to set up your attributes/variables to check for these things. No engine/language automatically knows when players are dead without being told. All you would really need is two boolean attributes. Set one to true when player1 dies and set two to true when player2 dies. If both one and two are true, go back to title.

Quote
I also need to figure out a better enemy AI than 'Wander'. :cP And how to make text colorful (didn't manage to install the text extension).
This isn't an engine related point. If you want "smart" AI and different customizations, you will probably need to program it yourself.

Quote
It also got harrowing scrounging for quick mp3 sounds once it became apparent that it would not allow compilation with both mp3 and ogg files inserted.
mp3 is only for flash. ogg is for desktop and mobile. I have Audacity (works on mac and pc, maybe linux too) on my systems. It can quickly export the same file to mp3 or ogg depending on what is needed.

Quote
Oh... and flash... slows down fast - especially on my 9.5 year old lappy (GM won't even run on this machine - yet Windows 10 does). :c) And the game ended up over 50MB in size (need to look into optimization)!
For size, if you go into settings, you can uncheck 4x, 3x, 2x resolutions. This will decrease the file size by 80%. Flash running slow is might likely from too many "always updating" events happening. You can create boolean (true/false) attributes to shut off the updating when it is not needed. Another cause of lag is collisions. If things are constantly colliding even when not needed, it will drag down the system.

Avestron

  • Posts: 7
Glad you had fun. My team used Unity for the jam and that was not an enjoyable experience. The main programmer did a fantastic job, but we were so limited on the game mechanics because of how much straight coding it all required.

Thanks! Sorry to hear that you didn't enjoy the Unity development experience. We had several teams work in it and I personally feel that the engine got in the way of some of those projects - incompletion and all that. I think that even if I had managed to get it to run on my machine - I'd  not have had the fortune of picking it up sufficiently as to churn out anything basic.

Quote
This is something that can create issues, I agree. There isn't a github (or other sharing/merging) link to game files. However, people can work on behaviors and "export" them. Stencyl saves the behavior as a .png file. You can then "import resource" the .png file on another computer or into another project. Local attributes (the blue ones) are transferred in. The global attributes (purple ones) will only transfer if you have the same attributes on both project files. For instance, if you make a .stencyl file with all of your global game attributes, you can share that on all systems. Every .png export would then have the same purple attributes transferring.

That is certainly very useful to know. I am surprised. The behaviour is saved as an image file? Curious yet intriguing.

Quote
You can do that when you import a picture. Select the file and then set the number of columns/rows you want to split it up into. It works best if all images are evenly space out.

I am not sure if I explained myself well there. I am talking about a single image, say 320 x 320 pixels in size, mapped to a master animation file (kind of like tilesets) and then, when adding an animation, click on (or even drag across) the desired frame(s) and add accordingly, without needing to reload the image concerned.

In the end I settled for slicing the png into seperate single-row, multi-column animations and it worked out well enough. :c)

Quote
Tiles seem to always go to the back of layers - so in that case, yes have a second layer.

Thanks for the clarification. :c) Now that I mention it, it would also have been nice to be able to go over the main tileset that I used, drag across an entire section of it and designate to animate. Then simply select an identically proportioned second section on the same tileset and thats frame two for the first selection, and if need be a 3rd selection for a 3rd, etc. It was a bit tedious separating the large png's animated sections into small files to facilitate the tile-by-tile animation process.

Quote
With actors, you can have one layer and use "move to front of layer"

Collision detection can be found with Run>Debug Drawing.

Create a new actor group for bullets and you can dictate what they collide with. If you only want to focus on tiles, then you need to use the Tile API. You can check for "get tileID at row: column". This way you can specific which ones the bullet will hit.

That is certainly very useful to know and I thank you for taking the time to address these difficulties encountered here. :c)

I think it will prove a fruitful exercise to revisit the ggj game and simply sort out the bugs without adding features. Don't want to get too bogged down.

Quote
As with any engine, you would need to set up your attributes/variables to check for these things. No engine/language automatically knows when players are dead without being told. All you would really need is two boolean attributes. Set one to true when player1 dies and set two to true when player2 dies. If both one and two are true, go back to title.

Thank you. I trust that these would need to be game attributes rather than local attributes.

Quote
This isn't an engine related point. If you want "smart" AI and different customizations, you will probably need to program it yourself.

This is definitely a fair point and I would like to hasten to add that it is not my wish to have everything done for me.

Quote
mp3 is only for flash. ogg is for desktop and mobile. I have Audacity (works on mac and pc, maybe linux too) on my systems. It can quickly export the same file to mp3 or ogg depending on what is needed.

I was planning (but never got around to using) Anvil Studio for mid creation. Will look into Audacity. Thanks.

Quote
For size, if you go into settings, you can uncheck 4x, 3x, 2x resolutions. This will decrease the file size by 80%. Flash running slow is might likely from too many "always updating" events happening. You can create boolean (true/false) attributes to shut off the updating when it is not needed. Another cause of lag is collisions. If things are constantly colliding even when not needed, it will drag down the system.

Another thing that may have contributed. Earlier on in the jam, on the suggestion of a member of another team I initially went for 1600 x 900 screen size and yet on resizing down after realizing the unsuitability to my system the scene previews seemed to remain at the larger size.

The tip to remove 4x,3x and 2x resolutions sounds like an excellent suggestion and I will do so from now on.

Interestingly I did already notice a big performance drop difference betwen making events 'on creation or 'always updating' so thank you also for solidifying my understanding there. Also the tips about collision.

In short, thank you for all the feedback. You are awesome. :c)

ceosol

  • *
  • Posts: 2260
In the end I settled for slicing the png into seperate single-row, multi-column animations and it worked out well enough. :c)
I understand now. Yes, I just import the same picture into multiple animations and then delete the ones I do not want. The only issue is with very large animations (640x640+), java will spit out a memory warning.

Quote
Thanks for the clarification. :c) Now that I mention it, it would also have been nice to be able to go over the main tileset that I used, drag across an entire section of it and designate to animate. Then simply select an identically proportioned second section on the same tileset and thats frame two for the first selection, and if need be a 3rd selection for a 3rd, etc. It was a bit tedious separating the large png's animated sections into small files to facilitate the tile-by-tile animation process.
Pretty much anything animated, I make as simple or minimal actors. It is so much easier dealing with multiple animations in an actor rather than animating tiles.



Quote
Thank you. I trust that these would need to be game attributes rather than local attributes.
Not neccesarily. There are a few ways to pass local attributes between scene-actors-behaviors. If you click on the "Behaviors" tab of blocks, you will see ways to trigger things and pass information around.


Quote
In short, thank you for all the feedback. You are awesome. :c)
No problem. When you go through your ggj entry and start changing things, feel free to post in the "ask a question" forum. Many people routinely go through and answer questions there. I spend most of my time reading chit-chat and game journals :)

Avestron

  • Posts: 7
I understand now. Yes, I just import the same picture into multiple animations and then delete the ones I do not want. The only issue is with very large animations (640x640+), java will spit out a memory warning.

OK. Good to know about the issue with large animations. :c)

Quote
Pretty much anything animated, I make as simple or minimal actors. It is so much easier dealing with multiple animations in an actor rather than animating tiles.

I'll definitely consider that next time. As a matter of curiosity - what do you consider 'simple or minimal'? sprites with less color depth, smaller pixel size or simply easy to artistically produce?

Quote
Not necessarily. There are a few ways to pass local attributes between scene-actors-behaviors. If you click on the "Behaviors" tab of blocks, you will see ways to trigger things and pass information around.

Thank you very much. :c)

Quote
No problem. When you go through your ggj entry and start changing things, feel free to post in the "ask a question" forum. Many people routinely go through and answer questions there. I spend most of my time reading chit-chat and game journals :)

Okie-dokie! Main reason I posted in chit chat is because it was primarily my aim to share my positive experience as a first-time user. ^_^ Definitely will do in future. Have a great day.

ceosol

  • *
  • Posts: 2260
Quote
I'll definitely consider that next time. As a matter of curiosity - what do you consider 'simple or minimal'? sprites with less color depth, smaller pixel size or simply easy to artistically produce?

Simple and minimal are options in the physics tab of an actor. They both reduce the resource drain of the actor.