Terr_Spel /// dev_blog #1
Over the past month I’ve been working on an unnamed project, currently it has no official name but is going under the ‘code name’ of Terr_Spel. The games heavily inspired by Terraria, Spelunky and Magicite (a game inspired by Spelunky and Monster Hunter). I’ve been posting some small updates on twitter when I feel like I have something to show; but I want give more formal updates to what I’m working on, as well as insites to how I’m developing this project.
I kinda want these blogs to have a similar fashion to ArchVales dev Vlogs so I’m hoping that in these blogs I can not only show you what I’m working on but also how I’m structured some of the more interesting systems.
The actual dev blog
If you’ve seen / been following my tweets about the project you would have seen that there are times where i tweet twice a week, and sometimes nothing for almost two weeks. The way I’ve set up the project makes viewable progress sometimes crazy fast, but other times very slow.
Almost everything is parented in this project;
– ‘o_can_move_water‘ will make all its children objects splash and create bubbles in water.
– ‘o_trap_activator’ will make all its children objects activate any ‘o_trap’.
– ‘o_ent’ can interact with all trap triggers controlled with ‘o_trap_activator’, will be given health, can be hurt and will interact with water with ‘o_can_move_water’.
– ‘o_enemy_parent’ will give any children objects an inventory, and a basic movement system that has ‘hooks’. These hook are then used by the child object to set the states, or moving direction.
This whole system means that it’s new very easy for me to add new mobs, or particles that interact with the world around it. I can also easily add or make different traps and trap activators that react differently to each other, and different objects.
This is just an example how i’ve set up arrows and water movement with parenting.
Inventory / Items
The way I set up item I’m super proud of. Using the sprites asset position as the ID of the object means that i don’t have to set a sprite to the ID. Because ‘sprite_index’ just returns a number I can just use the items ID as the sprite index ( sprite_index = item.Key; ). Using a script i can easily create items even if they they don’t exist in the item enum I made for IDs. The script also returns the objects ID so i can do stuff like give it a massive bounce when created. or make its hspd (horizontal speed) super huge like its been spit out of a dispecer like in minecraft.
Every entity has a inventory, this means that an enemy that has run out of arrows could pick up your arrow that you shot and missed, or pick up loot that you couldn’t pick up because of traps.
Instead of just using numbers and instance_create_depth(); I’ve decided to use instance_create_layer(); and set up all the layers I need.
This is actually super helpful because late in projects you might get to the point where you have 10+ depth layers for different object and you have no idea what depth is the correct layer for an object or hud. With lots of random generation I can always make sure that object WONT be hidden behind environment objects, or environment objects wont be in front of hidden walls. Its super useful and definitely makes my life easier as I can just create MACROS for each layer.
A Lot of the work in the past weeks as gone into setting up a robust back end system for creating and layering objects. While the progress may have slowed down because of this, progress later in the project will me much faster and reliable. The frame work of almost all traps and other activators has been set up, all most all mobs can use the basic movement that been currently worked on.
I hope to continue to make dev blog updates about that i’ve been working on, as well as talk about how I’ll go about making some of the new mechanics with code and tutorials to follow it.
This first dev blog is a bit all over the place as I’m starting it after all ready making so much, but future dev blogs will hopefully be more informative and interesting with videos and gifs to to showcase.