Online Python Editor for Pokitto!

It is good to have different game types. Not everybody like action games.

1 Like

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. :tired_face:

But who cares, I’ve fun doing my game, I’ll release later :grinning::crossed_fingers:t3:

2 Likes

I must admit, making my game with the onine tool was quite fun!

5 Likes

Guess who should have finish his entry, and instead translated scummpy to Italian language?

sc

My daughter likes it, and I feel like a better father for making her play her first point & click of her life :grin:

scummpy-it.bin (178.6 KB)

scummpy-it.zip (79.1 KB)

8 Likes

1q48_v0_2
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)

7 Likes

Not sure if it works on an actual Pokitto, but please add “The Villainy of Cat Food Inc.”. :smiley:

4 Likes

Now it’s more complete :grin:

2 Likes

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

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
6 Likes

Oh my gosh epic!!

2 Likes

Jetpack

I hope you enjoy it.

Jetpack

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)

8 Likes

com-crop

2 Likes

Alert @FManga snd @bl_ackrain , the JetPack game gets stuck in the intro on hardware

Debugging…

Same here…

@FManga does it run on your hardware?

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