From ebf63aae67f0434edf9d5b8aed9c4c97ca382205 Mon Sep 17 00:00:00 2001 From: Aaron Mueller Date: Sun, 21 Aug 2011 19:59:15 +0200 Subject: [PATCH] Start diggin --- data/gfx/tileset01.bmp | Bin 43256 -> 57654 bytes src/Draw.pbi | 2 +- src/Events.pbi | 38 ++++++++++++++++++++++++++++++++++++++ src/Functions.pbi | 2 +- src/Structs.pbi | 2 ++ 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/data/gfx/tileset01.bmp b/data/gfx/tileset01.bmp index 15bbaffb4c823ae2018e0f5e191ae1dc5d08105c..0e9b8b8dfbd362024d7e07161297851e2253e5f4 100644 GIT binary patch literal 57654 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 literal 43256 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 0 + TargetX = Player\X - 1 + TargetY = Player\Y + EndIf + + If Player\Direction = #PLAYER_DIR_UP And Player\Y > 0 + TargetX = Player\X + TargetY = Player\Y -1 + EndIf + + If Player\Direction = #PLAYER_DIR_DOWN And Player\X < #MAP_HEIGHT + TargetX = Player\X + TargetY = Player\Y + 1 + EndIf + + ; Do something with the block + If TileIsType(#TILESET_TYPE_WALL, TargetX, TargetY) + TileMap(TargetX, TargetY)\Health - 1 + + If TileMap(TargetX, TargetY)\Health = -1 + TileMap(TargetX, TargetY)\TileNumber = #TILESET_TYPE_FLOOR + EndIf + + DrawNoiseWave(TargetX, TargetY) + EndIf + EndIf EndProcedure \ No newline at end of file diff --git a/src/Functions.pbi b/src/Functions.pbi index eede4ee..08ff1d8 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 \ 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 ; Walls get 4 health If TileMap(X, Y)\TileNumber = 2 TileMap(X, Y)\Health = 4 EndIf 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) Define id.i If number = #TILESET_TYPE_WALL And TileMap(x, y)\Health < 4 id = (17+4)-TileMap(x, y)\Health Else id = number EndIf DisplaySprite(Tileset(id)\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 ; If the player starts diffin, some noise wave will be generated Procedure DrawNoiseWave(X.i, Y.i) EndProcedure ; ***************************************************************************** ; * 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/Structs.pbi b/src/Structs.pbi index 34084eb..679ab85 100644 --- a/src/Structs.pbi +++ b/src/Structs.pbi @@ -50,6 +50,8 @@ Structure Player Direction.i EndStructure + + Structure Shadow X.i Y.i