SUDO DEVLOG /
Asobimon Updates
Howdy friends. Just wanted to share a few updates since my last update 2 months ago. Here's everything new in the game!
(And as always, consider joining the discord for more frequent updates <3)
itch.io: https://leftovernick.itch.io/asobimon
discord: https://discord.gg/UXRKXA5bhf
NPC Updates! I added a whole bunch of different NPC sprites / models and also gave them the ability to have their own pathing! These movement instructions can be as long and complex as we want and they will resume their path after the player interrupts them for a chat.
Trainer Battles! This was something my team had been asking me to implement for a while lol It was a pretty big task as there were a few different things I needed to subclass / implement to make it work fluidly.
For one, I had to subclass the NPCs to allow them to have vision and be able to "stop" the player when they've been alerted.
I also needed to modify the encounter scene to differentiate between wild and trainer battles. Trainer battles have more things that need to happen before and after the fight. For example, showing the trainer sprite before the battle and indicating their name and their trainer type.
Trainer battles need to check if there are more Asobimon in the opponents party to summon before ending battle. (this one actually caused an insane amount of issues at first, but they all got sorted)
After battle, it needs to bring the trainer back on screen, display trainer has been defeated text, the trainer's unique loss text and also give money as a reward.
function createMonsterByCode(asobicode) local card = tonumber(string.sub(asobicode, 1, 3)) local level = tonumber(string.sub(asobicode, 4, 6)) local gender = tonumber(string.sub(asobicode, 7, 7)) local nature = tonumber(string.sub(asobicode, 8, 9)) local ability = tonumber(string.sub(asobicode, 10, 10)) local geneticValues = {} table.insert(geneticValues, 1, tonumber(string.sub(asobicode, 11, 12))) table.insert(geneticValues, 2, tonumber(string.sub(asobicode, 13, 14))) table.insert(geneticValues, 3, tonumber(string.sub(asobicode, 15, 16))) table.insert(geneticValues, 4, tonumber(string.sub(asobicode, 17, 18))) table.insert(geneticValues, 5, tonumber(string.sub(asobicode, 19, 20))) table.insert(geneticValues, 6, tonumber(string.sub(asobicode, 21, 22))) local dedicationValues = {} table.insert(dedicationValues, 1, tonumber(string.sub(asobicode, 23, 25))) table.insert(dedicationValues, 2, tonumber(string.sub(asobicode, 26, 28))) table.insert(dedicationValues, 3, tonumber(string.sub(asobicode, 29, 31))) table.insert(dedicationValues, 4, tonumber(string.sub(asobicode, 32, 34))) table.insert(dedicationValues, 5, tonumber(string.sub(asobicode, 35, 37))) table.insert(dedicationValues, 6, tonumber(string.sub(asobicode, 38, 40))) --create the Asobimon local asobimon = ASOBIMON[card](level) local genders = {GENDER.Male, GENDER.Female, GENDER.None} asobimon.gender = genders[gender] asobimon.nature = NATURES[nature] asobimon.ability = asobimon:getAbility(ability) asobimon.geneticValues = geneticValues asobimon.dedicationValues = dedicationValues asobimon:calculateStats() asobimon.currentHP = asobimon.hp asobimon.currentMana = asobimon.mana return asobimon end I also needed to be able to build parties for each of these NPCs with unique levels, stats and abilities. To solve this I cam up with Asobicodes. A pretty simple solution where I just build out a string with all the values needed for the unique monster and then construct it in the trainer's party. This also made testing a bit easier as I could give the player's asobimon specific DV and GV values.
Interactive Grass! This was a real headache. Early in development, I had a basic system with grass where when you stepped on it, it would look pressed down and then pop back up when you stepped off. It felt really good walking over the grass, but it had one glaring issue. Each piece of grass was its own sprite with its own collision. This meant that a patch like this would mean 44 "unique" sprites and would crush the frame rate. I ended up removing the feature and put it on a back burner to deal with later. I missed it enough that I worked out a new system for it. The grass patch you see is one big sprite made from the tile set. It has one collision box and no animations. When you step on it, the grass patch gets the player position and creates a single instance of a single grass spot and applies it under your feet in the "squished" position (the stepped on frame). Then when you walk off that new sprite is removed, making it look like the grass sprung back up. Now there's only ever a few grass sprites on screen, but we can display all the squished grass interaction we want without hurting the frame rate.
Revamped Pause Menu! Previously we were using a basic pause menu like the classic Pokemon games. Just a vertical grid view with some text boxes. I've been playing a lot of rom hacks lately and a few of them had menus that really caught my eye, so I decided I wanted to implement something that looked better. When the player pauses we draw a dither effect over the screen to make it feel like the game has faded out and then present the new menu overlay. I culled the options down to the six most important things and moved some of the other options that were there previously to the new options menu.
Speaking of options, I started building out some sliders and toggles for settings in the game, and of course you can use the crank to adjust the sliders. I also spruced up our debug menu a bit which will help with testing (sorry you won't have these options 🙂)
I also added a trainer card view so you can keep track of how much money you have, how many cards you collected and what your rank is for the Asobimon tournaments. It's important to have one of these cards if you want the guards to let you leave town alone. Its dangerous out there.
Menu Views! The pause menu is great when you want to interact with parts of the game, but sometimes you just want to get a quick full view of your party. Well, luckily the playdate has this handy dandy menu button. When you're in the overworld it will show you a full synopsis of your party, their name, type, level, health, xp and a little sprite to represent their body type. Currently I'm using the Pokemon sprites as a placeholder while the artist work on our own.
When you're in battle, the view will look a bit different. Instead, it will show you the current arena in battle and a short description of it's effects (some abilities will also require these arena types to be in place for their moves to work to the fullest potential) as well as the stages of your and your opponents stats. These can each range between -6 and +6 depending on what moves have been used in battle.

That is most of the big changes. There's been some small things, bug fixes, added Asobimon, new sounds and new music (posted in the discord!) and updated world/levels.
I'd love to hear what kind of features you would most want to see in the game! Thanks for listening to my Asobi Talk.
-Nick
