I've added a body of usability improvements to the editor, such as letting the player know what they are currently doing to the map:
It also displays the current texture.
This is a relatively minor improvement, but it was something that was really bothering me about the editor. Now it's a bit fixed, so I should be able to more easily bang out some test levels when the time comes.
I also made entities serializable; the game can load and save lists of entities and their states and effectively initialize a level now (short of actors).
As a special bonus for being such good people for waiting for me, here is an extra screenshot:
Basically what you're seeing there is my text output, text input and "stack panel" control container at work, all of which didn't exist this morning.
So, not only do I have more controls now, but I also have a pretty keen console system up and running with resolution indepedent "smart" resizing. Awesome.
So just a short update since I'm still stuck in a (very extended) midterm season: I implemented a huge load of entity subsystem underneath the base game and also added a checkpoint entity, which works like the checkpoints in Glow.
Soon will come HUD notification of entity hits (requires textbox control) and also entity persistence (requires a bunch of serialization glue behind the scenes to make it clean). I'd also like to get into AI support when I get a chance, and at least get NPCs walking around the levels to be killed viciously.
So I've been working on a bunch of fixing and tweaking with the Afterglow code base. Still trying to track down some odd bugs with player-wall collision but the bullets properly smack into walls again.
Instead of working on the main menu like I said I was going to, I worked on the editor and improved usability (error messages are routed to editor window instead of stdout, scrolling is smoother, mouse picking bugs are fixed) and implemented the (now broken) ability to delete floor polygons.
I would like to work on the entity system next, but I'm beginning to suspect the success in implementing future features is inversely proportional to how frequently I mention them in my journal entries. So it'll be a surprise. I would also like to tighten up player control and start making the character stats tie into them so you can actually run faster when the speed statistic is increased.
I also finished Dead Space this weekend; if you liked System Shock 2 or the film Event Horizon, you can probably find a lot to like here. Just make sure to play it in the dark.
YouTube of the Moment: The Tiny Ferrari -- a modelbuilder builds a scale model of a Ferrari race car, and it actually works, tiny pedals, transmission, petrol engine and all. The level of detail is jaw dropping.
Last night I implemented polygon selection, so there's also now a polygon deletion function, so you can delete entire rooms. I'll work on vertex deletion (and possibly moving) in a bit, but I would rather work on the main menu first, so you can all have some pretty chrome-plating for screenshots.
I implemented deleting walls in the editor and a bit of other stuff, like making it no longer crash when bullets hit walls and making it easier for entities to collide with players.
I'm completely fried, so it's time for bed.
Edit: Okay, I lied. I spent another hour working on making sure wall selection was working properly (opened up a host of bugs) and fixed some old rendering/selection issues in the editor core. Everything should be more awesome now.
A bunch of under-the-hood improvements to the performance of XID, rendering and collision
The basic skeleton for AI and the entity system
So that means I have a bunch of options for what to work on next, and hopefully you'll start seeing the fruits of my labours in a bigger way over the next few days.
Today's YouTube video (other than mine): Lancia Delta S4 going really fast. This is the Group B rally car that took a lot of lives. See why!
No nice screenshots yet today, but I ended up implementing a bunch of ammo stuff. In Afterglow, unlike Glow, ammunition isn't universal. But I didn't want to go to the effort of making heavyweight ammo objects that would be cumbersome to serialize and stack.
Instead, I developed an "ammo library" that uses unique strings for ammo types (such as "9mm," "rocket" and "chinese food") and produces ammo objects, which serialize back down when needed. This means that it's pretty simple to add new ammo types and centralize item metadata (such as flavour text and icons).
The other thing I added today was a cleaning-up of the interface. Initially I had figured that, since ammo is no longer universal, some kinds of ammo will be very limited. I had figured to add an "unload" option to take ammo out of guns (like STALKER), but the additional UI overhead to add a menu with one option seemed unnecessary. Instead, I've implemented the following system: when you drop a weapon, the ammunition is automatically stripped from it and returned to your inventory.
If you have a "special" gun (such as a pistol with modifications), it won't stack. So what you can do with this new feature is pick up normal pistols dropped by enemies, then drop them and get the ammo added to your pool for your modified pistol. So it's saved you a single click.
Anyway, a significant amount of implementation today, and I also fixed two inventory bugs (not being able to stack when the inventory is full, and not being able to pick up and drop items in the same frame when inventory is full). I also got bullets to hit walls, and I'm contemplating adding a flag/mod to make projectiles rebound, but that is gameplay implementation and that's somewhat far away still.
A lot of under the hood improvements that should make for faster development soon. Big things that have changed:
You can now use the inventory panel. I've swapped the mouse buttons from Glow; you now left click on items to use them and right click on them to drop them.
You can drop items on the ground and see them.
Some further refinement of sprites and animation sets. I'm digging myself out of a dumb implementation.
Projectiles have textures.
Fixed a bug where you could still "click through" the UI and cause the gun to fire.
Made some more components serializable.
Overall, I think that's not bad for a few hours of work. Maybe I'll work on the editor later, or possibly serialization.
A few improvements will show up in this screenshot if you've been paying attention to previous entries:
Those improvements are:
UI relative positioning. I finally got around to implementing a few modes (centre, leftmost, rightmost, topmost, bottommost) and set up the UI XML to reflect these changes:
HUD ammo indicator. This should be self-explanatory.
Weapon muzzle tracking. I finally got around to doing the math on this one, and it turns out that the implementation in Glow was actually slightly faulty. Anyway, you can now no longer fire when your gun is pointing through walls, and bullets come out of the right part of the gun. Bullets, of course, are still a meter wide, but that's no big deal.
In unrelated news, I got my 16GB iPod nano today. It's remarkably small, and there's a lot of fascinating engineering that went into it. I also beat Crysis Warhead, which was actually kind of underwhelming (but fun). I'm still stuck on Clear Sky until the patch comes out.
I've been working a bit on Afterglow -- implementing some functionality into some of the core components that cleaned up a ton of code. Additionally, actor serialization works now, bullets fly (and smack into walls) and some other stuff is going on. It's just not very visible in screenshots.
My wish list for the weekend is to get relative UI positioning working, which is not that hard -- just a series of static methods that I have to deal with when the HUD context positions its child elements. After that, who knows? I would like to start implementing some of the entities (conversation, etc) so I can start stringing together levels.
I definitely have to fix up the level editor so I can start actually making proper levels -- the two-box test level isn't very visually fascinating. I've also wanted to get into adding visual wank to make Afterglow look more distinctive from Glow. I have to pace myself!
Schoolwork is going fine: I just paid my tuition (ouch). The first batch of assignments are due soon but it hasn't been too big of an issue so far.
Most of the components are serializable now (but animation won't deserialize properly because of my multi-directional design -- I broke my Novarunner rule of only designing depth-wise to make serialization easier)
I'll have to spend some time revamping several of the components to make serialization a lot better.
Fun feature: In Glow, I determined the stackability of an item based on its name. This means if you picked up two guns both named "Shotgun" I just combined their ammunition and 'threw away' the second gun item. In Afterglow, you can modify weapons, which broke this system as it was difficult to tell which gun was "better" and therefore the one to keep. Afterglow's weapon modifications are implemented as stackable, serializable 'buffs' similar to the player character's, and they use non-uniform ammo, which means that if you pick up a gun that's not name-equal (modified and unique guns have a custom name such as Vampire Shotgun or Fire-Breathing Laser-Sighted Bonesaw), you will have to unload it and then load the ammunition into the gun you want. Then, toss the old gun at your leisure.
If that last paragraph didn't make any sense, let me know and I'll draw a diagram or something. It's late.
Tomorrow I might say something about my electronics class, we'll see. Right now I'm tired and going to bed.
Last night, I implemented a bit more infrastructure for firing guns, and also added a little ammo-meter UI element and a handful of other bits and pieces
My current plan is to spend time improving the UI system so I can make a workable-looking HUD and then actually make projectiles launch. Dunno how long that will take, though, and tonight's class is laaaate.
I also want to build a test level and take a video eventually. My copy of Snapz Pro X is already gathering dust.
School seems to revitalize my motivation; perhaps it's because I'm not supposed to be writing code all day.
Also, the local race track closed as of this morning (I suspect the LHC had something to do with it) and now I'm getting invites to autocross events in random parkades around town. Somehow I doubt that Vin Diesel's next film will feature illegal impromptu races of FWD economy cars at low speed around plastic traffic cones. I actually have a lot more to say about this, but I'll keep it for the comments section if someone local wants to pop by and discuss it.