Read and highlight smart tiles in mapedit

This commit is contained in:
stevenhowes
2021-04-14 20:37:41 +01:00
parent 48a0879a51
commit 5bd81b2cb2
3 changed files with 62 additions and 0 deletions
Binary file not shown.
BIN
View File
Binary file not shown.
+62
View File
@@ -15,6 +15,7 @@ extern int screen;
#define TILESX 10 #define TILESX 10
#define TILESY 10 #define TILESY 10
#define SMARTTILES 100
// SWI Registers // SWI Registers
_kernel_swi_regs inreg; _kernel_swi_regs inreg;
@@ -59,6 +60,58 @@ struct TilePlayer_s {
struct TilePlayer_s TilePlayer; struct TilePlayer_s TilePlayer;
struct SmartTile_s {
int Tile;
int ActionTarget;
unsigned char Action;
unsigned char ActionValue;
};
struct SmartTile_s SmartTiles[SMARTTILES];
void game2_loadsmarttiles(char* filename)
{
int length;
// Attempt to get file info
inreg.r[0] = 5;
inreg.r[1] = (int) filename;
_kernel_swi(OS_File,&inreg,&outreg);
// Length will be in R4 if it exists
length = outreg.r[4];
if(length > sizeof(SmartTiles))
{
screen_nobuffer();
while (1)
printf("Smarttiles exceeds %d bytes (%d bytes) object type is %d\n",sizeof(SmartTiles),length,outreg.r[0]);
//exit(0);
}
// Attempt to get file info
inreg.r[0] = 16;
inreg.r[1] = (int) filename;
inreg.r[2] = (int) SmartTiles;
inreg.r[3] = 0;
_kernel_swi(OS_File,&inreg,&outreg);
}
void game2_savesmarttiles(char* filename)
{
// Attempt to get file info
inreg.r[0] = 10;
inreg.r[1] = (int) filename;
inreg.r[2] = 0xffd;
inreg.r[4] = (int) SmartTiles;
inreg.r[5] = (int) SmartTiles + (sizeof(SmartTiles));
_kernel_swi(OS_File,&inreg,&outreg);
}
void game2_loadmap(char* filename) void game2_loadmap(char* filename)
{ {
int length; int length;
@@ -132,6 +185,7 @@ void game2_setup()
memset(map[2],0xFF,100); memset(map[2],0xFF,100);
game2_loadmap("mission2"); game2_loadmap("mission2");
game2_loadsmarttiles("m2_smart");
game2_fillmap(TilePlayer.mapoffset.X,TilePlayer.mapoffset.Y); game2_fillmap(TilePlayer.mapoffset.X,TilePlayer.mapoffset.Y);
} }
@@ -322,6 +376,14 @@ int game2_tick()
TilePlayer.rawtile = (TilePlayer.mapoffset.Y) + TilePlayer.localtile.Y + (TilePlayer.mapoffset.X * 100) + (TilePlayer.localtile.X * 100); TilePlayer.rawtile = (TilePlayer.mapoffset.Y) + TilePlayer.localtile.Y + (TilePlayer.mapoffset.X * 100) + (TilePlayer.localtile.X * 100);
for(i = 0; i < SMARTTILES; i++)
{
if(SmartTiles[i].Tile == TilePlayer.rawtile)
{
draw_sprite("smart",TilePlayer.localtile.X*100,TilePlayer.localtile.Y*100);
}
}
sprintf(textbuffer,"Tile:%i\nSprite:%i\nSolid: %i", sprintf(textbuffer,"Tile:%i\nSprite:%i\nSolid: %i",
TilePlayer.rawtile, TilePlayer.rawtile,
fullmap[TilePlayer.rawtile], fullmap[TilePlayer.rawtile],