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 | Off-site
[ :: Read More :: ]

Cart #hwd_elite_dock-1 | 2024-04-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3

Cart #hwd_elite_enc-1 | 2024-04-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3

Welcome to hwd2002's Elite for the Pico-8 home console!

This game is intended to be less-grindy and slow re-imagining of the old Elite, suited more for an evening of fun rather than a week of space-trucking.

I'd recommend a 80's style synthwave playlist to go along with it. My personal choice is Soundscape by Savii

Game Manual

I should mention this out of the gate: This isn't a faithful port of the original Elite. This is just my own idea of what makes a fun game. If you want a completely faithful port, see Jamesedge's Picolite.

About Development: Four months ago I downloaded the NES Elite. While it was very fun, I desperately wanted a higher framerate. Now here I am, with a 60fps version that I made myself! Since I ran out of space on my cartridge I am going to bite the bullet and call the project finished.

I'm 100% sure there are weird bugs I've never even thought of, so please ask where the bathroom is.

About Worlds: Trade will affect the prices of certain commodities, as well as the Tech Level of the systems traded with. Additionally, Bounty Hunting and Pirating will affect the Piracy level of a system.

About Trade Items: Every trade item now grants a good amount of profit, if you know where to buy and sell. Missiles are also doubly useful as a trade item and a way to re-arm your ship cheaply.

About Ship Stats: I tried to make each ship's characteristics match the original game's as much as possible, but it isn't perfect as the stats aren't 1-to-1. Ships now have shield, pitch, roll, and yaw values as well as their base energy, speed, and weapon stats. Most ships can't yaw anymore, so dogfights are more interesting IMO.

About Encounters: There is not one, not three, but two special encounters in the game. These are slightly different from other Elite versions as they both use mechanics unique to this game. There are also about 7 minor special encounters, such as Rock Hermits and Ace Pirates.

About NPC AI: As with all of my games, it seems I overcomplicate my NPCs. There are a significant number of variations an NPC pilot can have. The same type of ship might fight differently depending on the pilot's stats.

About Secrets: There are a few unique and bizarre things found in the game. There are no hidden quests or special things you need to do in these cases. Pico8 just doesn't have space, sorry!

About Post-Game:

The ability to buy ships was added later in development and doesn't work well with the progression I wanted. Therefore I've hidden it behind the Elite Rank.

P#147375 2024-04-26 17:18 ( Edited 2024-04-26 19:56)
[ :: Read More :: ]

A short little game about eavesdropping on conversations in the park.

Cart #soztasoja-1 | 2024-04-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

Thanks to my partner for contributing dialogue, and NerdyTeachers for the tutorial on text animations that sparked the idea.

P#147376 2024-04-26 14:23 ( Edited 2024-04-26 14:25)
[ :: Read More :: ]

Cart #livesabeach-1 | 2024-04-26 | Code ▽ | Embed ▽ | No License
1

P#147373 2024-04-26 13:26
[ :: Read More :: ]

Cart #marching_squares-0 | 2024-04-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

Basically, I’m working on a digging game and am revisiting something I have worked with in the past: marching squares. I recommend looking it up, but basically the way it works in this project is for each “tile” a table of tables is examined and depending on whether each of the tiles coordinates are on or off the algorithm figure out which sides does the line on the square intersect. Sometime marching squares also uses linear interpolation, but since my screen is stored in binary instead of floating point values I am storing intersection points in separate nested tables. The main thing is that each square is checked, and depending on stored values a specific line might be drawn through it.

This is a basic proof of concept editor, and next up I will probably start to face the horror of adding collisions to this bendy abomination. Also note that my code is probably poorly written so if you want to use it for something you may consider changing some of it to make it take up less valuable space.

Controls:
Directions move the cursor
X implements the current mode
O changes the mode
0-add points of binary
1-delete points of binary
2-edit left side intercept
3-edit top intercept

P#147358 2024-04-26 07:02 ( Edited 2024-04-26 07:07)
[ :: Read More :: ]

