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

Cart [#futari_nezumi-0#] | Code | 2019-08-19 | No License | Embed
1

Futari Nezumi

This is our entry for Low Rez Jam 2019, a puzzle game featuring mice and geese!
Featuring Puzzle and Travel from Gruber's Pico-8 Tunes Volume 1. Also available on Itch.io.

Pixels, Design and SFX by Nette

Story

Once, there was a peaceful town of mice. Every year, the geese migrate through and cause a whole mess of things, but then they leave. This time, Mouse Central Intelligence learned that the geese plan to migrate in for KEEPS. So it's up to special agents Minx and Fufu to infiltrate the geese's industrial complex, capture the executive migration orders, and swap them out for the dummy ones that will send them to Antarctica instead.

The Characters

Minx is brown and is a toughie. She can lift anything her size, and can knock out a goose in one punch! X to pick up a box she's next to, or to knock out a goose from behind!

Fufu is grey and is nimble, can roll and crawl through small spaces. Use X to roll into the vents or behind a turning goose!

Controls

  • Left and Right to Move
  • Up to press switches and enter unlocked doors.
  • X Switch between the two mice.
  • Z (Fufu): Roll. Roll into a vent to change floors.
  • Z (Minx): Strike. Strike a box to lift it (press again to put it down). Strike a Goose to daze it for a moment to get past.
P#66786 2019-08-19 19:21

Cart [#fireworks-0#] | Code | 2019-08-19 | License: CC4-BY-NC-SA | Embed

My very first attempt to make something for PICO-8.

P#66785 2019-08-19 17:32

PIco3e is a 3D collision engine written in PICO-8! As far with the alpha release, what it does is...

Okay! That doesn't look very cool. But it works with arbitrary rotated bodies and solve the forces correctly. It took me about 3 weeks of learning & coding, probably someone else / if I do it again could do it better. I'll improve the cart in the next a few days and provide a demo cart.

Implemented features from reference project qu3e:

  • 3D Oriented Bounding Box (OBB) collision detection and resolution
  • Discrete collision detection
  • Collision test via the Separating Axis Theorem
  • Collision manifold generation via face-to-face method and the sutherland clipping

Token usage: 2873 (with current scene). Thus space is sufficient for some game logic. Unfortunately cpu usage is a bit high, with collision between each 2 bodies takes 5% cpu in 30 fps and doubled in 60 fps. Therefore it's assumed optimal number of bodies is <= 4.

v1.0.0 Known issues:

  1. edge to face collision's force center is biased
  2. body doesn't rotate if supporting force is aligned to mass center
  3. cannot handle multiple body collisions / compound forces

And especially thanks so much to @freds72 without his help I couldn't make this happen.

Cart [#hayonuzoyu-0#] | Code | 2019-08-19 | License: CC4-BY-NC-SA | Embed
2

P#66779 2019-08-19 13:41 ( Edited 2019-08-19 13:53)

An announcement of my upcoming videotutorial series called "PICO-8. Podstawy"!!!

I would like to announce my second videotutorial series called "PICO-8. Podstawy" (PICO-8. The Basics) which will be released on November 2, as the first chapter. In fact, it's in Polish language, but I'll try to make subtitles for movies if I find any requests. Like my previous course, this will also be shared between series and each series will be have 20 chapters. We'll see how long it will go, but if audience level will be high, then I'll start creating quite new videos as a continuation!!!

Trailer movie:

Links

My main website
Post about upcoming videotutorial series!
"PICO-8. Podstawy" on Facebook

If you like this idea, subscribe on YouTube to be notified about the upcoming videos and like page on Facebook!

P#66776 2019-08-19 12:08 ( Edited 2019-08-19 12:19)


Cart [#atomicpunchman-0#] | Code | 2019-08-19 | No License | Embed
2

Punch your way through 32 levels of intense airborne action.
Clear all the enemies on the screen without touching the floor.

Controls:

  • arrow keys/d-pad: move your character and select the direction to punch.
  • x: punch
  • z: jump

Tips:

  • successfully landing a hit allows you to jump again in the air.
  • punching up in the air works effectively as a double jump.

This tiny 64x64 game was made for the LOWREZJAM 2019.

P#66773 2019-08-19 03:53 ( Edited 2019-08-19 03:58)

Cart [#togasufiki-2#] | Code | 2019-08-19 | License: CC4-BY-NC-SA | Embed

Don't hit a light wall!

This is the first game I've made 100% on my own.

Controls:
Player 1: Arrow keys and z
Player 2: sedf and TAB

Pressing z/TAB will send the bike flying forward allowing the player to pass through a light wall.
After you dash, your bike needs to recharge. Your dash meter can be found at the top of the screen.

P#66769 2019-08-19 00:00 ( Edited 2019-08-19 02:20)

Cart [#witchlovesbullets-1#] | Code | 2019-08-18 | License: CC4-BY-NC-SA | Embed
4

Witch Loves Bullets is a side-scrolling shoot'em up, containing 4 levels and boss battles.
It features varied enemies, a couple of powerups and parallax scrolling.

I'm close to reaching the token limit but the code could probably be better optimized.

Press C to shoot, and X to use your secondary weapon.

The music was composed by Dustin van Wyk (@WykDustin) and transformed by me into Pico-8 chiptune.

Please report any bugs if you find them ! :)

Hope you enjoy !

P#66760 2019-08-18 16:13

Cart [#wobbilicious-0#] | Code | 2019-08-18 | License: CC4-BY-NC-SA | Embed
3

Practice the dying art of jelly-craft and help run the best (and only) jelly cafe in town!

Use the arrow keys to move and the x key to interact with machines. Mix the correct jelly to order, and use the right boxing glove to serve.

Made for the 2019 #lowrezjam .

I'm quite pleased with this, it's my first proper pico-8 game, so any feedback would be fantastic.

P#66759 2019-08-18 15:42

Cart [#wijagabufi-0#] | Code | 2019-08-18 | No License | Embed

I was reading earlier about the Fisher-Yates Shuffle method and - well, I'm a little confused. What is the purpose of its complexity ?

I mean if you just want to shuffle a deck of cards, for instance, you can do so in code as simple as this:

-- simple card shuffler
-- written by dw817

-- initialize variables
deck={}
rank="a23456789tjqk"
suit="schd"

-- build sorted deck
for i=0,3 do
  for j=0,12 do
    deck[j+i*13]=sub(rank,j+1,j+1)..sub(suit,i+1,i+1)
  end
end

::again::

-- display current deck
cls()
for i=0,3 do
  for j=0,12 do
    print(deck[j+i*13],j*10,i*8,13)
  end
end
print("press a key to shuffle",0,64,7)

repeat
  flip()
until btnp(🅾️)

-- shuffle that deck
for i=0,51 do
  r=flr(rnd()*52)
  deck[i],deck[r]=deck[r],deck[i]
end

goto again

In the Fisher-Yates method you are expected to use a technique that involves saving every single element that was chosen so it will not be chosen again.

What if any are the advantages of using a shuffle such as this based on a simple single-array index-swap as seen above ?

Failing that, what is YOUR method for shuffling items in an array that satisfy you they are properly scrambled ?

P#66748 2019-08-18 00:21 ( Edited 2019-08-18 00:23)

Cart [#newschoolreunion-0#] | Code | 2019-08-17 | License: CC4-BY-NC-SA | Embed
10

A demoscene demo by Rift and Hooy-Program presented at Evoke 2019, paying tribute to early 2000s newschool demos

P#66745 2019-08-17 21:54 ( Edited 2019-08-17 21:56)

A bit of generative art study of "that S thing".

Based on the JS version made by @potch: https://twitter.com/potch/status/1162601613057413121

Cart [#that_s_thing-0#] | Code | 2019-08-17 | License: CC4-BY-NC-SA | Embed
2

P#66742 2019-08-17 20:41 ( Edited 2019-08-17 20:42)

Cart [#gumifukopu-1#] | Code | 2019-08-18 | License: CC4-BY-NC-SA | Embed
1

my new game, still in progress. Inspired by the Trailer Park Boys Canadian series. Help Bubbles to save Sunnyvale Park from UFOs, Tanks, Chopper and avoid been busted by Mr Lahey!

P#66736 2019-08-17 18:51 ( Edited 2019-08-18 04:03)

I was curious to know if it was possible to recode the key to pause a cart during runtime. That is, directly in the source-code itself.

If you go to make a program that asks your name and reads the real keyboard via poke 24365,1, if you hit letter "P" it will pause with an interrupt menu. Is there some way, in code, poke or otherwise, to reconfigure the pause key to something like "ESC" or backwards apostrophe "`" ?

How can this be done ?

P#66733 2019-08-17 17:25

Cart [#brick_smash1-0#] | Code | 2019-08-17 | License: CC4-BY-NC-SA | Embed

P#66732 2019-08-17 14:09

Cart [#elementary_cellular_automata-0#] | Code | 2019-08-17 | License: CC4-BY-NC-SA | Embed

Just an cellular automata i made in under a hour.
It's the first program i published here i hope you like it :D
You can specify the colors, size and rules but you need to open it in pico-8.
No. you don't need to press buttons.

P#66728 2019-08-17 11:09

Hey!

I made a little game using PICO-8's "mode 3" for the LOWREZJAM 2019 and Climate Change Jam!

Cart [#dollarone_global_warming-1#] | Code | 2019-08-17 | License: CC4-BY-NC-SA | Embed
1

If you only read one thing, this is it: Press enter for the menu where you can disable the help text!

Oh no! The rising waters has made a mess of Don's beach-house. Help him rebuild it - just chop down a tree and extract some rocks and find a nice place by the sea.

Use arrows to move, Z (or C or N) to toggle harvest mode (then arrow to harvest) and X (or V or M) to build the house.

Note that you can chop down and extract as many resources as you want.

Just in case the waters rise again, it might be worth keeping some spare resources...

You can skip dialogues with the buttons, or disable help in the menu (press enter). You can also restart the level or choose a new level from the menu.

Good luck!

P#66727 2019-08-17 08:05

Cart [#sugarnspice-0#] | Code | 2019-08-17 | License: CC4-BY-NC-SA | Embed
1

You control two cats, Sugar (blue) and Spice (pink).
Help them get their respective color donuts.

Sugar - left and right arrow keys
Spice - S and F

This was my submission for the 2019 lowrez gamejam.
I followed the "Fruit Drop" tutorial from NerdyTeachers to make this tiny co-op game.

My very first finished game, was loads of fun to make. Can't wait to make more
different types of games as I gain more experience!

Feel free to use this game as you please.

P#66723 2019-08-17 03:51 ( Edited 2019-08-17 03:56)

Cart [#spookyseptemberjamannouncement-0#] | Code | 2019-08-17 | License: CC4-BY-NC-SA | Embed
5

Spooky September Jam!

It's time for the annual Halloween jam! This time a bit early -- the idea is that if we make spooky (or spoopy) games from now until September... we'll get to actually play them in October! :D

If you remember URL the 3 Color Jam from a couple years ago, this is going to be a 'sequel' to that -- the limitation this time is 4 colors -- whoooooo!!

Some more details are in the announcement cart (..along with something else, because I can never resist)

  • what: 4-color halloween spooky themed jam
    Use any time you want/have from now thru the end of September
    to make a spooky (or silly) 4-color game
  • when: now until October
  • where: pico8 forums! (if you want it linked in the gallery cart;
    otherwise you can use itch or whatever
    if you tweet @enargy and include '#ssjam' i'll link it on the jam page

..yes there's an easter egg in the announcement cart..
...but only for the impatient..

P#66722 2019-08-17 02:50

Cart [#anteform-0#] | Code | 2019-08-17 | No License | Embed

.

Steve Johanson has disappeared and his girlfriend Sally Franklin has hired your detective agency to locate him. Even before you get on the scene there are signs that maybe this isn't just a simple missing persons case. Can you crack it? Explore Anteform Valley and its settlements, talk to its residents, search desks and files, and build up your skills as you collect clues to figure out what really happened to Steve and maybe even prevent it from happening again.

This is a weird detective story RPG in the style of the old-school 8-bit Ultima games as they were found on the C128. I hope you enjoy it.

It exhausts many of the resources available to a PICO-8 app, and required minimization before it could be converted into a cartridge (in fact this version fits with just one byte to spare). The full source of Anteform is available on GitHub for anyone interested in how it works. I have also provided a manual for it in a couple of formats, so you may want to grab and peruse the Anteform manual as a PDF or the Anteform manual as an ePub as well as the cartridge itself. Downloadable binaries are also available on the Itch.io Anteform page.

If you have any comments, questions, or even just random thoughts related to it, I'll be happy to listen. As this is a mystery story though please be mindful of ruining the fun for others and avoid posting spoilers. I have played all the way through and do not know of any bugs in this version (1.0) but I could have easily missed some.

This game was built using the Minima Engine, and if you like it you may like Minima (play online or download) as well. Both use the same interface and share some of the same graphics but have completely different stories, settings, and characters. They're also different genres played at a different scale. Minima is a traditional RPG set on a full world with castles and towns; this game is set in Anteform Valley with villages and individual buildings. This game places more emphasis on finding clues either by talking with people or searching through things. There's no magic in it, but it is in the weird mystery genre and so things aren't quite what they appear in the beginning, either...

P#66721 2019-08-17 02:16 ( Edited 2019-08-17 16:55)

After some time of figuring everything out (including what I want to do in the future regarding the path of my life), I finally finished another snippet. This lets you efficiently create particles, as seen in this gif here:

DOCUMENTATION:

IMPORTING

Assuming you've placed the downloaded file into a folder called src, import with

#include src/ptc_x.lua

The compressed version doesn't have an extension, so just use src/ptc_x_c without .lua


CREATE A GROUP

You can create a particle group like so.

g_smp=_pgrp(64,64)

now, g_smp will become a particle group and will be positioned at 64/64 (center of screen with unmodded camera).

GROUP TABLE VALUES

  • x/y
    • X and Y location of the group
  • _ary
    • table that contains the particles
  • _tk
    • Tick value. Increases by 1 per .tick() call.
  • max
    • Allows you to limit how many particles the group can create/have.
  • linkcam

    • Links a camera to the particle group.

    CAMERA LINK

To link a camera, you'll need to use the collowing code in _init(). This code will set the groups camera to your own camera. This is needed because the particles will delete themselves when off camera.

g_smp.linkcam=cam

This assumes your cam has x and y values.
cam={x=0,y=0}

Alternatively, if you have a different setup, you can set the specifics for x/y...

g_smp.linkcam.x=cam_x
g_smp.linkcam.y=cam_y

PARTICLE TYPES

Particle Types need to be functions that return an object. This is needed because of the possibility of randomization.

    --create lava eruption
fx1=function()
    return  {
        --location
        x=rnd(8),
        y=-rnd(4),

        --initial velocity
        --and gaining velocity
        xv={
            rnd(4)-rnd(4),
            rnd(0.01)-rnd(0.01)
        },
        yv={
            -3+rnd(1),
            0.1
        },

        --colors (shifts through
        --array per tick)
        c={8,2,4,1},

        --collision flag, nil for
        --no map collision.
        cflg=1,

        --life length
        l=200-rnd(30),

        --weight (for collision)
            --[x and y]
            --effects bounce rate
        w={1.4,3-rnd(1)},

        -----optional parts here----
        --setting size and size-gain
        --will make it a puff particle.

        s=0.5+rnd(2),
        sg=-rnd(0.1),
    }
end

Values:

  • x/y
    • X and Y location of spawn (arranged by x/y of particle group)
  • xv/yv
    • Xvelocity and Yvelocity of spawn. The first value is the initial velocity, and the second value is how much that value increases per frame. Setting the second value to 0.1 for the yv for example will cause the particles to continously increase their yvelocity. In the gif, notice how they start launching up then fall as if gravity is affecting them.
  • c

    • Color array. Every tick of the particles lifespan will increment through the color array. Use only 1 value for a solid color, or make up your own patterns.
  • cflg

    • Collision Flag. This means that the particles will have physics if they come in contact with a sprite that has the set ID. Set to nil to skip collision checking, or just don't add this property to save yourself some tokens.
  • l

    • Life. This is how many frames the particles will stay alive for.
  • w
    • Weight. This is a Table and contains 2 values. One for calculating the division(slowdown) of the xvelocity and another for calculating the slowdown of the yvelocity. You only need this if you're using collision. This is also ignorable if you want to save tokens.
  • s
    • Optional, sets the size of the particle. If its less than or equal to 1, it'll use pset instead of circfill. Otherwise, it becomes a "puff particle", which is a type of particle that flips patterns (between 0b1010010110100101.1 and 0b0101101001011010.1) to create a simi-transparent circle creating the illusion of a blending effect. This is ignorable
  • sg

    • Optional, sets the size-gain. The size of the particle will increase by this value per frame.

    Emitting particles

To create particles, you'll need to use the emit function. For example:

g_smp.emit(fx1, 90)

The first value is the particle group we've created earlier. The second value is how many particles it'll create per frame (or per call).


DISPLAYING A GROUP

To actually get your particles to draw on screen, use the .tick command in _draw().

g_smp.tick()

That should be about it. If I missed anything, I'll add it later.


NON-DOWNLOAD VERSION

--[[DEPENDANCIES
    cdec.lua
     •Col.Detection

--]]
    --[[cdec.lua]]
function cdec(mx, my, xl, yl, flg)
    local _=function(x,y,f)
        return fget(mget(x/8,y/8),f)
    end

    if _(mx+xl, my+yl, flg) or _(mx, my, flg) then
        return true
    end

    return false
end
--[[end of cdec.lua]]

--[[main]]
    --particle patterns for puff particles
ptc_pats={0b1010010110100101.1, 0b0101101001011010.1}
--create a new particle grou[
function _pgrp(x,y)
    local a={
        x=x,
        y=y,
        --particle array
        _ary={},
        --tick, can be used for custom code
        _tk=0,
        --max particle limit
        max=500,
        linkcam={x=0,y=0}
    }

    a.emit=function(dt, rpt)
        for i=1,rpt do
            if #a._ary<a.max then

                local _a=dt()
                _a.lc=0
                _a.w=_a.w or {1,1}

                add(a._ary, _a)
            else
                return
            end
        end
    end

    a.tick=function()
        a._tk+=1
        for i=1, #a._ary do
            local s=a._ary[i]
            if not s then goto e end
            local _={
                s.x+a.x,
                s.y+a.y
            }

            ::r::
            s.lc+=1
            if s.lc>=s.l or stat(1)>0.9 then
                del(a._ary, a._ary[i])
                if stat(1)>0.9 then break end
            end

            s.x+=s.xv[1]+s.xv[2]
            s.y+=s.yv[1]+s.yv[2]
            s.xv[1]+=s.xv[2]
            s.yv[1]+=s.yv[2]

            if not s.cflg then goto d end
            if cdec(_[1], _[2], s.xv[1], s.yv[1], s.cflg) then
                if not cdec(_[1]+s.xv[1], _[2]-s.yv[1], s.xv[1], 0, s.cflg) then
                    s.y-=(s.yv[1]*2)
                    s.yv[1]=-s.yv[1]
                    s.yv[1]/=s.w[2]
                    s.xv[1]/=s.w[1]
                else
                    s.x-=(s.xv[1]*2)
                    s.xv[1]=-s.xv[1]
                    s.xv[1]/=s.w[1]
                end
            end

            ::d::
            local color=s.c[1+s.lc%#s.c]

            if _[1]-a.linkcam.x>128 or _[1]-a.linkcam.x<0 or _[2]-a.linkcam.y>128 or _[2]-a.linkcam.y<0 then s.lc=s.l goto e end
            if not s.s then
                fillp()
                goto px
            else
                s.s+=s.sg
                if s.s<=1 then fillp() goto px end
                fillp(ptc_pats[1+(a._tk%#ptc_pats)])
                goto cl
            end

            --set pixel
            ::px::
            pset(_[1], _[2], color)
            goto e
            --set circle
            ::cl::
            circfill(_[1], _[2], s.s, color)
            goto e
            ::e::
        end
        fillp()
    end

    return a
end
P#66719 2019-08-17 01:29 ( Edited 2019-08-17 01:59)
View Older Posts
About | Contact | Updates | Terms of Use
Follow Lexaloffle:        
Generated 2019-08-19 21:39 | 0.220s | 4194k | Q:216