Friday, 10 August 2018

Let's catch up!

Alright, so.
Without further apologies, let's get going.

For a quick rundown of the last few months, here's what's been going on:


Spent whatever idle time i had trying to come up with a prototype for a simplistic on-map tactics battle system using a tileset I made for a small scenario I wanted to hide inside Lateshifter (like the cryogenic vampire scene from the original demo).
I wanted to spend a little while maybe making an RNG-heavy dungeon delving game, just to cheer myself up at having essentially lost my 'real' game, as with only a few hours to spare a week it wouldn't have been worth it to continue on trying to push that boulder uphill.

I learned a little doing this, came up with a neat idea for contextual button-prompts for all actions- sort of like MMO combat, but also used outside of battle to talk to, look at, open doors, depending on what was nearby.
I think subconsciously I was still trying to design for the one-handed.
I kept running into brick walls, however, and I couldn't get the system to be sustainable long term. I could start up and run a single battle, but I couldn't find a way without scripting to clean up everything and ready for re-use. I abandoned the idea and went back to sulking about losing my real game.

March - April - May:


Nothing of value. I spent some time trying to readjust to normie life, playing online shooters and watching TV, with limited success. I'm just not happy when I've no goal to work toward.
I started messing around with my old project files near the end of the month and decided to learn some Javascript so that I could have the option of editing and maybe getting some esoteric extra functionality I needed from existing RMMV plugins.
(Lateshifter is almost entirely evented, with very, very minor script use, which is a big reason why things like scripted movement of npcs was so buggy and got people stuck. More on that in the eventual retrospective, I guess).

I wanted to make my game, or an offshoot version of it more into a one-player D&D sort of experience, with sliding scale dynamic DMing sort of like the director in Left 4 Dead.
I figure the first thing I'm going to need for an adventurous game is a way to handle combat, then a way to handle items and interactions, the rest theoretically being ground already tread with LS.

From here on I've been checking in at the 10th of every month, logging the current state of the game in screenshots and movies to check how I'm progressing.

June 10th:


June 10th - JS total - 307 lines

Made a little proof of concept for a scripted version of February's battle system, or rather the beginning parts. I think within the space of a week i'd learned just enough to gather all map events and create a schedule for turn orders, so I'd push a button and all the events would spring to life and all move toward the player one square. Progress!

Most of the work done in this month was copying and editing examples from the internet, learning how to do basic things and copy pasting out of fear of spelling mistakes ruining everything.

July 10th:


July 10th  - JS total - 1670 lines

This is where the bulk of the work really started. Every single day working between 6 and 12 hours on learning Javascript and applying it. Above is a test I did with some opposing teams, seeing how well they knocked the shit out of each other. Pretty well, it turns out.

- Full battle schedule with alternating AI and Player turns.
- added initiative to determine turn order
- Added a HUD with icons like in February's test game
- Ranged and melee units
- Bullet ownership for ranged units
- Object augmentation to add stats to events
- Framework to have stats determine other things like which sounds are played for that unit (weapon sounds depending on weapon, vocal sounds depending on npc race / sex
- Attack and Defense rolls for combat, modeled on simple dungeon crawler boardgames of the 90s
- Dynamic delay between turns, based on what transpired this turn
- Intelligent turn skipping for boxed-in units
- System to handle sprite animation and misc anim for various battle actions (attack, defend, hurt, death)
- Failsafes for various systems with warnings and error logging
- Ability to mark certain obstacles as half-height (can be shot over, not walked through)
- AI implementation, different units have differing behaviour types
- Player/npc relations to determine who is neutral or an enemy in battle
- Invisible projectile raycasting implementation to determine if players or enemies can actually hit enemies in range
Ranged targets now are enemies in range to whom there is a clear line of sight.

- Intelligent checking for objects in front of player
- Allow contextual actions depending on what sort of object is in front of player

August 10th:


July29th  - JS total - 2002 lines

August 9th - JS total 2828 lines
Really hard at it now, above shows one of the optional graphical filters I've added.
I've currently settings for old TVs, Lateshifter mode, """HD""" mode and basic filterless mode.

- Camera automation
- Check that npcs are actually onscreen before proceeding with turn
- Dynamic target choosing for enemies, prioritize units attacking self, then enemy already targeted if in range, then closest enemy
- Missed projectiles carry on until hitting another impassable object
- Added rudimentary system to add enemies on the fly and integrate them to an ongoing battle if applicable
- Death animations and brief comic gore
- Added 3 more AI types
- Made existing AI types much more intelligent
- Made AI maleable, with injured enemies becoming more cautious
- Set special rules and extended range for pathfinding to be more intelligent
- Added failsafes for any AI troubles with error reporting (no reports yet)
- Weapon-agnostic battle changes
- Weapon pickups
- Intelligent UI for displaying current weapon
- Turn-long 'unsteady' modifiers for successful attacks on unready enemies

- Added series of graphic filters
- Added series of possible menu skins
- Added custom menu
- Custom menu options
- Repositioning all menu objects
- Changed object/npc detection to be more intelligent, prefer alive units when standing on dead
- Functions to automate number  x of enemy y spawning within range z of coordinates
- Intelligent auto-addition of newly created enemies to ongoing battle, allowing for scripted or cutscene late arrivals or adds.
- Container generation with dynamic and persistent contents
- Inventory system where objects can be removed from containers one at a time or all at a time, inspected and dropped
- Replaced all input common events with scripted event listeners, massively improving responsiveness
- Added battle juice, gore sounds

Which pretty much brings us up until today.
Thankfully I keep notes along with my backups to let me know what I did roughly since last one.
I probably should set up some sort of git repository, but I'm happy right now.



This week, I've added door pairing, allowing me to randomize which rooms will show up at the start of a new game, to give some replayability. Whether I'll make a lot of use of this or not, I'm not sure. Story beats will need to be more static, obviously.

Right now I'm working on the container system. I have dynamically created containers which get filled with items from a level list at their genesis. I'll be extending the item lists, weighting items to be more or less likely to show up and adding weapon pickups to the item system instead of being a separate thing.
I'd like players to be able to use items inside as well as outside combat, giving a cost to switching weapons or the ability to use suitable found items as improvised melee weapons (dragon di- I mean Iron Bars and cables haha) or ranged weapons (rocks, data tapes, small handfuls of change, whatever). It's a lot of fun seeing it come together.

That's it, catch you later on


  1. i knew it would be worth checking in

  2. Holy cow you've been busy man. Glad to have you back.

  3. Will you add more content to LS or is that considered finished? Sorry if youve answered this before Im new to your work.

  4. Ah Yes, the age old conflict of Centurions vs Laser Cops.