Cart #mapshuffle-0 | 2024-04-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3

I made this tool for myself, for reordering levels to fix difficulty curves. But I thought I'd share it in case anyone else finds it useful.

How it works:

  • Press X to select a room, and then X again to swap the two rooms
  • Press C to preview a room
  • Maps are imported/exported manually using cstore. Cry about it :(

Note: Mapshuffle cannot import/export maps in the web player. You must download the cart and use it in immediate mode.

Instructions:

  • Back up your project in case something goes wrong.
  • Download mapshuffle.p8 and place the cart in the same folder as your project.
  • Open your project, type the following line into the terminal, and hit enter:
    cstore(0x0000, 0x0000, 0x3000, "mapshuffle.p8")
  • Now open mapshuffle.p8. The map and sprites should be copied over.
  • Shuffle the map to your heart's content.
  • Once it's done, type this line into the console of mapshuffle.p8, replacing "yourcart.p8" with the name of your project.
    cstore(0x1000, 0x1000, 0x2000, "yourcart.p8")
  • Finally, open your project back up and the shuffled map should be imported.

Also, credits to Maddy Thorson and Noel Berry for making Celeste Classic, which is the default map used in MapShuffle.

P#147322 2024-04-25 19:26 ( Edited 2024-04-25 19:34)
[ :: Read More :: ]

people often ask about object orientation (OOP) and inheritance, but can get confusing or incomplete guides. I want to help everyone understand how prototypes work!

lua does support object-oriented programming (but does not require it), based on prototype inheritance — not classes.
metatables are part of this but also often misunderstood. this is a complete explainer that I wrote on discord and keep not putting here in a clean way. so I am putting it here as it is!

so what is a prototype?

goblin={
 sp=42,
}

function goblin:new(x,y)
 local obj={x=x, y=y}
 return setmetatable(obj, {__index=self})
end

function goblin:draw()
 spr(self.sp,self.x,self.y)
end

gob1=goblin:new(40,40)
gob2=goblin:new(60,70)

alright so this is like 6 different things working together.

1) table with methods: goblin is a table with property sp and methods new and draw (a method is a function attached to an object)

calling goblin:new(40,40) is the same as goblin.new(self,40,40); self is «the object we are working on»; defining function goblin:draw() is the same as function goblin.draw(self) and the same as goblin={sp=42, draw=function(self) spr(...) end, somethingelse=true}

there is a difference between the two methods in my example: when we call goblin:new, the self param inside it will be the goblin table itself (the prototype), but when we have gob1:draw() then self inside draw will refer to gob1.

2) metatables. there are special methods that lua uses to implement operators (+, /, .., etc). the method for addition for example is __add (we call these metamethods). if I want to be able to do vector1 + vector2for my custom vector tables for example, I need to define a method named __add but I can’t do it in the vector prototype table, lua will not look it there; it is required to define these metamethods in a table’s metatable. (the metatable is similar to a class in other object-oriented languages: it is the template, or the definition, or the model for many tables.) so that’s what happens in goblin:new: I define a metatable with one metamethod and set it on my goblin object.

3) prototype. these are great! if I have 50 goblins on screen and they have different health and coordinates but the same properties for sprite, width, height, etc, and the same methods for update, attack, draw, etc, I would like to define all the shared things in one place, then have custom things in each goblin table. that’s what a prototype is for! here in goblin example we have sp and draw shared, and in a specific goblin table (it starts as obj on line 6, then it’s gob1 or gob2 in my example) we have specific data like x and y.
much more info on this really useful site: https://gameprogrammingpatterns.com/prototype.html

alright so how do I say «gob1 and gob2 should delegate to goblin prototype for some properties»? I define a metatable with an __index property. it is called by lua when I do gob1.sp and sp is not found inside gob1. it can be a function (can be useful to have a dynamic property that’s computed from other properties) or another table: the prototype!
more: https://www.lua.org/pil/13.4.1.html

