Log In  

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

Cart #amidar-3 | 2024-01-16 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
30

My Pico-8 version of the 1981 Konami arcade game.

How to Play

Most "enemies" (the Amidar) follow a set movement pattern. The blue enemies are tracers and circuit the outside. On later levels, after a set number of circuits, they start to chase you!

Bonus life at 20,000 and 80,000 points.

Odd Numbered Levels

You are the gorilla. Collect all the "coconuts" whilst avoiding the enemies.

Filling all 4 corners will scare the enemies and you can stun them by running into them.

Even Numbered Levels

You are the paint roller. Once you've filled the first rectangle, you must pick up paint from the edges and fill adjacent rectangles. If you wander too far into a non-adjacent rectangle, the unfilled paint path is cleared.

[ Continue Reading.. ]

30
13 comments


I just noticed that some code I have included in my pico project via an #include statement, ist not counted against the token or char limit. This limits the usefulness of this feature which I wanted to use for a library of reusable code. Has this been discussed before? Are there common workarounds for this? What happens if my compiled code in the end exceeds the limit, while the editor shows my code still within the limits? I assume it will not run, right?

2 comments


Cart #ephemeral-0 | 2023-12-21 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
5

A Game-Prototype for my rougelike EPHEMERAL.
Note that the game is not finished yet.

Huge thanks to Krystman for providing such a excellent video tutorial to start off my project with.

If you want to know more about the gamedesign of EPHEMERAL I made a video going through the process.

Feedback in any shape or form is welcome!

5
3 comments


I'm very new to Pico-8 and just started experimenting with maps and different rooms. In this process I found a bug that happens any time I change my map at all. The pixels change out fine, but the collisions are always the collisions I place in the map(0, 0) coordinates, is there something I'm missing?

1 comment


Cart #waterflakes-7 | 2023-12-20 | Code ▽ | Embed ▽ | No License
12


Mysterious plankton have gathered into formation, Click and stir them to produce sound.
You can also just sit back and listen to them if you want too.
If you encounter audio problems please try running it in Splore or by console. Thanks.
Made for advent 2023.

Demake of Electroplankton: Marine-Crystals.

12
2 comments


Cart #present_wrapper-1 | 2023-12-20 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
10

Wrap up a bunch of toy mice for the kiddos in this solitaire-inspired present wrapping puzzler.

Bonus points are awarded for efficiently combining pieces to make wrapped gifts. Most deals should be solvable, but once in a while the RNG gives you a bad one. I didn't write a solver to avoid those, so good luck is needed to get a long streak going!

10
6 comments


Cart #holidaybundle23-5 | 2023-12-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
37

A smol bundle of holiday goodness. Check back daily for new games!

music by paraK00PA
menu by TheTomster

games by:
Present Wrapper - TheTomster
Watflakes - SmellyFishstiks
Sleigh Ride Saga - extar
Wrap and Find - SmellyFishstiks
The Polar Distress - bikibird
Santa's Fulfillment Center - ohhcurtains & tinyevilwizard
Who Took the Books? - ThatTomHall
E.L.F. 1978 (2023 update) - Squirrel
Elf Curling - zep

37
5 comments


Hello. This is a game that I am developing.
I would be happy if you could comment your opinions and impressions.

Cart #asleep_wip-0 | 2023-12-20 | Code ▽ | Embed ▽ | No License

Players will adventure through various dream worlds.
At this moment, one dream has been completed. (Planned improvement)

Future ideas for dreams:

  • Dream about folk tales
  • Dream of becoming a firefighter

Credits

BGM was borrowed from 般若's MIDIの里 and used with denote.

0 comments



Gameplay

Summary

Made a Deltarune fan game and also my first pico 8 game.

  • Steer using up and down to dodge cars.
  • Pick up banana for bonus points.
  • Compete with others for the highest score.
10
5 comments


looking for an animator to help with my fighting game!
UPDATE: I might have a lead, never mind.

Cart #help-0 | 2023-12-20 | Code ▽ | Embed ▽ | No License


guide: use add(ani,{{sprite number,distance from middle, pixels from ground}})
please ask questions!

1 comment


Cart #loadfont_axnjaxn-0 | 2023-12-19 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

This is a small utility cart for folks working on Toy Box Jam 2023: you can paste one of the fonts into the spritesheet and run the cart to copy a pasteable version for your carts, or use the code directly. I've set it up to take characters beginning at the space and running through 0x7F, but it can be easily modified as you see fit.

