Log In  
Follow
Tw1zTeD616
Cosmic Crash
by Tw1zTeD616

Cart #cosmic_crash-5 | 2025-05-22 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
10

What if Arkanoid and Geometry Wars had a baby?

Changelog:

Ver 1.3.1

  • Hurry Up now properly resets when a life is lost instead of just losing a ball
  • Lost ball particles updated
  • Multiball chances refined

Ver 1.3

  • Hurry Up resets when the player loses a life
  • Multiball can no longer split a ball offscreen

Ver 1.2

  • Ball escaping the top corners of the screen has been fixed (Hopefully)
  • Ball no longer gets stuck in the screen edge when being rammed by the paddle
  • Press X to skip the (admittedly long) dev logo and go to the title screen
  • Increased chances of dropping the Multiball powerup
  • Minor level adjustments on "Metalcore" and "Spider"

[ Continue Reading.. ]

10
8 comments



Content Warning Pixelated gore, mild language, some religious imagery, & a flickering sprite that could pose problems for people with photosensitive seizures.

Changelog

  • New weapon - Chaingun
  • New enemies - Nightmare Imp, Hell Knight, Arachnotron
  • Minor sprite changes
  • Minor UI updates
  • New SFX added
  • Fixed a bug that would incorrectly place decorative lights
  • Fixed a bug that didn't change the player's visor color when moving to a new level

Hopefully this is the final version, but if any new bugs crop up, or the game has balancing issues, please let me know.

Thank you very much @Krystman for your Lazy Devs Academy rougelike tutorial. I had an absolute blast following along and learning from your videos. I hope you like what I've done with your engine. lol

Thank you also to Gruber @gruber_music on socials. The background music is track #9 Evil from Pico-8 Tunes Vol.1 (Update: track #6 Eyes in the Dark from Pico Tunes Vol 2). I am a terrible musician, and even worse with the Pico-8 editor. Boomguy's adventures would be awfully silent without Gruber's generosity.

[ Continue Reading.. ]

23
2 comments



Cart #picopanda-7 | 2025-07-01 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
5

Ver 0.9.4

  • Fixed a major bug causing enemies to not populate correctly
  • Adjusted opening cutscene

Ver 0.9.2

  • Background music
  • More sound effects
  • Opening cutscene

Ver 0.9

  • Changed cart label and Title Screen
  • Adjusted colors for text boxes and player HUD
  • Adjusted Whirlwind enemy movement

Ver 0.8

  • Fixed bug that moved the player over the HUD if they were one tile below it and rolled with an empty hunger bar
  • Audio and visual cue for traveling through tunnels
  • Sound effects for player damage and poison added
  • Sound effect for walking added
  • Sound effect for whirlwind travel added
  • Fixed softlock when interacting with a whirlwind and tunnel

[ Continue Reading.. ]

5
13 comments



I'm working on my 2nd official project, watching tutorials and self-teaching (not the best idea, I know.) I'm trying to do a very simple adventure style game for my wife to play, and I'd like any enemies that I place on the map to only move when the player is onscreen with them. I'm obviously not thinking this through thoroughly. Any help would be appreciated. I apologize for the code snippets I included, I'm still learning the formatting for the message board

Cart #jirjawra-0 | 2024-09-15 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

function draw_map()

--map screen x,y in tiles
--follows player
mapx=flr(p.x_tile/16)16
mapy=flr(p.y_tile/16)
16

--camera and hud x,y
cx=mapx8
cy=mapy
8

--bound camera within game area
if (cx<=0) cx=0
if (cy<=0) cy=0
if (cx>=1024) cx=1024
if (cy>=512) cy=512
map()
camera(cx,cy)

draw_hud()
end

function move_enemies()

for e in all(enemies) do
--priorty one
--restrict offscreen enemy
--movement...debug needed
if mapx!=flr(e.x_tile/16)16 or mapy!=flr(e.y_tile/16)16 then
return
else
--x,y for movement
e.e_newx=e.x_tile
e.e_newy=e.y_tile

interact(e.e_newx,e.e_newy)

if e.etype=="beetle" then
--random move variable
local r=flr(rnd(4)+1)
--checks for bamboo and
--"eats" it
if check_tile(bamboo,e.x_tile-1,e.y_tile) then
move_left(e)
swap_tile(e.e_newx,e.e_newy)
elseif check_tile(bamboo,e.x_tile+1,e.y_tile) then
move_right(e)
swap_tile(e.e_newx,e.e_newy)
elseif check_tile(bamboo,e.x_tile,e.y_tile-1) then
move_up(e)
swap_tile(e.e_newx,e.e_newy)
elseif check_tile(bamboo,e.x_tile,e.y_tile+1) then
move_down(e)
swap_tile(e.e_newx,e.e_newy)
else
--if no bamboo then moves in
--a random direction
if r==1 then
move_left(e)
elseif r==2 then
move_right(e)
elseif r==3 then
move_up(e)
elseif r==4 then
move_down(e)
end
end
end

