From 5d26ffd12c1c6d3c80c906ea1cd88078d6a3301b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ruben=20Mu=CC=88ller?= Date: Mon, 22 Aug 2011 10:10:20 +0200 Subject: [PATCH] testing the noise circle thing --- escape.pbp | 24 ++++++++++++------------ src/Events.pbi | 4 ++-- src/Functions.pbi | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/escape.pbp b/escape.pbp index 9e81ac5..fb972b4 100644 --- a/escape.pbp +++ b/escape.pbp @@ -10,32 +10,32 @@
- +
- - + + - - + + - - + + - - + + - - + + - +
diff --git a/src/Events.pbi b/src/Events.pbi index 9055c1e..6abcb51 100644 --- a/src/Events.pbi +++ b/src/Events.pbi @@ -107,12 +107,12 @@ Procedure HandleEventRunningGame() ; Determine the pixel to destroy If Player\Direction = #PLAYER_DIR_LEFT And Player\X < #MAP_WIDTH - TargetX = Player\X + 1 + TargetX = Player\X - 1 TargetY = Player\Y EndIf If Player\Direction = #PLAYER_DIR_RIGHT And Player\X > 0 - TargetX = Player\X - 1 + TargetX = Player\X + 1 TargetY = Player\Y EndIf diff --git a/src/Functions.pbi b/src/Functions.pbi index 8386b7c..90766f7 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 ; 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 CalculateNoiseWave(*Noise.NoiseWave) Define Size.i Define MaxSize.i = *Noise\Size For Size=0 To MaxSize *Noise\Size = Size Delay(30) Next *Noise\Size = 0 EndProcedure Procedure DrawPlayerNoise() Define Visibility.i = 255 Select *PlayerNoise\Size Case 1,2,3 Visibility = 80 Case 4,5,6 Visibility = 40 Case 7,8 Visibility = 20 Case 9 Visibility = 10 Case 10 Visibility = 0 EndSelect Ellipse(*PlayerNoise\X*#TILE_SIZE+10, *PlayerNoise\Y*#TILE_SIZE+10, *PlayerNoise\Size*10, *PlayerNoise\Size*10, RGBA(255, 0, 0, Visibility)) 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 +; 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 CalculateNoiseWave(*Noise.NoiseWave) Define Size.i Define MaxSize.i = *Noise\Size For Size=0 To MaxSize *Noise\Size = Size Delay(30) Next *Noise\Size = 0 EndProcedure Procedure DrawPlayerNoise() Define Visibility.i = 255 Select *PlayerNoise\Size Case 1,2,3 Visibility = 80 Case 4,5,6 Visibility = 40 Case 7,8 Visibility = 20 Case 9 Visibility = 10 Case 10 Visibility = 0 EndSelect DrawingMode(#PB_2DDrawing_Outlined) Ellipse(*PlayerNoise\X*#TILE_SIZE+10, *PlayerNoise\Y*#TILE_SIZE+10, *PlayerNoise\Size*10, *PlayerNoise\Size*10, RGBA(255, 0, 0, Visibility)) 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