The Ending Spell

I’ve been working on The Ending Spell since the beginning of October for #devtober. I’ve been referring to it as baby Moon Fields because I’m using it to test a lot of things I want to do for the single player mode of The Moon Fields. So I guess that means Ending Spell is a non-linear action adventure game.

Now that October is coming to a close, I’m going to use this thread to gather my thoughts. I’m not as far along with the game as I’d hoped (done), but I’m not really overscoping in any way. Essentially, this is NES Zelda with good combat and random item seeding. I got over the first big learning hurdle for The Moon Fields (programming good enemy AI), and I think I’d like to push forward.

Of course, combat isn’t all I want to do that’s bigger than Zelda. I have a lot of little ideas I want to test: walking by rocks to “roll perception” on secrets or resources, randomizing item/shop/etc. spawns, underground tunnels to “fast travel”… maybe other things? I’m not sure what to talk about right now.

For now I’ll just let this thread sit.

22 Likes

Ok, I guess talking about the combat behaviors is a good first post. One of the reasons I wanted to make this small game is because it’d be easy to test out different combat scripts with a simplified engine, and while easy is pretty relative, I’m glad I did it.

I first read this way too high level paper about AI https://alumni.media.mit.edu/~jorkin/gdc2006_orkin_jeff_fear.pdf. I didn’t really need much from it, but it was pretty helpful to get me in the mood.

For my first script I’d have the object find ranges between itself and the player, and then it would cycle through a state machine mostly based on that (and random numbers). There were four ranges — far enough to ignore the player, outside of the optimal range, optimal range, and inside the optimal range.

Far away the enemy either wanders aimlessly or idles. It’ll immediately override this and move into what I called “putz” mode. Putz mode mostly walks into optimal range and links to everything else. Based on range and weighted values Putz can move from sidestepping, backing up with a shield, or charging the player.

I put a lot of weighted randomness into the transitions so I can have different enemies that appear to specialize in being aggressive or tanky or squirrely based off how they act.

This script took a couple days, but I’m pretty happy with it now. It only does melee + shield, but one of my big goals was to be able to fill a lot of the “medium sized humanoid melee enemy” requirements and practice for better ones. The variables I can tweak are:

-Melee Weapons (Axe and Sword for now, but Whip is easy enough, and any subsequent melee weapons if I choose to use them)
-Hit Points, Movement Speed, Pushback Amount
-Preferences for optimal range, attack style, accuracy and precision for swings

I will probably work on a ranged character next. I’d like for ranged characters to also have some emergency melee attacks or utilities like bombs… we’ll see. That can make this really big.

10 Likes

Ok, so today I’m planning on making a ranged enemy that generally pings from afar with bows or magic and runs away when the player gets close. If I can get this done today then I can play with enemy spawning in the overworld tomorrow at a hackathon I’m going to here in Milwaukee.

For now, please check tentative title/logos. The Ending Spell is related to The Moon Fields so I wanted a similar hand drawn font.

5 Likes

this rules

Logo/title looks good! Between the two, I prefer the black background one, but I think the light background has a more pleasant vibe if you want the game to be experienced in a somewhat lighthearted frame of mind.

1 Like

I made the archer. It gets into range and strafes until it shoots at you. If you get close it might attack, but it’ll probably run away.

Weird design decision: I ended up making projectiles collide and bounce off enemies. At first they triggered friendly fire, but they would shred melee. I also tried them going through same team, but… that ended up feeling unfair.

I settled on letting projectiles collide with enemies, but they don’t do any damage.

1 Like

Please signal boost, ya’ll.

1 Like

The tweet above shows a GIF of my overworld spawning. It’s a combination of Zelda and TTRPGs.

When the player exits the side of the screen and makes the camera pan that’s considered a scene change. When the scene changes it checks to see if the next scene is the scene that the player had just come from or if it is a “new” scene. If it was the previous scene it loads the previous scene’s enemies, if it’s a new scene it.

Rolls for an encounter.

There will eventually be a lot of variables to consider here - how much noise has the player been making, did they leave a scene with enemies, did they leave a scene w/o enemies, what stage of the game is the player in, etc. Depending on the result of the roll, there will be different enemies that spawn. Sometimes the player won’t want enemies to spawn so they’ll crawl through the forest only using quiet weapons, and other times the player will want enemies to spawn for dropz, and they can influence it with their actions.

One of my goals is to have players traveling to a particular scene, encounter a difficult spawn with extra hard mobs, and have to make the decision to either go through the mob or go backwards to risk re-rolling more hard monsters on the way home. The game doesn’t actually work like this scenario right now, nor is it as exciting as I want it to be, so I’m going to just write a bunch to see if anything strikes me.

  • I think enemies will need to spawn mid-scene. Outside of the initial high when moving from scene to scene, there aren’t many surprises. Maybe some scenes will have enemies spawn from the outside and walk in?
  • On the flipside, I wanted to give players that walked (as opposed to run) opportunities to “roll for secrets” whether that’s resources for arrows/bombs/potions or bombable walls/torchable trees/pushable statues. It’d check a radius around the playerto represent the player’s perception, and if it succeeded on a secret (which will be randomly seeded), it’d show a shimmering spark
  • If you see a mob that is too much for you and go back to the previous room, it won’t actually penalize you until you move to the next room, and I think at that point it’s hard to associate the danger
  • I also think it might be cool if a random boss mob shows up it’ll chase you from scene to scene. It’d be really cool to see a dragon or something chase you for 3 screens. I think I’d probably have to cop the “bait” weapon just for occasions like this.

