[Game]TAZS (Java compo entry)

release
game
strategy

#21

Advancement 2019-10-23

Today, I’ve worked on a lot of things related to Player Control, as well as the Camera.

  • The direction of a Controlled Unit is now shown with a simple line.
  • There is a slight animation helping to locate the Controlled Unit as well.
  • The Camera now follows a Controlled Unit if there is one.
  • Herbs were crudely added to the background in order to see better the Camera’s movement.
    • It’ll be improved in the future, with more “organic” positioning.
  • The speed of all the Units were doubled in order to compensate with the new 30 FPS limit.
    • Also, the 30 FPS limit was added to all other screens.
  • Holding B while Controlling a Unit will lock its direction, which is useful to flee and attack at the same time.
  • The Result’s Screen’s Stats Panel now appears automatically, and can be hidden and shown again with each press of the B button.
  • The Pad can be used in the Battle Phase (when not Controlling a Unit) and in the Result Phase to explore the Scene.
  • The Camera will focus by default on the last, losing-team Unit to die, unless the Player is pressing the PAD.
  • When Controlling a Unit, a Life Bar is now visible.
    • The length of this Life Bar is actually proportional to the initial Health of a Unit - e.g it’ll be longer for sturdier units and shorter for more fragile ones.
    • Also, it’s blinking when the Unit’s health is under 50%, and grayed out when they died.

2019-10-23%20-%20Exploring%20in%20Battle%20-%20x2
Exploring the surroundings of a quite heated battle,

2019-10-23%20-%20Last%20Death%20Camera%20-%20x2
Camera focusing on the last destroyed Target. Later it’ll come with a slowdown for a more dramatic effect.

2019-10-23%20-%20LifeBar%20-%20x2
Introducing the new LifeBar :tm:. It’ll stress you out when it starts blinking. Shall I add some annoying repeating music to that?

2019-10-23%20-%20Locking%20Direction%20-%20x2
Locking Directions in order to have a higher chance of beating someone else.

Next Features:

  • More horror-like creatures for the Player - Zombies, Skeletons, …
    • Mostly appearance-wise, no new units yet.
  • Replacing $ with the Bean icon I’ve had since a couple of week.
  • Wall Unit - an immobile, destroyable chunk.
    • It’s more of a technical unit, much like the Target.
    • Won’t be normally available to the Player for Challenges.

#22

As am I. I’m already quite familiar with them because Lua has had them for ages.

There’s a good introduction to Lua coroutines here and a more in depth explanation here.
(Though personally I don’t like the second link characterising coroutines as threads because coroutines don’t run in parallel like threads do.)

Technically that means they actually are fixed points because 16 is a power of two and multiplying by 16 is equivalent to shifting left by 4.
Assuming you’re using 32 bit integers, that means the format is ‘Q24.4’.

(Whether or not they stay in that format is another matter.)

The short version:

  • MIT and BSD 3-clause are probably the least restrictive whilst still requiring a copyright notice. Use one of those if you want to give people the freedom to edit anything whilst still giving you credit.
  • Apache 2.0 is like MIT, but it requires anyone who modifies your code to leave a prominent notice stating that they’ve modified it.
  • CC0 is as close as you can get to ‘public domain’,
    but if you use that then there’s no restriction on the user whatsoever,
    they don’t even have to say who originally wrote the code.

I won’t discuss the GPL here because it’s too complicated to sum up in 1-2 sentences and I’d recommend against it anyway because of the number of restrictions is has and its viral nature.

If you want more info then feel free to ask (here, in another thread, or in a PM) and I (or someone else) can provide you with more info.

GitHub or GitLab is ideal. (Personally I find GitHub easier to use.)

If you choose to use GitHub and need help doing anything then again, feel free to ask.

If you choose to use GitLab you’ll have to ask someone who is au fait with GitLab (e.g. @drummyfish).

I’m not sure how you’re planning to do this, but if you’re thinking of randomly generating the herb positions and storing those positions in a list then I know of a good alternative that could save you memory.


#23

I’ll ask in time for sure, thanks!

I know a few ways to have those random grass and that’s part of the fun to make them look as such :stuck_out_tongue: also I’ll make them move like a wave

