Log In  
BBS > Lexaloffle Community Superblog
This is a combined feed of all Lexaloffle user blogs. For Lexaloffle-related news, see @zep's blog.

All | Following | PICO-8 | Voxatron | General

Cart #yoto-0 | 2022-08-13 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

P#115719 2022-08-13 20:32

Cart #schildm8-0 | 2022-08-13 | Code ▽ | Embed ▽ | No License
1

Check out Lazy Devs' pico8 shmup tutorial series and game jam to join in on the fun:
https://www.youtube.com/watch?v=qfuD16YJnL8

Inspired by Schildmaid MX:
https://www.youtube.com/watch?v=qQe94UQkr64

P#115710 2022-08-13 15:00 ( Edited 2022-08-13 15:02)

(v01 08-12-22)

Cart #background_input-1 | 2022-08-13 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3

TO LOAD THIS PICO-8 CART, in immediate mode, type: load #background_input .

I had recently received a bit of traffic regarding an old input routine I made found HERE:

https://www.lexaloffle.com/bbs/?tid=31598

so I decided to rewrite it entirely, so it is not coded with GOTO and interrupt main code but made it so it can run in the background additionally.

This means it uses the conventional _update() function and you call it by changing one variable called INPUT to a string value.

Then the input engages - and the rest of your code can continue to run around it. In fact for this demo you can use the arrow keys to move the rainbow circle even as you are typing !

It also remembers the screen and unlike other programs that only remember once what was beneath it, this allows you to continue to draw to its message area even when visible and you will not lose a single pixel of your work.

You also do not need to initialize any variables inside _init(), the whole thing is self-contained.

To make it work you will need two functions firstlineinput() and lastlineinput()

Firstlineinput is 32-tokens and Lastlineinput is 185-tokens.

Quite simply make the first line in your _update() function to call firstlineinput().

Then the last line of your _update() function to call lastlineinput().

function _init()
end

function _update()
  firstlineinput()

  (( your code + graphics ))

  if askname==1 then
    input="what is your name"
  elseif output!=nil then
    print("hello, "..output)
    output=""
  end
  lastlineinput()
end

And that's it ! The rest is handled automatically including updating the screen even if you don't redraw the screen every frame The system is smart and recalls every pixel you draw even if you draw directly on top of it during operation or even as you are typing in text !

To call it, set the global variable INPUT to be something like, "please enter your name."

That will then appear in a frame below, type what you want and press ENTER. Also during name entry only is the "P" and ENTER key taken over so you can press "P" without pausing the system. If you want to pause during text entry, hold the P for a moment and the regular menu will appear.

Press ENTER and the contents of your input are sent to global variable OUTPUT When you are not entering a message the "P" and ENTER key function normally and will pause with a single keystroke.


TECHNICAL:

It does use high memory from 0xF800 to 0xFFFF. As long as you are not using that this program will run just fine.

I am also using global variables that start with an underline and zero. If you have other variables that start with an underline but not a zero after that, you should also not run into any problems.


And there it is !

If you have any questions or comments, feel free to let me know.

P#115676 2022-08-13 00:35 ( Edited 2022-08-13 00:54)

Cart #assigned_fighter_at_birth-4 | 2022-08-13 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

~ ~ ~ ~ ~
your base class
is who you are.
your base class
is your role in the world party.
everyone is assigned
their base class at birth.
this maintains
the balance of the world party.
~ ~ ~ ~ ~

Assigned Fighter At Birth:

Play as Josie, the sister of the Hero of Light, on a journey to stop your brother from obtaining the crystals of the elements!

Fight against your foes in a lively, simple-to-learn, hard-to-master battle system.

Grow a party of memorable and funny friends along your journey.

Controls:

Arrow Keys/Left Stick
Z key/A button: Confirm
X key/B button: Back/Skip/Forfeit

Made in two months for the Trans Representation Game Jam 2022.

Loving thanks to:

My friends and family
The kind folks who tested the game
The Pico-8 Discord community

Updates 8/13
-new title screen
-fixed some weird apostrophe spacing in the dialogue
-added forfeit (hold X during fights)
-fewer options during first few fights, to help w learning the battle system
-balancing

P#115678 2022-08-13 00:26 ( Edited 2022-08-13 20:30)