You can either paste the relevant routines and spritesheets into your own cart or run this, then paste the command (which includes the relevant P8SCII command) into your cart at a cost of two tokens.

EDIT: I've been told that the embedded version has problems displaying the font snippet I used; you may have to run this or grab the P8 to get the correct results if you're pasting in the font I used here.

1
0 comments


Cart #kerojifara-2 | 2023-12-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2


Cart #kerojifara-0 | 2023-12-19 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

Cart #kerojifara-1 | 2023-12-20 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

2
5 comments


Cart #pongchafa-0 | 2023-12-19 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

CONTROLES

Jugador 1: Flecha para la derecha y Flecha para la izquierda
Jugador 2: Flecha para arriba y Flecha para abajo

0 comments


Cart #stleste-1 | 2023-12-18 | Code ▽ | Embed ▽ | No License
8

Uh oh, looks like Santa's sick and won't be able to deliver all the presents this year! Madeline is going to have to bring the remaining presents to all 8 houses before christmas ends!

Made in 3 days for the 12 Days of CChristmas mod jam

special thanks to the celeste classic discord server as always

8
4 comments


~WORK IN PROGRESS~

FP-62's Burrito Stand

Hi I'm Wash 👋

This is my first attempt to make a game. It's based on the actual play D&D podcast The Winged Badger Tavern that I play in.
I love my characters so much that I decided I needed to make games featuring each of them.

In this game you play as fan favorite, newly sentient robot looking for a life, FP-62 as he mans the Four Guys Adventures & Vibes Magical Bean Burrito stand! Serve burritos to your customers but watch out for 'The Dead Eyes' gang trying to steal from your stock.

Watch live Monday's at 8:00pm EST

Cart #fp_62-2 | 2023-12-26 | Code ▽ | Embed ▽ | No License
5

Changes

v0.41
Adding my changes now that the holiday is over and I'm back to my full-time job.

[ Continue Reading.. ]

5
5 comments


GL2D (ALPHA)

This library is for simple 2D game making, it has sprites + sprite variables, global variables, Position and scale objects (named PSIZ) and a collision system.

Features:

  • Sprites
  • Sprite Animations
  • Sprite Variables
  • Global Variables
  • Easy Printing
  • Collision (automatic)
  • Particle

WIP Features:

  • None

Tutorial:

  1. Add GL2D.lua file to you project folder
  2. Paste the GL2D code in that previously created Lua file
  3. Add "#include GL2D.lua" to your main project script

Example Game:

Cart #supershotv4-9 | 2023-12-19 | Code ▽ | Embed ▽ | No License

Library (CODE)

-- DOCS - General

-- game.register(gameid) - nil
-- game.update() - nil
-- game.render() - nil

-- DOCS - Variables

-- variables.get(variableName) - nil
-- variables.set(variableName, value) - nil
-- variables.increment(variableName, by) - nil
-- variables.decrement(variableName, by) - nil

-- DOCS - Sprite Variables

-- sprite.getvariable(spriteName, variableName) - nil
-- sprite.setvariable(spriteName, variableName, value) - nil
-- sprite.incrementvariable(spriteName, variableName, by) - nil
-- sprite.decrementvariable(spriteName, variableName, by) - nil

-- DOCS - PSIZ(s)

-- psiz.create(x, y, width, height) - PSIZ

-- DOCS - Sprites

-- sprite.create(spriteName, picoSpriteId, PSIZ, collide) - string
-- sprite.updatepsiz(spriteName, PSIZ) - nil
-- sprite.changepsiz(spriteName, PSIZ) - nil
-- sprite.get(spriteName) - Sprite
-- sprite.render(spriteName) - nil
-- sprite.renderall() - nil
-- sprite.updateall() - nil
-- sprite.registereventhandler(spriteName, function(type, me, hitobject)) - nil

-- DOCS - Animations

-- NOTE: this only supports frames made with a sprite number

-- animation.create(animationId, arrayOfFrames) - string
-- sprite.playanimation(spriteName, animationId) - nil

-- DOCS - Printing

-- game.printw(string) - number
-- game.printc(string, x, y) - nil

-- DOCS - Collision (automatically done by game.updateallsprites())

-- game.collidecheck(object1, object2) - bool

-- DOCS - Frames

-- frame.create(spriteId, framesShown) - frame
-- frame.createwithpsiz(spsiz, framesShown) - frame

-- DOCS - Particle

-- particle.create(arrayOfFrames, PSIZ, framesPerParticleFrame) - particle
-- particle.renderall() - nil
-- particle.updateall() - nil

