Act as Jimmy the slime and get to the finish line in the fence maze!
How fast can you get?
Controls
Arrows: move
Z or 🅾️: change tab
X or ❎: restart in game (upon win)
Changes
- Camera and a larger map
- Fences!
- Winning
- A Minute-Second time system
- Upper tab hides when Jimmy is at the top row
Expected Updates
- Apply acceleration in movement system
- Dashing
- Randomized layout(?)
- Animated background
-thePixelXb_,2023/8/17
History
2023/8/16 v0.1
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.
Isle Craft
You've awaken on a mysterious island in the middle of nowhere. Craft and explore as you create a home in this strange place!
Press down in the inventory to drop items
v1.0.1 Early Access
Developed by CannonWuff (me)
This is an island survival game inspired by Don't Starve, Forager and Islander
I've recently rewritten the entire project from the ground up and it now runs faster and with less issues.
Demo:
- Please report any bugs you find
- Saving does not work yet
- Trashcans do not work yet
- Fishing rod does not work yet
Roadmap (LOVE2D Port):
This is a short platformer for the LOWREZJAM 2023
You play as a kitty, your owner is moving, but you want to quickly get your toy mouse Paul from the other side of the house, while the ghosts that are moving in help you to save him.
Instructions for menu:
right arrow - toggle tutorial
left arrow - toggle speedrun mode
up arrow - toggle assist mode
c - reset save file (if you do not save, you will be able to use your previous save file)
a - change controls (from player 1 to player 2 and vice versa)
v / x - start game
I thought the PICO-8 community needed a reaction time test. For this I came up with a reflex test inspired by humanbenchmark.com
HOW TO USE
You can use the whole program just by pressing the "O" key. When you pass the main menu and start the test, you wait on the red screen for a random length of time. At the end of this period, when the screen turns green, you must press the "O" key as fast as possible. If you press the key early, you will have to start over with the current step. At the end of each step, you can see your current reaction time and when this process is repeated 5 times, the program calculates your average reaction time.
CREATING A DATABASE
The program also makes a comment on how fast or slow you are as a result, based on your average reaction time. This comment is a classification system based on the results of me and a few volunteers for now.
The next thing I want to do about this is to set up a database of the average reaction times of the PICO-8 community playing this game and put it on some sort of leaderboard. If you want to help, you can write your average reaction time in the comments until the next update!
GROW
Simple Democart i made.
I came across this idea when working on my other game (info on my twitter :) ), and decided to horribly code unglue it from that game and edit it into a little pico-8 democart! I tried to keep it similar to p8's builtin demos, but i couldn't help myself from adding little sounds and stuff. (Also if you want it @zep , its yours :) ) feel free to yoink code from this cart if you feel like it! i commented out everything that needs it so that even beginners can make sense of whats going on under the floorboards. er- what makes the-- never mind. i also left some map spaces open if you want to make your own levels!
Thank you all from the pico-8 community for not yelling about my awful code! i really appreciate all the support from my other projects and im glad im apart of this little community.
Feature Overview
DBG()
Displays any timing value in real time.
- Executed with arguments, it stacks values for display.
- You need to specify 'd?' at the timing you want to display.
- When the stacked value display is complete, it is reset.
- This function consumes 71 Token.
function _update() dbg('Debug Test!',time()) end function _draw() dbg('d?') -- 'Debug Test! [time value]' end |
This function will be included in the next version(0.14.0) of KNUTIL library.
If you want to stop processing and investigate detailed values, consider DMP().
release note
I don't know what happened here. Pico-8 randomly crashed while making a game inside Voxatron. I will provide the Pico-8 log.txt here, but there doesn't seem to be anything useful. If this helps, the Pico-8 window was mostly inactive as I was more focused on fixing bugs in the game itself.
https://drive.google.com/file/d/1bSqA4TJfT0nd9yH3vvvyRLiR48wJdq5p/view?usp=sharing (Only @zep can access this.)
Feature Overview
AMID()
Returns the median of a given positive and negative number.
- It is used in controlling the camera and parameters that can swing either + or -.
- This function consumes 10 Token.
x,y=0,0 w,h=16,8 -- range of movement(*2+1) while 1 do cls(12) camera(-64,-64) rectfill(w,h,-w,-h,0) ?'⬆️⬇️⬅️➡️ key to move',-60,-60 x+=tonum(btn(1))-tonum(btn(0)) x=amid(w,x) y+=tonum(btn(3))-tonum(btn(2)) y=amid(h,y) pset(x,y,8) ?x..' '..y,-w,h+1,7 flip() end |
This function will be included in the next version(0.14.0) of KNUTIL library.
If you want to determine that two values are within range, consider INRNG().
Feature Overview
HTD()
Split a continuous string of hexadecimal numbers into a table.
- the number of supported delimited bits is 4,8,12,16 bits (1~4 nibbles).
- characters that cannot be converted to numbers are ignored.
- the result of the api's
tonum('0x'..v)
of the api.
- the result of the api's
- depending on the delimiter, a missing last character will result in a lower digit by the number of missing characters.
- This function consumes 30 Token.
local a=htd('12a30f',1) -- a={1,2,10,3,0,15} local b=htd('12a30f',3) -- b={297,783} |
Perhaps consider BUNPACK() if you want to separate NUMBER every few bits.
I'm new to PICO-8 here folks but absolutely hooked! I'm having a problem with my player shaking during movement as well as getting caught on my flagged sprites that the player collides with. I know some basics and have compiled this code by watching tutorials and scanning forums for code snippets but I think I am mixing some things that don't play well. I am really going for a smooth player movement vibe so I just added some acceleration rather than an abrupt "p.x+=1" movement style. It doesn't appear to show in my GIF but the player shakes violently during gameplay. Any ideas as to what could be causing this would be greatly appreciated!
ToriEngine - ECS Metroidvania Engine
I'm building an Entity-Component-System engine-thing to make platforming metroidvania games like Cave Story on Pico-8. I was initially building it for a Jam game, Tori Tower, but the engine fell out of scope x.x
I have run into some issues as I was building the code, and I'd really appreciate if anyone would like to help me here and there ^^
I'll start by explaining how the engine works, so it all becomes easier to digest later:
Architecture
An ECS (Entity-Component-System) is an architecture for games in which the World State is populated by Entities, which are simply containers (tables) who store values. These values are called Components, and each entity has its own set of components, which its own values assigned.
Entities hold no functions. The logic is handled by Systems, which are functions that make changes in the World State every frame. A system does so by filtering out the entities in the world who have components relevant to the system, and executes the function upon each entity selected.
Example: Moving system
A moving system moves every entity that is movable each frame.
So, the system _move
will filter out the world
table, so that it only selects the entities who have the move
and pos
component. Those components look a bit like this:
entity_that_moves={ pos = {x=30,y=64} --position component move = {vel_x=1,vel_y=0,max_vel_x=3,max_vel_y=2,acc_x=1, acc_y=3, friction=0.8} --movement component } |
Filtering out these systems, it'll run the logic for movement:
function(ent) ent.move.vel_x=mid(-ent.move.max_vel_x,ent.move.vel_x+ent.move.acc_x,ent.move.max_vel_x) ent.move.vel_y= --yadda yadda yadda you get the point end |
With that said, I'll explain how my engine is working.
The Core
The core is simple and compact, and credit goes to @selfsame for creating the system, and @alexr for building upon it:
https://www.lexaloffle.com/bbs/?tid=30039
-- basic function _has(e, ks) for n in all(ks) do if e[n]==nil then [ [size=16][color=#ffaabb] [ Continue Reading.. ] [/color][/size] ](/bbs/?pid=132836#p) |
Feature Overview
ECPALT()
set transparency from palette table.
- Transparency is reset at each function execution.
- If the value of the "color id key" in the palette table is 0, the palette becomes transparent.
- The palette that was made black by
MKPAL()
can be used as transparent as it is. - The format is redundant due to the specification to match
MKPAL()
. - This function consumes 20 Token.
-- Make 6, 7, and 13 transparent. ecpalt({[6]=0,[7]=0,[13]=0}) spr(1,16,32,2,2) |
This function will be included in the next version(0.14.0) of KNUTIL library.