Log In  

BBS > Community Superblog
All | Following | GIFs | Off-site

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


Cart #gabarufiri-0 | 2023-12-17 | Code ▽ | Embed ▽ | No License
8

↓ Moves of Style : Alpha

↓ Moves of Style : Beta

↓ About Game systems

↓ Tips

  • You'll be invincible while attacking. So don't afraid to make moves!
  • If there are too much coins, the gameplay will be jaggy and enemies won't even drop any coins. So you have to collect coins ceaselessly!
  • Flip cancel / Dash cancel is available both on the ground and in the air. You can do what you want!

[ Continue Reading.. ]

8
1 comment


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

我今年16岁,这是我的第一个游戏,我看了lazydevs的教程,并完成了这个游戏。

教程:
方向键来移动,z键射击,躲避敌人子弹,摧毁所有敌人来获得胜利。
每个敌人都有不同的攻击方式,掌握规律来躲避子弹。
当分数达到3500和8000时会升级武器。

5
3 comments


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

Supershot!

Supershot, a space game! In this game, you try to survive the deadly space without falling too far away from the camera.

Controls:

  • Move Left/Right: ⬅️/➡️
  • Shoot: ❎
  • Look from back: 🅾️ (only in v3)

Notes:
This is a beta build of the game.
Please don't play this game if you have motion sickness, I don't know if this can get people motion sick but this is just a warning.

Supershot v2/v3: [hidden]

Cart #supershot-4 | 2023-12-17 | Code ▽ | Embed ▽ | No License

[ Continue Reading.. ]

0 comments


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

Use a Time Crystal to travel between the past (purple timeline) and present (green timeline). Your actions in the past affect the present, but not the other way around.

If you collect a berry in the past, it's vanished in the future.

If you collect a berry in the future, then get it in the past, the one you already got disappears from your total because it was never there for you to grab in the first place.

Length: 17 levels
Total Berries: 4
Made in 6 days for the 12 Days of Christmas Jam

Changelog


v1.2:

  • Changed 500m and 700m to make the solutions a bit more obvious and less annoying

v1.1:

  • Added indicator for traveling to present/past in the bottom right corner
  • Made berry blocks disappear if the berry inside it was already collected
20
6 comments


Cart #kirbygame-0 | 2023-12-16 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
4

CONTROLS

Move with arrows, jump with O and inhale with X.
Only one basic level with some waddle dees to test physics.
Since this is a prototype, expect tons of bugs.

ABOUT

I made this game on my phone some mounths ago but couldn't finish it due to lack of coding skills. So instead of letting it idle in my phone I decide to upload it just to not throw my work away.
This game is very unlikely to be finished but it is playable at some capacity.
This is the first time I made something playable on pico-8 so it will have a lot of bugs and jenky code.

4
1 comment


Cart #zimemedagu-0 | 2023-12-16 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3


Hi everyone, attached here is a current game I'm working on.
Its just a simple concept game with a theme of focus ie avoiding invasive thoughts while meditating. Just move left and right. But also can shoot if player getting board of avoiding the meteors

2 questions:
1- I put a timer and how to print the last time when the game stopped?
In this case, the stopwatch kept running after the game ended.

2- I'm trying to use a 16x16 main sprite player, I'm not sure the code how to display the player icon to display the 16x16pixels, it only displays the 8x8 pixels

Thank you so much in advance

3
2 comments


\/v latest release

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

left and right to cycle colors, up and down to change brush size

elements:
1 - smoke, floats upward and disipates
5 - gunpowder, a powder that explodes upon contact with fire
8 - fire, burns and emits smoke
9 - fuse, when lit, fire travels along it
10 - sand, an inert powdery substance
12 - water, a liquid
14 - acid, a liquid that erodes other substances, turning it into more of itself

i've implimented a new method of updating pixels, this has some upsides and downsides. One main thing right now is that liquids (water and acid) arent working quite how they should

feel free to make your own elements too! i've tried to make it pretty modular.

[ Continue Reading.. ]

3
0 comments


Gravico

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

In this falling block puzzle game, position your pieces wisely to make clusters of 4+ blocks of the same color. The bigger the cluster, the more points you'll get. Most importantly, if you manage to chain cluster destructions with the fall of the blocks, you'll multiply your points.

Three different modes are available (after being unlocked), each one having a different rhythm.

Controls

Arrow keys - move left/right/down
Up arrow - hard drop
(X)/(O) - swap current pair's colors

Dev notes

This is my first complete game using Pico8. My previous attempts suffered from unreasonable scopes, but this was super fun to do, and I definitely am motivated to make some more Pico8 games in the future!

[ Continue Reading.. ]

29
9 comments


Hi Pico 8 bbs!

I am following Lazy Devs' breakout tutorial, and I noticed he was using variables like so

ball_x=1
ball_y=1

In my code I had written:

ball={
  x=1,
  y=1,
}

However I noticed that he had quite a bit fewer tokens than I did. I switched over, and sure enough, saved a bunch of tokens. This is because ball_x is only one token, whereas ball["x"] is quite a few more.

So then if straight-up variables are cheaper than tokens, it leads me to the question:

When is it actually a good idea to use tables instead of just variables?

Thanks!

1
7 comments




Top    Load More Posts ->