now this is the cool thing with prototype-based object-oriented language that you don’t have in such a nice way with class-based OO languages
what if I want 40 goblins on screen and 10 archer goblins? these should have a different sprite and different attack method.

archer=goblin:new()

archer.sp=52

function archer:attack(target)
 --use the bow
end

arcgob1=archer:new(20,50)
arcgob2=archer:new(40,70)

look at this from bottom to top:

  • arcgob1.x will be 20, y 50
  • arcgob1’s and arcgob2’s prototype is archer, because when we call archer:new, self on line 6 of my first code block points to archer
  • arcgob1.sp is 52 (the value comes from the prototype)
  • arcgob1:attack(hero) will use our archer:attack method.
  • arcgob1:draw() will use goblin:draw! archer itself is a table that has goblin for prototype
    draw is not found in arcgob1, look at its prototype archer, not found, look at its prototype goblin, found! call it with self pointing to arcgob1.

result:

the confusion is that we often see code like this to explain prototypes (or «class», but lua doesn’t have classes):

goblin={sp=42}

function goblin:new(obj)
 setmetatable(obj, self)
 self.__index=self
 return obj
end

why do we need to add goblin.__index = goblin?? it’s its own prototype? but it’s a metatable? both?!
the thing is, we don’t need that. a metatable is only strictly required to implement metamethods to define what operators do. when we want a prototype, {__index=proto} is the metatable, and proto the prototype. clarity at last!)

hope this helps! please ask follow-up questions if needed, try to implement your own cart and share it!

P#147311 2024-04-25 16:35
[ :: Read More :: ]

Cart #dashplus1-0 | 2024-04-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

P#147307 2024-04-25 15:54 ( Edited 2024-04-25 15:54)
[ :: Read More :: ]

Cart #bad_rooms_ld55-1 | 2024-04-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3

Ludum Dare 55 entry

X/C cycle spells + Arrow keys to move
1-4 players vs 0-3 CPU players (max 4)

P#147290 2024-04-25 10:53 ( Edited 2024-04-26 22:05)
[ :: Read More :: ]

Cart #rebooter_-0 | 2024-04-24 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
8

--REBOOTER--

Ordered on fiverr by J.K Emezi
Made by Charlie Boudchicha

P#147277 2024-04-24 22:14
[ :: Read More :: ]

Cart #basic_platformer_mecanics-0 | 2024-04-24 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

P#147232 2024-04-24 08:06
[ :: Read More :: ]

Cart #duwiramope-0 | 2024-04-24 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3


jus a little wip game

P#147225 2024-04-24 02:35
[ :: Read More :: ]

Cart #dashlessplus-0 | 2024-04-23 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

P#147190 2024-04-23 13:28
[ :: Read More :: ]

Cart #dualnback-0 | 2024-04-23 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3


n-back (Wikipedia, Gwern)

How to play:

1-Back: Remember whether the position or color (or both) is the same as in the previous round, press the according button/buttons if they match.

2-Back: Remember whether position or color are the same as 2 rounds ago.

N-back: Remember whether position or color are the same as n rounds ago.

Controls:

Z or <- for a position match

X or -> for a color match

P to pause (+ additional menu)

Tips:

Try playing in standard mode to understand how the game works, in endless the game ends when you make a mistake or miss a match.

You can switch colors for letters in the additional menu (P) in case you're color blind or are more comfortable recognizing them.

P#147180 2024-04-23 08:10
[ :: Read More :: ]

Cart #cascade_cascade-0 | 2024-04-23 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
6

Cascade Cascade

A game somewhere in the space between a breakout clone and a puzzle bobble clone, inspired by a half-remembered game I played on an airplane seatback.

Controls

Aim with left and right arrows, and press [x] to fire

Rules

It's an endless arcade game, your goal is to survive by keeping the blocks from reading the bottom.

Each hit reduces the block's strength by one, and when they hit zero, they're destroyed.

