It is good to have different game types. Not everybody like action games.
really tempted to not deploy. My gameplay seems good, but graphics sucks. I’ve started with free assets and then redesign the whole tiles… now the game looks more raw.
But who cares, I’ve fun doing my game, I’ll release later
I must admit, making my game with the onine tool was quite fun!
Guess who should have finish his entry, and instead translated scummpy to Italian language?
My daughter likes it, and I feel like a better father for making her play her first point & click of her life
scummpy-it.bin (178.6 KB)
scummpy-it.zip (79.1 KB)
Updated just for the propellers of the enemy planes.
1q48 ver.0.2
Binary:
1q48_v0_2.bin (161.8 KB)
Source:
1q48_v0_2.zip (9.9 KB)
Not sure if it works on an actual Pokitto, but please add “The Villainy of Cat Food Inc.”.
Now it’s more complete
Boblo is a strange creature, it’s made of air and water but it’s not affected by gravity.
It bubbles trough the space and can’t stop until it crash against a wall.
Help Boblo to collect as much coins as you can in this little puzzle game.
It’s a dangerous world filled with secret passages and switches.
There’s always more then a way to reach the exit.
Enjoy!
boblo.bin (174.3 KB)
boblo.zip (84.4 KB)
More Boblo levels can easily added in “levelData.py”:
Here an example and syntax for each tile. I’d like to add more level in future.
lvl00 = (\
'.x.x.',\
'x..zx',\
'...x.',\
'x..ax',\
'.x.x.',\
)
Here a list of possibles tiles:
x = blue box
w = wall, state ON (solid)
W = wall, state OFF (invisible, not solid)
+ = blades state ON (they hurts!)
= = blades state OFF (not solid)
! = vertical moving blades
B = toogle button, state ON (activate/deactivate tiles)
b = toogle button, state OFF
K = Key, open final locked gate
o = coin
| = red box, vertical moving
- = red box, horizontal moving
< = left pushing tile
> = right pushing tile
^ = up pushing tile
v = down pushing tile
z = final tile state OPEN
Z = final tile state CLOSED (solid)
a = start tile
Oh my gosh epic!!
Jetpack
I hope you enjoy it.
NOTE
A bug in screen.blit of levels class fixed by @FManga
@jonne has replaced source files and bin below
jetpack_v1_1.bin (165.6 KB)
jetpack_v1(1).zip (57.4 KB)
Originals, will glitch on hardware:
jetpack_v1.zip (57.3 KB)
Jetpack_v1.bin (165.6 KB)
Debugging…
Same here…
Nope, it freezes after the intro.
i may have found it
Nope, that was not it
Seems to be something in Level.draw. Probably a blit bug?
CONFIRMED
removing all screen.blits from Level class makes game run
class Level:
def __init__(self):
self.w=0
self.h=0
self.map=0
self.emeralds=0
self.lvl_nmbr=0
self.load(levels[self.lvl_nmbr])
self.newlvl=True
self.t_new=30
def next(self):
self.lvl_nmbr +=1
if self.lvl_nmbr >= len(levels):
global win
global gameover
global t_gameover
win=True
gameover=True
t_gameover=300
return
self.load(levels[self.lvl_nmbr])
def load(self,lvl):
self.w=lvl[0]*spritesize
self.h=lvl[1]*spritesize
self.data=lvl[2]
self.reload()
def reload(self):
self.newlvl=True
self.t_new=30
self.map=bytearray(self.data)
global bots
global balls
global springs
global missiles
global spikes
bots=[]
balls=[]
springs=[]
spikes=[]
missiles=[]
self.emeralds=0
wid=(self.w//spritesize)//2
for j in range(0,self.h//spritesize):
for i in range(0,(self.w//spritesize)//2):
c1=self.map[j*wid+i]>>4
c2=self.map[j*wid+i]&0xf
global p1
if c1 == 2:
p1.x=i*2*spritesize
p1.y=j*spritesize
if c2 == 2:
p1.x=i*2*spritesize
p1.y=j*spritesize
if c1 == 5:
self.emeralds+=1
if c2 == 5:
self.emeralds+=1
#trackbot
if c1 == 0xa:
bots.append(Trackbot(i*2*spritesize,j*spritesize))
if c2 == 0xa:
bots.append(Trackbot((1+i*2)*spritesize,j*spritesize))
#steelball
if c1 == 3:
balls.append(Steelball(i*2*spritesize,j*spritesize))
if c2 == 3:
balls.append(Steelball((1+i*2)*spritesize,j*spritesize))
#springs
if c1 == 0xe:
springs.append(Spring(i*2*spritesize,j*spritesize))
if c2 == 0xe:
springs.append(Spring((1+i*2)*spritesize,j*spritesize))
#missils
if c1 == 0x6:
missiles.append(Missile(i*2*spritesize,j*spritesize))
if c2 == 0x6:
missiles.append(Missile((1+i*2)*spritesize,j*spritesize))
#spikes
if c1 == 0xf:
spikes.append(Spike(i*2*spritesize,j*spritesize))
if c2 == 0xf:
spikes.append(Spike((1+i*2)*spritesize,j*spritesize))
i+=1
def tile_at(self,x,y):
if x <0 or y < 0 or x > self.w or y > self.h:
return 7
tile_x=x//spritesize
tile_y=y//spritesize
d=self.map[tile_y*(self.w//spritesize)//2+tile_x//2]
if tile_x % 2 : return d&0xf
else: return d>>4
def set_tile(self,x,y,value):
tile_x=x//spritesize
tile_y=y//spritesize
d=self.map[tile_y*(self.w//spritesize)//2+tile_x//2]
if tile_x % 2 ==0 :
self.map[tile_y*(self.w//spritesize)//2+tile_x//2]=((d&0x0f) | (value<<4))
else:
self.map[tile_y*(self.w//spritesize)//2+tile_x//2]=((d&0xf0) | value)
def solid_at(self,x,y):
t=self.tile_at(x,y)
for s in solids:
if t== s:
return True
return False
def ladder_at(self,x,y):
t=self.tile_at(x,y)
if t== 1:
return True
else:
return False
def collisionAtPosition(self,tile,xc, yc, wc, hc):
if self.tile_at(xc, yc + hc-1) == tile:
return True
if self.tile_at(xc + wc-1, yc + hc-1) == tile:
return True
if self.tile_at(xc + wc-1, yc) == tile:
return True
if self.tile_at(xc, yc) == tile:
return True
def solidCollisionAtPosition(self,xc, yc, wc, hc):
if self.solid_at(xc, yc + hc-1):
return True
if self.solid_at(xc + wc-1, yc + hc-1):
return True
if self.solid_at(xc + wc-1, yc):
return True
if self.solid_at(xc, yc):
return True
def draw(self):
xmin=camerax//spritesize
xmax=(scrwidth//spritesize+camerax//spritesize)+2
ymin=cameray//spritesize
ymax=(scrheight//spritesize+cameray//spritesize)+2
wid=(self.w//2)//spritesize
doordraw=False
for j in range(ymin,ymax):
for i in range((xmin-1)//2,(xmax+1)//2):
if i<0 or j < 0 or i >= wid or j >= self.h//spritesize:
continue
c1=self.map[j*wid+i]>>4
c2=self.map[j*wid+i]&0xf
if not c1==0:
#screen.blit(tiles[c1], i*2*spritesize-camerax,j*spritesize -cameray)
c1 = c1
if not c2==0:
#screen.blit(tiles[c2], i*2*spritesize-camerax+spritesize,j*spritesize -cameray)
c1 = c1
if c1==0xb:
if not self.solid_at(i*2*spritesize,(j-1)*spritesize):
#screen.blit(sprites.spikesDown8, i*2*spritesize-camerax,j*spritesize -cameray)
c1 = c1
else:
#screen.blit(sprites.spikesUp8, i*2*spritesize-camerax,j*spritesize -cameray)
c1 = c1
if c2==0xb:
if not self.solid_at(i*2*spritesize+spritesize,(j-1)*spritesize):
#screen.blit(sprites.spikesDown8, i*2*spritesize-camerax+spritesize,j*spritesize -cameray)
c1 = c1
else:
#screen.blit(sprites.spikesUp8, i*2*spritesize-camerax+spritesize,j*spritesize -cameray)
c1 = c1
if c1==0xc and not doordraw:
doordraw=True
if self.emeralds== p1.emeralds:
#screen.blit(sprites.doorOpened, i*2*spritesize-camerax,j*spritesize -cameray)
c1 = c1
else:
#screen.blit(sprites.doorClosed, i*2*spritesize-camerax,j*spritesize -cameray)
c1 = c1
if c2==0xc and not doordraw:
doordraw=True
if self.emeralds== p1.emeralds:
#screen.blit(sprites.doorOpened, i*2*spritesize-camerax+spritesize,j*spritesize -cameray)
c1 = c1
else:
#screen.blit(sprites.doorClosed, i*2*spritesize-camerax+spritesize,j*spritesize -cameray)
c1 = c1
i=i+1
EDIT: camerax , cameray used but I see no declaration as global
NOPE, no effect