The more I think about encounters and how to make them exciting both when you’re actually fighting and when you’re not actually fighting the more I think about Metal Gear.

1 Like

I still haven’t figured out how I want to deal with overworld engagements, but I think the system is robust enough right now that I can use it for dungeons bc they don’t have as much randomness. I’m worried when I sell this game as “like Zelda” people will be upset at the lack of “puzzles”. I’ll try to figure out how to make soft puzzles that can be solved w/ a variety of weapons or just good maneuvering. Anyways, here’s the boss sprite.

TurtleDragon

I’m going to try to make bosses that’ll be cool to see later in The Moon Fields. Rendering a turtle w/ sprites and voxels is pretty cool, so this is perfect. Other potential bosses

  • Rat King — sort of like Vanguard from Demon’s but made of rats. The pile of rats will play really nicely w/ cool shadows. If I make the sprites for it in this game it’ll be an easy re-use
  • Definitely some kind of Ornstein/Smough type battle (tbh, there will probably be multiple). The AI is pretty challenging, and I think a boss that acts like the player will actually be pretty welcome in a “Zelda-like”.
  • Hydra, snake, multipart enemies are a must. I have no idea how to code this, but I think I can figure it out
  • I think a “Doom Wall” is a pretty cool idea. It could actually be a multi-room boss with enemy adds
  • I have a sprite that’s like the Vanguard from Demon’s crossed with Vire from Zelda and I think everyone would get a kick out of that
  • Same w/ a centaur knight
  • I have a concept of a statue boss w/ a cubed head and different faces to represent different attack patterns. I think this’ll turn out really great in 3D so it’d be good to try it out here
  • Something re: mummies like in my avatar
  • I have these small goblin-y enemies that’ll make for a good “horde of enemies” style boss
1 Like

Hey guys I’m gonna stream gamedev right now so if you’re interested https://www.twitch.tv/lunarsignals

devtober41

3 Likes

Ok, so things I’ve been doing—

  • I’ve been streaming a lot. twitch.tv/lunarsignals
  • Been setting up the inventory system
  • Made the first dungeon
  • Enemy spawning in the overworld

Things I want to do—

  • Set up different tiers of weapons
  • Figure out how to handle real big inventories
  • Make a boss
  • Set up the ‘perception’ system
  • Tweak the overworld evasion/spawning system
  • Figure out how to randomize dungeons

Re: Inventory
I only have space for 15 action items. I think that’s fine if I give some of them upgrades I can still have a ton of secrets to find. Sword/Sword2/Sword3, Arrows, Super Arrows, Quiver Size, Bomb, Super Bomb, Satchel Size…

Re: Boss
I want some of the bosses to be able to be spawned randomly in the overworld. I decided that even if I don’t have a “new game plus”, I think an extra hard post game would be cool. The combat is fun, you know?

Re: Perception system
I think this is mostly an “economy” or resource distribution thing, but to discourage people from running I’m going to place invisible resource nodes all over the map. If you walk (not run) by one it’ll have a chance to shine. This will encourage you to walk by nodes over and over “just in case”. Related - the same perception system will be used for finding bombable walls, torchable bushes, pushable blocks, etc.

Re: Overworld spawning
I’m still trying to figure out how to handle deescalation. I want the player to try to sneak around the overworld, not getting into too many fights. When a fight does occur, I want the player to either clear the room or sneak away. This all ties into the resource management/perception thing.

Re: Dungeon Randomization
I guess like all things, this is tied to the perception system. Randomly generated dungeons and secret passages can give a benefit to players who take their time walking around. Better players don’t need these benefits, but slower players… might? IDK, I also think it’s a cool way to help players that get stuck.

2 Likes

Been thinking inventory a lot.

  • Zelda only had 8 actionable items
  • It had 6 passive items
  • It had 2 items per dungeon, and “keys” which we’ll just count as unique per dungeon here too
  • It only had bombs as ammunition, and rupees that counted as both ammo and currency

That’s 18 “things to show” plus ammunition. The goal for the inventory in Ending Spell are

  • Have enough items to have “random drops” be interesting! Maybe you’ll get the Whip before the first Sword. Maybe you’ll feel good about the swords for a while, but find the Heavy Axe and try to switch it up.
  • Make the inventory both real time and accessible

image

I’m currently thinking tapping a button brings up an overlapping menu (Lb?) and then using the d-pad or right stick to navigate an inventory. X/Y/B/Rb/Rt will be the possible item slots, and A will be used to cancel or even drop items?

Any passive items will just be shown when the menu is shown — armor/hat/boots/rings. Maybe the armors/rings will have different stats so you can select them from the menu, but… we’ll see. I’m still not clear how that’ll happen

2 Likes