diff --git a/!TheEsc/!MapEdit,ff8 b/!TheEsc/!MapEdit,ff8 index 6141bb0..c5381e5 100644 Binary files a/!TheEsc/!MapEdit,ff8 and b/!TheEsc/!MapEdit,ff8 differ diff --git a/!TheEsc/Spr,ff9 b/!TheEsc/Spr,ff9 index fc4972c..3b368b6 100644 Binary files a/!TheEsc/Spr,ff9 and b/!TheEsc/Spr,ff9 differ diff --git a/!TheEsc/c/MapEdit b/!TheEsc/c/MapEdit index 0ab1bae..78ad2ec 100644 --- a/!TheEsc/c/MapEdit +++ b/!TheEsc/c/MapEdit @@ -15,6 +15,7 @@ extern int screen; #define TILESX 10 #define TILESY 10 +#define SMARTTILES 100 // SWI Registers _kernel_swi_regs inreg; @@ -59,6 +60,58 @@ struct TilePlayer_s { 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) { int length; @@ -132,6 +185,7 @@ void game2_setup() memset(map[2],0xFF,100); game2_loadmap("mission2"); + game2_loadsmarttiles("m2_smart"); 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); + 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", TilePlayer.rawtile, fullmap[TilePlayer.rawtile],