Log In  

@AdamJ

Follow
Follow

CTO of welove.audio GmbH. Adaptive music designer and engineer at Warhorse Studios (Kingdom Come: Deliverance). Researcher at Czech Technical University in Prague. Lecturer at Czech Technical University and Charles University Prague. Code available also at https://github.com/adam-sporka/pico-8-projects

 
Cart [#bajazajide-0#] | Code | 2019-04-20 | No License | Embed

The horizontal bars emit particles, every few seconds each. When a particle reaches the top or the bottom of the screen, one energy point is lost. The emitors work also as filters: When a particle hits a horizontal bar, it's absorbed and +1 score is awarded. Try scoring as much as possible before the energy reaches 0 and the game is over. My personal record is slightly over 540.

P#63740 2019-04-20 20:57 ( Edited 2019-04-20 20:58)

Cart [#40925#] | Code | 2017-05-24 | No License | Embed
11

Hi guys, I collected some of my tweetcarts and put them all into a single cartridge. They were all within the 140 characters limit at the time of posting on twitter. I took two liberties: I renamed the labels in them from ::_:: to ::_1::, ::_2::, etc. so that they would be unique, and I added a btnp(5) test to each of their main cycle. I am sure there is a way how to do it more efficiently but it should be OK for now :)

2017-05-22: Added one more
2017-05-24: And one more. Now there are 10 of those :-)

P#40722 2017-05-18 09:40 ( Edited 2017-05-24 17:21)

Cart [#39511#] | Code | 2017-04-10 | No License | Embed
3

I made a little tool exploring higher-order Lissajous patterns. Well, I'm not entirely sure they're actually called that, but this name sounds very mathematical :-). Some outputs look like human tongues or crests, some like butterflies, some like atomic mushrooms.

I'm sure everyone knows the principle of the basic Lissajous patterns. You iterate the following through a reasonable range of T and plot the points as you go:

X = sin(T / Rx)
Y = cos(T / Ry)

Rx == Ry gets you a circle, Rx == 2 and Ry == 1 is a paraboloid, and Rx == 1 and Ry == 2 looks like an hourglass. The images generated by my cart extend this a little bit. I sum a few "higher harmonics" before plotting the result:

X = 0
Y = 0
for I = 1 to speficied_order:
  X += sin(T * I / Rx) * R
  Y += cos(T * I / Ry) * R
  R *= 0.75

These are somewhat phase-shifted 1:2 of order 1, 2, 3, and 4:

I am pretty excited by this little discovery. (Or a lack of a proper literature research?) Regardless, it's been fun :-)

P#39512 2017-04-10 17:09 ( Edited 2017-04-13 14:50)