Powerups (white concentric circles) increase the number of balls you can accumulate to shoot for your next shot. Current stockpile is indicated by the combo meter on the right side of the screen, and is incremented by one-half for each block you hit.

Protips

I've found that the best technique is to build up the combo bar early and try to maintain it between each shots.

Updates

2024.04.22

Initial post!

P#147174 2024-04-23 05:22
[ :: Read More :: ]

Cart #donarumobraingames-0 | 2024-04-23 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
9


Welcome to Brain Games. A collection of puzzles and game to test our logic and puzzle-solving skills. Take your time and have fun in these 6 different games.

Jumps
Use peg solitaire rules to solve these puzzles. Use one chip to jump over another and remove the jumped chip from the board. The puzzles get more difficult as the levels get higher! Can you get the board down to one chip?

Dice
Can you get all the dice to the six face? These puzzles start out easy but increase in difficult as you level up. You'll need to use Rubik's Cube like logic to solve the more complex levels.

Math
Of course a straight-up math puzzle is included. Find the next number in the sequence. Some are easy some are more difficult. A calculator or a calculator like mind is recommended.

Lord
In this take on the classic Hammurabi (or Hamurabi) game, you'll take control of a land and it's people for a ten year reign if you can make it that long. Control who is fed and who starves! Can you make it out with your head intact?

Bulls
The classic logic game of Bulls & Cows. Try to guess a four-digit, non-repeating number using clues. A bull for correct numbers in the right position and a cow for correct numbers in the wrong position.

Lights
Another classic. Try to turn off all the lights. These puzzles get hard as the levels progress. Can you find the right patterns to win every time?

P#147167 2024-04-23 02:24
[ :: Read More :: ]

Mate-in-2 Volume 2. 33 more puzzles. White to move.

Cart #matein2vol2-0 | 2024-04-22 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

P#147158 2024-04-22 23:58
[ :: Read More :: ]

Cart #stellae-0 | 2024-04-22 | Code ▽ | Embed ▽ | No License

This is a Space Invaders clone that I was making some time last year. Maybe I'll continue with the project.

P#147129 2024-04-22 16:50
[ :: Read More :: ]

Cart #rfidezaro-0 | 2024-04-22 | Code ▽ | Embed ▽ | No License
1

P#147120 2024-04-22 16:23
[ :: Read More :: ]

Cart #picojoe-0 | 2024-04-22 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
5

Controls:

Movement

Shooting

Interactions

About :

Pico joe is a remake of the classic video game Communist joe created to celebrate its 5 year anniversary a bit later than I would have liked. The story is a retelling / retexturizing of the original, following the protagonist joe through the events of the first game in a new light chasing after an ever better bottle of sweet, sweet vodka, destroying planet after planet collecting bounty after bounty and building up a stack of cash bigger than the Eiffel tower just to endorse your habits, you must fight your way to the top and ensure the universes safety whilst your there, good luck and what not.

Other :

If you find any issues please leave a comment or something like that.

P#147088 2024-04-22 01:40 ( Edited 2024-04-22 01:42)
[ :: Read More :: ]

Due to how tabs are saved in the .p8 file format, they can cause overflows into the sprite sheet. Each tab is saved as 6 characters in the .p8 file. However, those are not counted as part of the character limit until the cart is run or saved. If you have a cart that has multiple tabs and is at or just below the character limit, trying to run or save the cart will cause part of the code to overflow into the sprite sheet before giving an error, either "**** save failed ****" when saving or "program exceeds char limit" when running. In testing I've also had Pico-8 completely crash when trying to run a cart whose tabs push it over the character limit, but I was unable to replicate this.

(pico-8 version 0.2.6b)

The best way to solve this in my eyes, is to have each added tab of code add 6 to the character count in the code editor. That way, in the same way it's impossible to type over the character limit, it'd also be impossible to have tabs push over the character limit and overflow into the sprite sheet.

Thank you!

P#147068 2024-04-21 16:59
View Older Posts