So you may be wondering what I've been up to for the last 4 months or so, and I'll post all about that very soon! v0.3.3 has required a lot of general housekeeping work including improving the player inventory system to function nicely with world state saving, scripting and controls. As a result, it became a good opportunity to also squeeze in weapon switching and custom HUDs.
Here's the design I have -- please feel free to comment and criticize -- especially if it looks like it won't carry ideas for carts you'd like to make soonish.
Here's an example HUD that shows a single player carrying more than one weapon (switchable with Q/E or shoulder buttons):
The basic idea is to add an animation to INV_ITEM similar to the ones that exist now for arcade weapons, but to allow adding *any* inventory item to the hud, including things like potions that are activated with an alternative button, or temporary pickups like the score multiplier.
The items only have limited information about how they are to be displayed up top -- the layout happens mostly automatically. But certain common item meanings (score, life, player head) are tagged as such to help make a sensible layout.
The layout is performed in single player by separating elements into up to 3 groups and aligning then left, then right then center. Multiplayer layout is similar, but elements are squashed together and layed out per-player.
The goal here is to provide a simple way to make inventories for common genres, without requiring lua scripting or a lot of work doing layouts that work both in 1P & 2P. Later on, fancy HUD requirements can be taken care of in Lua scripts (more on that shortly!).
So, the steps to make a custom HUD will be:
1. Add (or alias) any inventory items (INV ITEM) that the player should start with. // e.g. start with a bow and 8 arrows
2. Add animations to inventory items that should be shown in the HUD
3. Tag some inventory items as having a special meaning: score, lives
It will still be possible to use the old arcade HUD that you're all familiar with, but not to mix-and-match the two systems.
So, here's the question -- are there any simple HUDS you'd like to use that don't seem to work with a scheme like this?
Here are some examples that I think will be ok:
Doom: Score, life, current weapon & ammo
Bomberman, Bloot: Player heads with points won in a single row
RPG: armour & weapon, MP, HP, Gold
Adventure: List of collected objects
Scrolly Shooter: lives, score, panic bombs // lives logic not yet implemented
Voxatron 0.3.2 is now up on your games page or Humble download page (check the version number on the file). This is another bug fixing update, recommended in particular to Windows users as the 0.3.1 package was broken and still included 0.3.0's save game bug o( _ _ )o.
Added: Monsters to default resource tree
Fixed: (Windows) save games broken
Fixed: WORLD:RANDOM not selectable trigger
Fixed: Can not deselect aliased objects by clicking
Fixed: Favourites sometimes not saved
Fixed: Custom pickup score does not respect bonus multiplier
Voxatron 0.3.1 is now up on your games page or Humble download page (check the version number on the file). This is just a quick bug-fixing update, but is highly recommended as game progress saving is broken in 0.3.0.
Fixed: Save games / checkpoints broken when Voxatron is clean installed o_O
Fixed: Sticky joystick buttons and sticks making menu navigation impossible
Fixed: Object references break when loading .vob.png
Fixed: Able to edit internal items from toolbar object button
Fixed: SYSTEM:BUTTON doesn't work when player 1 doesn't exist
Fixed: Bullet life shown even though meaningless (use DURATION instead)
Fixed: Corrupt internal music item at end of list
Fixed: 2d png importer crashes for files larger than 128x128
Fixed: Default pickup sound plays even when default_sound flag is 0
Fixed: Pickups can not respond to life <= 0 event
Fixed: HURT event triggered when player life increases
Fixed: Monster entry stops after P1 dies in 2-player arena
Fixed: Grenades damage indestructible walls
Fixed: Placing room objects resets properties each time
Fixed: 2-way doors facing in the same direction causes crash
Fixed: Bullets hurt player even when hurt_same_team flag is 0
Voxatron 0.3.0 is now available! You can grab it from your games page or Humble download page. The largest changes you'll notice are a 2P arena cart, a whole new cart called Bloot (4-player!) and a sound designer that you can see a glimpse of in the trailer (it's shared with my other fantasy console, PICO-8, which is a kind of subset of Voxatron). Try Bloot to see what kind of sounds you can make with it.
On the more technical side, there is now support for aliased objects, which means you can make references to objects from different folders. This is useful for things like making shared properties between actors or dropping random loot. Tutorials on how to use this are on their way :)
If you'd like to try making a multiplayer cartridge, just plonk more than one player into a room and they will automatically be assigned controls to a human player in order (P1, P2..). Note that you'll need to set up controls in the options menu for each player, which can currently be keyboard, keyboard+mouse, and up to 4 joysticks. Note that each player needs to have a separate definition (you can't currently two DJ Beeps for example).
Finally, as some of you have discovered already, it is now possible to freely play any BBS cart right in your browser. This means that cart designers can share their games with people who don't own Voxatron, and gives a handy way to preview carts without leaving the forum. I'm hoping that this will encourage users to post and share more stuff, and will serve as a way to introduce more people to Voxatron.
Check out the Development Map to see how all these features are going to fit together. Coming up next is switchable inventory items, making RPGs and Doom-style inventories possible.
If you find any bugs, feel free to post them in the comments. I saw the save game issue and the sticky 'up' button bug preventing menu use (*ugh*), and will make another small update soon to address these.
Thanks for playing, and I'll catch you in the forums!
Update: I uploaded some fixed .deb installers for Linux that are also live on Humble for anyone who had trouble with this.
Update 2: There's a nasty bug that prevents saving if you clean installed Voxatron. I'll patch it soon, but until then here's a workaround.
Added: Pico-8 sound editor
Added: Item aliasing
Added: Random alias selection (for loot dropping etc.)
Added: Low camera angle
Added: M-STATE:C-CRASH event caused by actors colliding at high speed
Added: Bullet flag collide_with_sender
Added: 2d png importer
Changed: Debris and snow no longer settles underneath actors
Changed: Friction applies to objects bouncing in z
Fixed: Tiling actors in editor use incorrect spacing
Fixed: Life less than zero trigger not activating before actor does not exist
Fixed: Actors with negatiec gravity do not lift off the ground
Fixed: Item id corruption after pasting from another file
Fixed: Cart profile saving (favourites, game_in_progress)
Voxatron 0.2.13 builds are now up, and will shortly be up on Humble Store (check the version number in the filename). If you don't have a lexaloffle account (Games > My Games) and would like one, you can activate it from your humble store page (see this thread). To update from a Humble Store account, search your email for the download page link, or request a new one here.
The main two changes in 0.2.13 are much more flexible player control options, and moving to SDL2.
The default player control style is now analogue, which means that you can run and shoot in any direction! This will eventually be an optional property of players, but for now I decided it doesn't badly break the design of any existing cartridges so set it as default. This means the mouse control style can be more natural -- using ASDW + the cursor as an absolute point to shoot at.
Many users asked for this early on, but I stubbornly held out with a more minimal 8-way control set, wanting to keep the controls across games more simple, genre-agnostic, retro-feeling and unified. I was really, really wrong about that! -- it doesn't hurt to have analogue control in the vast majority of cases (even though existing carts weren't design for it), and it of course makes hardcore arena shooting much more fun.
It's also possible to assign buttons to various actions in the player designer, but more on that soon. (For a preview, check out the list of button actions in the player controls setup menu).
SDL is the core library that Voxatron uses to do operating system-level things like window management and to talk to hardware (controllers, sound and video). SDL2 provides better controller configuration, multi-monitor support and doesn't crash on startup under recent versions of OSX (!) It also means I've had to change quite a lot of historically stable code, so there might be a few small glitches in this department for the next couple of updates.
SDL2 has quite a nice controller configuration scheme, where many common controller layouts are automatically detected on startup and a best guess at the layout is made from a database supplied from other users (including a large number of Steam users). It's possible to add extra controllers or alternative mappings using the standard SDL2 layout syntax by adding a line sdl_controllers.txt (see vox.txt for details), rather than using the in-game config in earlier versions. This might cause some disruption for a few users, but should make controller setup much easier and more consistent in the long run.
** Linux users: The linux installer doesn't give you SDL2 automatically, so please either manually install SDL2 (http://www.libsdl.org) or wait for a follow-up update next week that will hopefully fix this.
Added: Analogue player movement and facing control
Added: Custom control mappings per player
Added: Inventory items assigned a useage button
Added: Transparent voxel rendering in Designer
Added: Cartridge metadata section with 2d 60x32 label
Added: Capture cartridge preview image in-game (F7)
Added: default_sounds flag for actors
Added: car-style control (turn left, right, accelerate)
Added: Low air friction flag in actor properties (on by default)
Changed: Moved to SDL2: better multiple monitor support, controller support and fixes OSX startup crash
Changed: Game controllers now customisable sdl's scheme (~/.lexaloffle/Voxatron/sdl_controllers.txt)
Changed: Control configuration format and default config values // camera is now O, P
Changed: Any actor now has low air friction after being thrown
Changed: Mouse control now uses absolute cursor position to determine player facing
Changed: Players have warp-in flag
Changed: Better 2d drawing for depth==1 props
Fixed: Duplicate object instance ids when dragging to draw multiple objects or stamping
Fixed: Internal pickup friction and mass
Fixed: Loading and saving a cartridge clobbers existing preview image
Fixed: Throwing using directional controls
Fixed: Import .xm file now fails gracefully for unsupported files (> 128k or > 8 channels)
Fixed: Jumping twice quickly causing annoying jump sound retrigger
Fixed: Actors not observing warp-in property at t=0
Fixed: Legacy default player starting position sometimes not at center of room
Voxatron 0.2.12 builds are now up, and will shortly be up on Humble Store (check the version number in the filename). If you don't have a lexaloffle account (Games > My Games) and would like one, you can activate it from your humble store page (see this thread). To update from a Humble Store account, search your email for the download page link, or request a new one here.
Another update for folks designing stuff.. doors, Designer performance, .qb file importing, object instance browsing and title screen support. As usual earlier carts should still function roughly the same, but let me know if you notice any breakage. If there aren't any show-stopping bugs, I'm going to work on getting the manual up to date and posting some tutorials, but for now here's a quick intro to new features..
Here's a WIP preview of labels designed for Voxatron 0.3.* releases. They will be mostly brushed up existing cartridges (e.g. Twisty Castle will be extended and given a 2P option), but there are a couple of news ones too. I'll let you guess what they are for now :)
Also just a heads up for designers, it looks like 0.2.12, which irons out doors, title screens, and many little engine details, will be ready at the end of this week.
Voxatron 0.2.11 builds are now up, and will shortly be up on Humble Store (check the version number in the filename). If you don't have a lexaloffle account (Games > My Games) and would like one, you can activate it from your humble store page (see this thread). To update from a Humble Store account, search your email for the download page link, or request a new one here.
v0.2.11 is mostly a bug-fixing update, but it does include one new type of object: fonts.
To use a font for drawing into a prop, make sure it is the only one selected as 'default font' (I'll make that easier later!), and then while editing the prop, open the console (escape) and type @SOMETHING. The text will be drawn in the currently selected colour.
Note that it's case sensitive, and the default font included only contains capital letters. To make your own font or extend the default one, just add the characters in any order and name them as themselves.
A couple of things I've bumped to 0.2.12 to get this update out earlier are the music importing bugs and also importing Qubicle .qb models. But next up is better documentation and some more tutorial carts!
Changes in v0.2.11:
Added: Collide events for particular sides
Fixed: Draw text command
Fixed: Shoot button triggered by movement button events
Fixed: Missing voxel cursor
Fixed: Actors can fall through thin pieces of floor
Fixed: Rotated non-square actors get stuck / climb walls
Fixed: +1 Life logic
Fixed: Sword base weapon starts as peagun for single shot
Fixed: Microscript DEF_ID, OBJ_ID selectors
Fixed: Paste into current item crashes
Fixed: Crash when saving world state
Fixed: Can draw boxes in title screen with mouse
Fixed: Freeze pickup destroys falling debris
Fixed: Bullet leaving debris incorrectly
Fixed: Crash for short rooms
Fixed: Invalid extend_walls value handled robustly
Fixed: LERP over 0 seconds crash
Fixed: help tip drawn over top of checkboxes
Voxatron 0.2.10 builds are now up, and will shortly be up on Humble Store (check the version number in the filename). If you don't have a lexaloffle account (Games > My Games) and would like one, you can activate it from your humble store page (see this thread). To update from a Humble Store account, search your email for the download page link, or request a new one here.
** NOTE: 0.2.10 can not read old player history files. If you're in the middle of a long level, you might want to finish it before updating **
0.2.10 contains many new engine features that will be of interest to users making carts: microscripting, persistent worlds, player and weapon editing, music importing, many new actor properties, nice doors. There's new stuff to play too! I've added a cartridge selection menu with a new arena (Chaos Arena) and some test carts to fool around in.
Disclaimer: this feature is still in R&D, highly experimental and might not make it into the alpha anytime soon. But for your viewing pleasure, here's what Voxatron looks like with a volumetric light attached to the player. I really want a scene in the main story cart (1.0) that has the main character walking through a forest at night with a lantern, with snow catching the light as it falls into view. I tried making a quick mock-up using a brute-force method and it turned out to be fast enough to be interactive, but not yet useable.
This new lighting model is made possible by the way I'm calculating shadows. Instead of generating a traditional 2D shadow map, I instead generate a 3D 1-bit volume, where each set bit represents a fully lit voxel. The volume is then sampled while drawing voxels to give soft shadows. To do rough attenuation using 1-bit values, I dither the maximum light distance based on xyz (and t for flickery torch-style light), and then let the sampling take care of producing a smoother version. I still kind of like the 1-bit version though for large simple geometric shapes.
The beauty of this method is that the light volume can be generated in any fashion and still rendered at the same speed. It's possible, for example, to blit many blobs of light into the map (e.g. for bullets or explosion particles) with hardly any additional cost. To do light emitted from a point and casting shadows, I'm currently doing a line-of-sight march for every voxel. It was faster than I expected (I was only trying to generate some still frames to look at!), but I have a much more efficient method in mind for this, which I'll post about later if it works out (or not).