ld21-ESCape/src/Functions.pbi

153 lines
3.9 KiB
Plaintext
Raw Normal View History

2011-08-20 17:49:22 +02:00
; This file holds all the functions If it gets too big,
; we can split it in categories
; *****************************************************************************
; * Tileset
2011-08-20 20:14:22 +02:00
Procedure InitGraphics()
GFXLogo = LoadSprite(#PB_Any, "../data/gfx/logo.bmp")
2011-08-20 21:43:17 +02:00
GFXTileset = LoadSprite(#PB_Any, "../data/gfx/tileset01.bmp")
2011-08-20 20:14:22 +02:00
EndProcedure
2011-08-20 22:37:31 +02:00
; TODO: Make this dynamic
2011-08-20 17:49:22 +02:00
Procedure InitTileset()
2011-08-21 02:16:30 +02:00
Define i.i, j.i, count.i
count = 0
For i=0 To 5
For j=0 To 5
Tileset(count) = CopySprite(GFXTileset, #PB_Any)
ClipSprite(Tileset(count), #TILE_SIZE*j, #TILE_SIZE*i, #TILE_SIZE, #TILE_SIZE)
count+1
Next
Next
EndProcedure
Procedure LoadMap(Filename.s)
; Extract the map data from the XML file
If LoadXML(0, Filename) And XMLStatus(0) = #PB_XML_Success
Define *Node.i = XMLNodeFromPath(MainXMLNode(0), "/map/layer/data")
Define MapData.s = GetXMLNodeText(*Node)
If CreateRegularExpression(0, "\d{1,2},?")
2011-08-21 02:16:30 +02:00
Dim Tiles.s(0)
Define NumFound.i = ExtractRegularExpression(0, MapData, Tiles())
Define i.i, X.i, Y.i
X = 0
Y = 0
;CreateFile(0, "mapcheck.txt") ; File stuff for checking the map loader
2011-08-21 02:16:30 +02:00
For i=0 To NumFound-1
TileMap(X, Y)\TileNumber = Val(RTrim(Tiles(i), ","))-1
TileMap(X, Y)\X = X
TileMap(X, Y)\Y = Y
;WriteString(0, StrU(TileMap(X, Y)\TileNumber+1)+",")
2011-08-21 02:16:30 +02:00
If X = #MAP_WIDTH-1
X = 0
Y+1
;WriteStringN(0, "") ; do new line
2011-08-21 02:16:30 +02:00
Else
X+1
EndIf
Next
;CloseFile(0)
2011-08-21 02:16:30 +02:00
EndIf
EndIf
2011-08-20 17:49:22 +02:00
EndProcedure
; Shadowmap
Procedure CalculateShadow()
Define X.i, Y.i
Define MapX.i, MapY.i, Strength.i, CentercheckX.i, CentercheckY.i
For X.i=0 To #SHADOW_RADIUS*2
For Y.i=0 To #SHADOW_RADIUS*2
MapX = (Player\X-#SHADOW_RADIUS) + X
MapY = (Player\Y-#SHADOW_RADIUS) + Y
CentercheckX = X - #SHADOW_RADIUS
If CentercheckX < 0
CentercheckX * -1
EndIf
CentercheckX = 5-CentercheckX
CentercheckY = Y - #SHADOW_RADIUS
If CentercheckY < 0
CentercheckY * -1
EndIf
CentercheckY = 5-CentercheckY
If CentercheckX > CentercheckY
CentercheckX = CentercheckY
EndIf
Strength = (255 / #SHADOW_RADIUS) * (CentercheckX+1)
If MapX >= 0 And MapY >= 0
If ShadowMap(MapX, MapY)\Strength < Strength
ShadowMap(MapX, MapY)\Strength = Strength
EndIf
EndIf
Next
Next
EndProcedure
Procedure DrawShadowtile(strength.i, x.i, y.i)
Box(#TILE_SIZE*x, #TILE_SIZE*y, #TILE_SIZE, #TILE_SIZE, RGBA(Random(0), Random(0), Random(0), 255-strength))
EndProcedure
Procedure DrawShadow()
Define X.i ,Y.i
StartDrawing(ScreenOutput()) ;ImageOutput(0)
DrawingMode(#PB_2DDrawing_AlphaBlend)
For X.i=0 To Cam\Width
For Y.i=0 To Cam\Height
DrawShadowtile(ShadowMap(X+Cam\X, Y+Cam\Y)\Strength, X, Y)
Next
Next
StopDrawing()
EndProcedure
; Map itself
2011-08-20 20:15:44 +02:00
Procedure DrawTile(number.i, x.i, y.i)
2011-08-20 22:37:31 +02:00
DisplaySprite(Tileset(number), #TILE_SIZE*x, #TILE_SIZE*y)
2011-08-20 20:15:44 +02:00
EndProcedure
Procedure DrawMap()
2011-08-20 22:37:31 +02:00
Define X.i ,Y.i
2011-08-20 20:15:44 +02:00
2011-08-20 23:51:33 +02:00
For X.i=0 To Cam\Width
For Y.i=0 To Cam\Height
DrawTile(TileMap(X+Cam\X, Y+Cam\Y)\TileNumber, X, Y)
2011-08-20 22:37:31 +02:00
Next
Next
2011-08-20 20:15:44 +02:00
EndProcedure
; The player
2011-08-20 22:52:29 +02:00
Procedure DrawPlayer()
2011-08-20 23:51:33 +02:00
DrawTile(Player\TileNumber, Player\X-Cam\X, Player\Y-Cam\Y)
2011-08-20 22:52:29 +02:00
EndProcedure
; We need a HUD, hell yeah!
2011-08-20 22:37:31 +02:00
Procedure DrawHUD()
2011-08-20 21:43:17 +02:00
EndProcedure
2011-08-20 17:49:22 +02:00
2011-08-20 22:52:29 +02:00
2011-08-20 17:49:22 +02:00
; *****************************************************************************
; * Menu
Procedure Menu_GotoCurrent()
If *ActiveMenu\Entries()\Selected <> #True
2011-08-20 22:37:31 +02:00
FirstElement(*ActiveMenu\Entries())
2011-08-20 17:49:22 +02:00
ForEach *ActiveMenu\Entries()
If *ActiveMenu\Entries()\Selected = #True
Break
EndIf
Next
EndIf
EndProcedure
2011-08-20 20:15:44 +02:00