Here's 0.1.6! You can download it from your updates page while you're logged in, or from your Humble Store Library. Just a reminder, that if you're a Voxatron alpha customer, you also own PICO-8! (it should show up automatically in both places).
By far the biggest change is the addition of SPLORE, a complete bbs and local cartridge explorer. You can run it by typing SPLORE, or start PICO-8 with "pico-8 -splore". If you plug a joystick in and auto-boot into splore, it's possible to navigate everything using only the 6 buttons + menu button.
This version also has a lot of new data storage functionality. Cartridges can cstore() to themselves in order to save extra data, and this is now officially supported on the web, so don't feel like it's a weird hack that's going to break! (actually it might break, but it's supported, so I'll fix it :p). Here's a demo:
Notes on cartridge storage, and the full change log:
-------------------------------------------------------------------------------------------- Cartridge Data -------------------------------------------------------------------------------------------- Each cartidge is able to store 64 numbers (256 bytes) of persistent data on the user's PICO-8 (rather than on the cart itself). This can be used as a lightweight way to store things like high scores or to save player progress. If you need more than 256 bytes, it is also possible to write directly to the cartridge using cstore(). The disadvantage is that the data is tied to that particular version of the cartridge. e.g. if a game is updated, players will lose their savegames. Another alternative is to write directly to a second cartridge by specifying a fourth parameter to cstore(). This requires a cart swap though (so is slightly slower), and leaves data-cart litter when run from a local folder. v0.1.6 Added: SPLORE local & bbs cartridge explorer Added: setmetatable(), cocreate(), coresume(), costatus(), yield() Added: Spinning cart icon to show when a cart is swapped / written to Added: Permanent storage when carts played in a browser Added: Adjustable aspect ratio (-aspect 420 for 1:1) Changed: Lua memory limit: 1024k (was 512k) Changed: Music channel now resumes after being clobbered by an sfx Changed: Arpeggios double speed when SFX speed <= 8 Changed: Exceeding compressed code limit does not block saving in .p8 format Changed: spr() half as expensive, to be consistent with map() Changed: Fractional hex number notation: 0x0.3 == 0x0.3000, (was 0x0.0003) Changed: : operator doesn't count as an extra token (same as .) Changed: cstore() writes directly to disk Changed: cstore(), reload() return number of bytes read / written Changed: save() while running does nothing. (use cstore() instead) Changed: load() while running loads and runs the specified cartridge Fixed: Small pops in audio mixer caused by sound wave discontinuities Fixed: HTML5-exported sound clicks badly under Chrome Fixed: Display palette is not oberserved when exporting GIFs Fixed: Rapid keypresses causes duplicate readings in tracker & text editor Fixed: += inside comments breaks preprocessor Fixed: sspr() cpu cost the same when clipped Fixed: cartdata() with bad parameters crashes Fixed: EXPORT from commandline can not be used without brackets and quotes
A build of PICO-8 0.1.5 is now available for Raspberry Pi! Check your updates page or look in your Humble library under the Linux downloads section.
It works in fullscreen under either X Windows or directly from the terminal (using directfb). For speed, the default resolution is 280,280; you can set this with the -width and -height switches:
pico8 -width 720 -height 480
- After quitting, keypresses during the session are sometimes dumped to terminal (annoying if you quit by typing shutdown instead of CTRL-Q!)
- Freeze on exit (observed on a zero)
- Some math-heavy cartridges (e.g. /demos/cast.p8) don't run at full speed on first generation models.
There are two builds included in the archive. pico8 is compiled statically (so no need to install SDL2), and pico8_dyn dynamically loads libraries, in case you'd like to supply your own SDL2.
Have fun, and please post pictures if you get pico-8 running on any cute displays!
This weekend (20th, 21st) I'll be at Tokyo Demo Fest 2016, giving a short PICO-8 seminar at 3pm on Sunday, and also making a wee demo for the Wild compo (also in PICO-8, naturally). If you're in Tokyo, come along! The venue is larger than last year -- 3331 Arts Chiyoda, which is around 8 minutes walk from Akihabara station. You can find the registration page and more information here.
Here's a 4k demo from last year (it won the combined pc section):
Here's a quick update with music copying and keyboard configuration for controller buttons.
To configure buttons, use KEYCONFIG from the commandline.
To copy a song from one cartridge to another:
- In the song editor, click on the start pattern and then shift-click on the end pattern that you want to transport. They should light up green.
- Control-C to copy the pattern data, along with the sfx they point to.
- Load the cart you want to paste into, open the song view and click on the pattern index you want to paste to.
- CTRL-V to paste. When pasting a song, any SFX that are needed are written to unused slots and then the pattern indexes are adjusted accordingly.
v0.1.5 Added: Keyboard configuration for player buttons (KEYCONFIG) Added: Music tracker select / copy / paste Added: Single-level undo in audio tools Added: Live preview of frequencies in sound editor Fixed: Command history extends past last reboot Fixed: Sfx exporter broken Fixed: Slashes at end of path resolve to double slashes Fixed: Load cart from commandline under Windows
Every day, Professor Miggles goes to work. And every day he snoozes in bed until the last possible moment. To keep the points you get for snoozing, make sure to head out in time without forgetting to put your trousers on.
v1.1: Fixed high score bug, and added persistent high score (when played from pico-8)
Hey All, I hope you had a great new year!
Friendlier Token CountingPairs of brackets and block deliminations now count as one token each, and local declarations do not count at all. You can now fit in around 30% more code because of this, and there is less need for odd space-saving techniques (e.g. using blah"" instead of blah()), or getting rid of local variables. It does mean you're more likely to hit the compressed code limit (use INFO to check), but I don't think this will be a problem. The raw character limit has also been increased from 32k to 64k.
Importing / Exporting Dataimport() and export() can now load and save the sprite sheet: export("something.png") and sfx: export("something.wav"). These aren't very flexible yet, but in future they'll be able to do things like grabbing particular sets of sprites, or only importing into empty slots.
External Cartridge Data Accessreload() and cstore() now take an optional 4th parameter: a filename to grab the data from or store the data to. This is useful for making custom tools, or doing fancy data management. It's intended at this point mainly as a development tool, and isn't supported by the exporter or BBS player. But of course, you can do what you like with it :P
Here's Let's Karate being gradually replaced with data from Jelpi during runtime:
v0.1.4 Added: spritesheet importing and exporting with import("blah.png"), export("blah.png") Added: sfx exporting with export("blah%d.wav") Added: External cartridge parameter for reload() and cstore() Added: Persistent cartridge data mapped to 0x5e00 Added: Click token limit to toggle token & char limit display Added: assert(), type() Added: P to pause Changed: code char limit: 64k (was 32k) Changed: local declarations and semicolons not counted as tokens Changed: Pairs of brackets and block delimitations count as one token Changed: Only _update() or _draw() need to exist to enter main loop Changed: Allow forward-slash in code editor Changed: info() reports current (last loaded or saved) filename Changed: html5 version compiled with NO_DYNAMIC_EXECUTION Fixed: Shift-drag-copy sprites -> paste only pastes 1x1 Fixed: ".." should count as one token Fixed: Tracker displaying D instead of . Fixed: Multi-line comments Fixed: Crash on run when code close to char limit Fixed: When over token limit, can not run any command Fixed: Unused high bits in SFX section not saved in .p8 format Fixed: Camera position memory mapping out of sync Fixed: pico8.txt link broken in windows installer Fixed: print() crashes when parameter is not a string or numbers Fixed: Multi-line strings & escape chars mess up tokenizer and print() Fixed: Joystick not responding when left stick is up to the left Fixed: Alt-F4 saves screenshot before quitting Fixed: Sprite editor mode button doesn't show fullscreen mode Fixed: -sound parameter not working in html5 version
This is a quick bug-fixing update, mostly responding to issues in the 0.3.3 thread.
Changed: Super-State conditions (S-STATE) apply to all actors including ones spawned by emitters
Changed: When pasting alias, activation controller parameters are copied from the original
Improved: More robust anti-stuck-in-a-wall method
Improved: Default object properties
Improved: Config file validation
Fixed: Aliased animation inside root of pickup renders pickup uncollectable
Fixed: Base weapon doesn't change with modifier
Fixed: Legacy sword has 0 attack damage
Fixed: Room editor: spacing between objects should be taken from object definition
Fixed: Zoot's weapon switching in Chaos Arena
I've been doing some spring cleaning, and updated all of the older Lexaloffle games: Neko Puzzle (which is now free), Swarm Racer, Chocolate Castle, Zen Puzzle Garden, Swarm Racer and Swarm Racer 3000. If you had any trouble running these games on newer versions of OSX or 64-bit Linux, these versions should work out of the box.
SR3K also has some new wall rendering and analogue joystick support. I've been chipping away at it very sporadically but it's on slow burn until after Voxatron is finished. An 8-track preview is available to any Lexaloffle customers.
EDIT: 0.3.3b patch is now up; if you tried 0.3.3 from a clean install and got stuck on the title menu, see this post.
Voxatron 0.3.3 builds are now up! Check your updates page for downloads, now including a native 64-bit Linux version. Builds should be up on Humble soon too (check the version number on the files).
Main new features of interest are: integrated music tracker, custom inventories, multiplayer selection and room transition logic, new microscripting events and better activation control, improved water physics. Check out cartridges in the ALPHA CARTS menu: The Jelly Room, Chaos Fortress to see some of these in action. I'll post a more complex demo of custom inventories and weapon switching soon.
Bloot (also under ALPHA CARTS) is now completely playable as a 2P-4P game, with match scoring and end-game logic completely made from microscripting. To select a player, press action once to join, and then once more to select the player (or left / right to change selection). If you want to try it out without a second human around to play with, you can join P2 and then hoist and carry them through the door to begin the game.
There's a script editor in this version (under the new NEW OBJECT fold-out menu), but it doesn't do much yet. Scripting is the last major component of Voxatron engine, and v0.3.3 contains a lot of new code to get it working -- all of the interactions between objects now run through an abstracted event layer because of this. This affected many legacy carts, and I'm still working on improving backwards compatibility.
For a top-level view of the project's progress and what's coming up, check out the new feature-wise Development Map. In the short term, check back for more demos, tutorials and documentation!
Added: Custom inventories
Added: Music pattern sequencer
Added: Multiplayer selection
Added: Bloot: Title page, match logic, music
Added: The Jelly Room
Added: PREV field in activation controller
Added: Audio chooser
Added: Fold-out item creation menu
Added: Scrollwheel / mb3 camera control
Added: Script editor (scripts don't run yet though!)
Added: Shortcut keys for looping in prop editor
Added: Emitters can spawn props, audio and doors
Added: Trigger conditions host:inventory and actor:modifier
Added: Activation controllers for audio and aliases
Added: Total play time displayed on cart completion
Added: Emitted objects can optionally inherit heading and facing rotations
Changed: Can now sink in water by increasing object gravity
Changed: .pov exporter merges sequential voxels of same colour
Changed: Animation completion does not cause parent activation controller to expire
Changed: Can use go_to_room internal script with current room number
Changed: Hoisting is stiffer / more reliable
Changed: Can press button to restart after dying after only 1 second (was 2)
Changed: Doors do not warp in if they are occupied or triggered at t==0
Changed: Legacy sword particle attack damage taken to be player attack damage
Fixed: Doors only reporting occupied event on room entry
Fixed: Water: more robust wading, transitioning between swimming and standing.
Fixed: rand bullet duration
Fixed: incremental item collection
Fixed: aliased modifiers evaluating dereferenced parent
Fixed: emitter id == 0 clobbered on paste
Fixed: cut and pasting object definitions generates new ids
Fixed: actor:time in microscript statements
Fixed: actor:m_state.* called from room object activation controller
Fixed: Inactive modifier attribute values shown from incorrect parent
Fixed: Monsters don't run at full speed at player 2
Fixed: restarting room clobbers total_time_taken
Fixed: broken wall connectivity in small rooms
Fixed: actor state flags not set on zeroth frame
Fixed: Stand-alone emitter remains dormant forever even when duration/bursts have expired
Fixed: Barrel sometimes explodes when thrown from fast run
Fixed: Crash event triggered by carrying actor
Fixed: Walls do not extend down in liquid based rooms
Fixed: Player:super_state:died query sometimes gives false negative
Fixed: Pickups warping in inside player sometimes not immediately collected
Fixed: Room switching sometimes not triggered when carrying other player through door
Fixed: audio editor state is initialised with bad values after new sound created
Fixed: monster accel halved when mode:wandering
Fixed: Joystick not responding when left stick is up to the left
Fixed: death-triggered events don't fire when death caused by actor collision event
"A Jelly is nothing but Jelly with more Jelly" -- Nietzsche
A silly demo cartridge for Voxatron 0.3.3 -- collect the jellies to become more powerful and make it back to the jelly room.
if it doesn't load for you in the offline binaries, you need to update!