diff --git a/src/Draw.pbi b/src/Draw.pbi index 5116443..20555e8 100644 --- a/src/Draw.pbi +++ b/src/Draw.pbi @@ -43,10 +43,4 @@ Procedure DrawRunningGame() DrawPlayer() DrawHUD() -EndProcedure -; IDE Options = PureBasic 4.51 (Linux - x64) -; CursorPosition = 44 -; Folding = - -; EnableXP -; EnableCompileCount = 0 -; EnableBuildCount = 0 \ No newline at end of file +EndProcedure \ No newline at end of file diff --git a/src/Events.pbi b/src/Events.pbi index 681baf3..0b3a216 100644 --- a/src/Events.pbi +++ b/src/Events.pbi @@ -53,6 +53,7 @@ Procedure HandleEventRunningGame() ; Player movement If KeyboardReleased(#PB_Key_Left) And Player\X > 0 + Player\Direction = #PLAYER_DIR_LEFT If TileIsType(#TILESET_TYPE_FLOOR, Player\X-1, Player\Y) Or TileIsType(#TILESET_TYPE_GRASS, Player\X-1, Player\Y) Player\X-1 EndIf @@ -64,6 +65,7 @@ Procedure HandleEventRunningGame() EndIf If KeyboardReleased(#PB_Key_Right) And Player\X < #MAP_WIDTH-1 + Player\Direction = #PLAYER_DIR_RIGHT If TileIsType(#TILESET_TYPE_FLOOR, Player\X+1, Player\Y) Or TileIsType(#TILESET_TYPE_GRASS, Player\X+1, Player\Y) Player\X+1 EndIf @@ -75,6 +77,7 @@ Procedure HandleEventRunningGame() EndIf If KeyboardReleased(#PB_Key_Up) And Player\Y > 0 + Player\Direction = #PLAYER_DIR_UP If TileIsType(#TILESET_TYPE_FLOOR, Player\X, Player\Y-1) Or TileIsType(#TILESET_TYPE_GRASS, Player\X, Player\Y-1) Player\Y-1 EndIf @@ -86,6 +89,7 @@ Procedure HandleEventRunningGame() EndIf If KeyboardReleased(#PB_Key_Down) And Player\Y < #MAP_HEIGHT-1 + Player\Direction = #PLAYER_DIR_DOWN If TileIsType(#TILESET_TYPE_FLOOR, Player\X, Player\Y+1) Or TileIsType(#TILESET_TYPE_GRASS, Player\X, Player\Y+1) Player\Y+1 EndIf @@ -95,11 +99,4 @@ Procedure HandleEventRunningGame() Cam\Y + 1 EndIf EndIf -EndProcedure -; IDE Options = PureBasic 4.51 (Linux - x64) -; CursorPosition = 98 -; FirstLine = 52 -; Folding = - -; EnableXP -; EnableCompileCount = 0 -; EnableBuildCount = 0 \ No newline at end of file +EndProcedure \ No newline at end of file diff --git a/src/Functions.pbi b/src/Functions.pbi index 990c109..eede4ee 100644 --- a/src/Functions.pbi +++ b/src/Functions.pbi @@ -1 +1 @@ -; This file holds all the functions If it gets too big, ; we can split it in categories ; ***************************************************************************** ; * Tileset Procedure InitGraphics() GFXLogo = LoadSprite(#PB_Any, "../data/gfx/logo.bmp") GFXTileset = LoadSprite(#PB_Any, "../data/gfx/tileset01.bmp") EndProcedure ; TODO: Make this dynamic Procedure InitTileset() Define i.i, j.i, count.i count = 0 For i=0 To 5 For j=0 To 5 Tileset(count)\ID = CopySprite(GFXTileset, #PB_Any) ClipSprite(Tileset(count)\ID, #TILE_SIZE*j, #TILE_SIZE*i, #TILE_SIZE, #TILE_SIZE) Tileset(count)\Type = #TILESET_TYPE_FLOOR Select count Case 0 Tileset(count)\Type = #TILESET_TYPE_PLAYER Case 2 Tileset(count)\Type = #TILESET_TYPE_WALL Case 3 Tileset(count)\Type = #TILESET_TYPE_SOLID Case 4 Tileset(count)\Type = #TILESET_TYPE_GRASS EndSelect 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},?") 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 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)+",") If X = #MAP_WIDTH-1 X = 0 Y+1 WriteStringN(0, "") ; do new line Else X+1 EndIf Next CloseFile(0) EndIf EndIf EndProcedure ; Shadowmap Procedure CalculateShadow() Define X.i, Y.i Define MapX.i, MapY.i, Strength.i, Centercheck.i, CentercheckX.i, CentercheckY.i For X.i=-#SHADOW_RADIUS To #SHADOW_RADIUS*2 For Y.i=-#SHADOW_RADIUS To #SHADOW_RADIUS*2 MapX = Player\X + X MapY = Player\Y + Y CentercheckX = X If CentercheckX < 0 CentercheckX * -1 EndIf CentercheckY = Y If CentercheckY < 0 CentercheckY * -1 EndIf If CentercheckX > CentercheckY Centercheck = CentercheckX Else Centercheck = CentercheckY EndIf Centercheck = #SHADOW_RADIUS - Centercheck; Strength = (255 / #SHADOW_RADIUS) * (Centercheck) 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(0, 0, 0, 255-strength)) EndProcedure Procedure GenerateShadowLayer() Define X.i ,Y.i CompilerSelect #PB_Compiler_OS CompilerCase #PB_OS_Linux ShadowOfDarkness = CreateImage(#PB_Any, 800, 600, 32|#PB_Image_Transparent) StartDrawing(ImageOutput(ShadowOfDarkness)) CompilerDefault StartDrawing(ScreenOutput()) CompilerEndSelect 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 Procedure DrawShadow() CompilerSelect #PB_Compiler_OS CompilerCase #PB_OS_Linux StartDrawing(ScreenOutput()) DrawImage(ImageID(ShadowOfDarkness), 0, 0) StopDrawing() CompilerDefault GenerateShadowLayer() CompilerEndSelect EndProcedure ; Map itself Procedure DrawTile(number.i, x.i, y.i) DisplaySprite(Tileset(number)\ID, #TILE_SIZE*x, #TILE_SIZE*y) EndProcedure Procedure DrawMap() Define X.i ,Y.i 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) Next Next EndProcedure Procedure TileIsType(type.i, X.i, Y.i) Define istype.b istype = #False If Tileset(TileMap(X, Y)\TileNumber)\Type = type istype = #True EndIf ProcedureReturn istype EndProcedure ; The player Procedure DrawPlayer() DrawTile(Player\TileNumber, Player\X-Cam\X, Player\Y-Cam\Y) EndProcedure ; We need a HUD, hell yeah! Procedure DrawHUD() EndProcedure ; and .. ; ***************************************************************************** ; * Menu Procedure Menu_GotoCurrent() If *ActiveMenu\Entries()\Selected <> #True FirstElement(*ActiveMenu\Entries()) ForEach *ActiveMenu\Entries() If *ActiveMenu\Entries()\Selected = #True Break EndIf Next EndIf EndProcedure ; IDE Options = PureBasic 4.51 (Linux - x64) ; CursorPosition = 116 ; Folding = --- ; EnableXP ; EnableCompileCount = 0 ; EnableBuildCount = 0 \ No newline at end of file +; This file holds all the functions If it gets too big, ; we can split it in categories ; ***************************************************************************** ; * Tileset Procedure InitGraphics() GFXLogo = LoadSprite(#PB_Any, "../data/gfx/logo.bmp") GFXTileset = LoadSprite(#PB_Any, "../data/gfx/tileset01.bmp") EndProcedure ; TODO: Make this dynamic Procedure InitTileset() Define i.i, j.i, count.i count = 0 For i=0 To 5 For j=0 To 5 Tileset(count)\ID = CopySprite(GFXTileset, #PB_Any) ClipSprite(Tileset(count)\ID, #TILE_SIZE*j, #TILE_SIZE*i, #TILE_SIZE, #TILE_SIZE) Tileset(count)\Type = #TILESET_TYPE_FLOOR Select count Case 0 Tileset(count)\Type = #TILESET_TYPE_PLAYER Case 2 Tileset(count)\Type = #TILESET_TYPE_WALL Case 3 Tileset(count)\Type = #TILESET_TYPE_SOLID Case 4 Tileset(count)\Type = #TILESET_TYPE_GRASS EndSelect 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},?") 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 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)+",") If X = #MAP_WIDTH-1 X = 0 Y+1 WriteStringN(0, "") ; do new line Else X+1 EndIf Next CloseFile(0) EndIf EndIf EndProcedure ; Shadowmap Procedure CalculateShadow() Define X.i, Y.i Define MapX.i, MapY.i, Strength.i, Centercheck.i, CentercheckX.i, CentercheckY.i For X.i=-#SHADOW_RADIUS To #SHADOW_RADIUS*2 For Y.i=-#SHADOW_RADIUS To #SHADOW_RADIUS*2 MapX = Player\X + X MapY = Player\Y + Y CentercheckX = X If CentercheckX < 0 CentercheckX * -1 EndIf CentercheckY = Y If CentercheckY < 0 CentercheckY * -1 EndIf If CentercheckX > CentercheckY Centercheck = CentercheckX Else Centercheck = CentercheckY EndIf Centercheck = #SHADOW_RADIUS - Centercheck; Strength = (255 / #SHADOW_RADIUS) * (Centercheck) 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(0, 0, 0, 255-strength)) EndProcedure Procedure GenerateShadowLayer() Define X.i ,Y.i CompilerSelect #PB_Compiler_OS CompilerCase #PB_OS_Linux ShadowOfDarkness = CreateImage(#PB_Any, 800, 600, 32|#PB_Image_Transparent) StartDrawing(ImageOutput(ShadowOfDarkness)) CompilerDefault StartDrawing(ScreenOutput()) CompilerEndSelect 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 Procedure DrawShadow() CompilerSelect #PB_Compiler_OS CompilerCase #PB_OS_Linux StartDrawing(ScreenOutput()) DrawImage(ImageID(ShadowOfDarkness), 0, 0) StopDrawing() CompilerDefault GenerateShadowLayer() CompilerEndSelect EndProcedure ; Map itself Procedure DrawTile(number.i, x.i, y.i) DisplaySprite(Tileset(number)\ID, #TILE_SIZE*x, #TILE_SIZE*y) EndProcedure Procedure DrawMap() Define X.i ,Y.i 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) Next Next EndProcedure Procedure TileIsType(type.i, X.i, Y.i) Define istype.b istype = #False If Tileset(TileMap(X, Y)\TileNumber)\Type = type istype = #True EndIf ProcedureReturn istype EndProcedure ; The player Procedure DrawPlayer() DrawTile(Player\TileNumber, Player\X-Cam\X, Player\Y-Cam\Y) EndProcedure ; We need a HUD, hell yeah! Procedure DrawHUD() EndProcedure ; and .. ; ***************************************************************************** ; * Menu Procedure Menu_GotoCurrent() If *ActiveMenu\Entries()\Selected <> #True FirstElement(*ActiveMenu\Entries()) ForEach *ActiveMenu\Entries() If *ActiveMenu\Entries()\Selected = #True Break EndIf Next EndIf EndProcedure \ No newline at end of file diff --git a/src/Globals.pbi b/src/Globals.pbi index 9b7e04a..99833c5 100644 --- a/src/Globals.pbi +++ b/src/Globals.pbi @@ -62,10 +62,4 @@ LoadSound(2, #DATA_PATH + "sound/title_song.wav") ; Map Global Dim TileMap.Tile(#MAP_WIDTH, #MAP_HEIGHT) -Global Dim ShadowMap.Shadow(#MAP_WIDTH, #MAP_HEIGHT) -; IDE Options = PureBasic 4.51 (Linux - x64) -; CursorPosition = 47 -; FirstLine = 11 -; EnableXP -; EnableCompileCount = 0 -; EnableBuildCount = 0 +Global Dim ShadowMap.Shadow(#MAP_WIDTH, #MAP_HEIGHT) \ No newline at end of file diff --git a/src/Main.pb b/src/Main.pb index ced4f5d..9802b77 100644 --- a/src/Main.pb +++ b/src/Main.pb @@ -138,10 +138,4 @@ If OpenWindow(0, 0, 0, Screen\Width, Screen\Height, title, #PB_Window_ScreenCent Until CurrentState = "QUIT" EndIf -End -; IDE Options = PureBasic 4.51 (Linux - x64) -; CursorPosition = 102 -; FirstLine = 72 -; EnableXP -; EnableCompileCount = 0 -; EnableBuildCount = 0 +End \ No newline at end of file diff --git a/src/Structs.pbi b/src/Structs.pbi index e2f8a2c..34084eb 100644 --- a/src/Structs.pbi +++ b/src/Structs.pbi @@ -62,4 +62,4 @@ Structure Camera Width.i Height.i Padding.i -EndStructure +EndStructure \ No newline at end of file