-- Code

game = {
    id = "unknown",
    sprites = {},
    variables = {},
}

enum = {
    eventtype = {
        collision = 0
    }
}

function game.register(id)
    game.id = id
end

function game.update()
    sprite.updateall()
    particle.updateall()
end

function game.render()
    particle.renderall()
    sprite.renderall()
end

-- variable get/set/increment/decrement

variables = {}

function variables.get(tableid)
    return variables[tableid]
end

function variables.set(tableid, value)
    variables[tableid] = value
end

function variables.increment(tableid, value)
    variables[tableid] += value
end

function variables.decrement(tableid, value)
    variables[tableid] -= value
end

-- spritevariable get/set/increment/decrement

sprite = {}

function sprite.getvariable(tableid, variableid)
    return game.sprites[tableid].variables[variableid]
end

function sprite.setvariable(tableid, variableid, value)
    game.sprites[tableid].variables[variableid] = value
end

function sprite.incrementvariable(tableid, variableid, value)
    game.sprites[tableid].variables[variableid] += value
end

function sprite.decrementvariable(tableid, variableid, value)
    game.sprites[tableid].variables[variableid] -= value
end

-- psiz

psiz = {}

function psiz.create(x,y,w,h)
    local psiz = {
        x = (x or 0),
        y = (y or 0),
        w = (w or 8),
        h = (h or 8)
    }
    return psiz
end

-- sprites

animations = {}