--bind enemies on map and set
--offset for wall collision
if can_move(e.e_newx,e.e_newy) then
e.x_tile=mid(mapx,e.e_newx,mapx+15)
e.y_tile=mid(mapy,e.e_newy,mapy+15)
else
e.off_x=e.off_x/4
e.off_y=e.off_y/4
sfx(0)
end
end
end
end

1
4 comments



I found Pico-8 a few months ago (I've been living under a rock), and I've been having a blast learning it's particular brand of Lua. After nights and weekends of watching @Krystman's Beginner Shmup Tutorial, this is the result. The code is clunky and not optimized at all, but I feel it's a "minimum viable product". Let me know what you think. Any advice is greatly appreciated.

Just added a few small updates

Changelog:

  • Fixed the bug preventing the boss from moving

  • Extended time between enemy waves
  • Added indicator for the Wave number as it starts
  • Player hitbox has been halved - 4x4 pixels instead of 8x8
  • Slight adjustment to Drone enemy movement
  • Added dev logo before the title screen
  • Caused a bug that prevented the boss from moving onscreen (oops)

Defender of Coryx VII

The Va'nals Empire is sweeping through the galaxy, conquering system after system with their fleet of vat-grown bio-mechanical spacecraft. The peaceful people of Coryx VII have never known conflict or war, and are woefully unprepared to face the Va'nals' threat. In a last ditch effort, the greatest minds of Coryx VII gathered together and created the prototype starship X2-SLP "Slipstream", to be piloted by a brave volunteer. Drawing its power from the dreaded bio-mech ships themselves, the Slipstream may be the people of Coryx VII's only hope. Take the controls of the Slipstream, and defend your people!

[ Continue Reading.. ]

9
4 comments



I've been following the basic shmup tutorial from @Krystman and Lazy Devs (with some adjustments) to try and learn some more of the basics in Pico 8 and Lua and game development in general after pretty much failing miserably at my first game attempt (still working on it tho.) Before finalizing enemy behavior and the spawning (my difficulty is still wildly inconsistent), I wanted to work on the boss explosion, but I've run into a bug I can't seem to figure out. I can't get the timer to delete the boss after the cool explosions to actually count down. I've set the boss HP low and the wave to the final one for testing if anyone can help me out understanding what I've done wrong here. I'd also appreciate any advice anyone has regarding creating a proper scaling difficulty.

Cart #coryxvii-1 | 2024-08-24 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

[ Continue Reading.. ]

2 comments



Cart #tadizihoma-0 | 2024-07-27 | Code ▽ | Embed ▽ | No License

I'm having trouble with my player movement after my map updates. My map seems psuedo-randomize after the 1st screen like I want (I can tinker and fix this later). The trouble I'm having is that my player won't continue moving upwards after the map redraws and resets your position. Essentially every screen seems to treat the lower half as if it's the first screen ie running the collision detection on sprites that don't seem to be there. I'm stumped. Any help would be much appreciated.

3 comments



Like the title says, I have rudimentary collision detection on the top and sides of my sprite but not on the bottom.
I'm very new to game dev, but I have some experience in python. I can't see if I have a typo, or I've made a mistake in following the tutorial I watched.

--player--
function create_player()
player={
state="normal",
sprite=1,
health=4,
x=64,
y=82,
h=8,
w=8,
gravity=0.30,
friction=0.15,
inertia=0,
thrust=0.80
}
end

function collide(o)

local x1=o.x/8
local y1=o.y/8
local x2=(o.x+7)/8
local y2=(o.y+7)/8

local a=fget(mget(x1,y1),0)
local b=fget(mget(x1,y2),0)
local c=fget(mget(x2,y2),0)
local d=fget(mget(x2,y1),0)

if a or b or c or d then
return true
else
return false
end
end

function move_player(o)
o.y+=o.gravity --applies player gravity

local lx=o.x --last x pos
local ly=o.y --last y pos

if (btn(❎)) o.y-=o.thrust --player move
if (btn(⬅️)) o.x-=0.5
if (btn(➡️)) o.x+=0.5

--if the player collides, moves back

if collide(o) then
o.x=lx
o.y=ly
end
end

function ani_player(o)
if btn(⬅️) then --player animation
o.sprite=2
elseif btn(➡️) then
o.sprite=3
else
o.sprite=1
end
end

function draw_sprite(o)
spr(o.sprite,o.x,o.y)
end

2 comments



Sorry if this is a completely dumb question. I'm new to Pico 8 and game dev in general. I'm stuck in my first project attempting to randomize map layouts. My game is a simple vertical scrolling game where the player moves from side to side to avoid obstacles. I'd like to begin on one screen, and then end on a final screen with the ones in between being a random selection from the 12 or so other screens I've drawn. I know the easiest way to do this is probably with nested tables, but I'm having trouble understanding how I could accomplish this. Any help would be awesome.

2 comments