One of the games I used to play the most was populous.
While some of my friends could play it with beautiful graphics on their amiga or atari ST :
I was playing on a slow TO-16 PC compatible with CGA graphics and a monochrome green screen. You can't even find an online picture of a setting that bad for this game, the closest I could find online was color CGA that is actually almost as bad looking as the green version.
Despite the visuals, I was hooked and somehow managed to finish the game (level 400 something), using every possible trick available. (save scumming so the "random" swamps would always spawn under the enemy's knights feet, abusing the bad AI when possible (enemy flood that insta-kill every single enemy unit was the most memorable), using a bug that allowed to raise the terrain to level 1 on levels where it was disabled...).
Despite all that, after level 400, the building speed of the computer was just insane : he would add a block every frame (around 4 times per second on my crappy PC), making enemy progressing absolutely overwhelming.
Hello everyone, I'm thinking about de-making Xblast, a linux clone of bomberman that allows up to 6 players at the same time.
Here's a early WIP screenshot :
What I'm worried about now is the 6 players local game play.
On paper, Pico-8 has native support of up to 8 controllers.
I wrote a simple cart that just highlights in red the active buttons of the 8 controllers.
Could anyone confirm that this actually works for up to six controllers before I go further into the dev ?
I'm a bit worried as I've never encountered a pico8 game that plays with more than two controllers at the same time so far.
If you get it it to highlight buttons of players 3 to 7, could you please tell me how you set it up ?
One of the simple examples in the LUA documentation for metamethods is to implement set logic on tables.
s1+s2 returns a new set that is the union of the two by defining __add, s1*s2 returns the intersection thanks to __mul, so far so good.
There is also the very useful __index and __newindex to handle reads and writes to unassigned indexes of the table, but the very important assignation metamethod at table level seem to silently not exist, as if it were of no use.
when I do
set1=set2
followed by
set2=set2+{new_elem}
I most certainly didn't mean for set1 to be changed.
There's of course plenty ow ways to force the behavior I wanted :
set1=set2+{}
would work.
We could define a set_copy function
set1=set_copy(s2)
But there seem to be no way to override the assignation behavior, like we would redefine the = operator of a class in C++ for example.
Could someone please shed some light on the subject ? What is the reason behind this omission ?
First, a big thank you for fixing the code viewing functionality of BBS pico-8 carts.
Now for the ping related problems :
when a user has a space or a minus sign in his user name, the ping is either lost, or worse sent to another user :
For example, user Peter Mosevich won't get pinged because of the space, but unrelated user Peter will.
Support for something like @Peter Mosevich with documentation in the Formatting Help would be welcome.
Title says it all.
I'm making a horizontal scrolling game with a map 32 screen wide and 1 screen tall, and with the player using extra colors different from the enemy colors. (enemies can't be over or under the player).
For this, I'm using screen rotation, but now I can't use print to display text any more as it appears rotated.
Has anyone already implemented a 90° rotated print function ?
A bug fix version of mamono pico by @65c02
https://www.lexaloffle.com/bbs/?pid=128341
Fixed :
- crashing at end of levels
- impossible to win levels
- not dying when killed by a monster that would have made you level up
Remaining known bugs :
- you can mark a monster even after killing it, and this can disable showing the red number of the monster
- some rare crashes from menu after game over, unknown cause.
Done :
- damage is now the same as the original game
Todo :
- blank pause menu
- Remaining ennemy count in status bar
- timer
- high scores
- Max difficulty
- custom levels
- wraparoud
- mage (fireball chording)
Just a sandbox to get a better understanding of what happens when you change the map width (0x5f57) and the map address (0x5F56)
Upper memory 0x8000-0xFFFF is fully initialized to 53 (blue square sprite)
Arrow keys to move the camera
X / O to change the map width
pause menu to change what X/O changes between map width and map address.
I've spent two hours fixing a nasty bug. The image above is essentially the bug I was trying to fix, except all the steps were spread in three functions, and took a good minute of playing on average before everything aligned just right (or just wrong depending on how you look at it) for it to seemingly randomly occur.
Can you figure out why t[2] is not 8 in the end ?
Hint : Lua arrays and # operator are cursed.
Ideally, I'd like the game to crash at t[i]=8 if possible. Anyone knows if you can add some sanity checks to all array accesses ?
A lot of old games save space by using the same data for multiple purposes. I’ve seen code used as graphics, code inside graphics, graphics containing map data, and was daydreaming what parts of pico8 could be interesting to use as double purpose.
The game thumbnail seems very promising : 128x128 32 Colors is 10Kb worth which is pretty big for pico8.
There ´s nohing in the api related to it, just a keyboard shortcut to save the current screen to it. It’s hidden when using the built in editor, but you can see it when viewing a .p8 file.
I’m a newbie in lua, and don’t know if it’s a valid lua section, or maybe a type of multi line named comment designed for documentation for example.
Or maybe it’s just part of the .p8 format and never passed to the interpreter ?
If there’s a way in code to interact with it, I’d love to know.
Or maybe the source code is somehow in the scope of the program and can be opened and parsed ?
At the moment, we have 6 native functions to peek and poke the memory :
v=peek(addr, [n] ) you also have v=@addr that is equivalent to peek(addr,1) and peek(addr)
v=peek2(addr, [n] ) and v=%addr
v=peek4(addr, [n] ) and v=$addr
poke ( addr, [value,] [...] )
poke2( addr, [value,] [...] )
poke4( addr, [value,] [...] )
What could be a good extension of this ? The problem is not really the coding part, but rather coming up with conventions that fit well withing the pico8 universe...
poke3 seems like a simple addition, but what three bytes should be copied from the value ?
Pico8 is a little endian universe XXXX read from value ..... ignored [ pico8 numeric value ] [fraction ] [integer ] Byte0 Byte1 Byte2 Byte3 poke ..... ..... XXXXX ..... poke2 ..... ..... XXXXX XXXXX poke3 ????? XXXXX XXXXX ????? poke4 XXXXX XXXXX XXXXX XXXXX |
Since our standard pico8 numbers are 16.16 bits, we can't go further, poke5 wouldn't make sense.