Cart [#31774#] | Code | 2016-10-26 | No License | Embed
5

Remake of the classic Atari 800XL game Planetary Defense by Charles Bachand and Tom Hudson with a little but notable modification of the original gameplay: The amount of shots you can fire is limited and you need to recharge by staying near the green orbital base.

Shoot the giant red bombs out of the sky from the orbit. Don't hit your own planet. Don't let the bombs hit the planet either. Once any bomb reaches the core of the planet (coordinates 63:63 on the screen), game ends. 10 points for shooting a bomb.

Arrow keys: Aim
Z: Shoot
X+UP/DN: Alter the orbital speed

P#31545 2016-10-23 11:26 ( Edited 2016-10-30 02:54)

Cart [#30328#] | Code | 2016-10-08 | License: CC4-BY-NC-SA | Embed
5

I always liked Kohonen Networks. They're simple and fun. This is a simple 9x9 2D-to-2D Kohonen network with constant neighborhood function, trying to adjust itself to the purple training set.

Use LEFT/RIGHT to switch between training sets.
Use Z to reset the network.

Yay for machine learning on PICO-8!

P#30330 2016-10-08 17:36 ( Edited 2016-10-09 11:08)

Cart [#39941#] | Code | 2017-04-25 | No License | Embed
8

Here are two approaches to a micro rhythm machine: Programmable Sequencer (specify the rhythm, then play it) and a Real-time Sequencer (push the keys at the right time to record a rhythm).

PROGRAMMABLE SEQUENCER

Left/Right: Move cursor
Up/Down: Specify which instrument will play
X: Play/Stop

Update 2017-04-25: Better feedback during editing.

REAL-TIME SEQUENCER

A really simple beat machine with real-time performance recording and playback on a two-bar loop. The metronome can't be switched off and the tempo can't be set. And the playback can't be paused/restarted. Also, only one drum can sound at a time. Still fun!!

The latency between image and audio is kinda hindering its feasibility, especially when run in a browser. Sequencers as music makers in PICO-8 are perhaps better approach, e.g. 4-beat by 4mat. Anyway, step editing would be cool though and I'll add it later (and some fancier graphics along with that).

Cart [#29665#] | Code | 2016-09-29 | No License | Embed
8

P#29666 2016-09-29 11:15 ( Edited 2017-04-25 20:20)

Cart [#sosunuzuwe-0#] | Code | 2019-05-12 | License: CC4-BY-NC-SA | Embed
17

Update 2019-05-13: Use the "Enter Menu" to "load" some code examples.
Update 2017-05-14: The sonification can be switched off :-) (or rather, you need to explicitly turn it on in the X-menu).
Update 2017-05-05: Added crazily sounding sonification.
Update 2017-04-24: Made the UI a bit more clear and fixed some bugs.

TL;DR:

Hold X, pres DOWN once, release X, and watch the nerdy numbers fill your screen.

MORE INFO

Hey all, I made a very simple visual IDE for writing and running code in Urban Müller's Brainfuck programming language. https://en.wikipedia.org/wiki/Brainfuck

Top part of the screen is your code.
Bottom left is your memory.
Bottom right is your output console.

The operators +-<>[]., work in a very similar way to the original with minor modifications: + and - operators work modulo 16 as each memory cell can hold a single hexadecimal digit. The memory capacity is 64 digits. < and > operators will wrap around. The . operator (output) works as expected. The , operator (input) is a random hex digit generator. I am thinking of changing this in the future.

Use LEFT/RIGHT/UP/DOWN to move the cursor around your code.
Use Z and UP/DOWN arrows to choose between the available operators.
Use Z and LEFT to delete the operator and shift the rest to the left.
Use Z and RIGHT to copy-insert the operator and shift the code to the right.
Use X and UP/DOWN to restart, clear, stop, etc.
Press ENTER to access some code examples.

P#23560 2016-06-24 15:12 ( Edited 2019-05-12 23:19)

... Adam and I work for Warhorse Studios in Prague (designing and implementing adaptive music in the title called Kingdom Come: Deliverance) and for the Czech Technical University in Prague (a researcher and an assistant professor). I also contribute to the Overmare Studios' RPG as the music team leader. I co-founded and write and produce for a band called the Wasteland Wailers which started performing live this year (Berlin, Baltimore). I am interested in interactive audio and music.

My twitter is @adam_sporka.
My SoundCloud is https://soundcloud.com/adam_sporka.

P#21162 2016-05-23 13:32 ( Edited 2016-05-23 17:34)

Cart [#21230#] | Code | 2016-05-24 | License: CC4-BY-NC-SA | Embed
25

A tiny silly cartridge with firework particles for the #p8jam2 :-)

Update 1.2
"Score" is shown. Not that you can anyhow alter the outcome, but it still feels kinda nice when you go over 1000. Once I scored over 1700. The thrill of it! :-)
'Z' will restart with the score shown at the end of the firework.
'X' will restart with the score visible during the process.

Update 1.1
Added more colors.
Sometimes the particles pop diagonally.


Cart [#21030#] | Code | 2016-05-21 | License: CC4-BY-NC-SA | Embed
25

Cart [#21026#] | Code | 2016-05-21 | License: CC4-BY-NC-SA | Embed
25

P#21027 2016-05-21 16:11 ( Edited 2016-07-15 21:58)

Cart [#20767#] | Code | 2016-05-18 | License: CC4-BY-NC-SA | Embed
5

There is a massive noise in your precious recording of 4'33" by John Cage in Carnegie Hall. Instead of four and a half minutes of silence -- electronic disaster in your headhones! Get rid of it by applying various filters to reach silence. Each slider controls one filter, which removes one element of noise when set to correct position.

  • Not all filters are needed every time.
  • Sometimes only one noise element is active.
  • Getting rid of one element makes others louder.

LEFT, RIGHT: Choose the filter
UP, DOWN: Move the filter slider

You need sound output to play this minigame.
Warning: Squeaky noises ensue! :-)

P#20769 2016-05-18 05:10 ( Edited 2016-06-01 14:20)

Cart [#20709#] | Code | 2016-05-17 | No License | Embed
14

Perhaps this is going to be useful for someone. This is a little keyboard handler I'm using in my code. It extends the functionality of the standard btn(k) function with detection of the onset of the key and its release. Sometimes it's useful to have those two and avoid btnp(k) repetition.

-- is_held(k) is true if the key k is held down
-- is_pressed(k) is true if the key has just been pressed by the user
-- is_released(k) is true if the key has just been released by the user

keys={}

function is_held(k) return band(keys[k], 1) == 1 end
function is_pressed(k) return band(keys[k], 2) == 2 end
function is_released(k) return band(keys[k], 4) == 4 end

function upd_key(k)
    if keys[k] == 0 then
        if btn(k) then keys[k] = 3 end
    elseif keys[k] == 1 then
        if btn(k) == false then keys[k] = 4 end
    elseif keys[k] == 3 then
        if btn(k) then keys[k] = 1
        else keys[k] = 4 end
    elseif keys[k] == 4 then
        if btn(k) then keys[k] = 3
        else keys[k] = 0 end
    end
end

function init_keys()
    for a = 0,5 do keys[a] = 0 end
end

function upd_keys()
    for a = 0,5 do upd_key(a) end
end

You need to call these in your _init() and _update() functions:

function _init()
    init_keys()
end

function _update()
    upd_keys()
end
P#20710 2016-05-17 14:46 ( Edited 2016-05-31 00:02)

Cart [#20856#] | Code | 2016-05-19 | License: CC4-BY-NC-SA | Embed
13

My first contribution to the collection of PICO-8 consoles :-)

You're the driver of a semi-automatic roof repairing cart and you're undoing the damage caused by the meteorites. The roof of each house can only take so much damage before the entire house is destroyed.

Controls:
LEFT, RIGHT: Drive left and right.
UP, DOWN: Extend or retract the arm of the vehicle, holding the the repair rig.
Z: Use the repair rig on the roof. Make sure you're properly aligned with it (or get a perk which will do that for you)
X: Install an auto-repair unit (ARU) if you have some.

Scoring:
+25 points to undo the damage caused by one meteorite strike.
Level up after every 200 points scored. A randomly chosen house will grow in size upon leveling up. A perk shop dialog window appears.

Perks:

  • Automatic alignment of the repair rig with the roof level.
  • Double speed of all movements.
  • Sturdier vehicle which doesn't require you to retract the arm when moving left/right.
  • Toroidal topology: drive through the edge of the screen on the other side.
  • Auto-repair units (ARUs) for mounting on the roofs.

Pro tips:

  • ARUs won't last forever.
  • Some perks without some other perks make things more difficult rather than easy.

Updates:

  • 1.3
    -- ARU can't be installed unless there is none on the roof or there is one with less than three hits to live

  • 1.2
    -- theme music plays in-game
    -- limiting simultaneous meteorites above each building to three
    -- limiting the height of buildings to 20 floors

Thanks for playing :)

P#20615 2016-05-15 14:48 ( Edited 2016-05-31 00:03)

Cart [#20494#] | Code | 2016-05-12 | License: CC4-BY-NC-SA | Embed
2

My first attempt at coding something which resembles a video game in Pico-8 :-)

You're the driver of a semi-automatic roof repairing cart and you're undoing the damage caused by the meteorites. The roof of each house can only take so much damage before the entire house is destroyed.

Controls:
LEFT, RIGHT: Drive left and right.
UP, DOWN: Extend or retract the arm of the vehicle.
Z: Make the arm repair the roof. Make sure you're properly aligned with the roof.

Scoring:
+25 points to undo the damage caused by one meteorite strike.
Level up after 200 points scored. A randomly chosen house will grow in size upon leveling up.

Thanks for playing :)

P#20495 2016-05-12 14:23 ( Edited 2016-05-12 22:50)

About | Contact | Updates | Terms of Use
Follow Lexaloffle:        
Generated 2019-09-18 20:42 | 0.140s | 4194k | Q:161