PAC ME DEAD
This only has one level and win or lose you have to restart it. It is designed for mobile so try it out on your phones
There is a font here (free for commercial use). If you drop it in the media folder then the game will use it (which looks best)
Attached is a level editor if you want to make levels. When you save a level it will copy the RLE string and meta data to the clipboard (And write it to the file you choose as well)
You need to paste that information into the LoadLevel() funcion like so;
select level
case 0
s = "$=Y$;Y$<Y$9]..." // Line one from the clipboard
m = "543,541 " // Line two from the clipboard
endcase
case default
Message("Invalid level : "+str(level))
endcase
endselect
I might go ahead and make some more levels and tidy it up a bit but this is where it's at right now. Not much fun now but it does have potential i think
Pac me dead game vvvvvvvvvvvvvvvvvv
// Project: pmd
// Created: 19-10-29
// show all errors
#option_explicit
SetErrorMode(2)
// set window properties
// set window properties
SetWindowTitle( "Pac me dead" )
//SetImmersiveMode( 1 )
SetOrientationAllowed( 1, 0, 0, 0 ) // allow both portrait and landscape on mobile devices
SetWindowSize( GetDeviceWidth(), GetDeviceHeight(), 0 )
SetWindowAllowResize( 1 ) // allow the user to resize the window
SetPrintSize(10)
// set display properties
SetVirtualResolution( GetWindowWidth()/2, GetWindowHeight()/2 ) // doesn't have to match the window
//SetSyncRate( 30, 0 ) // 30fps instead of 60 to save battery
SetVSync(1)
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 )
SetDefaultMagFilter(0)
SetDefaultMinFilter(0)
#constant TRUE 1
#constant FALSE 0
#constant SHIFT_PALETTE 35
#constant SHIFT_LENGTH 48
#constant TILE_FEAST 29
#constant TILE_SNACK 30
#constant TILE_PAC 25
#constant TILE_STAR 33
#constant TILE_END 28
#constant GRID_FREE 0
#constant GRID_WALL 1
#constant GRID_FEAST 50
#constant GRID_SNACK 5
#constant GRID_END 4
#constant GRID_STAR 100
#constant NOT_FLIPPED 0
#constant FLIP_HORIZ 1
#constant FLIP_VERT 2
#constant KEY_LEFT 37
#constant KEY_UP 38
#constant KEY_RIGHT 39
#constant KEY_DOWN 40
#constant PAC_STILL 0
#constant PAC_MOVE 1
#constant PAC_CHEW 0
#constant PAC_GOBBLE 1
#constant MODE_TITLE 0
#constant MODE_PLAY 1
#constant MODE_SUCCESS 2
#constant MODE_DEAD 3
#constant MODE_INTRO 4
//SetPhysicsDebugOn()
SetDefaultMagFilter(0)
SetDefaultMinFilter(0)
type tPos2d
x as integer
y as integer
endtype
type tPosf
x as float
y as float
endtype
type tTile
typ as integer
angle as integer
flip as integer
id as integer
name as string
endtype
type tPac
id as integer
eat as integer
move as integer
dir as tPos2d
target as tPos2d
star as integer
win as integer
finish as integer
time as integer
shoot as tPosf
trail as integer
last as tPos2D
trails as integer[]
eaten as tPos2d[]
moves as tPos2d[]
endtype
type tGrid
typ as integer
id as integer
done as integer
endtype
type tScore
text as integer
amount as integer
endtype
type tConnect
pos as tPos2d
obj as tTile
move as integer
start as tPos2D
target as tPos2d
dir as integer
endtype
type tStars
id as integer[]
starImg as integer
slotImg as integer
count as integer
total as integer
slot as integer
endtype
type tGame
title as integer
score as tScore
water as integer
stars as tStars
mode as integer
lastPtr as tPos2d
grid as tGrid[-1, -1]
camCtr as float
connect as tConnect[]
endtype
global TILE_MARK as integer
global TILE_EXIT as integer
global TILE_TITLE as integer
pacMan as tPac
game as tGame
game.mode = MODE_INTRO
tiles as tTile[]
sprites as tTile[]
//CompressImage("sheet.png")
//end
sheet as integer
sheet = GenerateImage()
CreateWater(game, sheet)
SetupText(game, pacMan)
Loadsprites(game, sheet, pacMan, sprites)
tiles =LoadLevel(game, 0, pacMan, sprites)
repeat
select game.mode
case MODE_SUCCESS
Camera(game, pacMan)
MovePacMan(game, pacMan, sprites)
DrawTitles(game, "You da Pacman", pacMan)
SetSpriteAngle(pacMan.id, GetSpriteAngle(pacMan.id) + 5)
endcase
case MODE_DEAD
DrawTitles(game, "You got Paced", pacMan)
MoveWater(game, pacMan, tiles)
MovePacMan(game, pacMan, sprites)
SetSpriteAngle(pacMan.id, GetSpriteAngle(pacMan.id) + 5)
SetSpriteX(pacMan.id, GetSpriteX(pacMan.id) + pacMan.shoot.x)
SetSpriteY(pacMan.id, GetSpriteY(pacMan.id) + pacMan.shoot.y)
pacMan.shoot.x = pacMan.shoot.x * .95
pacMan.shoot.y = pacMan.shoot.y * .95
inc pacMan.shoot.y
if GetSpriteXByOffset(pacMan.id) > GetViewOffsetX() + GetVirtualWidth() or GetSpriteXByOffset(pacMan.id) < GetViewOffsetX()
pacMan.shoot.x = -pacMan.shoot.x
endif
endcase
case default
Input(game, pacMan)
Control(game, pacMan)
MovePacMan(game, pacMan, sprites)
CheckConnections(game, pacMan)
Camera(game, pacMan)
MoveWater(game, pacMan, tiles)
endcase
endselect
// print("("+str(GetDeviceWidth())+","+str(GetDeviceHeight())+")")
// DumpGrid(game)
UpdateAllTweens(GetFrameTime())
Sync()
until GetRawKeyPressed(27)
end
function DrawTitles(game ref as tGame, s as string, pac ref as tPac)
x as float
y as float
i as integer
inc pac.time
if pac.time > 30
SetTextString(pac.finish, s)
if GetTextVisible(pac.finish) = 1
pac.time = 15
SetTextVisible(pac.finish, 0)
else
FixSpriteToScreen(game.title, 1)
SetSpriteColorAlpha(game.title, 0xff)
SetSpritePosition(game.title, GetVirtualWidth()/2 - GetSpriteWidth(game.title)/2, 0)
SetTextVisible(pac.finish, 1)
pac.time = 0
endif
SetTextPosition(pac.finish, GetVirtualWidth()/2, GetSpriteHeight(game.title))
SetTextPosition(game.score.text, GetVirtualWidth()/2 - GetTextTotalWidth(game.score.text)/2, GetTextY(pac.finish)+GetTextTotalHeight(pac.finish)*1.2)
x = (GetVirtualWidth()/2) - ((game.stars.total+1)*16)/2
y = GetTextY(pac.finish)+GetTextTotalHeight(pac.finish)*1.2+GetTextTotalHeight(game.score.text)*1.2
for i=0 to game.stars.total
SetSpritePosition(game.stars.id[i], x + i * 16, y)
next
endif
endfunction
function MoveWater(game ref as tGame, pac ref as tPac, tiles ref as tTile[])
f as tPosf
t as tPosf
y as integer
if game.mode = MODE_PLAY
SetSpritePosition(game.water, GetViewOffsetX(), GetSpriteY(game.water) - 0.5)
else
SetSpritePosition(game.water, GetViewOffsetX(), GetSpriteY(game.water))
endif
f.x = WorldToScreenX(GetViewOffsetX())
f.y = WorldToScreenY(GetSpriteY(game.water)+GetSpriteHeight(game.water)-1)
t.x = GetVirtualWidth()
t.y = GetVirtualHeight()
DrawBox(f.x, f.y, t.x, t.y, 0xffff00ff, 0xffff00ff, 0xffff00ff, 0xffff00ff, 1)
y = WorldToScreenY(GetSpriteY(pac.id))
if ( GetSpriteY(game.water) + 16 < GetSpriteY(pac.id) ) or ( game.mode = MODE_DEAD and y > GetVirtualHeight() * .7)
if y > GetVirtualHeight()
pac = pac
endif
pac.shoot.x = random(0, 10) - 5
pac.shoot.y = random(10, 20) * -1
if game.mode <> MODE_DEAD
StopSprite(pac.id)
PlaySprite(pac.id, 8, 1, 1, 3)
DimLevel(game, pac, tiles)
endif
game.mode = MODE_DEAD
endif
endfunction
function SetupText(game ref as tGame, pac ref as tPac)
f as integer
if pac.finish = 0
game.score.text = CreateText("Score : 0")
if GetFileExists("FFFFORWA.TTF")
f = LoadFont("FFFFORWA.TTF")
SetTextFont(game.score.text, f)
endif
SetTextSize(game.score.text, GetDeviceHeight() / 37)
FixTextToScreen(game.score.text, 1)
SetTextColor(game.score.text, 0xff, 0xff, 00, 0xff)
pac.finish = CreateText("")
SetTextAlignment( pac.finish, 1 )
SetTextFont(pac.finish, f)
SetTextSize(pac.finish, GetDeviceHeight() / 15)
FixTextToScreen(pac.finish, 1)
SetTextColor(pac.finish, 0xff, 0xff, 00, 0xff)
endif
SetTextPosition(game.score.text, 0, 0)
SetTextVisible(pac.finish, 0)
endfunction
function DimLevel(game ref as tGame, pac ref as tPac, tiles ref as tTile[])
i as integer
t as tTile
SetSpriteColorAlpha(game.title, 0x20)
for i=0 to tiles.length
t = tiles[i]
SetSpriteColorAlpha(t.id, 0x20)
next
SetSpriteColorAlpha(pac.id, 0xff)
endfunction
function Camera(game ref as tGame, pac ref as tPac)
target as tPosf
pos as tPosf
stp as tPosf
ease as float = .1
if game.mode = MODE_INTRO
ease = 0.01
else
ease = 0.05
endif
if game.mode <> MODE_INTRO and game.mode <> MODE_TITLE
if game.camCtr > 0.5
dec game.camCtr, 0.001
endif
target.x = GetSpriteXByOffset(pac.id) - GetVirtualWidth() * game.camCtr
else
game.camCtr = 0.7
target.x = GetSpriteXByOffset(pac.id) - GetVirtualWidth() * game.camCtr
endif
target.y = GetSpriteYByOffset(pac.id) - GetVirtualHeight() * 0.7
pos.x = GetViewOffsetX()
pos.y = GetViewOffsetY()
SetViewOffset(pos.x + (target.x - pos.x) * ease, pos.y + (target.y - pos.y) * ease)
if game.mode = MODE_INTRO and abs(target.x - pos.x) < 40
game.mode = MODE_TITLE
endif
endfunction
function DumpGrid(game ref as tGame)
s as string
y as integer
x as integer
v as integer
for y = 0 to game.grid.length
for x = 0 to game.grid[y].length
v = game.grid[y, x].typ
if v < 10
printc(v)
else
printc("x")
endif
next
print("")
next
endfunction
function MovePacMan(game ref as tGame, pac ref as tPac, sprites ref as tTile[])
pos as tPos2d
g as tPos2d
null as tPos2d
i as integer
t as integer
for i=0 to pac.trails.length
t = pac.trails[i]
if GetSpritePlaying(t) = 0
DeleteSprite(t)
pac.trails.remove(i)
dec i
endif
next
if ( pac.dir.x = 0 and pac.dir.y = 0 ) or game.mode = MODE_DEAD
exitfunction
endif
SetSpritePosition(pac.id, GetSpriteX(pac.id) + pac.dir.x * 16, GetSpriteY(pac.id) + pac.dir.y * 16)
pos.x = GetSpriteX(pac.id)
pos.y = GetSpriteY(pac.id)
if pac.last.x <> pos.x or pac.last.y <> pos.y
t = CloneSprite(pac.trail)
SetSpritePosition(t, pac.last.x, pac.last.y)
SetSpriteAngle(t, GetSpriteAngle(pac.id))
SetSpriteFlip(t, GetSpriteFlippedH(pac.id), GetSpriteFlippedV(pac.id))
PlaySprite(t, 20, 0)
SetSpriteVisible(t, 1)
pac.trails.insert(t)
endif
pac.last = pos
g.x = pos.x / 16
g.y = pos.y / 16
t = game.grid[g.y, g.x].typ
select t
case GRID_FEAST, GRID_SNACK, GRID_STAR
if game.grid[g.y, g.x].done = 0
game.score.amount = game.score.amount + game.grid[g.y, g.x].typ
SetTextString(game.score.text, "Score : "+str(game.score.amount))
game.grid[g.y, g.x].done = 1
if t = GRID_STAR
SetSpriteImage(game.stars.id[game.stars.count], GetSpriteImageID(sprites[TILE_STAR].id))
dec game.stars.count
endif
endif
SetSpriteVisible(game.grid[g.y, g.x].id, 0)
pac.eaten.insert(g)
if pac.eat = PAC_CHEW
PlaySprite(pac.id, 8, 1, 1, 3)
pac.eat = PAC_GOBBLE
endif
endcase
case GRID_END
game.mode = MODE_SUCCESS
SetSpriteVisible(game.grid[g.y, g.x].id, 0)
PlaySprite(pac.id, 8, 1, 1, 5)
g.x = g.x
WinPac(pac)
endcase
case default
if pac.eat = PAC_GOBBLE
PlaySprite(pac.id, 8, 1, 4, 5)
pac.eat = PAC_CHEW
endif
endcase
endselect
if pos.x = pac.target.x and pos.y = pac.target.y
pac.dir = null
pac.move = PAC_STILL
for i=0 to pac.eaten.length
g = pac.eaten[i]
game.grid[g.y, g.x].typ = GRID_FREE
next
endif
endfunction
function CheckConnections(game ref as tGame, pac ref as tPac)
i as integer
c as tConnect
for i=0 to game.connect.length
c = game.connect[i]
if c.move = FALSE
if GetSpriteX(pac.id) = c.pos.x and GetSpriteY(pac.id) = c.pos.y
c.move = TRUE
FindTarget(game, c)
endif
else
MoveObject(game, c, pac)
endif
game.connect[i] = c
next
endfunction
function MoveObject(game ref as tGame, c ref as tConnect, pac ref as tPac)
p as tPos2d
p.x = GetSpriteX(c.obj.id) + ( 4 * c.dir )
p.y = GetSpriteY(c.obj.id)
SetSpritePosition(c.obj.id, p.x, p.y)
if ( p.x = c.target.x and p.y = c.target.y ) or ( p.x = c.start.x and p.y = c.start.y )
c.dir = -c.dir
SetSpriteFlip(c.obj.id, abs(GetSpriteFlippedH(c.obj.id)-1), GetSpriteFlippedV(c.obj.id))
endif
if GetSpriteCollision(pac.id, c.obj.id)
game.mode = MODE_DEAD
sync()
sleep(200)
endif
endfunction
function FindTarget(game ref as tGame, c ref as tConnect)
dir as integer
g as tPos2d
c.start.x = GetSpriteX(c.obj.id)
c.start.y = GetSpriteY(c.obj.id)
g.x = c.start.x / 16
g.y = c.start.y / 16
c.target.y = g.y
if GetSpriteFlippedH(c.obj.id)
dir = 1
c.target.x = 0
else
dir = -1
c.target.x = game.grid[c.target.y].length
endif
while game.grid[c.target.y, c.target.x].typ = GRID_FREE
c.target.x = c.target.x + dir
endwhile
c.target.x = c.target.x + -dir
c.target.x = c.target.x * 16
c.target.y = c.target.y * 16
c.dir = -dir
endfunction
function Input(game ref as tGame, pac ref as tPac)
dir as tPos2d
p as tPos2d
n as string
n = GetDeviceBaseName()
if n = "linux" or n = "mac" or n = "windows"
dir.x = GetRawKeyPressed(KEY_RIGHT) - GetRawKeyPressed(KEY_LEFT)
dir.y = GetRawKeyPressed(KEY_DOWN) - GetRawKeyPressed(KEY_UP)
if dir.x <> 0 or dir.y <> 0
pac.moves.insert(dir)
endif
else
if GetPointerPressed()
game.lastPtr.x = GetPointerX()
game.lastPtr.y = GetPointery()
endif
if GetPointerReleased()
p.x = GetPointerX() - game.lastPtr.x
p.y = GetPointery() - game.lastPtr.y
if abs(p.x) > abs(p.y)
dir.x = p.x / abs(p.x)
else
dir.y = p.y / abs(p.y)
endif
pac.moves.insert(dir)
endif
endif
if pac.moves.length > -1
game.mode = MODE_PLAY
endif
endfunction
function Control(game ref as tGame, pac ref as tPac)
dir as tPos2d
pos as tPos2d
g as integer
d as integer
if game.mode = MODE_INTRO
exitfunction
endif
if pac.move = PAC_MOVE
exitfunction
endif
if pac.moves.length < 0
exitfunction
endif
dir = pac.moves[pac.moves.length]
pac.moves.remove(pac.moves.length)
if dir.y = 0 and dir.x = 0
exitfunction
endif
pac.last.x = -1
pac.last.y = -1
if dir.x <> 0 and dir.y <> 0
dir.y = 0
endif
pos.x = GetSpriteX(pac.id) / 16
pos.y = GetSpriteY(pac.id) / 16
d = 0
if dir.x <> 0
g = pos.x + dir.x
repeat
if game.grid[pos.y, g].typ = GRID_WALL
exit
endif
g = g + dir.x
inc d
until g < 0 or g > game.grid[pos.y].length
if d = 0
exitfunction
endif
g = g + dir.x * -1
if game.grid[pos.y + 1, pos.x].typ = GRID_WALL
if dir.x < 0
SetSpriteFlip(pac.id, 1, 0)
SetSpriteAngle(pac.id, 0)
else
SetSpriteFlip(pac.id, 0, 0)
SetSpriteAngle(pac.id, 0)
endif
else
if dir.x < 0
SetSpriteFlip(pac.id, 1, 1)
SetSpriteAngle(pac.id, 0)
else
SetSpriteFlip(pac.id, 0, 1)
SetSpriteAngle(pac.id, 0)
endif
endif
pos.x = g * 16
pos.y = pos.y * 16
endif
if dir.y <> 0
g = pos.y + dir.y
repeat
if game.grid[g, pos.x].typ = GRID_WALL
exit
endif
inc d
g = g + dir.y
until g < 0 or g > game.grid.length
if d = 0
exitfunction
endif
if game.grid[pos.y, pos.x + 1].typ = GRID_WALL
if dir.y < 0
SetSpriteFlip(pac.id, 0, 0)
SetSpriteAngle(pac.id, -90)
else
SetSpriteFlip(pac.id, 1, 0)
SetSpriteAngle(pac.id, -90)
endif
else
if dir.y < 0
SetSpriteFlip(pac.id, 1, 0)
SetSpriteAngle(pac.id, 90)
else
SetSpriteFlip(pac.id, 0, 0)
SetSpriteAngle(pac.id, 90)
endif
endif
g = g + dir.y * -1
pos.x = pos.x * 16
pos.y = g * 16
endif
pac.dir = dir
pac.target = pos
pac.move = PAC_MOVE
pac.eat = PAC_CHEW
PlaySprite(pac.id, 8, 1, 4, 5)
endfunction
function GenerateImage()
meta as string = "sheet.png 160 288 -16777216 -1 -16711681 -2200807 -65281 -3223858 -6513508 -10263709"
data as string = "#~V$8#U%7#7%7#7%7#w$:#S%3&1%3#5%3&1%3#5%3&1%3#v$;#4$8#C%4&1%4#3%4&1%4#3%4&1%4#t$5#1$1#1$#3$:#5$8#3%;#3%;#3%;#5%7#7%7#V$5#1$1#1$#3$;#3$:#2%2#<%2#<%2#=%3&1%3#5%3&1%3#U$5#1$1#1$#2$5#1$1#1$#3$;#1%2#<%2#<%2#<%4&1%4#3%2#%&1%4#T$5#1$1#1$#2$5#1$1#1$#2$<#1%2#1'#9%2'1#:%2#3'#7%2#%7#3%3#%6#T$<#2$5#1$1#1$#2$5#1$1#1$#1%2#'2#1'#5%2'4#7%2#2'2#6%3#;%3#\$4#1$#1$#$#2$<#2$5#1$1#1$#1%3'#'2#6%3'5#5%3#'1#1'#5%3#;%3#%6#T$4#1$#1$#$#2$4#1$#1$#$#2$<#1%4#1'#7%4#:%4'#9%2#%7#4%1#%6#U$4#6$#2$4#1$#1$#$#2$3#2$#1$#$#1%6#8%6#8%6#9%9#6%7#V$4#6$#2$4#6$1#1$3#2$#1$#$#1%;#3%;#3%;#5%7#f$4#6$#$6#6$2#$3#7$#2%9#5%9#5%9#s$7#4$:#4$9#5$1#3%7#7%7#7%7#s$>#1$>#$>#~Q$#$;#3$<#2$<#u&1#1&1#~{&1#1&1#~{&1#1&1#~{&1#1&1#w'1#5'1#w&1#1&1#Z(3#G'2#5'2#:&m#1&@#;&3#:()3(#D&1'2#5'2&1#8&m#1&A#9&5#8()*3)(#:)1#6&1'2#5'2&1#6&1#~1&1#9&1#1&1#8()*3)(#9)*1)#7'2#5'2#8&1#~1&1#9&1#1&1#8()*3)(#9)*1)#7'2#5'2#6&1#3&[#1&=#1&A#9&5#8()*3)(#:)1#6&1'2#5'2&1#4&1#3&[#1&=#1&@#;&3#:()3(#D&1'2#5'2&1#4&1#1&1#D'?#4&1#1&1#9&1#1&1#Z(3#G'2#5'2#6&1#1&1#E'3#'3#'3#5&1#1&1#9&1#1&1#w'1#5'1#7&1#1&1#E'3#'3#'3#5&1#1&1#9&1#1&1#~;&1#1&1#F'1#2'1#2'1#6&1#1&1#9&1#1&1#~;&1#1&1#F'1#2'1#2'1#6&1#1&1#9&1#1&1#~~~~~~~~P'#6'#5'#~p'2#4'2#3'2#~n'2#6'2#1'2#~n'2#8'5#~i'#3'2#:'3#~i'2#1'2#;'3#~j'5#;'5#Y'5#;%#{'3#;'2#1'2#W'7#;%#?%#j'1#;'2#3'2#F'7#5';#:%1#>%#x'#5'#C'O#3%1#2%2#8%#3%1#~5'#='P#%1#1%1#2%2#4%#2%1#1%2#9%#2%#s'3#7'S#1%1#%3#%3#4%1#%2#1%2#4%#2%1#1%2#8%1#1%1#:%#2%#R'_#?%?#6(1#Z'1#'1#'1#z%1#6%?#5(#1(#;%6#3%=#~9%1#6%?#5(#1(#:%8#2%#;%#3'9#y%1#6%?#4(1#1(1#8%9#2%#%9#%#2';#w%3#5%?#4(#3(#8%2#2%3#2%#%#7%#%#'#';#'#u%3#5%?(5#3(5#3%2#2%3#2%#%#%5#%#%#'#';#'#p%=#%?(#=(#2%3#2%3#2%#%#%#3%#%#%#2';#s%;#1%?(1#;(1#%5#1%4#2%#%#%#3%#%#%#'#'1#2'1#2'1#'#s%7#3%?#(2#7(2#1%;#3%#%#%#3%#%#%#'#'2#'3#'2#'#t%5#4%?#2(#7(#3%:#4%#%#%#3%#%#%#2';#v%6#3%?#2(#7(#4%4#9%#%#%5#%#%#'#'2#5'2#'#s%7#3%?#2(#7(1#4%3#9%#%#7%#%#'#';#'#s%2#1%3#2%?#1(1#8(#5%3#8%#%9#%#2';#t%2#4%1#2%?#1(#2(4#1(1#4%3#8%#;%#3'9#u%#7%1#1%?#1(#(2#2(1#1(#5%1#9%=#~B%?#1(2#5(3#T'1#'1#'1#~~~~~=(#7(#7(#~m('(#5('(#5('(#~k('2(#3('2(#3('2(#~i*'*'*'*#1*'*'*'*#1*'*'*'*#~~~h(N#~a(2'('('('('('('('('('('('('('(2#~_(1'N(1#~^('P(#~^('P(#~\(#'R#(#~Y('#('P(#'(#~W('1#'R#'1(#~U('*'#'R#'*'(#~U*'*#'3#1'F#1'3#*'*#~W*'#'3#3'B#3'3#'*#~Y*#'3#5'>#5'3#*#~\'4#6':#6'4#~^'4#1*#5'6#5*#1'4#~\(#'4#1(#$#5'2#5$#(#1'4#(#~Y('#'4#1(#6'4#6(#1'4#'(#~W('1#'4#1(1#1*1#1'4#1*1#1(1#1'4#'1(#~U('*'#'4(#1(3#1'6#1(3#1('4#'*'(#~U*'*#'5#6('6(#6'5#*'*#~W*'#'5(1#3('8(#3(1'5#'*#~Y*#'7(3':(3'7#*#~\'R#~^'5#F'5#~\(#'5#2(4#(4#(4#2'5#(#~Y('#'6#2(2#2(2#2(2#2'6#'(#~W('1#'6#3(#4(#4(#3'6#'1(#~U('*'#'6#6(#4(#6'6#'*'(#~U*'*#'7#4(2#2(2#4'7#*'*#~W*'#*'6#3(4#(4#3'6*#'*#~Y*#'7(#@('7#*#~\*'7(@'7*#~^*'P*#~^*1'N*1#~_*2'*'*'*'*'*'*'*'*'*'*'*'*'*'*2#~a*N#~~~i*6#1*6#1*6#~i'*'*'#3'*'*'#3'*'*'#~k'2#5'2#5'2#~m'#7'#7'#~~~~~~~~~~~~~~~F%I#~g%I#~g%I#~d%O#k%>#d%9&5%?#k%>#d%9&5%?#g%F#^%;&5%B#d%F#^%;&5%B#b%J#E%5#@%;&5%B#b%J#E%5#@%T#`%L#A%=#<%T#`%L#A%=#:%V#`%N#=%?#:%?#D%1#`%N#=%?#:%:#z%;#8%;#;%C#8%:#z%;#8%;#;%C#8%:#z%;#8%;#;%C#8%:#z%;#8%;#;%C#8%:#z%;#8%;#9%G#6%:#z%;#8%;#9%G#6%:#1'5#p%;#:%;#7%I#6%:#'7#o%;#:%;#7%I#6%:'9#j%?#8%;#9%;#1%;#6%:':#i%?#8%;#9%;#1%;#6%:':#g%C#4%=#7%;#3%;#6%:'3#3'4#8'1#Z%C#4%=#7%;#3%;#6%:'2#5'4#4'1#'1#Z%T#9%;#3%M'#8'3#3'1#^%T#9%;#3%M#:'8#^%R#9%;#3%O#:'7#_%R#9%;#3%O#;'4#a%P#;%_#<'2#b%P#;%_#='1#b%J#?%a#r%J#?%d#D%1#\%?#D%m#9%5#\%?#D%}#^%=#B%~1#^%=#B%|#a%=#A%X#6%M#a%=#A%X#6%M#c%>#>%H#1%=#9%G#f%>#>%H#1%=#9%G#f%>#>%>#=%=#~8%>#>%>#=%=#~8%>#>%<#?%=#~8%>#?%;#?%=#~8%>#?%9#A%=#~8%>#?%9#A%=#~:%9#D%5#E%;#~:%9#D%5#E%;#~<%5#b%;#~<%5#b%;#~~~~~~~~~~~~~e%7#A%3#G%;#~?%7#A%3#G%;#~?%9#=%9#A%A#~;%9#=%9#A%A#~9%;#;%=#=%F#~6%;#;%=#=%F#~6%;#;%=#;%J#~4%;#;%=#;%J#~4%=#7%?#;%J#~4%=#7%?#;%J#~4%=#7%?#9%L#~4%=#7%?#9%L#~2%?#5%A#9%;#7%8#~2%?#5%A#9%;#7%8#~2%?#5%A#9%9#~E%?#5%A#9%9#~E%A#1%C#7%I#~7%A#1%C#7%I#~7%A#1%C#7%L#~4%A#1%C#7%L#~4%W#5%N#~4%W#5%N#~2%Y#3%P#~2%Y#3%P#~2%Y#1%O#~5%Y#1%O#~5%Y#1%O#~5%Y#1%O#~5%7#3%M#1%G#~=%7#3%M#1%G#~=%7#3%?#1%;#1%?#;%8#~%7#3%?#1%;#1%?#;%8#~%7#5%;#3%;#7%9#5%@#|%7#5%;#3%;#7%9#5%@#y%:#E%;#7%R#w%:#E%;#7%R#w%:#E%=#5%R#w%:#E%=#5%R#w%8#G%=#5%P#y%8#G%=#5%P#y%8#G%=#5%N#{%8#G%=#5%N#{%6#I%=#7%J#}%6#I%=#7%J#~R%9#;%C#~W%9#;%C#~q%9#~w%9#~~~~~~~~~~~~~6%=#N%9#~J%=#N%9#~H%A#H%C#~B%A#H%C#~@%E#D%G#G%5#N%=#A%E#D%G#G%5#N%=#?%I#@%I#C%;#J%C#;%I#@%I#C%;#J%C#;%K#>%K#?%?#F%G#9%K#>%K#?%?#F%G#9%;#1%=#<%K#?%C#D%G#9%;#1%=#<%K#?%C#D%G#9%9#5%=#:%;#7%7#?%C#B%K#7%9#5%=#:%;#7%7#?%C#B%K#7%9#5%=#:%;#M%E#B%;#1%?#5%9#5%=#:%;#M%E#B%;#1%?#3%;#7%=#8%G#?%I#@%9#5%=#3%;#7%=#8%G#?%I#@%9#5%=#3%;#7%=#6%K#=%;#1%;#@%9#5%=#3%;#7%=#6%K#=%;#1%;#@%9#5%=#3%9#9%=#6%K#;%;#3%;#@%9#7%=#1%9#9%=#6%K#;%;#3%;#@%9#7%=#1%9#9%=#1%P#;%;#3%V#7%=#1%9#9%=#1%P#;%;#3%V#7%=#1%9#9%`#9%;#1%Z#7%=#1%9#9%`#9%;#1%Z#7%=#1%9#9%^#;%h#7%=#1%9#9%^#;%h#7%=#1%9#9%Z#=%j#9%;#1%9#9%Z#=%j#9%;#3%7#7%R#9%7#3%l#7%=#3%7#7%R#9%7#3%l#7%=#3%7#5%A#6%;#3%p#3%9#7%=#3%7#5%A#6%;#3%p#3%9#7%=#1%;#1%A#8%w#<%7#9%=#1%;#1%A#8%w#<%7#9%_#8%g#1%=#<%7#7%a#8%g#1%=#<%7#7%_#:%[#=%?#8%;#1%c#:%[#=%?#8%;#1%a#>%M#1%9#?%=#6%Q#1%M#>%M#1%9#?%=#6%Q#3%I#@%I#5%7#A%=#6%O#5%I#@%I#5%7#A%=#6%O#7%E#D%C#9%5#C%=#6%O#7%E#D%C#9%5#C%=#6%O#9%?#L%9#[%;#8%K#;%?#L%9#[%;#8%K#?%9#~8%7#<%E#C%9#~8%7#<%E#~m%A#~o%A#~s%9#~w%9#~~~~~~~~~~S"
array as integer[]
palette as integer[]
p as integer
i as integer
l as integer
b as integer
mb as integer
array.insert(val(GetStringToken(meta, " ", 2)))
array.insert(val(GetStringToken(meta, " ", 3)))
array.insert(32)
for i=4 to CountStringTokens(meta, " ")
palette.insert(val(GetStringToken(meta, " ", i)))
next
for i=1 to len(data)
l = asc(mid(data,i, 1))
if l < SHIFT_LENGTH
p = palette[l-SHIFT_PALETTE]
array.insert(p)
else
dec l, SHIFT_LENGTH
for b=1 to l
array.insert(p)
next
endif
next
mb = CreateMemblock((array.length + 1) * 4)
for b=0 to array.length
SetMemblockInt(mb, b*4, array[b])
next
i = CreateImageFromMemblock(mb)
//SaveImage(i, "sheet.png")
//DeleteImage(i)
DeleteMemblock(mb)
SetImageTransparentColor( i, 0, 0, 0 )
endfunction i
type rle_type
width as integer
height as integer
palette as integer[]
pixels as string
endtype
function CompressImage(name as string)
mb as integer
image as integer
rle as rle_type
pixel as integer
i as integer
p as integer
last as integer
count as integer
s as string
f as integer
image = LoadImage(name)
mb = CreateMemblockFromImage(image)
rle.width = GetMemblockInt(mb, 0)
rle.height = GetMemblockInt(mb, 4)
last = 0
count = 0
for i=12 to GetMemblockSize(mb)-1 step 4
pixel = GetMemblockInt(mb, i)
if last <> pixel
if count > 0
rle.pixels = rle.pixels + chr(SHIFT_LENGTH+count)
endif
p = LookupPalette(rle.palette, pixel)
rle.pixels = rle.pixels + chr(SHIFT_PALETTE+p)
last = pixel
count=0
else
inc count
if count = 126-SHIFT_LENGTH
rle.pixels = rle.pixels + chr(SHIFT_LENGTH+count)
count=0
endif
endif
next
if count > 0
rle.pixels = rle.pixels + chr(48+count)
endif
f = OpenToWrite(GetStringToken(name,".", 1)+".agc")
WriteLine(f, "")
s = 'meta as string = "'+name+" "+str(rle.width)+" "+str(rle.height)
for i=0 to rle.palette.length
s = s + " " + str(rle.palette[i])
next
s = s + '"'
WriteLine(f, s)
s = 'data as string = "'+rle.pixels+'"'
WriteLine(f, s)
CloseFile(f)
DeleteMemblock(mb)
endfunction
function LookupPalette(p ref as integer[], pixel as integer)
i as integer
for i=0 to p.length
if p[i] = pixel
exit
endif
next
if i > p.length
p.insert(pixel)
i = p.length
endif
endfunction i
function Loadsprites(game ref as tGame, sheet as integer, pac ref as tPac, sprites ref as tTile[])
sprite as tTile
i as integer
t as integer
r as integer
blank as tTile
w1 as integer
w2 as integer
w3 as integer
img as integer
ghost as integer
r = 0
// Ghost animation
ghost = CreateSprite(CopyImage(sheet, 7*16, 0, 3*16, 16))
SetSpriteAnimation( ghost, 16, 16, 3 )
PlaySprite(ghost, 10, 1, 1, 3)
SetSpriteDepth(ghost, 10)
SetSpriteShapeCircle(ghost, 0, 0, GetSpriteHeight(ghost)/2)
// Walls
for i=0 to 6
sprite = blank
sprite.name = "Wall"
sprite.id = CreateSprite(CopyImage(sheet, i*16, 16, 16, 16))
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
sprite.typ = i
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
next
// Corners
for i=1 to 3
sprite = sprites[0]
sprite.name = "Corner"
sprite.id = CloneSprite(sprite.id)
sprite.angle = i * 90
sprite.typ = sprites.length + 1
SetSpriteAngle(sprite.id, sprite.angle)
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
next
// Horiz Wall
sprite = sprites[1]
sprite.name = "Horiz wall"
sprite.id = CloneSprite(sprite.id)
sprite.angle = 90
sprite.typ = sprites.length + 1
SetSpriteAngle(sprite.id, sprite.angle)
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
// Spikey walls
for i=1 to 3
sprite = sprites[2]
sprite.name = "Spikey wall"
sprite.id = CloneSprite(sprite.id)
sprite.angle = i * 90
sprite.typ = sprites.length + 1
SetSpriteAngle(sprite.id, sprite.angle)
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
next
// T Wall
for i=1 to 3
sprite = sprites[3]
sprite.name = "T wall"
sprite.id = CloneSprite(sprite.id)
sprite.angle = i * 90
sprite.typ = sprites.length + 1
SetSpriteAngle(sprite.id, sprite.angle)
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
next
// End wall
for i=1 to 3
sprite = sprites[5]
sprite.name = "End wall"
sprite.id = CloneSprite(sprite.id)
sprite.angle = i * 90
sprite.typ = sprites.length + 1
SetSpriteAngle(sprite.id, sprite.angle)
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
next
// Shoot wall
img = CopyImage(sheet, 9*16, 1*16, 16, 16)
for i=0 to 3
sprite = sprites[1]
sprite.name = "Shoot wall"
sprite.typ = sprites.length + 1
sprite.id = CreateSprite(img)
SetSpriteAngle(sprite.id, i*90)
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
next
// Pac facing right
sprite = blank
sprite.name = "Pac right"
sprite.id = CreateSprite(CopyImage(sheet, 0, 0, 16, 16))
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
sprite.typ = sprites.length + 1
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
// Pac facing left
sprite.id = CloneSprite(sprite.id)
sprite.name = "Pac left"
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
sprite.typ = sprites.length + 1
FixSpriteToScreen(sprite.id, 1)
sprite.flip = FLIP_HORIZ
SetSpriteFlip(sprite.id, 1, 0)
sprites.insert(sprite)
inc r
// Ghost facing right
sprite = blank
sprite.name = "Ghost right"
sprite.id = CloneSprite(ghost)
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
sprite.typ = sprites.length + 1
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
// Ghost facing left
sprite.id = CloneSprite(ghost)
sprite.name = "Ghost left"
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
sprite.typ = sprites.length + 1
FixSpriteToScreen(sprite.id, 1)
sprite.flip = FLIP_HORIZ
SetSpriteFlip(sprite.id, 1, 0)
sprites.insert(sprite)
inc r
// End
sprite = sprites[1]
sprite.name = "Game end"
sprite.typ = sprites.length + 1
sprite.id = CreateSprite(CopyImage(sheet, 4*16, 3*16, 16, 16))
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
// Food
for i=7 to 8
sprite = blank
sprite.name = "Food"
sprite.id = CreateSprite(CopyImage(sheet, i*16, 16, 16, 16))
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
sprite.typ = sprites.length + 1
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
next
// Mark
sprite = sprites[1]
sprite.name = "Mark"
sprite.typ = sprites.length + 1
TILE_MARK = sprite.typ
sprite.id = CreateSprite(CopyImage(sheet, 5*16, 2*16, 16, 16))
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
// Logo
sprite = sprites[1]
sprite.name = "Logo"
sprite.typ = sprites.length + 1
TILE_TITLE = sprite.typ
sprite.id = CreateSprite(CopyImage(sheet, 3*16, 3*16, 16, 16))
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
// Star
sprite = sprites[1]
sprite.name = "Star"
sprite.typ = sprites.length + 1
pac.star = CopyImage(sheet, 0, 3*16, 16, 16)
sprite.id = CreateSprite(pac.star)
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
// Thump
sprite = sprites[1]
sprite.name = "Thump"
sprite.typ = sprites.length + 1
sprite.id = CreateSprite(CopyImage(sheet, 5*16, 3*16, 16, 16))
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
/*
sprite = sprites[1]
sprite.typ = sprites.length + 1
TILE_CLEAR = sprite.typ
sprite.id = CreateSprite(CopyImage(sheet, 6*16, 2*16, 16, 16))
SetSpritePosition(sprite.id, GetVirtualWidth() - GetSpriteWidth(sprite.id), r * GetSpriteHeight(sprite.id))
FixSpriteToScreen(sprite.id, 1)
sprites.insert(sprite)
inc r
ClearSprite = sprite.id
*/
game.stars.slot = CreateSprite(CopyImage(sheet, 2*16, 3*16, 16, 16))
SetSpritePosition(game.stars.slot, GetVirtualWidth() - GetSpriteWidth(game.stars.slot), r * GetSpriteHeight(game.stars.slot))
FixSpriteToScreen(game.stars.slot, 1)
SetSpriteVisible(game.stars.slot, 0)
game.title = CreateSprite(CopyImage(sheet, 0, 7*16, 160, 176))
SetSpritePosition(game.title, (GetVirtualWidth() - GetSpriteWidth(game.title)) / 2,
(GetVirtualHeight() - GetSpriteHeight(game.title)) / 2)
FixSpriteToScreen(game.title, 1)
// Pac animation
pac.id = CreateSprite(CopyImage(sheet, 0, 0, 7*16, 16))
SetSpriteAnimation( pac.id, 16, 16, 7 )
PlaySprite(pac.id, 10, 1, 4, 5)
SetSpriteDepth(pac.id, 10)
SetSpriteShapeCircle(pac.id, 0, 0, GetSpriteHeight(pac.id)/2)
//Start image
// pac.star = CopyImage(sheet, 0, 3*16, 16, 16)
// Pac Trail
pac.trail = CreateSprite(CopyImage(sheet, 0, 2*16, 5*16, 16))
SetSpriteAnimation( pac.trail, 16, 16, 5)
SetSpriteDepth(pac.trail, 10)
SetSpriteVisible(pac.trail, 0)
for i=0 to sprites.length
sprite = sprites[i]
SetSpriteDepth(sprite.id, 5)
next
for i=0 to sprites.length
SetSpriteVisible(sprites[i].id, 0)
next
endfunction
function CreateWater(game ref as tGame, sheet as integer)
w as integer[]
id as integer
w.insert(createsprite(CopyImage(sheet, 7*16, 2*16, 16, 16)))
w.insert(createsprite(CopyImage(sheet, 8*16, 2*16, 16, 16)))
w.insert(createsprite(CopyImage(sheet, 9*16, 2*16, 16, 16)))
id = CreateWaterImage(w, 0)
game.water = CreateSprite(id)
FixSpriteToScreen(game.water, 0)
SetSpriteDepth(game.water, 15)
AddSpriteAnimationFrame(game.water, id)
AddSpriteAnimationFrame(game.water, CreateWaterImage(w, 1))
AddSpriteAnimationFrame(game.water, CreateWaterImage(w, 2))
PlaySprite(game.water, 5)
DeleteSpriteAndImage(w[0])
DeleteSpriteAndImage(w[1])
DeleteSpriteAndImage(w[2])
ClearScreen()
endfunction
function DeleteSpriteAndImage(id as integer)
img as integer
img = GetSpriteImageID(id)
DeleteSprite(id)
DeleteImage(img)
endfunction
function CreateWaterImage(w as integer[], q as integer)
i as integer
s as integer
e as integer
id as integer
SetSpritePosition(w[0], -9999, -9999)
SetSpritePosition(w[1], -9999, -9999)
SetSpritePosition(w[2], -9999, -9999)
ClearScreen()
for i=0 to GetVirtualWidth() step 16
e = mod(i, 32)
select q
case 0
if e = 16
id = w[2]
else
id = w[0]
endif
endcase
case 1
id = w[1]
endcase
case 2
if e = 16
id = w[0]
else
id = w[2]
endif
endcase
endselect
SetSpritePosition(id, i, 0)
DrawSprite(id)
next
render()
s = GetImage(0, 0, GetVirtualWidth(), 16)
endfunction s
function LoadLevel(game ref as tGame, level as integer, pac ref as tPac, sprites ref as tTile[])
i as integer
t as tTile
w as string
p as tPos2d
c as tPos2d
max as tPos2d
a as tPos2d
x as integer
y as integer
id as integer
s as string
tiles as tTile[]
e as integer
m as string
n as tConnect
select level
case 0
s = "$=Y$;Y$<Y$9]$:]#:Y+;]*;\$:\$9\$8\$7\$6\+:Z$9Z$8Z$7Z,6Z-6Y*6X$5\,4\-4[*4Z$5X$4X$3X$2X$1X$0X$/X$.X$3Z$2Z$1Z$0Z$/Z$.Z#-Z,-X--^--_--`--[--\--]+-a$+a$*a$)a$'a$(a$,a$$a$%a$&a,#a-#`-#_-#^-#]-#\-#[-#Z-#Y##X$$X$%X$&X$'X$(X$)X$*X++X$?Y$@Y$AY-7c-7b-7a-7`-7_-7^#7]$8]-+W-+V-+U-+T--W--V--U-+S#+R$,R$-R$.R$/R$0R*2R$1R-2S-2T#-T$.T$/T*0T-0V-0U,0W$1W$2W$3W$8W$7W$6W$5W$4W$9W,2U$3U$4U$5U$7U$6U+8U+:W-:V-:U-:R-:Q-:P-:O-:N-:M-:L-:K-:J-:I-:H-:G-:F-8T-8S-8Q-8P-8O-8N-8M-8L-8K-8J-8I-8H*8G#7G-7H-7I-7J-7K-7L-7M-7N-7O+7P$6P$5P$4P$3P$2P$1P$0P,/P-/O-/N-/H-/G-/I-/J-/K-/L-/M*:E$9E$8E,7E#/E$0E$1E$4E$3E$2E-/F-5C-5B-5A-5@-5?-5>-5=-5<-7D-7C-7B-7A-7@-7?-7>-7<-5D+5E-7=-7;*79-7:*5;$3;$4;,2;,69-29-28-27-26-25#24$34$44$54$64-68-67#66$76$86+74+96-95-93-73-7%#7#$8#*9#?8$@;Z@5[@5Y@9V@1V@1S@0O@6OA<ZA=ZA>ZA?ZA@ZA8bA8_A8`A8aA9^A:^A;^A;[A:[A9[A8[A7[A6[A5ZA3VA5VA6VA7VA8VA9HA9IA9JA9KA9LA9MA9NA9OA9PA9QA9SA9UA6NA6MA6LA6KA6JA6IA6HA6GA6FA5OA4OA3OA2OA1TA1UA0SA4YA3YA2YA1YA0YA/YA.YA-YA+YA)YA(YA*YA%YA&YA'YA$ZA$[A$\A$]A$^A$_A%`A&`A(`A)`A*`A,_A,^A,]A,\A,[A,ZA,XA,WA,VA,UA,TA-SA.SA/SA1FA5FA4FA3FA2F@0F@,Y@,`@,S@$Y@$`@9FA9GA8FA7FA6EA6DA6CA6BA6AA6@A6?A6>A6=A6<A6;@6:A5:A4:@3:-2:@[email protected],A8*A8)A8(A8'A8%A8&A2V-7d-7e-7f-7g-7h-7i-7j$8k$9k$Ck$:k$;k$<k$=k$>k$?k$@k$Ak$Ck$Bk-Dj-Di-Dh-Dg-Df-De-Dd-Dc-Db-Da-D`-D_-D^-D]-D\-D[-DZ*DY$CY$BY+Dk,7k@CZ@8jAC[AC]AC_AC`ACaACbACdACeACfACgAChACiAAZABZA:jA<jA=jA>jA?jA@jAAjABjA8cA8dA8eA8fA8gA8hA8i<Cj@8^A<^A=^A>^A?^A@^AA^AB^@C^A9jA+`A1OA8+.93.92.91.90.94.9/.9..9-.9,.9+.9*.9).9(.9'.9&.9%.9$07$07%07&07'07(07)07*07+07,07-07.07/070071073072D'`D4VD55D8/A0NA0MA0LA0KA0JA0IA0HA0GC9_A39A38A37A36A9T-:T-:S-8R$>YA;jAC\DCc><HA9RB9V"
m = "543,541 "
endcase
case default
Message("Invalid level : "+str(level))
endcase
endselect
// Load tiles
max.x = -9999999
max.y = -9999999
for i=1 to len(s) step 3
w = mid(s, i, 3)
t.typ = asc(mid(w, 1, 1))-35
if t.typ > sprites.length
Message("Invalid type:"+str(t.typ))
endif
select t.typ
case TILE_STAR
id = CloneSprite(game.stars.slot)
game.stars.id.insert(id)
game.stars.count = game.stars.id.length
game.stars.total = game.stars.count
SetSpriteVisible(id, 1)
FixSpriteToScreen(id, 1)
SetSpritePosition(id, GetVirtualWidth() - ((game.stars.id.length + 1) * 16), 0)
t.id = CloneSprite(sprites[t.typ].id)
SetSpriteDepth(t.id, 100)
endcase
case TILE_TITLE
t.id = game.title
endcase
case TILE_PAC
t.id = pac.id
SetSpriteAngle(t.id, GetSpriteAngle(sprites[t.typ].id))
SetSpriteFlip(t.id, GetSpriteFlippedH(sprites[t.typ].id), GetSpriteFlippedV(sprites[t.typ].id))
SetSpriteDepth(t.id, 5)
endcase
case default
t.id = CloneSprite(sprites[t.typ].id)
SetSpriteDepth(t.id, 100)
endcase
endselect
FixSpriteToScreen(t.id, 0)
a.x = (asc(mid(w, 2, 1))-35)
a.y = (asc(mid(w, 3, 1))-35)
if a.x > max.x : max.x = a.x : endif
if a.y > max.y : max.y = a.y : endif
p.x = a.x * 16
p.y = a.y * 16
SetSpritePosition(t.id, p.x, p.y)
SetSpriteVisible(t.id, 1)
t.name = sprites[t.typ].name
tiles.insert(t)
next
// Make a grid
game.grid.length = max.y
for y=0 to max.y
game.grid[y].length = max.x
next
for i=0 to tiles.length
t = tiles[i]
c.x = GetSpriteX(t.id)/16
c.y = GetSpriteY(t.id)/16
if t.typ < 24
game.grid[c.y, c.x].typ = GRID_WALL
else
select t.typ
case TILE_FEAST
game.grid[c.y, c.x].typ = GRID_FEAST
game.grid[c.y, c.x].id = t.id
endcase
case TILE_SNACK
game.grid[c.y, c.x].typ = GRID_SNACK
game.grid[c.y, c.x].id = t.id
endcase
case TILE_END
game.grid[c.y, c.x].typ = GRID_END
game.grid[c.y, c.x].id = t.id
e = t.id
endcase
case TILE_STAR
game.grid[c.y, c.x].typ = GRID_STAR
game.grid[c.y, c.x].id = t.id
endcase
endselect
endif
next
c.x = (GetVirtualWidth() * .5) - (GetSpriteWidth(game.title) / 2)
c.y = (GetVirtualHeight() * .7) - (GetSpriteHeight(game.title) / 2)
p.x = GetSpriteX(game.title)
p.y = getSpriteY(game.title)
SetSpritePosition(game.water, p.x - c.x, max.y * 16 + 16)
SetViewOffset(-(GetVirtualWidth()/2-GetSpriteX(e)), -(GetVirtualHeight()*.8-GetSpriteY(e)))
// Load connections
for i=1 to CountStringTokens(m, " ")
w = GetStringToken(m, " ", i)
id = tiles[val(GetStringToken(w, ",", 1))].id
n.pos.x = GetSpriteX(id)
n.pos.y = GetSpriteY(id)
n.obj = Tiles[val(GetStringToken(w, ",", 2))]
SetSpriteposition(id, -10000, -10000)
SetSpriteVisible(id, 0)
game.connect.insert(n)
next
endfunction tiles
function winDeleteParticles(pac ref as tPac)
if pac.win <> 0
DeleteParticles(pac.win)
pac.win = 0
endif
endfunction
function SplodePac()
endfunction
function WinPac(pac ref as tPac)
i as integer
if pac.win = 0
pac.win = CreateParticles(GetSpriteXByOffset(pac.id), GetSpriteYByOffset(pac.id))
SetParticlesAngle(pac.win, 360)
SetParticlesImage(pac.win, pac.star)
SetParticlesRotationRange(pac.win, 30, 60)
SetParticlesLife(pac.win, 2)
SetParticlesActive( pac.win, 1 )
SetParticlesFrequency( pac.win, 60 )
SetParticlesVelocityRange( pac.win, 5, 10 )
SetParticlesVisible( pac.win, 1 )
SetParticlesSize(pac.win, 8)
SetParticlesDepth(pac.win, 50)
AddParticlesColorKeyFrame( pac.win, 0, 0xff, 0xff, 0xff, 0xff )
AddParticlesColorKeyFrame( pac.win, 2, 0, 0, 0, 0 )
For i=0 to 40
UpdateParticles(pac.win, 0.02)
Next i
endif
endfunction