top of page

Post 4: Jan 2019 Update

Josiah Wilkinson

Updated: Jan 22, 2019


Hello everyone, hope your holidays went well!

So, I know I ended the last post with a word about the first free roam demo coming out about now-ish. Regrettably, I just was too busy and having way too much fun over the break to do it XD!

...Ok, I'm exaggerating of course; I did get a lot done on the demo, but Christmas and New Years and the 2 weeks I had off for them were busier than anticipated, and I encountered more issues and bugs working on the code than I expected. So with those two factors combined, it has taken longer than planned to get the demo fully functional. I have finished most of the code; I finished the combat system last night, getting it fully working, and the overworld walking system is nearly complete. There are only 3 more things that need to be added:

-the menu to unlock spells (the code for unlocking spells and everything is all there, I just need to code the interface for it)

-the actually spells (I've been playing it with about 10 unique ones, implementing most of the current effects, but I want about 20 somewhat balanced ones for the demo).

-all the art (I have some enemies designed and roughly drawn, but for the 4 different ones I have planned for the demo, I need art for 2 of them. Also, I need to finish up the rough overworld art and matching fight background).

So, that's about it.

...and now that I write it out, it seems a bit daunting...

But no worries, I'm sure that I will be able to finish these in time. The work thus far has been about 74% coding and 25% asset creation (I like to save about 1% for staring at my screen in confusion and/or mild frustration when my program is just being annoying). Now, I'll be switching over to 25% coding and 74.5% asset creation (asset creation only requires about half as much staring in frustration). By asset creation, I mean creating all of the spells, enemies, attacks, and art. Hopefully this should go more according to schedule, as jpgs are a bit less likely than code to start bugging out and suddenly require half of an hour comb through looking for the source (it's usually me; I'm generally the source of the bugs).

...and I really want to get it done for the upcoming Dirty Rectangles (I didn't name them) January meet up. For those that don't know, the Dirty Rectangles are a game developer... club? group? collective? initiative?... based in our glorious frozen wasteland of Ottawa (sorry, the somewhat gratuitous amounts of snow and slower buses make me a tad cynical about the weather this time of year). They meet up every 3rd Wednesday of the month at the Avant Garde bar (a nice 5 minute walk from my campus) and often have 2-3 presentations on virtually anything followed by any number of presentations by people who want to show off their cool stuff; it's pretty fun. (I once sat down, look beside me, and noticed the lead developer of Bendy and the Ink Machine was right beside me, so suffice to say I felt in the presence of nobility. XD)

So yeah, if any of the 3 or so of you guys ready these as I post them are in Ottawa and want to see gameplay and visuals and a semi-complete or coherent presentation of Echoes of Lotus and what I have so far, feel free to come out on the 16th.

So, for a post that's not about the demo (I WILL write about it next time), I should probably stop talking about it and get to the point of this post; which is nothing specific. From now on, I'm planning on having posts about specific topics (like the past few) interspersed with regular, boringly titled posts like this one where I'll just talk about general progress.

So, progress thus far... pretty good, save the unexpected delays. I've been focusing on the combat system for the past couple weeks, getting all of the components working. First was the spells. Each spell has a stored amount of damage that it does to the target demon. When the player inputs the spell rune, the program searches for the spell, and if it finds it, returns it to the fight system. It then takes the damage done by that spell and multiplies it by any boosts (or weaknesses) the player currently has for that type/element of spell. It then sends off the modified damage amount and spell id to the target demon, who applies any strengths or weaknesses to the damage amount, then applies that damage to itself and calls the fight system to display it with the spell name (so that the player can get a nice visual effect and confirmation of the attack).

Then comes the effects. Both the player class and demon class have a pool of unique and shared effects that can be applied to them. The way that the program works is that after the fight system sends the spell info off to the target demon, it then reads the spells list of effects (called SpellAttackEffect) and sends it with the player to a function called initializeEffects(SpellAttackEffect[] saes, Fighter caster). This function goes through each effect, creates it as an Effect object, and, depending on whether it is self-targeting or not, either adds it to the player's list of current effects and sends it to the player to initialize or adds it to the target demon's list of current effects and sends it to the target demon to initialize. Both of these objects will check their own initializeEffect(Effect e) for the specific type of effect, and if not found, will call the super class Fighter.initializeEffect(Effect e), where the shared effects for both the Player class and Demon class are stored.

The effects are also updated once per turn; the player's after they attack, and the demons' after they attack. The update function works very much like the initialize effect functions where it fist calls the updateEffect(Effect e) in the Player and Demon subclasses, searching for the effect, and if not finding it, calling the super.updateEffect(Effect e). Each update will also decrement each effect's duration and remove it from the Fighter's effects list when it hits 0. In the end, all comes together for a mildy choatic but efficient system to run the effects for both the player and demon.

So, after I got that working, I got working on giving the demons the same basic thing, attacks that work like spells. Each demon has a pool of attacks to choose from, and each attack has a probability of being chosen (so that I can set the likelihood of certain attacks being chosen). Each turn the fight system goes through each demon and gets a random attack and executes it. Like the spells, each attack also has an amount, type/element, and list of effects, so I'm just going to say that it handles these things exactly like how it handles the player's spells, just in the other direction (the only difference being that each attack will only have 1 element type, unlike spells which may have 1 or 2, so it's a lot simpler to deal with type bonuses for the enemy attacks than the player spells).

So, after I got both the player and demons properly hitting each other, I started to work on the user interface. First, I added buttons for the pop up menus for the items and spell book to the right of where the player traces the spell rune (I'm just going to call this 9 button area the “spell square” from now on). Now, items aren't in the game yet; I don't even have a single line of code about them in the program yet (besides the “Item” textbox). However, I plan for them to be useful and an important part when they are included, so I thought they should be incorporated into the early visual layout for testing (currently, pressing the button just generates a pop up saying that items aren't in yet). Now, the reason that they have a button over the spell book button the doesn't disappear during the enemies' turn (the spell square does disappear during the enemy attacks to help cue the player visually to what is happening) is because I'm reconsidering the items' role in combat. While I originally planned to have item uses be their own move where the player could use one item during a turn instead of casting a spell, I'm considering experimenting with the idea of items being used at any time in an unlimited fashion. The downsides to this system are that, because of the massive stackability of items, they may need to become less powerful, rarer/more expensive, and more of a tiny add on bonus rather than a strong play I'd originally planned (with the exception of a few super rare powerful items) to balance them out with spells so that they don't because the main focus of combat and so that bosses can not be one-shotted (you need to work for those kills!). Alternatively, I'm considering a third, middle option; the items are accessible at any time, however, they can only be used once her turn. That would mean that if you were to open the items menu and use an item, it would take effect, the items menu would instantly close, and it would be unavailable until the next turn. This compromise would allow items to be well used (where they may not be in the case of having to choose between item or spell), but not overly stackable that I would have to nerf the ones I already have planned to make most items tiny. I only thought of this middle option a few moments ago while writing this, but the more I think/write about it, the more I'm convinced it's the best option. But yeah, go ahead and let me know in the comments which of the 3 you think is better, the first (spell or use item each turn), second (just use all the items whenever), or third (one item in addition to the spell each turn). Your feedback is appreciated!

So what was I on before this... Oh yeah, the user interface of the fight system. So, after putting in the buttons, I added a display for the player's stats (name, health, mana, current effects) to the left of the spell square, visually balancing out the bottom half. I'm considering making it also a button that will bring up all of the information already displayed as well as all additional stuff not shown on the short view, such as the bonus multiplier for each spell element, and perhaps the player's level and other details. One thing about the buttons on the right and the square for the player's information displayed on the left is that they are semi-transparent, so that the player can still see the background behind it.

Next, after all of that was done, I added functionality to switch where enemy was currently the target. Initially, it's the first one in the row, but now you can click which you want to shoot lightning at.

And last of all, I added some pretty sweet lightning to the spell input. Before, it was just a straight, boring, yellow line drawn from circle to circle, but now it's a cool lightning effect drawn in the colour of whichever element's button you press first (which dictates the element of the spell).

So, that's what I've mostly been up to. I still have a fair amount to do and school is just starting back up, but hopefully I should have in done in a week and a half.

Well, that was a really long post... I don't know if I can write these this long consistently, but the stream of consciousnesses, rambling style seemed to really go into a lot of detail, so let me know if you like short posts that are brief and straight to the point, or longer, more in depth posts like this one.

Thank you for your support!


7 views0 comments

Recent Posts

See All

Post 10: Short Break

Guess who has 2 thumbs and miscounted their weeks? THIS GUY! (You can't see it, but I'm pointing to myself right now) So, sorry for the...

Comentários


bottom of page