function sprite.create(tableid, spriteid, psiz, collide)
    local sprite = {
        id = tableid,
        sid = spriteid,
        x = psiz.x,
        y = psiz.y,
        w = psiz.w,
        h = psiz.h,
        collide = (collide or false),
        eventhandlers = {},
        variables = {},
        animsid = spriteid,
        f = {},
        cf = 1,
        upd = 0,
        tpf = 5,
        playinganim = false,
        update = function()
            local spr = game.sprites[tableid]
            if (spr ~= nil) then
                if (spr.playinganim) then
                    local tpf = spr.f[spr.cf].t
                    if (spr.upd < tpf) then
                        spr.upd += 1
                    else
                        spr.cf += 1
                        spr.upd = 0
                    end
                    if (spr.cf > #spr.f) then
                        spr.playinganim = false
                        spr.animsid = spr.sid
                    else
                        spr.animsid = spr.f[spr.cf].sid
                    end
                end
            end
            game.sprites[tableid] = spr
        end,
        destroy = function()
            game.sprites[tableid] = nil
        end
    }
    game.sprites[tableid] = sprite
    return tableid
end

function sprite.updatepsiz(tableid, psiz)
    local sprite = game.sprites[tableid]
    sprite.x = psiz.x
    sprite.y = psiz.y
    sprite.w = psiz.w
    sprite.h = psiz.h
    game.sprites[tableid] = sprite
    return tableid
end

function sprite.changepsiz(tableid, psiz)
    local sprite = game.sprites[tableid]
    sprite.x += psiz.x
    sprite.y += psiz.y
    sprite.w += psiz.w
    sprite.h += psiz.h
    game.sprites[tableid] = sprite
    return tableid
end

function sprite.get(tableid)
    return game.sprites[tableid]
end

function sprite.render(tableid)
    local sprite = game.sprites[tableid]
    if (not sprite.playinganim) then
        spr(sprite.sid,sprite.x,sprite.y)
    else
        spr(sprite.animsid,sprite.x,sprite.y)
    end
end

function sprite.renderall()
    for k,v in pairs(game.sprites) do
        if (v == nil) then goto skip2 end
        sprite.render(k)
        ::skip2::
    end
end

function sprite.updateall()
    for k,v in pairs(game.sprites) do
        if (v == nil) then goto skip end
        v.update()
        if (v.collide == true) then
            for k2,v2 in pairs(game.sprites) do
                if (k ~= k2 and v2.collide) then
                    if (game.collidecheck(v,v2)) then
                        for v3 in all(v.eventhandlers) do
                            v3(enum.eventtype.collision, v, v2)
                        end
                        goto skip
                    end
                end
            end
        end
        ::skip::
    end
end

function sprite.registereventhandler(tableid,handler)
    add(game.sprites[tableid].eventhandlers,handler)
    return tableid
end

-- animation + sprite extension

animation = {}

function animation.create(animationid, frames)
    local anim = {
        f = frames
    }
    animations[animationid] = anim
    return animationid
end

function sprite.playanimation(tableid, animationid)
    local anim = animations[animationid]
    local spr = game.sprites[tableid]
    spr.f = anim.f
    spr.cf = 1
    spr.upd = 0
    spr.playinganim = true
end

-- printing

function game.printw(s)
    if #s == 0 then 
      return 0
    end

    w = 0
    for i = 1, #s do
        if sub(s,i,i) >= "\x80" then
            w += 7
        else 
            w += 3
        end
    end

    return w + #s - 1
end

function game.printc(s, x, y)
    print(s, x - game.printw(s)/2, y)
end

-- collision

function game.collidecheck(obj1,obj2)
	local hit = false
	if max(obj1.x,obj1.x+obj1.w) >= min(obj2.x, obj2.x+obj2.w) and
				min(obj1.x,obj1.x+obj1.w) <= max(obj2.x, obj2.x+obj2.w) then
		if max(obj1.y,obj1.y+obj1.h) >= min(obj2.y, obj2.y+obj2.h) and
					min(obj1.y,obj1.y+obj1.h) <= max(obj2.y, obj2.y+obj2.h) then
			hit=true
		end
	end
	return hit
end

-- frame

frame = {}

function frame.createwithpsiz(spsiz, tpf)
    local frm = {
        psiz = spsiz,
        sid = nil,
        t = tpf
    }
    return frm
end

function frame.create(spriteid, tpf)
    local frm = {
        psiz = nil,
        sid = spriteid,
        t = tpf
    }
    return frm
end

-- particles

particles = {}

particle = {}

function particle.create(frames, psiz)
    local id = #particles+1
    local prticle = {
        x = psiz.x,
        y = psiz.y,
        f = frames,
        cf = 1,
        upd = 0,
        update = function()
            if particles[id] then
                prtcle = particles[id]
                frm = prtcle.f[prtcle.cf]
                up = prtcle.upd
                prtcle.upd += 1
                if (prtcle.upd > frm.t) then
                    prtcle.cf += 1
                    prtcle.upd = 0
                end
                if (prtcle.cf > #frames) then
                    prtcle.destroy()
                else
                    particles[id] = prtcle
                end
            end
        end,
        render = function()
            if particles[id] then
                prtcle = particles[id] 
                frm = prtcle.f[prtcle.cf]
                if (frm ~= nil and frm.sid ~= nil) then
                    spr(frm.sid,prtcle.x,prtcle.y)
                elseif (frm ~= nil) then
                    sspr(frm.psiz.x,frm.psiz.y,frm.psiz.w,frm.psiz.h,prtcle.x,prtcle.y)
                end
            end
        end,
        destroy = function()
            deli(particles,id)
        end
    }
    particles[id] = prticle
    return id
end

function particle.renderall()
    for k,v in pairs(particles) do
        v.render()
    end
end

function particle.updateall()
    for k,v in pairs(particles) do
        v.update()
    end
end

0 comments


Cart #stat-0 | 2023-12-18 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Simple cart that lets you view all of stat()'s outputs!

0 comments


I wonder what is the scope of a variable if I define it outside of a function as "local" in Pico. So is it local to some kind of root scope within Pico? Is it local to the tab? Seems to me that it"s still possible to use this "local" variable everywhere then, right, since ever other scope is a child to this root scope?

local x=5 -- what means local here?
y=6 -- global scope
3 comments


Cart #srom-0 | 2023-12-18 | Code ▽ | Embed ▽ | No License
1

Spongy: Rise Of The Moths Demo

1
0 comments


Cart #kanagrid-0 | 2023-12-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1


KANAGRID is a simple tool to memorize the two syllabaries of the Japanese language (hiragana and katakana).

Press ENTER to show the menu to change the current level (1-11), switch to hiragana or to katakana mode, or show the controls. Press the 🅾(Y/Z)-key if you already know the currently highlighted character, or ❎(X) if you don't know the character and would like to see how to pronounce the kana. If you use a controller, these two keys should be mapped to controller buttons 1 and 2, depending on the controller used.

The levels 1-10 correspond to the ten columns in which the kana are usually presented (A-KA-SA-TA-NA-HA-MA-YA-RA-WA). Level 11 lets you train all the 46 basic hiragana or katakana. The current level is automatically increased after validating several time that a kana is already known. Since not all katakana dakuten and combination characters are available in PICO-8, KANAGRID is limited to the basic characters only.

[ Continue Reading.. ]

1
0 comments




Top    Load More Posts ->