Author of Downstream Dream, Star Trek: Killer Q'egh, and TMNT: Shredder's PREvenge OST. Currently making poppy little dance tunes.
Hi Zep! :)
I'm not sure if this is by design, but it seems printh()
resolves paths differently than cstore()
, reload()
, etc; where printh()
does path resolution relative to root_path
, while the other funcs resolve paths relative to the running cart.
For example, given the directory structure:
project_dir/ |_dist/ |_foo.p8 |_log.p8l |_utils/ |_bar.p8 |
and launching with:
project_dir $ pico8 -root_path ./ ./utils/bar.p8 |
project_dir/utils/bar.p8:
cstore(0, 0, 0x4300, "./dist/foo.p8") --doesn't write to foo.p8 cstore(0, 0, 0x4300, "../dist/foo.p8") --writes to foo.p8 printh("hello world!", "./dist/log") --writes to log.p8l printh("hello world!", "../dist/log") --bad log error |
I'm not sure which way I think all the funcs should behave, but I'm inclined to say printh()
should resolve paths relative to the running cart like the other funcs, because it would probably be less surprises for the user that way.
Anyway, thx for your time!
Originally composed by:
Jürgen "DJ Jurgen" Rijkers,
Sebastiaan "Pronti" Molijn,
Eelke "Kalmani" Kalberg,
Judith Anna Pronk
The idea for this cart was inspired by a comment @Liquidream made to me a few months ago. 😂 Enjoy your week, everyone!
I hope everyone is taking good care of themselves. Be safe and have a great weekend! 🙂
Hi friends,
@Wolfe3D recently asked me to do the soundtrack for his fan game, Teenage Mutant Ninja Turtles in: Shredder's Prevenge. With such an ambitious and impressive project shaping up, how could anyone say no? I'll be posting music here and on radico8 as Wolfe3D releases the corresponding game content. The soundtrack will feature seven songs plus assorted jingles. I'll lead off here with a couple covers I couldn't resist trying to make. I hope you like them!
(This is a totally free, totally non-commercial fan project, all intellectual property contained within the content below belongs to its respective owners. Please don't sue me.)
04/15/2023: Added Title Theme, Go Green Machine!, Uptown Cat Blues, Battlehead, Turtle Tokens.
Tracklist
- (NEW!) Title Theme 🌃
- (NEW!) Main Menu: Go Green Machine! 🛺
- ???
- (NEW!) Level 1: Uptown Cat Blues 🎸
- (NEW!) Boss Theme: Battlehead 💀
- (NEW!) Arcade Theme: Turtle Tokens 🕹
- Level 2: This is a Cover of Sewer Surfin' 🏄♂️
- ???
- ???
- ???
- End Credits: This is a Cover of Pizza Power 🍕
Title Theme 🌃
Contains arrangements of the 1987 Teenage Mutant Ninja Turtles theme, originally composed by Chuck Lorre and Dennis Challen Brown.
Main Menu: Go Green Machine! 🛺
Contains arrangements of the 1987 Teenage Mutant Ninja Turtles theme, originally composed by Chuck Lorre and Dennis Challen Brown. Cover art is a scan of the NES box art for TMNT II: The Arcade Game.
???
Level 1: Uptown Cat Blues 🎸
Contains arrangements of the 1987 Teenage Mutant Ninja Turtles theme, originally composed by Chuck Lorre and Dennis Challen Brown. Cover art is from a Pizza Hut promotional poster for the Coming Out of Their Shells tour.
Boss Theme: Battlehead 💀
Controls:
⬅️➡️⬆️⬇️🅾️❎: Play victory jingle
Contains arrangements of boss themes from the arcade games Teenage Mutant Ninja Turtles and Turtles in Time, originally composed by Mutsuhiko Izumi. Cover art is a scan from the Mirage Studios TMNT comics.
Arcade Theme: Turtle Tokens 🕹
Contains arrangements of the 1987 Teenage Mutant Ninja Turtles theme, originally composed by Chuck Lorre and Dennis Challen Brown. Cover art is a screenshot from the 1987 animated series.
Level 2: Sewer Surfin' 🏄♂️
Originally composed by Mutsuhiko Izumi. Cover art is a screenshot from the arcade game, Turtles In Time.
???
???
???
End Credits: Pizza Power 🍕
Originally composed by Bob Bejan and Godfrey Nelson. Cover art is a scan of the Coming Out of Their Shells CD insert.
Hi Zep! :)
0.2.5g: In non-C-style for loops, if a multi-line comment is opened/closed before the first variable declaration, without trailing whitespace before the variable name, it will throw a syntax error. All other situations seem to be okay:
--[[ok]]foo = --[[ok]]{1} --ok for --[[ok]]i=0,1 do print(foo[i]) end for --[[ok]] v in all(foo) do print(v) end for --[[ok]] k, --[[ok]]v in pairs(foo) do print(v) end for --[[ok]] k, --[[ok]]v in ipairs(foo) do print(v) end --not ok for --[[oops]]v in all(foo) do print(v) end for --[[oops]]k, --[[ok]]v in pairs(foo) do print(v) end for --[[oops]]k, --[[ok]]v in ipairs(foo) do print(v) end |
On 0.2.5e, the following message is printed to stdout whenever a cart containing any arbitrary meta section is run:
$ pico8 -run test.p8 codo_free fail 21 0 |
test.p8:
pico-8 cartridge // http://www.pico-8.com version 39 __meta:foo__ bar |
Carts seem to run fine, so there don't seem to be any other negative effects.
Hi, friends!
Here's a demo featuring 5 glorious channels of lo-fi audio! Making a chipbreak-style tune in Pico-8 has been in the back of my mind ever since @carlc27843 discovered the undocumented PCM channel, and now I can finally check this off my list! After almost 2 years! 😅
All the drums are samples, triggered by watching the tracker with stat(56). The samples are then fed to the PCM channel by monitoring the buffer with stat(108). I'd originally planned on building a 5-channel tracker from this demo, but I had a tough time getting the samples to sync consistently. I'm not sure if that's because of my own shortcomings, or maybe because as @zep literally said, the sync is "not perfect".
For the gfx, the star animations are also triggered by stat(56), whenever a snare sample is played. The road is just one gigantic image using a palette cycle. It looks like this:

Anyway, I had a lot of fun putting this together. I hope you like it! 😃
Special thanks to @pahammond for GEM, which helped keep this cart under the compressed limit!


Hi Zep! :) I think I found a bug in one of the more esoteric stat calls?
Bug:
According to the manual, stat(56) should return the number of ticks played in the current pattern. Currently (0.2.5e), it seems to poll the leftmost sfx in the pattern for the count. That makes sense bc the overall pattern length is determined by the leftmost sfx which is not a loop, but as the title says, stat(56) will reset back to 0 early if the leftmost sfx is a loop.
Expected behavior:
stat(56) should return the number of pattern ticks played regardless of looped sfx
Thanks for your time! :)
I was going to wait to post this until the weekend, but I have no self-control. 😅 Enjoy the rest of your week, everyone!
Here's another new song! Have a great weekend! 😃
This one is short but sweet. I hope you enjoy it! 😊
One last chiptune. I hope you like it! 😀
One more! 😅
Hi everyone, I wrote this song over the weekend, I hope you like it! 😀
View Older Posts