346
What's New / Re: ScriptBasic Games
« on: April 14, 2013, 09:42:56 PM »
Peter posted a PAC-MAN like game for OxygenBasic which I then converted to ScriptBasic using DLLC.

PB.sb
Note: This zip contains the latest DLLC, SW, Oxygen (DLLs) and sbsw.inc.
Quote from: Peter
Read this!
The game itself is a small Puzzle Game with 11 maps. You only have to gather all the pills and stars.
You may not touch a Fire head.
You can restart a Map by pressing the Space Bar. If you have brought home a Map, then press "n" for the next Map.
With this game, you could test your strategy skills.

PB.sb
Code: [Select]
' PAC-BOY by PETER WIRBELAUER
INCLUDE "sbsw.inc"
' Game Routines
SUB BoyBumm
LOCAL vExp
IF yExp > 0 THEN
SW_Sprite s9, xExp, yExp, zExp
IF play = 0 THEN
SW_PlayWav w4
play = 1
END IF
vExp += .2
IF vExp >= 1 THEN
vExp = 0
zExp += 1
IF zExp = 16 THEN
yExp = 0
iExp = 1
END IF
END IF
END IF
END SUB
SUB InitEny
P = 0
FOR y = 0 TO 29
FOR x = 0 TO 39
z = y * 40 + x
IF map3[z] = 62 THEN
xEny[p] = x * 64
yEny[p] = y * 64
rEny[p] =- 1
p += 1
ELSE IF map3[z] = 63 THEN
xEny[p] = x * 64
yEny[p] = y * 64
rEny[p] =- 1
p += 1
ELSE IF map3[z] = 64 THEN
xEny[p] = x * 64
yEny[p] = y * 64
rEny[p] = -1
p += 1
ELSE IF map3[z] = 65 THEN
xEny[p] = x * 64
yEny[p] = y * 64
rEny[p] = -1
p += 1
END IF
IF p = 4 THEN EXIT SUB
NEXT
NEXT
END SUB
SUB ScanEnemy
IF eras > 0 THEN EXIT SUB
FOR x = 0 TO 3
z = (yEny[x] * 40 + xEny[x]) / 64
IF map3[z] = 62 AND map3[z+1] = 111 THEN
map3[z] = 32
map3[z + 1] = 62
rEny[x] = 1
ELSE IF map3[z] = 63 AND map3[z - 1] = 111 THEN
map3[z] = 32
map3[z - 1] = 63
rEny[x]=2
ELSE IF map3[z] = 64 AND map3[z - 40] = 111 THEN
map3[z] = 32
map3[z - 40] = 64
rEny[x] = 3
ELSE IF map3[z] = 65 AND map3[z + 40] = 111 THEN
map3[z] = 32
map3[z + 40] = 65
rEny[x]=4
ELSE IF (map3[z] = 62 AND map3[z + 40] = 111) OR (map3[z] = 63 AND map3[z + 40] = 111) THEN
map3[z] = 32
map3[z + 40] = 65
rEny[x] = 4
ELSE IF (map3[z] = 62 AND map3[z - 40] = 111) OR (map3[z] = 63 AND map3[z - 40] = 111) THEN
map3[z] = 32
map3[z - 40] = 64
rEny[x] = 3
ELSE IF (map3[z] = 64 AND map3[z - 1] = 111) OR (map3[z] = 65 AND map3[z - 1] = 111) THEN
map3[z] = 32
map3[z - 1] = 63
rEny[x] = 2
ELSE IF (map3[z] = 64 AND map3[z + 1] = 111) OR (map3[z] = 65 AND map3[z + 1] = 111) THEN
map3[z] = 32
map3[z + 1] = 62
rEny[x] = 1
ELSE IF map3[z] = 62 THEN
IF map1[z]=105 AND map3[z + 1] = 32 AND map3[z + 40] = 32 THEN
rx = SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 1
map3[z] = 32
map3[z + 1] = 62
ELSE IF rx = 2 THEN
rEny[x] = 4
map3[z] = 32
map3[z + 40] = 65
END IF
ELSE IF map1[z] = 105 AND map3[z + 1] = 32 AND map3[z - 40] = 32 THEN
rx = SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 1
map3[z] = 32
map3[z + 1] = 62
ELSE IF rx = 2 THEN
rEny[x] = 3
map3[z] = 32
map3[z - 40] = 64
END IF
ELSE IF map1[z] = 105 AND map3[z + 40] = 32 AND map3[z - 40] = 32 THEN
rx = SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 4
map3[z] = 32
map3[z + 40] = 64
ELSE IF rx = 2 THEN
rEny[x] = 3
map3[z] = 32
map3[z - 40] = 64
END IF
ELSE IF map3[z + 40] = 32 AND map3[z + 1] > 32 THEN
map3[z] = 32
map3[z + 40] = 65
rEny[x] = 4
ELSE IF map3[z - 40] = 32 AND map3[z + 1] > 32 THEN
map3[z] = 32
map3[z - 40] = 64
rEny[x] = 3
ELSE IF map3[z + 1] > 32 AND map3[z + 40] > 32 AND map3[z - 40] > 32 AND map3[z - 1] = 32 THEN
map3[z] = 32
map3[z - 1] = 63
rEny[x] = 2
ELSE IF map3[z + 1] > 32 AND map3[z + 40] > 32 AND map3[z - 40] > 32 THEN
rEny[x] = -1
ELSE IF map3[z] = 62 AND map3[z + 1] = 32 THEN
map3[z] = 32
map3[z + 1] = 62
rEny[x] = 1
END IF
ELSE IF map3[z] = 63 THEN
IF map1[z] = 105 AND map3[z - 1] = 32 AND map3[z - 40] = 32 THEN
rx = SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 2
map3[z] = 32
map3[z - 1] = 63
ELSE IF rx = 2 THEN
rEny[x] = 3
map3[z] = 32
map3[z - 40] = 64
END IF
ELSE IF map1[z] = 105 AND map3[z + 40] = 32 AND map3[z - 40] = 32 THEN
rx = SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 4
map3[z] = 32
map3[z + 40] = 64
ELSE IF rx = 2 THEN
rEny[x] = 3
map3[z] = 32
map3[z - 40] = 64
END IF
ELSE IF map1[z] = 105 AND map3[z - 1] = 32 AND map3[z + 40] = 32 THEN
rx = SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 2
map3[z] = 32
map3[z - 1] = 63
ELSE IF rx = 2 THEN
rEny[x] = 4
map3[z] = 32
map3[z + 40] = 65
END IF
ELSE IF map3[z + 40] = 32 AND map3[z - 1] > 32 THEN
map3[z] = 32
map3[z + 40] = 65
rEny[x] = 4
ELSE IF map3[z - 40] = 32 AND map3[z - 1] > 32 THEN
map3[z] = 32
map3[z - 40] = 64
rEny[x] = 3
ELSE IF map3[z - 1] > 32 AND map3[z + 40] > 32 AND map3[z - 40] > 32 AND map3[z + 1] = 32 THEN
map3[z] = 32
map3[z + 1] = 62
rEny[x] = 1
ELSE IF map3[z - 1] > 32 AND map3[z + 40] > 32 AND map3[z - 40] > 32 THEN
rEny[x] = -1
ELSE IF map3[z] = 63 AND map3[z - 1] = 32 THEN
map3[z] = 32
map3[z - 1] = 63
rEny[x] = 2
END IF
ELSE IF map3[z] = 64 THEN
IF map1[z] = 105 AND map3[z - 40] = 32 AND map3[z + 1] = 32 THEN
rx = SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 3
map3[z] = 32
map3[z - 40] = 64
ELSE IF rx = 2 THEN
rEny[x] = 1
map3[z] = 32
map3[z + 1] = 62
END IF
ELSE IF map1[z] = 105 AND map3[z - 40] = 32 AND map3[z - 1] = 32 THEN
rx = SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 3
map3[z] = 32
map3[z - 40] = 64
ELSE IF rx = 2 THEN
rEny[x] = 2
map3[z] = 32
map3[z - 1] = 63
END IF
ELSE IF map1[z] = 105 AND map3[z - 1] = 32 AND map3[z + 1] = 32 THEN
rx = SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 1
map3[z] = 32
map3[z + 1] = 62
ELSE IF rx = 2 THEN
rEny[x] = 2
map3[z] = 32
map3[z - 1] = 63
END IF
ELSE IF map3[z - 40] > 32 AND map3[z - 1] = 32 THEN
map3[z] = 32
map3[z - 1] = 63
rEny[x] = 2
ELSE IF map3[z - 40] > 32 AND map3[z + 1] = 32 THEN
map3[z] = 32
map3[z + 1] = 62
rEny[x] = 1
ELSE IF map3[z - 40] > 32 AND map3[z + 1] > 32 AND map3[z - 1] > 32 AND map3[z + 40] = 32 THEN
map3[z] = 32
map3[z + 40] = 65
rEny[x] = 4
ELSE IF map3[z - 40] > 32 AND map3[z + 1] > 32 AND map3[z - 1] > 32 THEN
rEny[x] = -1
ELSE IF map3[z] = 64 AND map3[z - 40] = 32 THEN
map3[z] = 32
map3[z - 40] = 64
rEny[x] = 3
ELSE
rEny[x] = -1
END IF
ELSE IF map3[z] = 65 THEN
IF map1[z] = 105 AND map3[z + 40] = 32 AND map3[z + 1] = 32 THEN
rx= SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 4
map3[z] = 32
map3[z + 40] = 65
ELSE IF rx = 2 THEN
rEny[x] = 1
map3[z] = 32
map3[z + 1] = 62
END IF
ELSE IF map1[z] = 105 AND map3[z + 40] = 32 AND map3[z - 1] = 32 THEN
rx = SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 4
map3[z] = 32
map3[z + 40] = 65
ELSE IF rx = 2 THEN
rEny[x] = 2
map3[z] = 32
map3[z - 1] = 63
END IF
ELSE IF map1[z] = 105 AND map3[z + 1] = 32 AND map3[z - 1] = 32 THEN
rx = SW_Rnd(1, 2)
IF rx = 1 THEN
rEny[x] = 1
map3[z] = 32
map3[z + 1] = 62
ELSE IF rx = 2 THEN
rEny[x] = 2
map3[z]=32
map3[z-1]=63
END IF
ELSE IF map3[z + 40] > 32 AND map3[z - 1] = 32 THEN
map3[z] = 32
map3[z - 1] = 63
rEny[x] = 2
ELSE IF map3[z + 40] > 32 AND map3[z + 1] = 32 THEN
map3[z] = 32
map3[z + 1] = 62
rEny[x] = 1
ELSE IF map3[z + 40] > 32 AND map3[z + 1] > 32 AND map3[z - 1] > 32 AND map3[z -40] = 32 THEN
map3[z] = 32
map3[z - 40] = 64
rEny[x] = 3
ELSE IF map3[z + 40] > 32 AND map3[z + 1] > 32 AND map3[z - 1] > 32 THEN
rEny[x] = -1
ELSE IF map3[z + 40] = 32 THEN
map3[z] = 32
map3[z + 40] = 65
rEny[x] = 4
END IF
END IF
NEXT
END SUB
SUB SetEny(e)
vEny[e] += .2
IF vEny[e] >= 1 THEN
vEny[e] = 0
zEny[e] += 1
IF zEny[e] = 16 THEN zEny[e] = 0
END IF
END SUB
SUB ShowEnemy
FOR z = 0 TO 3
IF rEny[z] = -1 THEN
SW_Sprite(sc, xEny[z], yEny[z], zEny[z])
SetEny(z)
ELSE IF rEny[z] = 1 THEN
xEny[z] += 1
SW_Sprite(sc, xEny[z], yEny[z], zEny[z])
SetEny(z)
ELSE IF rEny[z] = 2 THEN
xEny[z] -= 1
SW_Sprite(sc, xEny[z], yEny[z], zEny[z])
SetEny(z)
ELSE IF rEny[z] = 3 THEN
yEny[z] -= 1
SW_Sprite(sc, xEny[z], yEny[z], zEny[z])
SetEny(z)
ELSE IF rEny[z] = 4 THEN
yEny[z] += 1
SW_Sprite(sc, xEny[z], yEny[z], zEny[z])
SetEny(z)
END IF
NEXT
eras += 1
IF eras = 64 THEN eras = 0
END SUB
SUB ShowMaps
LOCAL vAtom
FOR y = 0 TO 29
FOR x = 0 TO 39
z = y * 40 + x
IF map1[z] = 34 THEN SW_Sprite(s1, x * 64, y * 64, 1)
IF map1[z] = 107 THEN SW_Sprite(s1, x * 64, y * 64, 2)
IF map1[z] = 105 THEN SW_Sprite(s1, x * 64, y * 64, 2)
IF map2[z] = 91 THEN SW_Sprite(s2, x * 64, y * 64, zAtom)
IF map2[z] = 121 THEN SW_Sprite(s7, x * 64, y * 64, 0)
IF map2[z] = 81 THEN SW_Sprite(sa, x * 64, y * 64, zAtom)
NEXT
NEXT
vAtom += .2
IF vAtom >= 1 THEN
vAtom = 0
zAtom += 1
IF zAtom = 16 THEN zAtom = 0
END IF
END SUB
SUB InitBoy
FOR y = 0 TO 29
FOR x = 0 TO 39
z = y * 40 + x
IF map3[z] = 111 THEN
xBoy = x * 64
yBoy = y * 64
END IF
IF map2[z] = 91 OR map2[z] = 81 THEN
pills += 1
END IF
IF map2[z] = 121 THEN
xExit = x * 64
yExit = y * 64
END IF
NEXT
NEXT
END SUB
SUB CheckBoy
IF ras > 0 OR rBoy >= 5 THEN EXIT SUB
z = (yBoy * 40 + xBoy) / 64
IF map3[z] >= 62 AND map3[z] <= 65 THEN
rBoy = 6
xExp = xBoy
yExp = yBoy
ELSE IF map2[z] = 121 AND aExit = 1 THEN
xShrink = xBoy
yShrink = yBoy
map3[z] = 32
rBoy = 5
ELSE IF map2[z] = 91 THEN
xPill = xBoy
yPill = yBoy
Pills -= 1
map2[z] = 32
map3[z] = 32
rBoy = 0
SW_PlayWav w2
ELSE IF map2[z] = 81 THEN
xStar = xBoy
yStar = yBoy
Pills -= 1
map2[z] = 32
map3[z] = 32
rBoy = 0
SW_PlayWav w5
ELSE IF SW_Key(39) < 0 AND map3[z + 1] = 32 THEN
map3[z] = 32
map3[z + 1] = 111
rBoy = 1
ELSE IF SW_Key(37) < 0 AND map3[z - 1] = 32 THEN
map3[z] = 32
map3[z - 1] = 111
rBoy = 2
ELSE IF SW_Key(38) < 0 AND map3[z - 40] = 32 THEN
map3[z] = 32
map3[z - 40] = 111
rBoy = 3
ELSE IF SW_Key(40) < 0 AND map3[z + 40] = 32 THEN
map3[z] = 32
map3[z + 40] = 111
rBoy = 4
ELSE
rBoy = 0
END IF
END SUB
SUB DrawBoy
LOCAL vBoy
IF rBoy = 0 THEN
SW_Sprite s3, xBoy, yBoy, 0
ELSE IF rBoy = 1 THEN
xBoy += 1
SW_Sprite s5,xBoy,yBoy,zBoy
vBoy += .2
IF vBoy >= 1 THEN
vBoy = 0
zBoy += 1
IF zBoy = 16 THEN zBoy = 0
END IF
ras += 1
IF ras = 64 THEN ras = 0
ELSE IF rBoy = 2 THEN
xBoy -= 1
SW_Sprite s6, xBoy, yBoy, zBoy
vBoy += .2
IF vBoy >= 1 THEN
vBoy = 0
zBoy += 1
IF zBoy = 16 THEN zBoy = 0
END IF
ras += 1
IF ras = 64 THEN ras = 0
ELSE IF rBoy = 3 THEN
yBoy -= 1
SW_Sprite s4, xBoy, yBoy, zBoy
vBoy += .2
IF vBoy >= 1 THEN
vBoy = 0
zBoy += 1
IF zBoy = 16 THEN zBoy = 0
END IF
ras += 1
IF ras = 64 THEN ras = 0
ELSE IF rBoy = 4 THEN
yBoy +=1
SW_Sprite s3, xBoy, yBoy, zBoy
vBoy += .2
IF vBoy >= 1 THEN
vBoy = 0
zBoy += 1
IF zBoy = 16 THEN zBoy = 0
END IF
ras += 1
IF ras = 64 THEN ras = 0
END IF
END SUB
SUB PillsAni
LOCAL vPill
IF ypill > 0 THEN
SW_Sprite s8, xpill, yPill, zPill
vPill += .2
IF vPill >= 1 THEN
vPill = 0
zPill += 1
IF zPill = 8 THEN
zPill = 0
yPill = 0
END IF
END IF
END IF
END SUB
SUB NoPills
IF Pills = 0 THEN
IF pills = 0 AND aExit = 0 THEN SW_PlayWav(w1)
aExit = 1
END IF
END SUB
SUB ExitActiv
LOCAL vExit
IF aExit = 1 THEN
SW_Sprite s7, xExit, yExit, zExit
vExit += .2
IF vExit >= 1 THEN
vExit = 0
zExit += 1
IF zExit = 16 THEN zExit=0
END IF
END IF
END SUB
SUB BoyShrink
LOCAL vShrink
IF yShrink > 0 THEN
SW_Sprite s9, xShrink, yShrink, zShrink
vShrink +=.2
IF vShrink >= 1 THEN
vShrink = 0
zShrink += 1
IF zShrink = 16 THEN
yShrink = 0
SW_PlayWav w4
END IF
END IF
END IF
END SUB
SUB StarShrink
LOCAL vStar
IF yStar > 0 THEN
SW_Sprite sb, xStar, yStar, zStar
vStar += .4
IF vStar >= 1 THEN
vStar=0
zStar += 1
IF zStar = 16 THEN
zStar = 0
yStar = 0
vStar = 0
END IF
END IF
END IF
END SUB
SUB InitDat
FOR x = 0 TO 4
xEny[x] = 0
yEny[x] = 0
rEny[x] = 0
zEny[x] = 0
vEny[x] = 0
NEXT
xBoy = 0
yBoy = 0
zBoy = 0
rBoy = 0
xExit = 0
yExit = 0
zExit = 0
aExit = 0
xShrink = 0
yShrink = 0
zShrink = 0
ras = 0
pills = 0
yPill = 0
xPill = 0
zPill = 0
x = 0
y = 0
z = 0
p = 0
rx = 0
zAtom = 0
yStar = 0
xStar = 0
zStar=0
xExp = 0
yExp = 0
zExp = 0
iExp = 0
eras = 0
play = 0
END SUB
SUB NewGame
SW_LoadBytes("maps/map" & m & "-1.txt",map1)
SW_LoadBytes("maps/map" & m & "-2.txt",map2)
SW_LoadBytes("maps/map" & m & "-3.txt",map3)
InitDat
InitEny
InitBoy
END SUB
' Main
SW_Window 768,708,1
' Load Bitmaps
s1 = SW_LoadBmp("gfx/char.bmp", 60)
s2 = SW_LoadBmp("gfx/atom.bmp", 16)
s3 = SW_LoadBmp("gfx/boyd.bmp", 16)
s4 = SW_LoadBmp("gfx/boyu.bmp", 16)
s5 = SW_LoadBmp("gfx/boyr.bmp", 16)
s6 = SW_LoadBmp("gfx/boyl.bmp", 16)
s7 = SW_LoadBmp("gfx/exitani.bmp", 16)
s8 = SW_LoadBmp("gfx/pillani.bmp", 16)
s9 = SW_LoadBmp("gfx/bummani.bmp", 16)
sa = SW_LoadBmp("gfx/starani.bmp", 16)
sb = SW_LoadBmp("gfx/shrani.bmp", 16)
sc = SW_LoadBmp("gfx/fire.bmp", 16)
' Assign Sound Files
w1 = "gfx/success.wav"
w2 = "gfx/caim.wav"
w3 = "gfx/drown.wav"
w4 = "gfx/hit.wav"
w5 = "gfx/grab.wav"
'loadmaps
m = 1
SW_LoadBytes("maps/map" & m & "-1.txt",map1)
SW_LoadBytes("maps/map" & m & "-2.txt",map2)
SW_LoadBytes("maps/map" & m & "-3.txt",map3)
InitDat
InitEny
InitBoy
SW_SetFps(140)
WHILE SW_Key(27) = 0
SW_SetCaption "PILLS: " & pills & " MAP " & m
IF SW_GetKey() = 32 THEN NewGame()
IF SW_GetKey() = 110 AND rBoy = 5 THEN
m += 1
IF m = 12 THEN m = 1
NewGame
END IF
ShowMaps
ExitActiv
BoyShrink
BoyBumm
ScanEnemy
ShowEnemy
CheckBoy
DrawBoy
PillsAni
NoPills
Starshrink
IF rBoy = 5 THEN
SW_BmpText s1, 140, 340, "NEXT MAP PRESS N", 32, 64
END IF
IF rBoy = 6 THEN
SW_BmpText s1, 140, 340, "YOU WERE NABBED", 32, 64
END IF
SW_Redraw
WEND
SW_Quit()
Note: This zip contains the latest DLLC, SW, Oxygen (DLLs) and sbsw.inc.











(corrupted download is all I can say) I'll post another Ubuntu 32 ScriptBasic iup.so for you to try.