mirror of
https://github.com/jeremysrand/BuGS.git
synced 2024-06-03 09:29:30 +00:00
Replace the C code which built tables at game launch time with a script which generates these tables at build time. This reduces the start time of the application and saves code space and is a necessary step before adding some new tables to handle the mouse efficiently.
This commit is contained in:
parent
c45c3503d6
commit
bb66ef4b03
|
@ -20,7 +20,6 @@
|
||||||
9D1716A52491C49300C83148 /* system601.2mg in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D1716A42491C49300C83148 /* system601.2mg */; };
|
9D1716A52491C49300C83148 /* system601.2mg in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D1716A42491C49300C83148 /* system601.2mg */; };
|
||||||
9D1716A72491C49300C83148 /* tail.mk in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D1716A62491C49300C83148 /* tail.mk */; };
|
9D1716A72491C49300C83148 /* tail.mk in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D1716A62491C49300C83148 /* tail.mk */; };
|
||||||
9D1716AA2491C49300C83148 /* BuGS.xcscheme in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D1716A92491C49300C83148 /* BuGS.xcscheme */; };
|
9D1716AA2491C49300C83148 /* BuGS.xcscheme in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D1716A92491C49300C83148 /* BuGS.xcscheme */; };
|
||||||
9DC4D7C124BE9F7100BACF4B /* tiles.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DC4D7C024BE9F7100BACF4B /* tiles.c */; };
|
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
@ -80,6 +79,7 @@
|
||||||
9D33970124AF9D55003222B3 /* sprites.macros */ = {isa = PBXFileReference; lastKnownFileType = text; path = sprites.macros; sourceTree = "<group>"; };
|
9D33970124AF9D55003222B3 /* sprites.macros */ = {isa = PBXFileReference; lastKnownFileType = text; path = sprites.macros; sourceTree = "<group>"; };
|
||||||
9D47CBE02547BEDB00CDA5CB /* gameMushroom.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameMushroom.s; sourceTree = "<group>"; };
|
9D47CBE02547BEDB00CDA5CB /* gameMushroom.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameMushroom.s; sourceTree = "<group>"; };
|
||||||
9D47CC14254A698900CDA5CB /* gamePlayer.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gamePlayer.s; sourceTree = "<group>"; };
|
9D47CC14254A698900CDA5CB /* gamePlayer.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gamePlayer.s; sourceTree = "<group>"; };
|
||||||
|
9D47CCBA25525C1A00CDA5CB /* tileData.pl */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; path = tileData.pl; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.perl; };
|
||||||
9D62AF3B249871A300348F45 /* colour.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = colour.s; sourceTree = "<group>"; };
|
9D62AF3B249871A300348F45 /* colour.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = colour.s; sourceTree = "<group>"; };
|
||||||
9D62AF3F2499CD1E00348F45 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
|
9D62AF3F2499CD1E00348F45 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
|
||||||
9D62AF402499CD3A00348F45 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
9D62AF402499CD3A00348F45 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
||||||
|
@ -87,6 +87,7 @@
|
||||||
9D8AF0B82535543000C10E3C /* score.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = score.s; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.asm.orcam; };
|
9D8AF0B82535543000C10E3C /* score.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = score.s; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.asm.orcam; };
|
||||||
9D8FFC602491CA28005C9327 /* game.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = game.s; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.asm.orcam; };
|
9D8FFC602491CA28005C9327 /* game.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = game.s; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.asm.orcam; };
|
||||||
9D8FFC612491CAF0005C9327 /* game.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = game.h; sourceTree = "<group>"; };
|
9D8FFC612491CAF0005C9327 /* game.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = game.h; sourceTree = "<group>"; };
|
||||||
|
9D9F07F92553AB3800875B29 /* TODO.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = TODO.md; sourceTree = "<group>"; };
|
||||||
9DB1505024C3801100558B87 /* gameFlea.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameFlea.s; sourceTree = "<group>"; };
|
9DB1505024C3801100558B87 /* gameFlea.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameFlea.s; sourceTree = "<group>"; };
|
||||||
9DB1505124C6875C00558B87 /* gameScorpion.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameScorpion.s; sourceTree = "<group>"; };
|
9DB1505124C6875C00558B87 /* gameScorpion.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameScorpion.s; sourceTree = "<group>"; };
|
||||||
9DB1505224C7495400558B87 /* globals.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = globals.s; sourceTree = "<group>"; };
|
9DB1505224C7495400558B87 /* globals.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = globals.s; sourceTree = "<group>"; };
|
||||||
|
@ -95,8 +96,6 @@
|
||||||
9DB1505524D3BFCE00558B87 /* global.macros */ = {isa = PBXFileReference; lastKnownFileType = text; path = global.macros; sourceTree = "<group>"; };
|
9DB1505524D3BFCE00558B87 /* global.macros */ = {isa = PBXFileReference; lastKnownFileType = text; path = global.macros; sourceTree = "<group>"; };
|
||||||
9DC4D7BD24B7652100BACF4B /* ship.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = ship.s; sourceTree = "<group>"; };
|
9DC4D7BD24B7652100BACF4B /* ship.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = ship.s; sourceTree = "<group>"; };
|
||||||
9DC4D7BE24B80C9600BACF4B /* shot.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = shot.s; sourceTree = "<group>"; };
|
9DC4D7BE24B80C9600BACF4B /* shot.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = shot.s; sourceTree = "<group>"; };
|
||||||
9DC4D7BF24BE9F7100BACF4B /* tiles.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tiles.h; sourceTree = "<group>"; };
|
|
||||||
9DC4D7C024BE9F7100BACF4B /* tiles.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tiles.c; sourceTree = "<group>"; };
|
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -115,6 +114,7 @@
|
||||||
children = (
|
children = (
|
||||||
9D62AF3F2499CD1E00348F45 /* LICENSE */,
|
9D62AF3F2499CD1E00348F45 /* LICENSE */,
|
||||||
9D62AF402499CD3A00348F45 /* README.md */,
|
9D62AF402499CD3A00348F45 /* README.md */,
|
||||||
|
9D9F07F92553AB3800875B29 /* TODO.md */,
|
||||||
9D17168D2491C49300C83148 /* BuGS */,
|
9D17168D2491C49300C83148 /* BuGS */,
|
||||||
9D1716852491C49300C83148 /* Products */,
|
9D1716852491C49300C83148 /* Products */,
|
||||||
);
|
);
|
||||||
|
@ -135,8 +135,6 @@
|
||||||
children = (
|
children = (
|
||||||
9D17168E2491C49300C83148 /* main.c */,
|
9D17168E2491C49300C83148 /* main.c */,
|
||||||
9D1716902491C49300C83148 /* main.h */,
|
9D1716902491C49300C83148 /* main.h */,
|
||||||
9DC4D7BF24BE9F7100BACF4B /* tiles.h */,
|
|
||||||
9DC4D7C024BE9F7100BACF4B /* tiles.c */,
|
|
||||||
9D8FFC602491CA28005C9327 /* game.s */,
|
9D8FFC602491CA28005C9327 /* game.s */,
|
||||||
9D8FFC612491CAF0005C9327 /* game.h */,
|
9D8FFC612491CAF0005C9327 /* game.h */,
|
||||||
9DB1505024C3801100558B87 /* gameFlea.s */,
|
9DB1505024C3801100558B87 /* gameFlea.s */,
|
||||||
|
@ -151,6 +149,7 @@
|
||||||
9D2FF6DA24C4C79A000181E5 /* random.s */,
|
9D2FF6DA24C4C79A000181E5 /* random.s */,
|
||||||
9DB1505224C7495400558B87 /* globals.s */,
|
9DB1505224C7495400558B87 /* globals.s */,
|
||||||
9DB1505524D3BFCE00558B87 /* global.macros */,
|
9DB1505524D3BFCE00558B87 /* global.macros */,
|
||||||
|
9D47CCBA25525C1A00CDA5CB /* tileData.pl */,
|
||||||
9D3396F324AECACC003222B3 /* sprites */,
|
9D3396F324AECACC003222B3 /* sprites */,
|
||||||
9D1716912491C49300C83148 /* main.rez */,
|
9D1716912491C49300C83148 /* main.rez */,
|
||||||
9D1716932491C49300C83148 /* Makefile */,
|
9D1716932491C49300C83148 /* Makefile */,
|
||||||
|
@ -319,7 +318,6 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
9DC4D7C124BE9F7100BACF4B /* tiles.c in Sources */,
|
|
||||||
9D1716942491C49300C83148 /* Makefile in Sources */,
|
9D1716942491C49300C83148 /* Makefile in Sources */,
|
||||||
9D17168F2491C49300C83148 /* main.c in Sources */,
|
9D17168F2491C49300C83148 /* main.c in Sources */,
|
||||||
);
|
);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<key>Binary.xcscheme_^#shared#^_</key>
|
<key>Binary.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>3</integer>
|
<integer>2</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>BuGS.xcscheme_^#shared#^_</key>
|
<key>BuGS.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
|
@ -17,12 +17,12 @@
|
||||||
<key>DiskImage.xcscheme_^#shared#^_</key>
|
<key>DiskImage.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>2</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>doNotBuild.xcscheme_^#shared#^_</key>
|
<key>doNotBuild.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>1</integer>
|
<integer>3</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
|
|
@ -30,7 +30,7 @@ TARGETTYPE=desktop
|
||||||
|
|
||||||
# Add any other directories where you are putting C or assembly source
|
# Add any other directories where you are putting C or assembly source
|
||||||
# files to this list:
|
# files to this list:
|
||||||
SRCDIRS+=sprites
|
SRCDIRS+=sprites $(GENDIR)
|
||||||
|
|
||||||
# If you put your main entry point for your project in a file called main.c
|
# If you put your main entry point for your project in a file called main.c
|
||||||
# Then you don't need to change this value. If you want to call your entry
|
# Then you don't need to change this value. If you want to call your entry
|
||||||
|
@ -113,12 +113,16 @@ MESSAGE_CENTER=false
|
||||||
# All of your commands associated with a rule _must_ start with a tab
|
# All of your commands associated with a rule _must_ start with a tab
|
||||||
# character. Xcode makes it a bit tough to type a tab character by
|
# character. Xcode makes it a bit tough to type a tab character by
|
||||||
# default. Press option-tab within Xcode to insert a tab character.
|
# default. Press option-tab within Xcode to insert a tab character.
|
||||||
gen:
|
gen: $(GENDIR)/tileData.s
|
||||||
|
|
||||||
|
$(GENDIR)/tileData.s: tileData.pl Makefile
|
||||||
|
tileData.pl "$(GENDIR)"
|
||||||
|
|
||||||
# For any files you generated in the gen target above, you should
|
# For any files you generated in the gen target above, you should
|
||||||
# add rules in genclean to remove those generated files when you
|
# add rules in genclean to remove those generated files when you
|
||||||
# clean your build.
|
# clean your build.
|
||||||
genclean:
|
genclean:
|
||||||
|
$(RM) $(GENDIR)/tileData.s $(GENDIR)/tileData.h
|
||||||
|
|
||||||
# Do not change anything else below here...
|
# Do not change anything else below here...
|
||||||
include make/tail.mk
|
include make/tail.mk
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
game start
|
game start
|
||||||
using globalData
|
using globalData
|
||||||
|
using tileData
|
||||||
|
|
||||||
jsl setupScreen
|
jsl setupScreen
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
gameFlea start
|
gameFlea start
|
||||||
using globalData
|
using globalData
|
||||||
|
using tileData
|
||||||
|
|
||||||
FLEA_STATE_NONE equ 0
|
FLEA_STATE_NONE equ 0
|
||||||
FLEA_STATE_FALLING equ 1
|
FLEA_STATE_FALLING equ 1
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
gameMushroom start
|
gameMushroom start
|
||||||
using globalData
|
using globalData
|
||||||
|
using tileData
|
||||||
|
|
||||||
|
|
||||||
STARTING_NUM_MUSHROOMS equ 30
|
STARTING_NUM_MUSHROOMS equ 30
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
gamePlayer start
|
gamePlayer start
|
||||||
using globalData
|
using globalData
|
||||||
|
using tileData
|
||||||
|
|
||||||
PLAYER_TILES_HIGH equ 7
|
PLAYER_TILES_HIGH equ 7
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
gameScorpion start
|
gameScorpion start
|
||||||
using globalData
|
using globalData
|
||||||
|
using tileData
|
||||||
|
|
||||||
|
|
||||||
SCORPION_STATE_NONE equ 0
|
SCORPION_STATE_NONE equ 0
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
gameSegments start
|
gameSegments start
|
||||||
using globalData
|
using globalData
|
||||||
|
using tileData
|
||||||
|
|
||||||
|
|
||||||
SEGMENT_MAX_NUM equ 12
|
SEGMENT_MAX_NUM equ 12
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
gameSpider start
|
gameSpider start
|
||||||
using globalData
|
using globalData
|
||||||
|
using tileData
|
||||||
|
|
||||||
SPIDER_STATE_NONE equ 0
|
SPIDER_STATE_NONE equ 0
|
||||||
SPIDER_STATE_EXPLODING equ 1
|
SPIDER_STATE_EXPLODING equ 1
|
||||||
|
|
|
@ -27,39 +27,6 @@ SEGMENT_DIR_RIGHT equ 1
|
||||||
SEGMENT_SPEED_FAST equ 0
|
SEGMENT_SPEED_FAST equ 0
|
||||||
SEGMENT_SPEED_SLOW equ 1
|
SEGMENT_SPEED_SLOW equ 1
|
||||||
|
|
||||||
; A spider only travels in the bottom N rows. This defines that number.
|
|
||||||
SPIDER_MAX_NUM_POSSIBLE_ROWS equ 10
|
|
||||||
SPIDER_STARTING_TOP_ROW equ GAME_NUM_TILES_TALL-SPIDER_MAX_NUM_POSSIBLE_ROWS
|
|
||||||
SPIDER_STARTING_TOP_ROW_OFFSET equ SPIDER_STARTING_TOP_ROW*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO
|
|
||||||
|
|
||||||
SCREEN_BYTES_PER_ROW gequ 160
|
|
||||||
|
|
||||||
SIZEOF_TILE_INFO gequ 2
|
|
||||||
|
|
||||||
TILE_PIXEL_WIDTH gequ 8
|
|
||||||
TILE_PIXEL_HEIGHT gequ 8
|
|
||||||
|
|
||||||
TILE_BYTE_WIDTH gequ TILE_PIXEL_WIDTH/2
|
|
||||||
|
|
||||||
GAME_NUM_TILES_WIDE gequ 25
|
|
||||||
GAME_NUM_TILES_TALL gequ 25
|
|
||||||
|
|
||||||
NUM_GAME_TILES gequ GAME_NUM_TILES_WIDE*GAME_NUM_TILES_TALL
|
|
||||||
|
|
||||||
RHS_NUM_TILES_WIDE gequ 2
|
|
||||||
NUM_RHS_NON_GAME_TILES gequ RHS_NUM_TILES_WIDE*GAME_NUM_TILES_TALL
|
|
||||||
RHS_FIRST_TILE gequ NUM_GAME_TILES
|
|
||||||
RHS_FIRST_TILE_OFFSET gequ RHS_FIRST_TILE*SIZEOF_TILE_INFO
|
|
||||||
|
|
||||||
LHS_NUM_TILES_WIDE gequ 13
|
|
||||||
NUM_LHS_NON_GAME_TILES gequ LHS_NUM_TILES_WIDE*GAME_NUM_TILES_TALL
|
|
||||||
LHS_FIRST_TILE gequ RHS_FIRST_TILE+NUM_RHS_NON_GAME_TILES
|
|
||||||
LHS_FIRST_TILE_OFFSET gequ LHS_FIRST_TILE*SIZEOF_TILE_INFO
|
|
||||||
|
|
||||||
NUM_NON_GAME_TILES gequ NUM_RHS_NON_GAME_TILES+NUM_LHS_NON_GAME_TILES
|
|
||||||
|
|
||||||
TOTAL_NUM_TILES gequ NUM_GAME_TILES+NUM_NON_GAME_TILES
|
|
||||||
|
|
||||||
INVALID_TILE_NUM gequ $ffff
|
INVALID_TILE_NUM gequ $ffff
|
||||||
|
|
||||||
TILE_STATE_CLEAN gequ 0
|
TILE_STATE_CLEAN gequ 0
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
level start
|
level start
|
||||||
using globalData
|
using globalData
|
||||||
|
using tileData
|
||||||
|
|
||||||
NEXT_LEVEL_FRAME_COUNT equ 60
|
NEXT_LEVEL_FRAME_COUNT equ 60
|
||||||
|
|
||||||
|
|
11
BuGS/main.c
11
BuGS/main.c
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "game.h"
|
#include "game.h"
|
||||||
#include "tiles.h"
|
#include "tileData.h"
|
||||||
|
|
||||||
|
|
||||||
/* Defines and macros */
|
/* Defines and macros */
|
||||||
|
@ -34,11 +34,11 @@ unsigned int randomSeed;
|
||||||
/* Implementation */
|
/* Implementation */
|
||||||
|
|
||||||
|
|
||||||
tTileOffset randomMushroomOffset(void)
|
word randomMushroomOffset(void)
|
||||||
{
|
{
|
||||||
/* We do not put mushrooms in the bottom tile so we subtract the width here to find
|
/* We do not put mushrooms in the bottom tile so we subtract the width here to find
|
||||||
a tile number above that last line */
|
a tile number above that last line */
|
||||||
return (rand() % (NUM_GAME_TILES - GAME_NUM_TILES_WIDE)) * sizeof(word);
|
return (rand() % (NUM_GAME_TILES - GAME_NUM_TILES_WIDE)) * SIZEOF_TILE_INFO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -70,10 +70,7 @@ int main(void)
|
||||||
|
|
||||||
InitMouse(0);
|
InitMouse(0);
|
||||||
SetMouse(transparent);
|
SetMouse(transparent);
|
||||||
|
|
||||||
initTiles();
|
|
||||||
initNonGameTiles();
|
|
||||||
|
|
||||||
game();
|
game();
|
||||||
|
|
||||||
ShutDownTools(refIsHandle, toolStartupRef);
|
ShutDownTools(refIsHandle, toolStartupRef);
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
score start
|
score start
|
||||||
using globalData
|
using globalData
|
||||||
|
using tileData
|
||||||
|
|
||||||
TILE_SCORE_7TH_ROW equ LHS_FIRST_TILE+7*LHS_NUM_TILES_WIDE
|
TILE_SCORE_7TH_ROW equ LHS_FIRST_TILE+7*LHS_NUM_TILES_WIDE
|
||||||
TILE_SCORE_ONES equ TILE_SCORE_7TH_ROW-2
|
TILE_SCORE_ONES equ TILE_SCORE_7TH_ROW-2
|
||||||
|
|
447
BuGS/tileData.pl
Executable file
447
BuGS/tileData.pl
Executable file
|
@ -0,0 +1,447 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
# tileData.pl
|
||||||
|
# BuGS
|
||||||
|
#
|
||||||
|
# Created by Jeremy Rand on 2020-11-03.
|
||||||
|
# Copyright © 2020 Jeremy Rand. All rights reserved.
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use integer;
|
||||||
|
|
||||||
|
|
||||||
|
# main
|
||||||
|
|
||||||
|
|
||||||
|
die "$0: Expected one argument pointing to the gen directory" if ($#ARGV != 0);
|
||||||
|
|
||||||
|
my $gGenDir = $ARGV[0];
|
||||||
|
our %gEquates;
|
||||||
|
|
||||||
|
# These are global equates which will also become defines in the C header file. Also, these will drive the other
|
||||||
|
# data that is generated by this script.
|
||||||
|
|
||||||
|
$gEquates{"SCREEN_PIXELS_WIDE"} = 320;
|
||||||
|
$gEquates{"SCREEN_PIXELS_TALL"} = 200;
|
||||||
|
$gEquates{"SCREEN_PIXELS_PER_BYTE"} = 2;
|
||||||
|
$gEquates{"SCREEN_BYTES_PER_ROW"} = $gEquates{"SCREEN_PIXELS_WIDE"} / $gEquates{"SCREEN_PIXELS_PER_BYTE"};
|
||||||
|
|
||||||
|
$gEquates{"TILE_PIXEL_WIDTH"} = 8;
|
||||||
|
$gEquates{"TILE_PIXEL_HEIGHT"} = 8;
|
||||||
|
$gEquates{"TILE_BYTE_WIDTH"} = $gEquates{"TILE_PIXEL_WIDTH"} / $gEquates{"SCREEN_PIXELS_PER_BYTE"};
|
||||||
|
|
||||||
|
$gEquates{"TOTAL_TILES_WIDE"} = $gEquates{"SCREEN_PIXELS_WIDE"} / $gEquates{"TILE_PIXEL_WIDTH"};
|
||||||
|
$gEquates{"TOTAL_TILES_TALL"} = $gEquates{"SCREEN_PIXELS_TALL"} / $gEquates{"TILE_PIXEL_HEIGHT"};
|
||||||
|
$gEquates{"TOTAL_NUM_TILES"} = $gEquates{"TOTAL_TILES_WIDE"} * $gEquates{"TOTAL_TILES_TALL"};
|
||||||
|
|
||||||
|
$gEquates{"GAME_NUM_TILES_WIDE"} = 25;
|
||||||
|
$gEquates{"GAME_NUM_TILES_TALL"} = $gEquates{"TOTAL_TILES_TALL"};
|
||||||
|
$gEquates{"NUM_GAME_TILES"} = $gEquates{"GAME_NUM_TILES_WIDE"} * $gEquates{"GAME_NUM_TILES_TALL"};
|
||||||
|
|
||||||
|
$gEquates{"SIZEOF_TILE_INFO"} = 2;
|
||||||
|
|
||||||
|
$gEquates{"RHS_NUM_TILES_WIDE"} = 2;
|
||||||
|
$gEquates{"NUM_RHS_NON_GAMES_TILES"} = $gEquates{"RHS_NUM_TILES_WIDE"} * $gEquates{"TOTAL_TILES_TALL"};
|
||||||
|
$gEquates{"RHS_FIRST_TILE"} = $gEquates{"NUM_GAME_TILES"};
|
||||||
|
$gEquates{"RHS_FIRST_TILE_OFFSET"} = $gEquates{"RHS_FIRST_TILE"} * $gEquates{"SIZEOF_TILE_INFO"};
|
||||||
|
|
||||||
|
$gEquates{"LHS_NUM_TILES_WIDE"} = $gEquates{"TOTAL_TILES_WIDE"} - $gEquates{"GAME_NUM_TILES_WIDE"} - $gEquates{"RHS_NUM_TILES_WIDE"};
|
||||||
|
$gEquates{"NUM_LHS_NON_GAMES_TILES"} = $gEquates{"LHS_NUM_TILES_WIDE"} * $gEquates{"TOTAL_TILES_TALL"};
|
||||||
|
$gEquates{"LHS_FIRST_TILE"} = $gEquates{"RHS_FIRST_TILE"} + $gEquates{"NUM_RHS_NON_GAMES_TILES"};
|
||||||
|
$gEquates{"LHS_FIRST_TILE_OFFSET"} = $gEquates{"LHS_FIRST_TILE"} * $gEquates{"SIZEOF_TILE_INFO"};
|
||||||
|
|
||||||
|
$gEquates{"NUM_NON_GAME_TILES"} = $gEquates{"NUM_RHS_NON_GAMES_TILES"} + $gEquates{"NUM_LHS_NON_GAMES_TILES"};
|
||||||
|
|
||||||
|
$gEquates{"SPIDER_MAX_NUM_POSSIBLE_ROWS"} = 10;
|
||||||
|
$gEquates{"SPIDER_STARTING_TOP_ROW"} = $gEquates{"GAME_NUM_TILES_TALL"} - $gEquates{"SPIDER_MAX_NUM_POSSIBLE_ROWS"};
|
||||||
|
$gEquates{"SPIDER_STARTING_TOP_ROW_OFFSET"} = $gEquates{"SPIDER_STARTING_TOP_ROW"} * $gEquates{"GAME_NUM_TILES_WIDE"} * $gEquates{"SIZEOF_TILE_INFO"};
|
||||||
|
|
||||||
|
|
||||||
|
our @gTileDirty = ("TILE_STATE_CLEAN") x $gEquates{"TOTAL_NUM_TILES"};
|
||||||
|
our @gTileScreenOffset = (0) x $gEquates{"TOTAL_NUM_TILES"};
|
||||||
|
our @gTileType = ("TILE_EMPTY") x $gEquates{"TOTAL_NUM_TILES"};
|
||||||
|
our @gTileAbove = ("INVALID_TILE_NUM") x $gEquates{"TOTAL_NUM_TILES"};
|
||||||
|
our @gTileBelow = ("INVALID_TILE_NUM") x $gEquates{"TOTAL_NUM_TILES"};
|
||||||
|
our @gTileLeft = ("INVALID_TILE_NUM") x $gEquates{"TOTAL_NUM_TILES"};
|
||||||
|
our @gTileRight = ("INVALID_TILE_NUM") x $gEquates{"TOTAL_NUM_TILES"};
|
||||||
|
our @gTileBitOffset = (0) x $gEquates{"NUM_GAME_TILES"};
|
||||||
|
our @gTileBitMask = (0) x $gEquates{"NUM_GAME_TILES"};
|
||||||
|
our @gDirtyNonGameTiles = ("INVALID_TILE_NUM") x $gEquates{"NUM_NON_GAME_TILES"};
|
||||||
|
our $gNumDirtyNonGameTiles = 0;
|
||||||
|
|
||||||
|
|
||||||
|
sub printTileData
|
||||||
|
{
|
||||||
|
my ($symbol, @data) = @_;
|
||||||
|
|
||||||
|
print TILEDATA_S << "EOF";
|
||||||
|
|
||||||
|
|
||||||
|
$symbol anop
|
||||||
|
EOF
|
||||||
|
|
||||||
|
for my $tileNum (0 .. $#data)
|
||||||
|
{
|
||||||
|
print TILEDATA_S " dc i2'$data[$tileNum]'\t; Tile number $tileNum\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub gameXYToTileOffset
|
||||||
|
{
|
||||||
|
my ($x, $y) = @_;
|
||||||
|
|
||||||
|
return (($y * $gEquates{"GAME_NUM_TILES_WIDE"}) + $x) * $gEquates{"SIZEOF_TILE_INFO"};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub rhsXYToTileOffset
|
||||||
|
{
|
||||||
|
my ($x, $y) = @_;
|
||||||
|
|
||||||
|
return ($gEquates{"RHS_FIRST_TILE"} + ($y * $gEquates{"RHS_NUM_TILES_WIDE"}) + $x) * $gEquates{"SIZEOF_TILE_INFO"};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub lhsXYToTileNum
|
||||||
|
{
|
||||||
|
my ($x, $y) = @_;
|
||||||
|
|
||||||
|
return $gEquates{"LHS_FIRST_TILE"} + ($y * $gEquates{"LHS_NUM_TILES_WIDE"}) + $x;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub lhsXYToTileOffset
|
||||||
|
{
|
||||||
|
my ($x, $y) = @_;
|
||||||
|
|
||||||
|
return lhsXYToTileNum($x, $y) * $gEquates{"SIZEOF_TILE_INFO"};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub addDirtyNonGameTile
|
||||||
|
{
|
||||||
|
my ($tileNum) = @_;
|
||||||
|
|
||||||
|
if ($gTileDirty[$tileNum] eq "TILE_STATE_CLEAN")
|
||||||
|
{
|
||||||
|
my $tileOffset = $tileNum * $gEquates{"SIZEOF_TILE_INFO"};
|
||||||
|
my $dirtyIndex = $gNumDirtyNonGameTiles / $gEquates{"SIZEOF_TILE_INFO"};
|
||||||
|
|
||||||
|
$gTileDirty[$tileNum] = "TILE_STATE_DIRTY";
|
||||||
|
$gDirtyNonGameTiles[$dirtyIndex] = $tileOffset;
|
||||||
|
$gNumDirtyNonGameTiles += $gEquates{"SIZEOF_TILE_INFO"};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub addLhsGameTile
|
||||||
|
{
|
||||||
|
my ($x, $y, $tileType) = @_;
|
||||||
|
my $tileNum = lhsXYToTileNum($x, $y);
|
||||||
|
$gTileType[$tileNum] = $tileType;
|
||||||
|
addDirtyNonGameTile($tileNum);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub addLhsGameString
|
||||||
|
{
|
||||||
|
my ($x, $y, $string) = @_;
|
||||||
|
|
||||||
|
foreach my $char (split('', $string)) {
|
||||||
|
if ($char =~ /^[0-9]$/)
|
||||||
|
{
|
||||||
|
addLhsGameTile($x, $y, "TILE_NUMBER_$char");
|
||||||
|
}
|
||||||
|
elsif ($char eq ":")
|
||||||
|
{
|
||||||
|
addLhsGameTile($x, $y, "TILE_SYMBOL_COLON");
|
||||||
|
}
|
||||||
|
elsif ($char ne " ")
|
||||||
|
{
|
||||||
|
addLhsGameTile($x, $y, "TILE_LETTER_$char");
|
||||||
|
}
|
||||||
|
$x++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub screenAddressForTileAtXY
|
||||||
|
{
|
||||||
|
my ($x, $y) = @_;
|
||||||
|
|
||||||
|
return 0x2000 + ($gEquates{"SCREEN_BYTES_PER_ROW"} * $y) + ($x / $gEquates{"SCREEN_PIXELS_PER_BYTE"}) + 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub initTiles
|
||||||
|
{
|
||||||
|
my($tileX, $tileY, $lastOffset);
|
||||||
|
my $tileIndex = 0;
|
||||||
|
my $bitOffset = 0;
|
||||||
|
my $bitMask = 1;
|
||||||
|
my $rhsTileIndex = $gEquates{"RHS_FIRST_TILE"};
|
||||||
|
my $lhsTileIndex = $gEquates{"LHS_FIRST_TILE"};
|
||||||
|
|
||||||
|
for ($tileY = 0; $tileY < $gEquates{"TOTAL_TILES_TALL"}; $tileY++)
|
||||||
|
{
|
||||||
|
$lastOffset = screenAddressForTileAtXY(0, $tileY * $gEquates{"TILE_PIXEL_HEIGHT"});
|
||||||
|
|
||||||
|
for ($tileX = 0; $tileX < $gEquates{"LHS_NUM_TILES_WIDE"}; $tileX++)
|
||||||
|
{
|
||||||
|
$gTileScreenOffset[$lhsTileIndex] = $lastOffset;
|
||||||
|
|
||||||
|
if ($tileY != 0)
|
||||||
|
{
|
||||||
|
$gTileAbove[$lhsTileIndex] = lhsXYToTileOffset($tileX, $tileY - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($tileY != $gEquates{"TOTAL_TILES_TALL"} - 1)
|
||||||
|
{
|
||||||
|
$gTileBelow[$lhsTileIndex] = lhsXYToTileOffset($tileX, $tileY + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($tileX != 0)
|
||||||
|
{
|
||||||
|
$gTileLeft[$lhsTileIndex] = lhsXYToTileOffset($tileX - 1, $tileY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($tileX == $gEquates{"LHS_NUM_TILES_WIDE"} - 1)
|
||||||
|
{
|
||||||
|
$gTileRight[$lhsTileIndex] = gameXYToTileOffset(0, $tileY);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$gTileRight[$lhsTileIndex] = lhsXYToTileOffset($tileX + 1, $tileY);
|
||||||
|
}
|
||||||
|
|
||||||
|
$lhsTileIndex++;
|
||||||
|
|
||||||
|
$lastOffset += $gEquates{"TILE_BYTE_WIDTH"};
|
||||||
|
}
|
||||||
|
|
||||||
|
for ($tileX = 0; $tileX < $gEquates{"GAME_NUM_TILES_WIDE"}; $tileX++)
|
||||||
|
{
|
||||||
|
$gTileScreenOffset[$tileIndex] = $lastOffset;
|
||||||
|
$gTileBitOffset[$tileIndex] = $bitOffset;
|
||||||
|
$gTileBitMask[$tileIndex] = $bitMask;
|
||||||
|
|
||||||
|
if ($tileY != 0)
|
||||||
|
{
|
||||||
|
$gTileAbove[$tileIndex] = gameXYToTileOffset($tileX, $tileY - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($tileY != $gEquates{"TOTAL_TILES_TALL"} - 1)
|
||||||
|
{
|
||||||
|
$gTileBelow[$tileIndex] = gameXYToTileOffset($tileX, $tileY + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($tileX == 0)
|
||||||
|
{
|
||||||
|
$gTileLeft[$tileIndex] = lhsXYToTileOffset($gEquates{"LHS_NUM_TILES_WIDE"} - 1, $tileY);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$gTileLeft[$tileIndex] = gameXYToTileOffset($tileX - 1, $tileY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($tileX == $gEquates{"GAME_NUM_TILES_WIDE"} - 1)
|
||||||
|
{
|
||||||
|
$gTileRight[$tileIndex] = rhsXYToTileOffset(0, $tileY);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$gTileRight[$tileIndex] = gameXYToTileOffset($tileX + 1, $tileY);
|
||||||
|
}
|
||||||
|
|
||||||
|
$tileIndex++;
|
||||||
|
|
||||||
|
if ($bitMask == 0x8000)
|
||||||
|
{
|
||||||
|
$bitOffset += $gEquates{"SIZEOF_TILE_INFO"} = 2;
|
||||||
|
$bitMask = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$bitMask <<= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$lastOffset += $gEquates{"TILE_BYTE_WIDTH"};
|
||||||
|
}
|
||||||
|
|
||||||
|
for ($tileX = 0; $tileX < $gEquates{"RHS_NUM_TILES_WIDE"}; $tileX++)
|
||||||
|
{
|
||||||
|
$gTileScreenOffset[$rhsTileIndex] = $lastOffset;
|
||||||
|
|
||||||
|
if ($tileY != 0)
|
||||||
|
{
|
||||||
|
$gTileAbove[$rhsTileIndex] = rhsXYToTileOffset($tileX, $tileY - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($tileY != $gEquates{"TOTAL_TILES_TALL"} - 1)
|
||||||
|
{
|
||||||
|
$gTileBelow[$rhsTileIndex] = rhsXYToTileOffset($tileX, $tileY + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($tileX == 0)
|
||||||
|
{
|
||||||
|
$gTileLeft[$rhsTileIndex] = gameXYToTileOffset($gEquates{"GAME_NUM_TILES_WIDE"} - 1, $tileY);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$gTileLeft[$rhsTileIndex] = rhsXYToTileOffset($tileX - 1, $tileY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($tileX != $gEquates{"RHS_NUM_TILES_WIDE"} - 1)
|
||||||
|
{
|
||||||
|
$gTileRight[$rhsTileIndex] = rhsXYToTileOffset($tileX + 1, $tileY);
|
||||||
|
}
|
||||||
|
|
||||||
|
$rhsTileIndex++;
|
||||||
|
|
||||||
|
$lastOffset += $gEquates{"TILE_BYTE_WIDTH"};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub initNonGameTiles
|
||||||
|
{
|
||||||
|
my $x;
|
||||||
|
my $y;
|
||||||
|
|
||||||
|
$x = $gEquates{"LHS_NUM_TILES_WIDE"} / 2;
|
||||||
|
$y = 0;
|
||||||
|
addLhsGameTile($x, $y, "TILE_LETTER_B");
|
||||||
|
$x++;
|
||||||
|
addLhsGameTile($x, $y, "TILE_LETTER_WHITE_U");
|
||||||
|
$x++;
|
||||||
|
addLhsGameTile($x, $y, "TILE_LETTER_GREEN_G");
|
||||||
|
$x++;
|
||||||
|
addLhsGameTile($x, $y, "TILE_LETTER_GREEN_S");
|
||||||
|
|
||||||
|
$x = 0;
|
||||||
|
$y = 3;
|
||||||
|
addLhsGameString($x, $y, "PLAYER 1");
|
||||||
|
|
||||||
|
$x = 2;
|
||||||
|
$y = 5;
|
||||||
|
addLhsGameString($x, $y, "SCORE:");
|
||||||
|
|
||||||
|
$x = $gEquates{"LHS_NUM_TILES_WIDE"} - 2;
|
||||||
|
$y = 6;
|
||||||
|
addLhsGameString($x, $y, "0");
|
||||||
|
|
||||||
|
$x = 2;
|
||||||
|
$y = 8;
|
||||||
|
addLhsGameString($x, $y, "LIVES:");
|
||||||
|
|
||||||
|
$x = $gEquates{"LHS_NUM_TILES_WIDE"} - 2;
|
||||||
|
$y = 9;
|
||||||
|
for (my $i = 0; $i < 3; $i++)
|
||||||
|
{
|
||||||
|
addLhsGameTile($x, $y, "TILE_PLAYER");
|
||||||
|
$x--;
|
||||||
|
}
|
||||||
|
|
||||||
|
$x = 0;
|
||||||
|
$y = 12;
|
||||||
|
addLhsGameString($x, $y, "HIGH SCORE:");
|
||||||
|
|
||||||
|
$x = $gEquates{"LHS_NUM_TILES_WIDE"} - 2;
|
||||||
|
$y = 13;
|
||||||
|
addLhsGameString($x, $y, "0");
|
||||||
|
|
||||||
|
$x = 0;
|
||||||
|
$y = 16;
|
||||||
|
addLhsGameString($x, $y, "PLAYER 2");
|
||||||
|
|
||||||
|
$x = 2;
|
||||||
|
$y = 18;
|
||||||
|
addLhsGameString($x, $y, "SCORE:");
|
||||||
|
|
||||||
|
$x = $gEquates{"LHS_NUM_TILES_WIDE"} - 2;
|
||||||
|
$y = 19;
|
||||||
|
addLhsGameString($x, $y, "0");
|
||||||
|
|
||||||
|
$x = 2;
|
||||||
|
$y = 21;
|
||||||
|
addLhsGameString($x, $y, "LIVES:");
|
||||||
|
|
||||||
|
$x = $gEquates{"LHS_NUM_TILES_WIDE"} - 2;
|
||||||
|
$y = 22;
|
||||||
|
for (my $i = 0; $i < 3; $i++)
|
||||||
|
{
|
||||||
|
addLhsGameTile($x, $y, "TILE_PLAYER");
|
||||||
|
$x--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
initTiles();
|
||||||
|
initNonGameTiles();
|
||||||
|
|
||||||
|
# Generate the tileData.s file
|
||||||
|
|
||||||
|
open(TILEDATA_S, "> $gGenDir/tileData.s") or die "$0: Unable to open $gGenDir/tileData.s for writing, $!";
|
||||||
|
print TILEDATA_S << "EOF";
|
||||||
|
case on
|
||||||
|
mcopy tilesData.macros
|
||||||
|
keep tilesData
|
||||||
|
|
||||||
|
tileData data
|
||||||
|
using globalData
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
foreach my $equate (sort keys %gEquates)
|
||||||
|
{
|
||||||
|
print TILEDATA_S "$equate\tgequ " . $gEquates{$equate} . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
printTileData("tileDirty", @gTileDirty);
|
||||||
|
printTileData("tileScreenOffset", @gTileScreenOffset);
|
||||||
|
printTileData("tileType", @gTileType);
|
||||||
|
printTileData("tileAbove", @gTileAbove);
|
||||||
|
printTileData("tileBelow", @gTileBelow);
|
||||||
|
printTileData("tileLeft", @gTileLeft);
|
||||||
|
printTileData("tileRight", @gTileRight);
|
||||||
|
printTileData("tileBitOffset", @gTileBitOffset);
|
||||||
|
printTileData("tileBitMask", @gTileBitMask);
|
||||||
|
printTileData("dirtyNonGameTiles", @gDirtyNonGameTiles);
|
||||||
|
|
||||||
|
|
||||||
|
print TILEDATA_S << "EOF";
|
||||||
|
|
||||||
|
|
||||||
|
numDirtyNonGameTiles dc i2'$gNumDirtyNonGameTiles'
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
close(TILEDATA_S);
|
||||||
|
|
||||||
|
|
||||||
|
# Generate the tileData.h file
|
||||||
|
|
||||||
|
open(TILEDATA_H, "> $gGenDir/tileData.h") or die "$0: Unable to open $gGenDir/tileData.h for writing, $!";
|
||||||
|
print TILEDATA_H << "EOF";
|
||||||
|
|
||||||
|
#ifndef _GUARD_PROJECTBuGS_FILEtileData_
|
||||||
|
#define _GUARD_PROJECTBuGS_FILEtileData_
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
foreach my $equate (sort keys %gEquates)
|
||||||
|
{
|
||||||
|
print TILEDATA_H "#define $equate " . $gEquates{$equate} . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
print TILEDATA_H << "EOF";
|
||||||
|
|
||||||
|
#endif /* define _GUARD_PROJECTBuGS_FILEtileData_ */
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
close(TILEDATA_H);
|
432
BuGS/tiles.c
432
BuGS/tiles.c
|
@ -1,432 +0,0 @@
|
||||||
/*
|
|
||||||
* tiles.c
|
|
||||||
* BuGS
|
|
||||||
*
|
|
||||||
* Created by Jeremy Rand on 2020-07-14.
|
|
||||||
* Copyright © 2020 Jeremy Rand. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "tiles.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* Defines */
|
|
||||||
|
|
||||||
#define TILE_WIDTH 8
|
|
||||||
#define TILE_HEIGHT 8
|
|
||||||
|
|
||||||
#define SCREEN_WIDTH 320
|
|
||||||
#define SCREEN_HEIGHT 200
|
|
||||||
|
|
||||||
#define GAME_LEFT_MOST_X_POS (13 * TILE_WIDTH) /* 13 tiles from the left */
|
|
||||||
#define GAME_TOP_MOST_Y_POS (0 * TILE_HEIGHT)
|
|
||||||
|
|
||||||
#define GAME_X_Y_TO_TILE_OFFSET(X, Y) \
|
|
||||||
((((Y) * GAME_NUM_TILES_WIDE) + (X)) * sizeof(word))
|
|
||||||
|
|
||||||
#define RHS_X_Y_TO_TILE_OFFSET(X, Y) \
|
|
||||||
((RHS_FIRST_TILE + ((Y) * RHS_NUM_TILES_WIDE) + (X)) * sizeof(word))
|
|
||||||
|
|
||||||
#define LHS_X_Y_TO_TILE_OFFSET(X, Y) \
|
|
||||||
((LHS_FIRST_TILE + ((Y) * LHS_NUM_TILES_WIDE) + (X)) * sizeof(word))
|
|
||||||
|
|
||||||
#define SCREEN_ADDRESS_FOR_TILE_AT_X_Y(X, Y) \
|
|
||||||
(0x2000 + (0xa0 * (Y)) + ((X) / 2) + 3)
|
|
||||||
|
|
||||||
#define STARTING_NUM_PLAYERS 3
|
|
||||||
|
|
||||||
#define ADD_DIRTY_NON_GAME_TILE(tileNum) \
|
|
||||||
if (!tileDirty[tileNum]) { \
|
|
||||||
tileDirty[tileNum] = 1; \
|
|
||||||
dirtyNonGameTiles[numDirtyNonGameTiles / 2] = ((tileNum) * sizeof(word)); \
|
|
||||||
numDirtyNonGameTiles += 2; \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Globals */
|
|
||||||
|
|
||||||
word tileDirty[TOTAL_NUM_TILES];
|
|
||||||
word tileScreenOffset[TOTAL_NUM_TILES];
|
|
||||||
tTileType tileType[TOTAL_NUM_TILES];
|
|
||||||
tTileOffset tileAbove[TOTAL_NUM_TILES];
|
|
||||||
tTileOffset tileBelow[TOTAL_NUM_TILES];
|
|
||||||
tTileOffset tileLeft[TOTAL_NUM_TILES];
|
|
||||||
tTileOffset tileRight[TOTAL_NUM_TILES];
|
|
||||||
word tileBitOffset[NUM_GAME_TILES];
|
|
||||||
word tileBitMask[NUM_GAME_TILES];
|
|
||||||
|
|
||||||
tTileOffset dirtyNonGameTiles[NUM_NON_GAME_TILES];
|
|
||||||
word numDirtyNonGameTiles;
|
|
||||||
|
|
||||||
|
|
||||||
/* Implementation */
|
|
||||||
|
|
||||||
void initTiles(void)
|
|
||||||
{
|
|
||||||
word tileX;
|
|
||||||
word tileY;
|
|
||||||
word lastOffset;
|
|
||||||
word tileIndex = 0;
|
|
||||||
word bitOffset = 0;
|
|
||||||
word bitMask = 1;
|
|
||||||
word rhsTileIndex = RHS_FIRST_TILE;
|
|
||||||
word lhsTileIndex = LHS_FIRST_TILE;
|
|
||||||
|
|
||||||
for (tileY = 0; tileY < GAME_NUM_TILES_TALL; tileY++)
|
|
||||||
{
|
|
||||||
lastOffset = SCREEN_ADDRESS_FOR_TILE_AT_X_Y(0, tileY * TILE_HEIGHT);
|
|
||||||
|
|
||||||
for (tileX = 0; tileX < LHS_NUM_TILES_WIDE; tileX++)
|
|
||||||
{
|
|
||||||
tileDirty[lhsTileIndex] = 0;
|
|
||||||
tileScreenOffset[lhsTileIndex] = lastOffset;
|
|
||||||
tileType[lhsTileIndex] = TILE_EMPTY;
|
|
||||||
|
|
||||||
if (tileY == 0)
|
|
||||||
tileAbove[lhsTileIndex] = INVALID_TILE_NUM;
|
|
||||||
else
|
|
||||||
tileAbove[lhsTileIndex] = LHS_X_Y_TO_TILE_OFFSET(tileX, tileY - 1);
|
|
||||||
|
|
||||||
if (tileY == GAME_NUM_TILES_TALL - 1)
|
|
||||||
tileBelow[lhsTileIndex] = INVALID_TILE_NUM;
|
|
||||||
else
|
|
||||||
tileBelow[lhsTileIndex] = LHS_X_Y_TO_TILE_OFFSET(tileX, tileY + 1);
|
|
||||||
|
|
||||||
if (tileX == 0)
|
|
||||||
tileLeft[lhsTileIndex] = INVALID_TILE_NUM;
|
|
||||||
else
|
|
||||||
tileLeft[lhsTileIndex] = LHS_X_Y_TO_TILE_OFFSET(tileX - 1, tileY);
|
|
||||||
|
|
||||||
if (tileX == LHS_NUM_TILES_WIDE - 1)
|
|
||||||
tileRight[lhsTileIndex] = GAME_X_Y_TO_TILE_OFFSET(0, tileY);
|
|
||||||
else
|
|
||||||
tileRight[lhsTileIndex] = LHS_X_Y_TO_TILE_OFFSET(tileX + 1, tileY);
|
|
||||||
|
|
||||||
lhsTileIndex++;
|
|
||||||
|
|
||||||
lastOffset += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (tileX = 0; tileX < GAME_NUM_TILES_WIDE; tileX++)
|
|
||||||
{
|
|
||||||
tileDirty[tileIndex] = 0;
|
|
||||||
tileScreenOffset[tileIndex] = lastOffset;
|
|
||||||
tileType[tileIndex] = TILE_EMPTY;
|
|
||||||
tileBitOffset[tileIndex] = bitOffset;
|
|
||||||
tileBitMask[tileIndex] = bitMask;
|
|
||||||
|
|
||||||
if (tileY == 0)
|
|
||||||
tileAbove[tileIndex] = INVALID_TILE_NUM;
|
|
||||||
else
|
|
||||||
tileAbove[tileIndex] = GAME_X_Y_TO_TILE_OFFSET(tileX, tileY - 1);
|
|
||||||
|
|
||||||
if (tileY == GAME_NUM_TILES_TALL - 1)
|
|
||||||
tileBelow[tileIndex] = INVALID_TILE_NUM;
|
|
||||||
else
|
|
||||||
tileBelow[tileIndex] = GAME_X_Y_TO_TILE_OFFSET(tileX, tileY + 1);
|
|
||||||
|
|
||||||
if (tileX == 0)
|
|
||||||
tileLeft[tileIndex] = LHS_X_Y_TO_TILE_OFFSET(LHS_NUM_TILES_WIDE - 1, tileY);
|
|
||||||
else
|
|
||||||
tileLeft[tileIndex] = GAME_X_Y_TO_TILE_OFFSET(tileX - 1, tileY);
|
|
||||||
|
|
||||||
if (tileX == GAME_NUM_TILES_WIDE - 1)
|
|
||||||
tileRight[tileIndex] = RHS_X_Y_TO_TILE_OFFSET(0, tileY);
|
|
||||||
else
|
|
||||||
tileRight[tileIndex] = GAME_X_Y_TO_TILE_OFFSET(tileX + 1, tileY);
|
|
||||||
|
|
||||||
tileIndex++;
|
|
||||||
|
|
||||||
if (bitMask == 0x8000)
|
|
||||||
{
|
|
||||||
bitOffset += sizeof(word);
|
|
||||||
bitMask = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bitMask <<= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
lastOffset += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (tileX = 0; tileX < RHS_NUM_TILES_WIDE; tileX++)
|
|
||||||
{
|
|
||||||
tileDirty[rhsTileIndex] = 0;
|
|
||||||
tileScreenOffset[rhsTileIndex] = lastOffset;
|
|
||||||
tileType[rhsTileIndex] = TILE_EMPTY;
|
|
||||||
|
|
||||||
if (tileY == 0)
|
|
||||||
tileAbove[rhsTileIndex] = INVALID_TILE_NUM;
|
|
||||||
else
|
|
||||||
tileAbove[rhsTileIndex] = RHS_X_Y_TO_TILE_OFFSET(tileX, tileY - 1);
|
|
||||||
|
|
||||||
if (tileY == GAME_NUM_TILES_TALL - 1)
|
|
||||||
tileBelow[rhsTileIndex] = INVALID_TILE_NUM;
|
|
||||||
else
|
|
||||||
tileBelow[rhsTileIndex] = RHS_X_Y_TO_TILE_OFFSET(tileX, tileY + 1);
|
|
||||||
|
|
||||||
if (tileX == 0)
|
|
||||||
tileLeft[rhsTileIndex] = GAME_X_Y_TO_TILE_OFFSET(GAME_NUM_TILES_WIDE - 1, tileY);
|
|
||||||
else
|
|
||||||
tileLeft[rhsTileIndex] = RHS_X_Y_TO_TILE_OFFSET(tileX - 1, tileY);
|
|
||||||
|
|
||||||
if (tileX == RHS_NUM_TILES_WIDE - 1)
|
|
||||||
tileRight[rhsTileIndex] = INVALID_TILE_NUM;
|
|
||||||
else
|
|
||||||
tileRight[rhsTileIndex] = RHS_X_Y_TO_TILE_OFFSET(tileX + 1, tileY);
|
|
||||||
|
|
||||||
rhsTileIndex++;
|
|
||||||
|
|
||||||
lastOffset += 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
numDirtyNonGameTiles = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void initNonGameTiles(void)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
tTileNum tileNum;
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (LHS_NUM_TILES_WIDE / 2);
|
|
||||||
tileType[tileNum] = TILE_LETTER_B;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_WHITE_U;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_GREEN_G;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_GREEN_S;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (3 * LHS_NUM_TILES_WIDE);
|
|
||||||
tileType[tileNum] = TILE_LETTER_P;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_L;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_A;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_Y;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_E;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_R;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_NUMBER_1;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (5 * LHS_NUM_TILES_WIDE) + 2;
|
|
||||||
tileType[tileNum] = TILE_LETTER_S;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_C;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_O;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_R;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_E;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_SYMBOL_COLON;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (7 * LHS_NUM_TILES_WIDE) - 2;
|
|
||||||
tileType[tileNum] = TILE_NUMBER_0;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (8 * LHS_NUM_TILES_WIDE) + 2;
|
|
||||||
tileType[tileNum] = TILE_LETTER_L;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_I;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_V;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_E;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_S;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_SYMBOL_COLON;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (10 * LHS_NUM_TILES_WIDE) - 2;
|
|
||||||
for (i = 0; i < STARTING_NUM_PLAYERS; i++)
|
|
||||||
{
|
|
||||||
tileType[tileNum] = TILE_PLAYER;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
tileNum--;
|
|
||||||
}
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (12 * LHS_NUM_TILES_WIDE);
|
|
||||||
tileType[tileNum] = TILE_LETTER_H;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_I;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_G;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_H;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_S;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_C;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_O;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_R;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_E;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_SYMBOL_COLON;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (14 * LHS_NUM_TILES_WIDE) - 2;
|
|
||||||
tileType[tileNum] = TILE_NUMBER_0;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (16 * LHS_NUM_TILES_WIDE);
|
|
||||||
tileType[tileNum] = TILE_LETTER_P;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_L;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_A;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_Y;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_E;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_R;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_NUMBER_2;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (18 * LHS_NUM_TILES_WIDE) + 2;
|
|
||||||
tileType[tileNum] = TILE_LETTER_S;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_C;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_O;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_R;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_E;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_SYMBOL_COLON;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (20 * LHS_NUM_TILES_WIDE) - 2;
|
|
||||||
tileType[tileNum] = TILE_NUMBER_0;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (21 * LHS_NUM_TILES_WIDE) + 2;
|
|
||||||
tileType[tileNum] = TILE_LETTER_L;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_I;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_V;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_E;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_LETTER_S;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum++;
|
|
||||||
tileType[tileNum] = TILE_SYMBOL_COLON;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
|
|
||||||
tileNum = LHS_FIRST_TILE + (23 * LHS_NUM_TILES_WIDE) - 2;
|
|
||||||
for (i = 0; i < STARTING_NUM_PLAYERS; i++)
|
|
||||||
{
|
|
||||||
tileType[tileNum] = TILE_PLAYER;
|
|
||||||
ADD_DIRTY_NON_GAME_TILE(tileNum);
|
|
||||||
tileNum--;
|
|
||||||
}
|
|
||||||
}
|
|
130
BuGS/tiles.h
130
BuGS/tiles.h
|
@ -1,130 +0,0 @@
|
||||||
/*
|
|
||||||
* tiles.h
|
|
||||||
* BuGS
|
|
||||||
*
|
|
||||||
* Created by Jeremy Rand on 2020-07-14.
|
|
||||||
* Copyright © 2020 Jeremy Rand. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _GUARD_PROJECTBuGS_FILEtiles_
|
|
||||||
#define _GUARD_PROJECTBuGS_FILEtiles_
|
|
||||||
|
|
||||||
|
|
||||||
#include <types.h>
|
|
||||||
|
|
||||||
|
|
||||||
/* Defines */
|
|
||||||
|
|
||||||
#define GAME_NUM_TILES_WIDE 25
|
|
||||||
#define GAME_NUM_TILES_TALL 25
|
|
||||||
|
|
||||||
#define NUM_GAME_TILES (GAME_NUM_TILES_WIDE * GAME_NUM_TILES_TALL)
|
|
||||||
|
|
||||||
#define RHS_NUM_TILES_WIDE 2
|
|
||||||
#define NUM_RHS_NON_GAME_TILES (RHS_NUM_TILES_WIDE * GAME_NUM_TILES_TALL)
|
|
||||||
#define RHS_FIRST_TILE NUM_GAME_TILES
|
|
||||||
|
|
||||||
#define LHS_NUM_TILES_WIDE 13
|
|
||||||
#define NUM_LHS_NON_GAME_TILES (LHS_NUM_TILES_WIDE * GAME_NUM_TILES_TALL)
|
|
||||||
#define LHS_FIRST_TILE (RHS_FIRST_TILE + NUM_RHS_NON_GAME_TILES)
|
|
||||||
|
|
||||||
#define NUM_NON_GAME_TILES (NUM_RHS_NON_GAME_TILES + NUM_LHS_NON_GAME_TILES)
|
|
||||||
|
|
||||||
#define TOTAL_NUM_TILES (NUM_GAME_TILES + NUM_NON_GAME_TILES)
|
|
||||||
|
|
||||||
#define INVALID_TILE_NUM 0xffff
|
|
||||||
|
|
||||||
|
|
||||||
/* Types */
|
|
||||||
|
|
||||||
typedef word tTileNum;
|
|
||||||
typedef word tTileOffset; /* A tile offset is a tile number times the sizeof(tTile). */
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
TILE_EMPTY = 0,
|
|
||||||
TILE_MUSHROOM1 = 1 * 4,
|
|
||||||
TILE_MUSHROOM2 = 2 * 4,
|
|
||||||
TILE_MUSHROOM3 = 3 * 4,
|
|
||||||
TILE_MUSHROOM4 = 4 * 4,
|
|
||||||
TILE_POISON_MUSHROOM1 = 9 * 4,
|
|
||||||
TILE_POISON_MUSHROOM2 = 10 * 4,
|
|
||||||
TILE_POISON_MUSHROOM3 = 11 * 4,
|
|
||||||
TILE_POISON_MUSHROOM4 = 12 * 4,
|
|
||||||
|
|
||||||
TILE_SYMBOL_C = 5 * 4,
|
|
||||||
TILE_SYMBOL_P = 6 * 4,
|
|
||||||
TILE_SYMBOL_DOT = 7 * 4,
|
|
||||||
TILE_SYMBOL_COLON = 8 * 4,
|
|
||||||
|
|
||||||
TILE_LETTER_A = 13 * 4,
|
|
||||||
TILE_LETTER_B = 14 * 4,
|
|
||||||
TILE_LETTER_C = 15 * 4,
|
|
||||||
TILE_LETTER_D = 16 * 4,
|
|
||||||
TILE_LETTER_E = 17 * 4,
|
|
||||||
TILE_LETTER_F = 18 * 4,
|
|
||||||
TILE_LETTER_G = 19 * 4,
|
|
||||||
TILE_LETTER_H = 20 * 4,
|
|
||||||
TILE_LETTER_I = 21 * 4,
|
|
||||||
TILE_LETTER_J = 22 * 4,
|
|
||||||
TILE_LETTER_K = 23 * 4,
|
|
||||||
TILE_LETTER_L = 24 * 4,
|
|
||||||
TILE_LETTER_M = 25 * 4,
|
|
||||||
TILE_LETTER_N = 26 * 4,
|
|
||||||
TILE_LETTER_O = 27 * 4,
|
|
||||||
TILE_LETTER_P = 28 * 4,
|
|
||||||
TILE_LETTER_Q = 29 * 4,
|
|
||||||
TILE_LETTER_R = 30 * 4,
|
|
||||||
TILE_LETTER_S = 31 * 4,
|
|
||||||
TILE_LETTER_T = 32 * 4,
|
|
||||||
TILE_LETTER_U = 33 * 4,
|
|
||||||
TILE_LETTER_V = 34 * 4,
|
|
||||||
TILE_LETTER_W = 35 * 4,
|
|
||||||
TILE_LETTER_X = 36 * 4,
|
|
||||||
TILE_LETTER_Y = 37 * 4,
|
|
||||||
TILE_LETTER_Z = 38 * 4,
|
|
||||||
|
|
||||||
TILE_NUMBER_0 = 39 * 4,
|
|
||||||
TILE_NUMBER_1 = 40 * 4,
|
|
||||||
TILE_NUMBER_2 = 41 * 4,
|
|
||||||
TILE_NUMBER_3 = 42 * 4,
|
|
||||||
TILE_NUMBER_4 = 43 * 4,
|
|
||||||
TILE_NUMBER_5 = 44 * 4,
|
|
||||||
TILE_NUMBER_6 = 45 * 4,
|
|
||||||
TILE_NUMBER_7 = 46 * 4,
|
|
||||||
TILE_NUMBER_8 = 47 * 4,
|
|
||||||
TILE_NUMBER_9 = 48 * 4,
|
|
||||||
|
|
||||||
TILE_SOLID1 = 49 * 4,
|
|
||||||
TILE_SOLID2 = 50 * 4,
|
|
||||||
TILE_SOLID3 = 51 * 4,
|
|
||||||
|
|
||||||
TILE_PLAYER = 52 * 4,
|
|
||||||
TILE_LETTER_WHITE_U = 53 * 4,
|
|
||||||
TILE_LETTER_GREEN_G = 54 * 4,
|
|
||||||
TILE_LETTER_GREEN_S = 55 * 4,
|
|
||||||
} tTileType;
|
|
||||||
|
|
||||||
|
|
||||||
/* Globals */
|
|
||||||
|
|
||||||
extern word tileDirty[TOTAL_NUM_TILES];
|
|
||||||
extern word tileScreenOffset[TOTAL_NUM_TILES];
|
|
||||||
extern tTileType tileType[TOTAL_NUM_TILES];
|
|
||||||
extern tTileOffset tileAbove[TOTAL_NUM_TILES];
|
|
||||||
extern tTileOffset tileBelow[TOTAL_NUM_TILES];
|
|
||||||
extern tTileOffset tileLeft[TOTAL_NUM_TILES];
|
|
||||||
extern tTileOffset tileRight[TOTAL_NUM_TILES];
|
|
||||||
extern word tileBitOffset[NUM_GAME_TILES];
|
|
||||||
extern word tileBitMask[NUM_GAME_TILES];
|
|
||||||
|
|
||||||
extern tTileOffset dirtyNonGameTiles[NUM_NON_GAME_TILES];
|
|
||||||
extern word numDirtyNonGameTiles;
|
|
||||||
|
|
||||||
|
|
||||||
/* API */
|
|
||||||
|
|
||||||
extern void initTiles(void);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* define _GUARD_PROJECTBuGS_FILEtiles_ */
|
|
4
TODO.md
Normal file
4
TODO.md
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
TODO
|
||||||
|
=======
|
||||||
|
|
||||||
|
* When a centipede segment is added on the right, if there is a mushroom either right at the edge or maybe on tile from the edge (not sure which), the segment seems to turn around and travel up along the edge of the screen. Not sure if this can happen on the left side also. This is likely a problem with the mushroom collision detection and a segment which is mostly off-screen should probably ignore blocking mushrooms until on-screen.
|
Loading…
Reference in New Issue
Block a user