Cart #djclem_helimenu-8 | 2022-08-10 | Code ▽ | Embed ▽ | No License
1

Things you may find interesting about this cart set:

Sound Effects

The helicopter rotor sound consists of these four notes:

They play in a loop, and as helicopter throttle and rotor "pitch" change, poke commands are used to alter the speed and tone of the notes:

 if heli_sound==10 then  -- SFX 10 is the continuous rotor sound
  -- deltax is used to determine how much
  -- rotor 'slap' to add
  local deltax=heli_xspdtgt-heli.xspd

  -- rotor slap changes the volume
  -- of the two notes (noise)
  -- the more tilt the heli has,
  -- the more pronounced the 'slap' is
  local rotorslap=({[0]=0x53,0x53,0x55,0x57,0x59})[abs(heli.tilt)]

  -- if the helicopter is trying to reverse,
  -- then make the rotor slap the most pronounced
  if sgn(heli_xspdtgt) != sgn(heli.xspd) then
    rotorslap=0x5b
  end

  sfxo=stat(50)
  if sfxo==0 or sfxo==2 then
    chgit=true
    -- i only want to change the 
    -- volume of the two noise
    -- notes only if the "silent"
    -- notes are being played.
    -- otherwise it sounds glitchy
  end

  if chgit and peek(0x34a9)!=rotorslap then
    poke(0x34a9,rotorslap)
    poke(0x34ad,rotorslap)
    -- these poke addresses are
    -- presently hard-coded to
    -- work on sfx(10)
  end

  if peek(0x34e9)!=rotorspd then
    sfxo=stat(50)
    if sfxo==0 then
      poke(0x34e9,flr(rotorspd))
      -- this changes the playback
      -- speed of the sfx on ch 0
      -- only change the speed at 
      -- first note, to help reduce
      -- glitchy sounds

      -- this poke address is
      -- presently hard-coded to
      -- work on sfx(10)
    end
  end
end  

Multi-Cart

This game makes use of two carts: A menu cart, and the gameplay cart. If you aren't familiar with cart-chaining, here is a simple demo along with the .P8 source code.

Anyway, the two carts call each other back-and-forth, and communicate using CARTDATA. The Cartdata is located at memory location 0x5E00 - 0x5EFF. Note that you may access this memory area using PEEK and POKE, in addition to DGET and DSET, respectively. I use a mix of both methods... I use DGET/DSET to store about 10 numbers (using indices 0-9), and then I also store byte-data, justified at the top of the Cartdata memory region, starting at the highest location of 0x5EFF and works downwards. Memory Map

Another thing the menu cart does is draw two graphic assets, and passes them via memory to the gameplay cart. Below is an example of the dashboard when you crash:

This was generated using code, but the token count was a little high, and I was looking to remove tokens from the gameplay cart. So I moved the code to draw this broken dashboard into the menu cart. When the menu cart starts, it draws the broken dashboard (but does not FLIP(), so you don't see this part), then copies it to memory location 0x8000. When the menu cart launches the gameplay cart, a formally-undocumented but known feature is that this region of memory stays intact when loading other cartridges. So the gameplay cart now has this graphic asset located at the same 0x8000 memory location. To draw this broken dash during gameplay I just perform a memory copy:
memcpy(30976,0x8000,1792).

Image Compression

I use the PX9 Data Compression Utility to store more graphic assets than would normally fit into a Pico-8 cartridge. The menu cart has the largest image storage requirements, so the discussion below refers to the menu cart:

I have about 4 carts worth of sprite/image data used in the menu cartridge. I wrote a utility cart that contains the PX9 compression routine, and one-by-one, RELOADs the spritesheet from each of these carts, compresses the individual images in turn, and stores them in memory starting at 0x2000 (the non-shared map region - see memory layout below). The compressed images take up more space than is available in the map area, and it actually spills over into the Sprite Flags, Music and into the Sound effects memory regions. I do not use any Sprite Flags, and do not have any Music scores, so giving up these locations for compressed image storage is a good tradeoff. I do use sound effects, so what I did is moved all my sound effects to the top of the SFX memory area [SFX(63)] and worked downwards in memory. My sound effects use locations 52-63. The compressed data goes up to about SFX slot #8, so there is room for me to add more SFX or more compressed images, and still have room.

Start   End     Purpose
0x0     0x0fff  Sprite sheet (0-127)*
0x1000  0x1fff  Sprite sheet (128-255)* / Map (rows 32-63) (shared)
0x2000  0x2fff  Map (rows 0-31)
0x3000  0x30ff  Sprite flags
0x3100  0x31ff  Music
0x3200  0x42ff  Sound effects

The compressed image data uses 5,127 bytes. Therefore the compressed image data is contained in the memory region 0x2000-0x3407

P#115671 2022-08-12 23:21

Cart #djclem_helimenu-8 | 2022-08-10 | Code ▽ | Embed ▽ | No License
1

Things you may find interesting about this cart set:

Sound Effects

The helicopter rotor sound consists of these four notes:

They play in a loop, and as helicopter throttle and rotor "pitch" change, poke commands are used to alter the speed and tone of the notes:

 if heli_sound==10 then  -- SFX 10 is the continuous rotor sound
  -- deltax is used to determine how much
  -- rotor 'slap' to add
  local deltax=heli_xspdtgt-heli.xspd

  -- rotor slap changes the volume
  -- of the two notes (noise)
  -- the more tilt the heli has,
  -- the more pronounced the 'slap' is
  local rotorslap=({[0]=0x53,0x53,0x55,0x57,0x59})[abs(heli.tilt)]

  -- if the helicopter is trying to reverse,
  -- then make the rotor slap the most pronounced
  if sgn(heli_xspdtgt) != sgn(heli.xspd) then
    rotorslap=0x5b
  end

  sfxo=stat(50)
  if sfxo==0 or sfxo==2 then
    chgit=true
    -- i only want to change the 
    -- volume of the two noise
    -- notes only if the "silent"
    -- notes are being played.
    -- otherwise it sounds glitchy
  end

  if chgit and peek(0x34a9)!=rotorslap then
    poke(0x34a9,rotorslap)
    poke(0x34ad,rotorslap)
    -- these poke addresses are
    -- presently hard-coded to
    -- work on sfx(10)
  end

  if peek(0x34e9)!=rotorspd then
    sfxo=stat(50)
    if sfxo==0 then
      poke(0x34e9,flr(rotorspd))
      -- this changes the playback
      -- speed of the sfx on ch 0
      -- only change the speed at 
      -- first note, to help reduce
      -- glitchy sounds

      -- this poke address is
      -- presently hard-coded to
      -- work on sfx(10)
    end
  end
end  

Multi-Cart

This game makes use of two carts: A menu cart, and the gameplay cart. If you aren't familiar with cart-chaining, here is a simple demo along with the .P8 source code.

Anyway, the two carts call each other back-and-forth, and communicate using CARTDATA. The Cartdata is located at memory location 0x5E00 - 0x5EFF. Note that you may access this memory area using PEEK and POKE, in addition to DGET and DSET, respectively. I use a mix of both methods... I use DGET/DSET to store about 10 numbers (using indices 0-9), and then I also store byte-data, justified at the top of the Cartdata memory region, starting at the highest location of 0x5EFF and works downwards. Memory Map

Another thing the menu cart does is draw two graphic assets, and passes them via memory to the gameplay cart. Below is an example of the dashboard when you crash:

This was generated using code, but the token count was a little high, and I was looking to remove tokens from the gameplay cart. So I moved the code to draw this broken dashboard into the menu cart. When the menu cart starts, it draws the broken dashboard (but does not FLIP(), so you don't see this part), then copies it to memory location 0x8000. When the menu cart launches the gameplay cart, a formally-undocumented but known feature is that this region of memory stays intact when loading other cartridges. So the gameplay cart now has this graphic asset located at the same 0x8000 memory location. To draw this broken dash during gameplay I just perform a memory copy:
memcpy(30976,0x8000,1792).

Image Compression

I use the PX9 Data Compression Utility to store more graphic assets than would normally fit into a Pico-8 cartridge. The menu cart has the largest image storage requirements, so the discussion below refers to the menu cart:

I have about 4 carts worth of sprite/image data used in the menu cartridge. I wrote a utility cart that contains the PX9 compression routine, and one-by-one, RELOADs the spritesheet from each of these carts, compresses the individual images in turn, and stores them in memory starting at 0x2000 (the non-shared map region - see memory layout below). The compressed images take up more space than is available in the map area, and it actually spills over into the Sprite Flags, Music and into the Sound effects memory regions. I do not use any Sprite Flags, and do not have any Music scores, so giving up these locations for compressed image storage is a good tradeoff. I do use sound effects, so what I did is moved all my sound effects to the top of the SFX memory area [SFX(63)] and worked downwards in memory. My sound effects use locations 52-63. The compressed data goes up to about SFX slot #8, so there is room for me to add more SFX or more compressed images, and still have room.

Start   End     Purpose
0x0     0x0fff  Sprite sheet (0-127)*
0x1000  0x1fff  Sprite sheet (128-255)* / Map (rows 32-63) (shared)
0x2000  0x2fff  Map (rows 0-31)
0x3000  0x30ff  Sprite flags
0x3100  0x31ff  Music
0x3200  0x42ff  Sound effects

The compressed image data uses 5,127 bytes. Therefore the compressed image data is contained in the memory region 0x2000-0x3407

P#115670 2022-08-12 23:10

Is there a way to export a cartridge's label image? I'm working on a mod of a cartridge and I wanted to make some small tweaks to the cart's label image.

P#115661 2022-08-12 17:46

Cart #greendog2022-0 | 2022-08-12 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

For https://itch.io/jam/lowrezjam-2022. Put your herding skills to the test by trying to chase a thousand people into the highlighted area as a giant green dog. Move with the mouse, click to bark.

Art & design by my kids.

P#115645 2022-08-12 09:44

After way longer time than planned, here's the first Demo from this upcoming cart.

Cart #pdemo1-0 | 2022-08-12 | Code ▽ | Embed ▽ | No License
13

This includes the first level and is only focused on getting feedback on controls/platforming (there's no sword fighting).
There's a kind of "auto hanging" when possible (unlike the original game where you had to press to hang) this will be optional in the final game.

If you die or exit the level you have to restart the cart.

Controls:

⬆️..........................Climb up ledge
⬇️..........................Crouch / climb down ledge (if located close behind Prince)/ Pick up sword or potions
⬅️ or ➡️.................Run left / right
❎(X) + ⬅️ or ➡️.....Walk left / right (finer control, backs off from ledges the first time, walks through spikes)
🅾️(Z)/Diagonals-Up..Jump (stationary or while running)

Game controls
Ctrl + R..............Restart cart (go to title screen)

The purpose of this project was to test if elements drawn with my picodraw system could be used as out-of-grid map tiles, leveraging some new functionality (self clipping) introduced since the R-type version.

As I was implementing this, I saw a twitter post from @HeyNetters with a mockup that was a perfect fit, so I asked her to use her art to try and implement it for real.

Music arrangement (limited in this demo but there's already more) by the great @dhostin (YouryKiki) as usual. Further info coming with the next demo.

Cart code is partially minified because it's not yet in a state to show for exampel purpose, it will be extensively optimized in the following releases.

For information about the original Prince of Persia game by Jordan Mechner, check here

level start

find the sword

level end

P#115632 2022-08-12 03:40

PICO-8 User Manual

PICO-8 v0.2.4c
https://www.pico-8.com

Author(s)


Joseph White // hey @lexaloffle.com

Edited by

@DOJI13

PICO-8 is built with:

SDL2 http://www.libsdl.org
Lua 5.2 http://www.lua.org // see license.txt
ws281x by jgarff // see license.txt
GIFLIB http://giflib.sourceforge.net/
WiringPi http://wiringpi.com/
libb64 by Chris Venter
miniz by Rich Geldreich
Latest version of the OG manual (as html, txt) and other resources:

https://www.lexaloffle.com/pico-8.php?page=resources

▨ Welcome to PICO-8!


PICO-8 is a fantasy console for making, sharing and playing tiny games and other computer programs. When you turn it on, the machine greets you with a shell for typing in Lua programs and provides simple built-in tools for creating sprites, maps and sound.

The harsh limitations of PICO-8 are carefully chosen to be fun to work with, encourage small but expressive designs and hopefully to give PICO-8 cartridges their own particular look and feel.

▨ Specifications


Display: 128x128, fixed 16 colour palette
Input: 6-button controllers
Carts: 32k data encoded as png files
Sound: 4 channel, 64 definable chip blerps
Code: Lua (max 8192 tokens of code)
Sprites: Single bank of 128 8x8 sprites (+128 shared)
Map: 128x32 8-bit cells (+128x32 shared)

❶ Getting Started

1.1 - Keys


ALT+ENTER: Toggle Fullscreen
ALT+F4: Fast Quit (Windows)
CTRL-Q: Fast Quit (Mac, Linux)
CTRL-R: Reload / Run / Restart cartridge
CTRL-S: Quick-Save working cartridge
CTRL-M: Mute / Unmute Sound
ENTER / P: Pause Menu (while running cart)
Player 1 default keys: Cursors + ZX / NM / CV
Player 2 default keys: SDFE + tab,Q / shift A
To change the default keys use the KEYCONFIG utility from inside PICO-8:

KEYCONFIG

1.2 - Hello World


After PICO-8 boots, try typing some of these commands followed by enter:

PRINT("HELLO WORLD")
RECTFILL(80,80,120,100,12)
CIRCFILL(70,90,20,14)
FOR I=1,4 DO PRINT(I) END
(Note: PICO-8 only displays upper-case characters -- just type normally without capslock!)

You can build up an interactive program by using commands like this in the code editing mode along with two special callback functions _UPDATE and _DRAW. For example, the following program allows you to move a circle around with the cursor keys. Press Esc to switch to the code editor and type or copy & paste the following code:

X = 64 Y = 64
FUNCTION _UPDATE()
IF (BTN(0)) THEN X=X-1 END
IF (BTN(1)) THEN X=X+1 END
IF (BTN(2)) THEN Y=Y-1 END
IF (BTN(3)) THEN Y=Y+1 END
END
` FUNCTION _DRAW() CLS(5) CIRCFILL(X,Y,7,14) END Now press Esc to return to the console and type RUN (or press CTRL-R) to see it in action. Please refer to the demo cartridges for more complex programs (typeINSTALL_DEMOS`).

If you want to store your program for later, use the SAVE command:

SAVE PINKCIRC
And to load it again:

LOAD PINKCIRC

That's it!

This is everything that I have painfully copied and pasted.
Now you can play some example games.

Hello


Cart #padizuduho-0 | 2022-08-11 | Code ▽ | Embed ▽ | No License

The first example game.
In my opinion, it looks really cool.

API


Cart #zagohuniwe-0 | 2022-08-11 | Code ▽ | Embed ▽ | No License

The second example game.
Just spinning bunnies.

P#115581 2022-08-12 00:41

Cart #monsterhunter-0 | 2022-08-11 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

There are rumors...

About a monster...

And you have been summoned to kill it!

But first, you have to find it!

Welcome to this forsaken land...

There is a lot of ground to cover...

Every part of the map can be visited. Explore different locations, such as villages...

farms...

cemeteries...

caves...

and towers!

But beware! There are creatures everywhere! You have a pistol to defend yourself. It can be useful for simpler animals, such as snakes and wolves... but can it handle more dangerous creatures?

The monster is somewhere. No one knows exactly where... but maybe someone has a clue?

Perhaps it is hiding somewhere... in the deep secrets of this land...

Hurry! Time is against us!

Controls

Welcome to Monster Hunter, a top-down shooter that alternates fast-paced action with overworld exploration.

You control the hunter. Depending on where you are, controls are different:

In the overworld, move with the arrows. Every tile except for roads and open areas can be entered by pressing X. Look at the top of the screen. A quick description of the location is shown there. You can move everywhere except for water and rocks. But try to stay in the road. The hunter moves faster in roads.

When inside some area, you can move with the arrows, and use X to shoot your weapon. Use Z to select a different weapon (if you have one). Keeping X pressed makes the hunter shoot continuously. But different weapons have different shooting rates, beware. You can walk (and shoot) diagonally too!

Rules

The game starts with you (the hunter) in the top left corner of the map, in the docks. The ship that brought you here can still be seen there.

There is one monster in the map, somewhere. But you can't see where it is. You can only find out its location by asking people in villages, farms and churches. Normally, people will tell you a general direction where it was last seen (if it has been seen). If the monster is really close, a villager will warn you to hurry. Go outside to the overworld and look for a question mark. It will pinpoint the monster's last known location. Be fast, though! If you take too long, it will move. If you enter the location where the monster is, you will have the opportunity to confront it!

But beware! You start with a simple pistol. You cannot defeat the monster with it! It is suicide! In fact, it is only effective with weaker creatures such as snakes and bats. For other creatures, you must acquire a better weapon. Look for a store. But you will need money... I am afraid you will have to use your hunting skills to earn some cash! Each time you kill a creature you earn some money. Of course, weaker creatures drop less cash. To get the best weapons you will need to kill strong creatures. Psst: I heard dwarves living in keeps and caves have a lot of money...

The monster will not stay still, waiting for you. No! It is constantly moving. And every time it enters a village, it kills everyone in it! Look for the top right number in the screen. This shows the number of people still alive. If the population reaches zero... well... let's hope you can defeat the monster before that, right?

While hunting, try not to be injured by creatures. If you let some creature touch you, you will be injured! You will not die immediately, though, but you will need some time to heal. Try not to lose your mind to madness while the monster rapidly decimates the population during this time!

These are the basic rules! Investigate! Hunt! Earn cash! Buy a weapon that you feel strong enough to kill the monster! And track it down! If you are lucky enough to hurt him, it will try to escape! Do not let it escape! Kill it immediately, otherwise... it will hide! It will heal! And it will come back for you... stronger as before!

Oh, one last thing... every playthrough is different. The overworld is the same, but each individual location is different. Different enemies, different people... and a different monster every time! Some are more difficult than others. Can you discover all monsters? Can you defeat them all? Keep playing until you have mastered the game!

Behind the scenes

Thank you for being interested in my little game. This is my first game in PICO-8. I am not a professional game developer, but I loved playing with PICO-8 and its limitations! And I have to tell you... I had a really hard time squeezing everything into a single cartridge!

This is what I implemented:

  • Procedural map generation. Different places have different procedures. Caves and forests use a cellular automata algorithm. I had to use a fill algorithm too, to avoid unreachable places. I developed my own algorithm to generate rooms for the keep, and houses for the villages/farm. It was fun to correctly place doors, windows and furniture! Oh, and I had to learn coroutines too, otherwise PICO-8 would freeze every time.

  • Enemy AI was also challenging. I had to implement pathfinding, both for the monster moving in the overworld, and the enemies in the arenas. It was fun! But it took a lot of space.

  • Speaking of it, there is an overworld and an arena! If you think about it, it's two games in one! Two types of sprites for the player, and two sets of sprites for the scenario, two sets of movements, two kinds of camera movements...

  • Player movement and box detection also had to work in both scenarios. But in the arena, box detection had to deal with movement and sliding in walls. This was not easy, but I learned how to do it!

  • Bullets! I implemented an algorithm where bullets had to hit moving targets. Hitbox detection was challenging too, because of this. There are some cool animations too, such as smoke trail for the guns and a small explosion (or blood) in the spot where the bullet hit its target.

  • Sounds and music were done very poorly. I do not think this turned out to be very professional. I liked it, but I recognize a pro could have done so much better.

I think this is a good overview of the challenges. Please, take a look at my code. If you have any ideas about how to reduce it, I appreciate it! There was a lot of cut content because of the code and sprite limitations:

  • I wanted to include a better title screen
  • I wanted to include better conversations with NPCs
  • I wanted to include two more monsters
  • I wanted the player to find bullets and items throughout the map. Some monster would require different items to be killed (silver bullet for a werewolf, a special cross for a vampire, etc). And the player would be required to save ammo and gather resources

But of course, I couldn't do all of this. Perhaps when Picotron is out I might be able to do it!

Finally, I think this game is HARD! I like it, though (I am an old-time gamer!)! But new players might find it too hard! Sorry about that!

Credit

My name is Daniel Lucrédio, I am a hobbyst game developer, and a teacher. You can find more about me in my website: dlucredio.com (it's in portuguese, sorry about that). But you can e-mail me (find the email at the bottom of the site).

P#115627 2022-08-12 00:25

If you play this game, all that comes up is "Theres nothing here..." (And thats all there is- look at the code). But then, how is there a custom cover image?

It's simple: You don't have to update your cover image (w/ F7) with your code.

Just comment all/most your code, make a cover sprite, show it, press F7, uncomment code, remove the sprite showing up, and boom. You easily have made a cover image that isn't accessible from the game itself. I'm probably not the first person to find this out, but it does work and I found it on my own, so I'm writing this.

P#115626 2022-08-11 22:05

The classic game Snake.
The code is well commented, and under the Creative Commons license, so you are free to learn/reuse code for your own games.
I have put this under the category Tutorials, however it could also be a Cartridge

The code has support for any size boundary, including changing the camera.
Because PICO-8 does not have autocorrect, I wrote boundry instead of boundary. Sorry!

v1.1 Hotfix fixes an issue where you would get a runtime error upon hitting a wall.

The correct version is now shown.

Cart #snaek-1 | 2022-08-11 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

(Yes, I realize the cart id is "snaek"

P#115624 2022-08-11 21:29 ( Edited 2022-08-12 23:11)

Cart #bobcoterminal-0 | 2022-08-11 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

BobCo(TM) Terminal v1.0

I'm pretty sure somebody already tried this, but I didn't want to spoil the fun for myself by seeing somebody else's great work before having my own go at it.

How?

For everybody who hasn't played fallout: You have to guess the correct password by choosing from a set number of passwords. If you get it wrong the terminal tells you how similar the password you chose was to the password that you have to guess.

Controls:
ARROWS UP/DOWN + X

Why?

I replayed some Fallout in the last weeks(that I spent without the internet(damn you, internet providers)) and fell in love with their take on the retro-styled terminal.
I also thought it would be a nice exercise to get comfortable with string manipulation. And then I had to stop myself before it got too messy.
This is really just a small demo thing showcasing my take on the terminal with some lame jokes.
I wrote a neat function for comparing strings, if somebody needs one you may copy it. The rest of the code is a mess because I did it all in a day around work.

For anybody who is interested:

I split() two strings and then iterate through that new dictionary in a for loop. Each turn I check whether the two dictionaries have the same letter in the same place and, if they do, I add 1 to a score. In the end I return that score.

The part that is much more interesting is mixing the words and some other nonsensical special characters for that "hacky" look. There is a dictionary with random characters and a dictionary with the chosen words. The table you see in-game is itself another table consisting of 8 lines. Each of those lines gets filled character by character. There is a set gap between words that gets filled with nonsense. The chosen words dictionary gets chopped up again and sprinkled into the mix. Et voila! A "hacky" block of text.

Oh and i really hope @dw817 sees (and plays) this.

P#115619 2022-08-11 19:31 ( Edited 2022-08-11 19:34)

Cart #towapabupu-5 | 2022-08-13 | Code ▽ | Embed ▽ | No License
3

Thanks to @dw817 for bear trap sprites and keystrokes bug fix!
You play as gelpi, the brother of jelpi, he was walking in demoland,
and he found.. COINS!? HE WAS RICH! But that didn't last long...
He fell through a big hole, and he went into the maze.
But many other people have left notes in the maze...
Find your way through the maze, collect all the coins,
and go back to demoland.
Screenshots and Gameplay:

(these images and gifs were from version 1.0, and i'm too lazy to update them lol)
so you have to play the actual game to see all the changes and stuff,
at least you have something to compare the game with!
I added the game to my github and my itch.io, check it out there if you want!
(my itch.io is on my profile and the github page is on the itch.io page)

P#115612 2022-08-11 16:12 ( Edited 2022-08-13 13:21)

Pico-8 QR-code distributable games (How to)

With the addition of the Save @Url feature along with the web runner for educational purposes we got a mobile optimized means of sharing games via a URL. And one thing that QR codes are decent at is allowing users with phones to scan the symbols and redirect to webpages.

Here are the steps to make it happen.

1. Have the right version of Pico-8

You should be able to accomplish this from any version of Pico-8 that is (0.2.4c) or above. This includes the free educational version.

2. Limitations and considerations

While you will be limited both by Pico-8's 2048 limit for using this method & QR code limitations depending on the type of QR code used this is still a very unique and interesting alternative to cartridges to share your Pico-8 games with a quick scan immediately playable on a friends phone.

When saving the game as a URL only the code and graphics will be stored. That means other elements (like sounds) will probably need to be handled directly in code perhaps with print control codes.

3. You need to save your p8 file first

Make sure you have saved your creation so it has a title. A standard Save XYZGame will suffice.

4. Use the new Save @URL command

From the command line type Save @URL. This will copy the URL you will be using to your clipboard which we will later use to create your QR Code.

5. Create your QR Code

There are many ways to create your QR codes including many online sites like https://www.qrcode-tiger.com/ which let you create your downloadable and printable QR codes online for free. They also include some nice features that let you add a logo and tweak colors to style things a bit.

6. Share it with the world

When you are done creating your QR code make sure to save that image for use on whatever medium you want. It could be a picture you store on your phone and someone else could scan your phone QR pic to immedietely play your game on their phone or you could print it on business cards, the back of your phone case, create cartridges with QR code labels that you can etc... As long as someone can scan the QR code you should be able to easily share your game.

The web runner provides a built in mobile touch interface when viewing on my iPhone (and I presume the same is probably true for Android phones. Here is my Hello World app running from the QR code scan.

Here is the QR code if you want to try scanning it from your phone. It may be a bit difficult to scan directly from your monitor but you should be able to get it with some patience and run it directly from your phone. If this was printed on a business card or other paper surface the scans should be quicker and more reliable.

Happy QR-Coding...

P#115591 2022-08-11 06:59

Cart #elementary_ca-0 | 2022-08-10 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

P#115577 2022-08-10 21:27

Hello !
Is there way to enable standart Android keyboard for type code ?

P#115552 2022-08-10 09:57

Cart #sky_fighters-8 | 2022-08-10 | Code ▽ | Embed ▽ | No License
5

"Sky Fighters" by Lokistriker

A top-down, fast-paced shooter where you pilot a plane and use it to dogfight against those that seek to bring you down. Easy to understand but hard to master, the balance of risk-reward for score maximization while trying to not get overwhelmed is what this game is about! Try to reach to the highest score!

Controls (in game):

  • UP - Increase Speed (letting go will slowly decrease it)
  • LEFT & RIGHT - Turning
  • X - Shoot your gun!
  • ENTER - Pause/Options

Additional Notes:

Inside the options menu there are some notable options that might ease your playtime:

  • Toggle Clouds: When using phones, this option might help performance. (Might reduce dizziness if the rotating motion is too strong)
  • Auto Fire: Makes you automatically shoot your gun, so you don't have to hold the button to shoot.
  • Target Speed: This option allows you to press once UP or DOWN to determine if you wanna go fast or slow, instead of having to hold the key. (Might reduce the degree of control of the ship, but it certainly helps when playing on phones)
  • Toggle Music: To turn on or off the music, if you wish to only hear the SFX of the game.
    I personally recommend to enable the first three options if you wanna play on mobile devises (or just auto fire and target speed, if your devise can handle the clouds)

Development Notes:

While having started as a completely different idea (of a spaceship in space traveling from station to station), scope creep slowly made its way to my development and I nearly stopped working on this project. But having had enough of dealing with unfinished projects, I decided to change the scope of the game to something that would force a limited creative space. Working on Pico-8, in this regard, made things easier, as you cant go too overboard with mechanics, so I kept it simple and this game came out of it.

Id say a big point of reference for me is "Devil Daggers", that while I may have not have experienced it (yet!), its gameplay has always been alluring, and while this project doesn't go to the same depth that Devil Daggers goes, I feel that its roots are on the same area: risk management and score maximization.

Being honest, I did feel like I rushed this game towards the end, wanting to have it publish as soon as possible, as I feared that doubting publishing it would just make it gather dust like the rest of my projects till it became nothing but an "old idea id love to revisit". Hopefully, posting this game will be the start of a sequence and not a random happening.

Credits:

Many thanks to the Lazy Devs Discord Server! Honestly, it has been so invigorating sharing and seeing so much creativity among the members. I thank them for the feedback and for their positive reinforcements. And of course, to @Krystman, for making such a community happen in the first place. Also a very dear thank you to "epicheezeness", for letting me ramble to no end and pushing me gently into moving forward.

Curious Notes:

The notes played by the shooting of the players gun is the root of the key of the song that plays, the motor hums the minor third and the enemy bullets play the 5th, and that makes the minor chord this song starts on!

P#115545 2022-08-10 05:10 ( Edited 2022-08-10 18:42)

An Adventure Game!

Cart #nupprjo-0 | 2022-08-10 | Code ▽ | Embed ▽ | No License
1

P#115542 2022-08-10 04:18
View Older Posts
Follow Lexaloffle:        
Generated 2022-08-13 21:38:23 | 0.201s | Q:97