Advancement 2019-10-25

Yesterday and today was all about zombifying the game a bit:

  • Player’s Units are now made out Zombies (replacing the red one without hat) and Skeletons (replacing the red one guy).
  • Refactored a bit the Handlers so it’s easier to draw bodies from other handlers.
  • Merged all the Game Sprites (Units, Weapons, etc) into a single one.
  • Some RAM and Flash were freed that way, for no visible CPU cost!
  • Finishing a Challenge will give an option to try the next one.
  • Made the RIP sprite for units less contrasted.
    • That’ll look much better with
  • Reworked the death animation a bit.

2019-10-25%20-%20Zombies%20Vs%20Humans%20-%20x2
Humans were better organized here and survived with 4 units left, although they were overpowered both in cost and numbers!

EverythingSprite%20-%20Zombie%20Death
Zombie dying.

EverythingSprite%20-%20Skeleton%20Death
Skeleton dying. Also, they wear a hat because they’d get a cold otherwise!

Next Features:

  • Piker Hole maker Pike Bearer
    • A melee unit dealing light to moderate damage at a higher range than the Sword Bearer
    • Will deal less optimal damage if a unit gets too close from them.
    • (Maybe) will choose a target that cost them the less movement/rotation and have optimal damage.
    • (Maybe) will try to adjust their distance toward their target in order to do optimal damage.
      • That means they might walk back while poking at a pursuer.
    • Should be great in combination of a shield or behind some stationary obstacles.
  • Time slowing down in Results
    • So we can appreciate the death of the last one.
  • Better FPS control
    • Hopefully correcting that issue of stuttering!

#24

This game is looking better and better all the time


#25

Advancement 2019-10-26

Today, I finished the Pike Bearer:

  • The Pike Bearer is a Melee unit with longer reach than the Sworder.
    • Their Pike are long enough so they can work greatly with Shield Bearers.
    • Because of their high reach and attack speed, they can handle every other unit in solo, and often small groups of them.
    • Their cost is high because they’re the most powerful unit right now.
    • They have slightly less HP than Sworders and ShieldBearers.
  • The FPS limiter is now relying on a number of millis per frame in order to avoid stuttering.
  • The game is now playing at 50 FPS.
    • That’ll slow down when having large battles of course.
  • Adjustments were made for the AI to improve their aiming.

2019-10-26%20-%20PikeBearer%20-%20x2
Introducing the Pike Bearer. They’ve got the bad habit of poking around stuff.

2019-10-26%20-%20Pikes%20Against%20Swords%20-%20x2
They’re overpowering all Units right now. That might change when the Archer will be added tho…

2019-10-26%20-%20Formations%20-%20x2
When behind Shield Bearers, they’re quite destructive too, as that essentially give them more HP and defense.

Next Features:

  • The Archer
    • The first ranged, projectile-based unit (that alone will make it very interesting to code!)
  • Rendering Order

#26

Advancement 2019-10-27

Today, I’ve focused on the Archer.

  • The Archer is Unit that attacks using a bow from a distance.
    • Their bow is quite powerful - it can cover half a screen without any difficulties, and takes down quite a lot of life in a single hit.
    • They also produce a significant pushback.
    • However they got low life, low speed, low attack speed, so it’s best to have them shielded - including from enemy Archers!
    • When controlled by the Player, a Target will appear and move, showing where the Arrow will land.
    • Unfortunately, due to the lack of time I can’t make their Arrows visible. Imagining them is left as an exercise to the player.
  • Done a lot of balancing too.
  • Fixed a couple of very minor bugs.

2019-10-27%20-%20Bow%20vs%20Pike%20-%20x2
Because of their range, Archers beat most Melee units…

2019-10-27%20-%20Archer%20vs%20Brawlers%20-%20x2 2019-10-27%20-%20Bow%20vs%20Shield%20-%20x2
… unless they’re numerous and/or sturdy enough to reach them…

2019-10-27%20-%20Controlling%20an%20Archer%20-%20x2
Controlling the archer shows a target. The target will continue moving as long as A is held.

2019-10-27%20-%20Tight%20Battle%20-%20x2
On tight battles, they’re often the only survivors.

