Instead of boring words about half-finished code I’m working on, have some screenshots of half-working features!
Tooltips have been tidied up since that gif was created:
And finally, here’s a look at a Cody targeting some enemies in a test battle
I really need to fix the gaps created by my dodgy window rendering code.
Battle mode is coming along nicely. Characters can be spawned in specific areas, so it’s possible to have the team split into multiple sections. Enemies can be targeted, and land effects and movement are working.
The next step is getting attack animations working, and then there might actually be something approaching a playable battle. Finally!
The above screenshot is from the very first town in the next Shining Online demo. Like other Shining Force games, you start alone and have to recruit a team before you can venture into the wide open world.
All of the above is handled by a little bit of lispy-script:
Shining Online uses a custom lisp engine for scripting, and has an entity + component system for managing in-game objects. Entities can be anything from characters walking around to hidden triggers or spawn zones.
So far this setup is working really well. Entities can have scripts attached to them, and it’s possible to add components to entities via script. I’m not 100% happy with how inspecting works; it’s far too complicated for what it is, but it works so I’m trying to leave it alone.
In development
I’m currently working through milestone 3 – items. At this point it’s mostly UI work that is left. It’s not one of my strong points, but it’s slowly getting there. My aim is to have it all complete by the end of the month so that I can start on shops and the priest.
The main screen for managing items looks like this
I’m not totally happy with the tooltip yet, but it’s pretty close to what I’m aiming for. Giving items to other characters works, but the table needs updating with stat changes. Equipping items and armor is getting a slight revamp, but should be working by the time March rolls around.
I’m looking forward to working on something a little more fun.
Aura4 got in touch to let me know about the release of his new Shining Force fan game, Mega Force 2!
Mega Force 2 is the sequel to Mega Force, which was released back in 2016. Just like its predecessor, Mega Force 2 features a complete cast of playable characters and a tonne of battles.
You start with a single character, but as the game progresses you’ll pick up some useful allies.
Not all of these characters are popular with the dungeon’s inhabitants though…
If you’re a fan of Shining-style battles this is definitely worth a play. Be sure to use your spells in the early battles as they can be very tough, and don’t be afraid to use egress if needed. Some of the later fights require a little bit of planning to make sure enemies are lured into range, which adds an extra layer of challenge to the experience.
War of Velana is a new 16-bit RPG in development. From the homepage:
In many ways, War of Velana is a spiritual successor to the Shining Force series on the Sega Genesis. Elements of those games are the core, and combine with some design ideas from Fire Emblem and Final Fantasy Tactics to create a new tactical experience. In War of Velana, your characters have static classes and gain a variety of skills and equipment upgrades as you progress through the game. In between combat, you’ll be able to explore and interact with the world around you.
The game has been in development for four years and has a great look to it:
There are more screenshots in the latest devblog, including some really impressive atmospheric animations. Check it out!
Here’s some boring words about what’s been going on with Shining Online since the last worklog entry (April 2018). I’m going to stick in a bunch of screenshots today to try and make it less wordy.
But don’t worry, there’s plenty of technical words (and screens) right at the end!
Roaming NPC’s
This is something the original Shining Online never had, but I really wanted them in the game.
The first attempt was not a total success.
After adding some pauses and timing tweaks, the finished result looks like this:
I’m pretty happy with how it turned out.
Custom text boxes
Text boxes can have custom frames, backgrounds and fonts. They can also be positioned anywhere on the screen.
Not very exciting, but at least we know what’s in the tent.
Battle ranges
Towns aren’t the only thing that have had some attention.
Battle ranges are a key part of Shining-style battles, and now they’re in Shining Online. They take land types and movement types into account, so flying entities will ignore trees, whereas centaurs will be slowed down by them.
Finding items and gold
What kind of RPG would this be if you can’t raid people’s homes for their hard-earned cash?
Items work in a similar way, and are automatically passed to the next free character. If there’s no space, it will be left in the container until some room is available.
There’s a fair amount of behind-the-scenes work going on in that screenshot, most of it handled via script:
The text for “Cody looking in the barrel” looks like this in the configuration file “%CHARACTER% looked in the %CONTAINER%”. The tokens are replaced by fetching data from the team (the team leader’s name) and the entity being searched (the barrel).
Gold is added to the player’s gold reserves
Flags are set in the session to make sure searching the same place doesn’t give rewards twice.
There’s some other bits going on, like pausing player input, displaying a text box and playing a jingle (which you can’t hear in the gif, but it’s there).
Items are slightly more complicated; the game has to check there is at least one character with an open inventory slot, and then has to either pass it to them or display a “There is no room” message.
Here’s how the barrel in the screenshot is configured:
All entities in Shining Online are made up of components. Entities are created using a simple template system, which sets out which components are required and what their field values are. The base_money_container template looks like this:
It listens for an inspectevent, and then disables input, runs the gold:findscript using properties from the entity and then re-enables the entity when done.
The %self% variable is always set to the entity’s identifier. So for the money container in the example, it will be the string “vagabond_gold_container_1”. Flag names can be overridden by setting a flag_name property on the entity, but that’s optional.
And finally, here’s what the gold:find function looks like:
For comparison, this is what the item:find function looks like:
It’s a little more complicated, but it’s all built and configured in a similar way to the gold container.
That’s all (for now)
I’d like to get item management finished in the next few months so I can move on to the battle system. Pathfinding and movement ranges are all working, so with some AI and proper turn management there will be an actual game soon!