Log In  

BBS > Superblog
Posts: All | Following    GIFs: All | Postcarts    Off-site: Accounts

Now, I am having a lot of problems with having mobs spawn.
I tried with marking tiles as "spawn" and then doing a loop that in -init() does

 function spawn_mobs()
  for x=0,127 do
   for y=0,63 do
    if is_tile(spawn,x,y) then
     spr(m.spr,x,y)
   end
  end
 end

This doesn't work
Any ideas on any other method to spawn monsters?

17 comments


I like using the pico-8 palette for general pixel art because of the designers intent on making the palette as flexible as possible with the limited colors used; however I feel this philosophy isn't taken as well for the secret palette, which I use alongside the default. The secret palette kinda feels like its just making variations on the default palette rather than filling in its deficiencies (although it does a great job usually) one color I would like to see added is a bright cyan-like color, because light grey is quite jarring against a very solid cyan. light cyan would make what I would consider a very essential highlight for blue

Id suggest replacing deep brown (128), since there are already plenty of brown/orange colors, and purple makes a good shadow to brown. I even remade the palette in the original spirit, while adding the color: 80ffc8 (R 128, G 255, B 200) This can definitely be tweaked. Thanks for considering my suggestion.

8
2 comments


Please add a flag when launching a cart from the command line to make the cart path relative to the PICO-8 carts folder rather than the current directory of the command prompt/terminal. In addition, a feature to launch within a certain PICO-8 subdirectory rather than the root folder would be nice.

0 comments


Cart #lunar_8-0 | 2020-06-10 | Code ▽ | Embed ▽ | No License
2

2
2 comments


Cart #burntherope-2 | 2020-06-12 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
78

PICO-8 games are getting so hard these days...

This is a port of a Flash game from Kian Bashiri called "You Have To Burn The Rope". It's a really hard game. You have to burn the rope there.

Here's a pretty apt description of the game, according to its original programmer:

You Have To Burn The Rope is, by formal definitions, a game since it has all the things that make up a game - besides losing condition which I regret not adding - but I wouldn't call it a game since it is hardly interactive in any meaningful way. The point was to make fun of other games that limit the player's interaction by being easy, linear, or heavily controlled and jokingly ask at which point these games also cease to be games.

[ Continue Reading.. ]

78
24 comments


Reacting to Cart Drag Events

I was thinking about the final fantasy games for the ps1 and about how I really love the concept of a game which prompts you to switch the game disk out for another one you have sitting nearby. I know pico8 can automatically load carts without user input, but I was trying to brainstorm a way which would allow you to have that tactile feel of sticking a cart in. I'd like to propose a method of achieving this and open the floor up to further discussion about the topic.

Basically this is sort of an advanced, tactile multicart that a developer can customize to their will.

I was wanting to implement this in such a way where the cart developer has full control of how it works aesthetically, so with as little intervention as possible, so I wanted to avoid a function which completely freezes the cart and waits for a drag event.

Suggested Method:

"Stat" Method
(similar to how dev mouse is only activated when it's queried, perhaps this feature should be opt-in in the same way)

  • have a set of stat values which store the filepath/bbs id(?)
  • if a drag event happened this frame, it records the filename of the drag and finds some sort of unique identifier set by the user from the cart (unknown what this would be yet)
  • probably clear these stat values on the next frame to be ready for another drag event
  • activate by poking a memory value or maybe by querying the feature for the first time with stat
    • to avoid a drag event immediately unloading the current cart and loading the new one
    • prepare the console to get the new stat()s and maybe enable a cute drag indicator when you drag stuff over the window
  • to switch carts, have a loop running around checking every frame if the values have been set, and react accordingly
    • "now loading map Baja California, please insert baja cart"
    • if stat(uid) == "mybikes_baja" then load stat(filename) etc etc, if it's wrong "please try again" or whatever
    • if btnp (cancel) then go back to main game loop and do something or other (different map maybe? cancel teleport?)
    • etc

I could think of alternate methods like calling a function which would pause the cart and wait for a drag event, but that seems intrusive and not very customizable

Problems:

One problem with this idea is currently it's very difficult to hide/find a unique identifier inside a pico8 cart. I was thinking the cartdata string would be a good one, but this is not explicitly set per cartridge inside the cart itself, and also there's no way to guess by looking at cartdata calls because carts can arbitrarily read and write any cartdata they want.

Another issue is that this feature would not work for BBS carts, so some sort of alternative would need to be in place if the user cannot or willnot drag a cart into the window. I'm not sure how to do this unintrusively. maybe if you press the pause key and the console calls the function or stat, then it adds an option to the menu to prompt for a bbs id? maybe this feature just isn't for bbs carts, just as multicart isn't really supported for bbs?

Another problem is exporting to a multicart binary would also be very difficult. but perhaps the two features would be mutually exclusive? this is more of an aesthetic choice that a developer could make for fun.

Discussion:

I'd love to hear what people think of this idea. I think it would be a lot of fun, even if it would take a while before we see it used in a cart. Does anyone else think this would be a good idea or see any other problems with it?

3 comments


Cart #toknight01-0 | 2020-06-10 | Code ▽ | Embed ▽ | No License
4

Making a new game and wondered if its the sort of game people would enjoy playing. Give some feedback and i'll see if i should continue with this game,

Thanks!

4
3 comments


Cart #picowdertoy-0 | 2020-06-10 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

little powder toy clone i made to try out pico8

click with the mouse to place sand

1
0 comments


Recently an option was added to change the width of tabs in PICO-8. I would like to have a config option to change all leading tabs to spaces (and the tab width would determine how many spaces) like many code editors do. There are trade offs between tabs and spaces and I tend to like to have absolute control over the vertical positioning of code. This is especially useful in PICO-8 so that the code ends up looking pretty when viewed including in the web code viewer. When I use tabs, if I have several clauses of an if lined up right underneath each other for example, they might not be underneath each other if a different tab width is selected from what I had used when I wrote the code. I'd like it to look the same as when I wrote it, in any editor.

I'm able to create pre-commit hooks and scripts to accomplish this for myself, but it'd be nice if it was built in as many code editors have the option.

7
4 comments


Cart #zoopico-1 | 2021-05-04 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
34

(Updated 2021-05-04 with some new animations and colours, and other small improvements and fixes.)

This is a PICO-8 remake of Zoop, a puzzle game released for a ton of different platforms in 1995.

It's fairly simple: coloured shapes push in from the edge of the screen, and if any reach the centre square, the game ends. You control the pointer thing in the middle, and you can shoot it at the shapes. If you hit a shape of the same colour, it's cleared from the grid. If you hit a shape of a different colour, you swap colours. Try to survive and get a high score.

There are 3 power-ups. A spinny wheel thing that clears a whole column:

[ Continue Reading.. ]

34
11 comments


I've just started experimenting with clipping and camera movement and it seems that when I move the camera, clipping rectangles I use on-screen don't appear to follow cleanly with the camera. I'm attaching a cart that shows what I mean. Arrow keys move the camera and Z / X reset it.

Moving the camera keeps the items I'm drawing in the correct position while failing to move the clipping rectangle.

Here is the cart:

Cart #pillspinstatic-0 | 2020-06-09 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

A rough fix: I got the camera coordinates:
cx, cy = %0x5f28, %0x5f2a

and used them to offset the clipping rectangle by those values:
clip (o.x - cx, o.y - cy, 11, 6)

I probably could just reuse the variables I moved the camera with for the fix, but I wanted a solution that wouldn't depend on those variables existing.

[ Continue Reading.. ]

2 comments


Here are a few token count discrepancies:

print(12)    -- 3 tokens
print(-12)   -- 3 tokens
print(~12)   -- 3 tokens
print(-~12)  -- 4 tokens
print(~-12)  -- 5 tokens
print(~~12)  -- 4 tokens

?12    -- 2 tokens
?-12   -- 3 tokens
?~12   -- 2 tokens
?-~12  -- 3 tokens
?~-12  -- 4 tokens
?~~12  -- 3 tokens

Also this inconsistent behaviour with spaces:

print(-12)   -- 3 tokens
print(- 12)  -- 4 tokens
print(~12)   -- 3 tokens
print(~ 12)  -- 3 tokens
6 comments


I recently wrote a post about storing random data as strings in carts and studying the built-in compression algorithm. It led, among other conclusions, to the following two observations:

  • PICO-8 is not very good at compressing random strings that use more than 64 different characters; those get actually expanded by about logâ‚‚(n)/6. For instance a random string of length 1000 that uses 128 different characters will use 1000*logâ‚‚(128)/6 = 1167 bytes in the cart.
  • The new compression format is redundant and allows for sequences that are not needed. For instance 011 01111 001 and 010 0000001111 001 both encode a back reference of length 4 at offset -16.

Most other compression schemes have some sort of fallback mechanism when they are unable to compress a block. For instance the DEFLATE format (for zip or gzip) has non-compressed blocks. In the above thread I

[ Continue Reading.. ]

5 comments


I would like to propose the following syntax extensions to PICO-8 for symmetry with the shorthand peek operators. Basically it means treating the peek operators result as an lvalue:

@x = y     -- short for poke(x,y)
%x = y     -- short for poke2(x,y)
$x = y     -- short for poke4(x,y)

@x += z       -- short for poke(x, @x + z)
%12 |= %42    -- short for poke2(12, %12 | %42)
$x >><= 4     -- short for poke4(x, $x >>< 4)
4
6 comments


Cart #connect4x-1 | 2020-06-09 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

0 comments


Posted this in the discord, but decided it was worth a repost here. If you're new to binary math, this is a decent introduction of the concepts, and how you can use them in Pico-8.

Introduction to binary numbers

Numbers in pico-8 are stored in binary as 16.16 (32 bits, half above the decimal point, half below). A good way to visualize these numbers is like this:
... 128 64 32 16 8 4 2 1 . 1/2 1/4 1/8 1/16 ...

Thus, 1001.01 is how the number 9.25 actually looks in binary. To convert whole numbers, use your fingers and count powers of two until you hit the last one less than your number, then subtract that much from the number and repeat the process (so 47 is 32+8+4+2+1 == 101111).
pico-8 lets you type numbers as binary (0b101111) or hexadecimal (0x2f), but they're all the same as 47. Use whichever conversion method makes it easiest for you.

Negative numbers are a whole other thing involving two's complement (so -1 is 0b1111111111111111 in Pico-8, because then adding 1 to it makes it zero). Probably not worth mentioning if you're just starting out, but something to keep in mind.

[ Continue Reading.. ]

38
9 comments


Cart #spirographmaker-0 | 2020-06-08 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
11


Ever wanted to make a spirograph style thing?
I guess this works. 8 settings in a fancy menu!
The options:

[0x0]
Thickness:
Controls how thick the line is, from 0-10, with 0 being a single pixel dot.
[0x0]
Scale:
Controls how large the finished spirograph is, from 1-64.
[0x0]
Trail:
Controls the number of frames back that the trail extends (not effected by speed), ranging from 0-128.
[0x0]
Spread:
Controls how many points are drawn in the line, and ranges from 1-40.
[0x0]
Wiggle:
Controls how much the image is shifted by from 0-8.
[0x0]
Speed:
Makes everything faster, but otherwise doesnt do anything, Multiplying frames per second by -32 to 32.
[0x0]
Lines:
Increases amount of lines in range 1-16.
[0x0]
Pallete:
Changes colour of the lines to any one of 13 palletes.

11
2 comments


Cart #hasobibeko-1 | 2020-06-08 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
4

first game with pico8

Done during 8-bit to inifinity challenge,
kicked out in the end because i missed the theme.

It was my third and last gamejam on itch.io!

Any idea for a friendly gamejam are welcome...

4
2 comments


Cart #witchescape3-5 | 2021-09-26 | Code ▽ | Embed ▽ | No License
46

This game is finally done--enjoy!! I have a long list of ideas, including some good ones from player feedback, which I decided to discard. The game works, and the significant bugs are relatively rare. I decided to resist my addiction to refactoring code in the interest of, you know--actually finishing a project for once!

Here's some stuff I did NOT get to:

  • fixing a game-breaking bug where you will occasionally get stuck in the air after jumping on a pig. I couldn't consistently replicate the error or find the cause.
  • not a game-breaking bug, but it doesn't really make sense for the guards to whip you through doors or while you are standing behind them. oh well--it turned out to be too difficult to refactor this code.
  • additional spells, like flying horizontally on a broom or turning yourself into something.
  • various performance and code-cleaning optimizations

Thank you to everyone who played this game while it was in development and gave me feedback and encouragement!!

--

Revision 4 (final) released 9/26/21

  • added victory screen!!

Revision 3 released 9/12/21

  • swapped order of frog and pig spells
  • adjusted jump height of frog and pig spells; it should now be impossible to skip either spell
  • revised the map to accommodate these changes
  • minor bug fixes

Revision 2 released 8/1/20

  • Added title screen
  • Lots of refactoring that mostly doesn't affect gameplay
  • Gave it an actual name!

Revision 1 released 6/19/20

  • Added music and sound

--

Edit: Because people seemed to enjoy this game, I'm moving it to "work in progress" and now plan to actually finish it! I'm also adding some references to the end of this post for where I got some of the programming ideas from. (Unfortunately I haven't kept good records of everything, but I will update as I find sources.)

--

Hi everyone!

This is my first game. I made it a couple summers ago while I was funemployed. I had plans to make it more polished, but, well... I got a (non-programming) job lol. I finally decided to upload it as-is.

A couple programming highlights (which may actually be terrible; I'm not exactly a programmer):

  • pixel-by-pixel collisions checks (starting at line 847)
  • class inheritance system (starting at line 145)
  • algorithmically generated whip graphics, which tbh are a mess but were interesting to try and figure out (starting at line 1114)
  • map initiation: maps are drawn with a single brick tile, which is then replaced with the proper side and corner sprites as appropriate (starting at line 1221)

Let me know what you think!

--

[ Continue Reading.. ]

46
36 comments


The following operators cost 2 tokens instead of the usual 1 for compound assignment operators:

\=
^=
>><=
<<>=
..=

edit: I confused >>>= and ^= in my initial post.

1
0 comments




Top    Load More Posts ->