Next Features:

  • Rendering Order
  • Challenge / Tutorial creation
  • Balance and debug
  • Polishing the whole too
  • Tiny Campaign creation if I got the time to do so

So much things I had to cut unfortunately…

The next release will be my submission on the itch.io comp page!


#27

Final Advancement 2019-10-28 -> 2019-10-31

Those last days were intense for sure! In an effort to keep focused on finishing, I neglected a bit this log.

  • Units are now rendered in the right order.
  • Challenges and Quick Battle modes can now enforce specific units instead of having the whole list each time.
  • Challenges are not anymore hard-coded - instead, they are generated from a JSON inside a JS file belonging to the project, into a Challenges Pack.
    • It makes it much easier to have new challenges.
    • I documented the binary format for easier implementation, and it might be useful for the upcoming C++ port.
  • Most strings were converted into flash-only format to save RAM.
  • A new Music generator was made.
    • It’s based on an ADSR envelop, with events playing for notes (pitch, duration, loudness) and jumps (for looping purpose).
    • For now, only a Sin-based generator was provided. Due to it being based on Math.sin(), the output is rather “interesting”.
    • Costed much less than having a sound representing a music.
  • Musics are generated from a JSON inside a JS file belonging to the project.
    • So far, 4 rather short musics were included.
  • Time flow can be controlled when in a battle (and not controlling a Unit) by hold A+B and pressing Right/Left (Increase/Decrease from 12.5% up to 800%) or Down/Up (Pause/Unpause).
    • Quite useful to speed up lengthy battles
  • Added the Dasher, a unit that always runs and dashes through enemy units.
    • While dashing they’re almost invincible, taking only 1 HP of damage.
    • If they’re ready to dash and receive some hit, they’ll automatically dash to protect themselves.
    • In the Result Phase they’re running in circle, except when controlled - in this case they’ll just leave away.
  • Units on the Player Side added by a Challenge cannot be removed anymore.
    • This is to allow “protect” challenges and to teach the Player about those units.
  • Challenges that were completed are now marked as such in the list with a blood stain.
  • Added a Cookie to save:
    • Which Challenges were resolved.
    • The current music that is playing.
  • Added a Settings Screen where:
    • The playing music can be changed - or nulled.
    • The progression can be partially or fully erased.
  • Added an introduction screen which also serves as the entry’s final logo.
    • Made me panic because I finished it 20 minutes before the deadline, and testing on the actual device revealed it was freezing there!
    • It involved shadows walking behind, but since that was what made it freeze on the device, I had to ditch it.
  • And of course, the game was posted on itch.io and submitted as a Java of the Dead competition entry. (https://carbonacat.itch.io/totally-accurate-zombie-simulator)

2019-10-31%20-%20Title%20Screen%20-%20x2
The submitted comp’s title screen.

2019-11-01%20-%20Fixed%20Title%20Screen%20-%20x2
The fixed title screen. It features the Zombie Brawler, Lilas (Ditched out unit - A Zombie hero with an HP-absorbing melee attack and a special Zombie Raising power), Zombie Mage (Ditched out unit - Ranged, splash-damage unit), another Brawler and a Skeleton Slapper.

2019-10-31%20-%20Deadline
My true achievement.

EverythingSprite%20-%20DashGuyEverythingSprite%20-%20DashGuy%20Death
MUST. RUN. I WILL REST ONLY WHEN DEAD.

2019-10-31%20-%20Controlled%20Dasher%20-%20x2
Controlling a Dasher will make you feel powerful. Also, a big HP bar!

2019-10-31%20-%20Dasher%20and%20Archer%20vs%20The%20World%20-%20x2
They’re great at distracting a lot of people while Archers rain down their arrows on them too.

2019-10-31%20-%20Time%20Control%20-%20x2
Undocumented feature - Time control by using A+B. Very useful to speed up -or slow down- large battles! This will often be laggy for obvious reasons.

EverythingSprite%20-%20Conveyor%20Belt
Ditched out conveyor as a victory pose (also ditched) for the Dasher. Now you should have a good guess at who the Dasher is inspired by!

Thank to everyone for allowing me to have gotten this far!

Ditched out Content

  • Conquest mode - Use beans to summon your troops, seize those Coffee Plantations and conquer an island against an AI!
  • Campaign mode - With story, optional objectives, dialogues and characters.
  • Tutorial - Helping the newcomers enjoy this game more.
  • 13 challenges - And more interesting, also.
  • Unlockable challenges and units.
  • A funny introduction.
  • Diverse Maps - with a more interesting ground and obstacles.
  • A level being a parody of Brew of the Undead - with both Matti and the Castle.

Ditched out Features

  • GFX applied to Units - like blood splash.
  • Showing the Performance bar only when enabled in the Settings.
  • Adjustment in the Cursor and Camera movement.
  • Time slowing down when the last unit of a side dies.
  • Units emitting random noises when battling or dying.
  • Victory posture for surviving units in the Result Phase.
  • Top bar displaying portrait of both sides’ leaders, with expression depending on their situation (much like Advance Wars 1)
  • Entering a seed to get a specific Randomized Battle - A probably interesting way to have randomized challenges.
  • Unlockable Units and Challenges depending on the Campaign/Challenges achievements.
  • Actual Projectiles - so the Player doesn’t have to imagine the Archer’s Arrows.
  • Velocities for Units - so it feels more chaotic.
  • Zooming in/out while in Battle - Also includes a Mini-map.
  • Choosing a map in the Sandbox Mode.
  • Scoring, with save for both Challenges and Campaign’s levels.
  • Music playing where appropriate - such as a victory or defeat music.

Ditched out Units

  • Tomb - Something precious to protect from those pesky humans.
  • Lilas - A zombie, hero unit who wears a fast absorbing dagger and who can raise dead bodies as zombies.
  • Skyrim’s Draugr/Dovahkiin - Wears a Sword, a Shield, and most importantly Fus-ro-dah their enemies away.
  • Catapult - Slow-moving, Slow-attacking, Fragile, but very powerful ranged unit with large splash damage.
  • Watch Tower - Basically a static, sturdier Archer with more range.
  • Wall - Mostly a decoration.
  • Proper balancing.

Stats

I spent at least 130 hours (most likely 150h) working on that game. That’s partially because of the length of the jam, but mostly because I neglected my sleep. Those were 130 hours of well spend time for sure!

What happens now?

Shortly I’ll have a proper debriefing session on that game, where I’ll check its weaknesses, its strengths as honestly as possible. I’ll also analyze my decision taking - I did a lot of things because it was fun to do so (like music playing) or to satisfy an obsession, not because it bring more to the game. That might take the form of a post-mortem, which will complete this very post.

After that … since I grew to love this game, my plan will be to remake it in C++. It’s mostly because I need a tighter control about how the memory is used, multiple kind of fixed point numbers, more easily defined static data too. I feel like only C++ will help me take this game where I originally intended to lead.
Its name will change in the process, as it won’t be exclusively related to zombie anymore - but it might still features them, maybe as a specialized campaign.

As for the sources, the competition version’s ones (code + arts) will be published in my github account on the next week. The C++ remake will also be published there, as soon as it’s started.
Additionally, I’ll start a wiki for the C++ version, to provide more insight about the development, how things work inside, etc. I don’t intend to do so for the Javitto version, but I already commented a good deal of the code, so that shouldn’t be hard to read for all you great minds. Well, it might actually, because of my broken English hahaha

Thank you for having followed the development of that game!

(Will be updated with more information after the Debrief session)


#28

I meant to review this also, but this is such an unfamiliar genre to me, that it is more fair to leave that to someone else. What I was testing, it worked well. It is technically impressive to have this much “intelligent” objects on the screen at the same time (with the game logic, the bounding rects etc.), in Pokitto :slight_smile:


#29

@carbonacat , I edited the title so that the bot picks up the game into the game list

I did this because I assume [complete] means you are ready with it

I hope you approve


#30

No problem!

I’ve published the sources:

Thanks to @Pharap whose guidance helped me to do so!


#31

The second link is 404-ing.


#32

My bad! I forgot to make it public. Should be good right now!

(Thanks for noticing me)