diff --git a/!TheEsc/!MapEdit,ff8 b/!TheEsc/!MapEdit,ff8 index b51ee8b..4df56f0 100644 Binary files a/!TheEsc/!MapEdit,ff8 and b/!TheEsc/!MapEdit,ff8 differ diff --git a/!TheEsc/!RunImage,ff8 b/!TheEsc/!RunImage,ff8 index c40d509..51241f6 100644 Binary files a/!TheEsc/!RunImage,ff8 and b/!TheEsc/!RunImage,ff8 differ diff --git a/!TheEsc/Tiles,ff9 b/!TheEsc/Tiles,ff9 index 0ef2d0e..53ed0be 100644 Binary files a/!TheEsc/Tiles,ff9 and b/!TheEsc/Tiles,ff9 differ diff --git a/!TheEsc/c/Graphics b/!TheEsc/c/Graphics index 1b1fec8..f9a496f 100644 --- a/!TheEsc/c/Graphics +++ b/!TheEsc/c/Graphics @@ -228,6 +228,17 @@ void draw_tile(char* spritename,int x, int y) inreg.r[5] = 0; _kernel_swi(OS_SpriteOp,&inreg,&outreg); } +void draw_tile_trans(char* spritename,int x, int y) +{ + // SpriteOp 34 to put sprite at a location + inreg.r[0] = 256+34; + inreg.r[1] = (int) tilebuffer; + inreg.r[2] = (int) spritename; + inreg.r[3] = x; + inreg.r[4] = y; + inreg.r[5] = 8; + _kernel_swi(OS_SpriteOp,&inreg,&outreg); +} void draw_spritetext(char* text, int x, int y) { diff --git a/!TheEsc/c/MapEdit b/!TheEsc/c/MapEdit index c5af686..1584245 100644 --- a/!TheEsc/c/MapEdit +++ b/!TheEsc/c/MapEdit @@ -39,8 +39,11 @@ int selectedsmart = -1; // believed to be displayed in the corresponding (+1) screen buffer // and we run a compare to see if re-drawing is needed. 0xFF is used // for a re-draw being required (so it's set on the tile under the player +// _overlay is used for the second layer on of tiles (optional) unsigned char map[3][TILESX][TILESY]; -unsigned char fullmap[10000]; +unsigned char map_overlay[3][TILESX][TILESY]; + +unsigned char fullmap[10000*2]; char tilenamebuffer[4]; char textbuffer[63]; @@ -267,6 +270,17 @@ void game2_fillmap(int xoffset, int yoffset) memcpy(map[0][7],fullmap+yoffset+(xoffset*100)+700,10); memcpy(map[0][8],fullmap+yoffset+(xoffset*100)+800,10); memcpy(map[0][9],fullmap+yoffset+(xoffset*100)+900,10); + + memcpy(map_overlay[0][0],fullmap+yoffset+(xoffset*100)+10000,10); + memcpy(map_overlay[0][1],fullmap+yoffset+(xoffset*100)+100+10000,10); + memcpy(map_overlay[0][2],fullmap+yoffset+(xoffset*100)+200+10000,10); + memcpy(map_overlay[0][3],fullmap+yoffset+(xoffset*100)+300+10000,10); + memcpy(map_overlay[0][4],fullmap+yoffset+(xoffset*100)+400+10000,10); + memcpy(map_overlay[0][5],fullmap+yoffset+(xoffset*100)+500+10000,10); + memcpy(map_overlay[0][6],fullmap+yoffset+(xoffset*100)+600+10000,10); + memcpy(map_overlay[0][7],fullmap+yoffset+(xoffset*100)+700+10000,10); + memcpy(map_overlay[0][8],fullmap+yoffset+(xoffset*100)+800+10000,10); + memcpy(map_overlay[0][9],fullmap+yoffset+(xoffset*100)+900+10000,10); } void game2_setup() @@ -484,6 +498,26 @@ void game2_tick_input() } } + // L - next tile + if(input_readkey(86)) + { + if(tick > readmodkey) + { + fullmap[TilePlayer.rawtile + 10000] = fullmap[TilePlayer.rawtile + 10000] + 1; + readmodkey = tick + 10; + } + } + + // K - previous tile + if(input_readkey(70)) + { + if(tick > readmodkey) + { + fullmap[TilePlayer.rawtile + 10000] = fullmap[TilePlayer.rawtile + 10000] - 1; + readmodkey = tick + 10; + } + } + // C - Copy tile if(input_readkey(82)) { @@ -578,6 +612,14 @@ int game2_tick() { draw_sprite("solid",x*100,y*100); } + + map_overlay[screen+1][x][y] = map_overlay[0][x][y]; + if(map_overlay[screen+1][x][y] > 0) + { + sprintf(tilenamebuffer,"%i",map_overlay[screen+1][x][y]); + draw_tile_trans(tilenamebuffer,x*100,y*100); + } + udt++; } @@ -666,18 +708,26 @@ int game2_tick() game2_tick_input(); - x = 1100; + x = 1040; y = 600; + // Tile selector (primary) for(i = (fullmap[TilePlayer.rawtile] - 3); i <= (fullmap[TilePlayer.rawtile] + 3); i++) { if((i >=0) && (i <= 255)) { - sprintf(tilenamebuffer,"%i",i); + if(i > 127) + sprintf(tilenamebuffer,"%i",i - 128); + else + sprintf(tilenamebuffer,"%i",i); + draw_tile(tilenamebuffer,x,y); - sprintf(textbuffer,"%d",i); - draw_spritetext(textbuffer, x-60, y+30); + if(i > 127) + sprintf(textbuffer,"%i",i - 128); + else + sprintf(textbuffer,"%i",i); + draw_spritetext(textbuffer, x+20, y+30); if(i == fullmap[TilePlayer.rawtile]) draw_sprite("select1",x,y); @@ -685,6 +735,27 @@ int game2_tick() y = y - 100; } + x = 1160; + y = 600; + + // Tile selector (overlay) + for(i = (fullmap[TilePlayer.rawtile + 10000] - 3); i <= (fullmap[TilePlayer.rawtile + 10000] + 3); i++) + { + if((i >=0) && (i <= 255)) + { + sprintf(tilenamebuffer,"%i",i); + draw_tile(tilenamebuffer,x,y); + + sprintf(textbuffer,"%i",i); + draw_spritetext(textbuffer, x+20, y+30); + + if(i == fullmap[TilePlayer.rawtile + 10000]) + draw_sprite("select1",x,y); + } + y = y - 100; + } + + x = 1180; y = 750; diff --git a/!TheEsc/c/Mission2 b/!TheEsc/c/Mission2 index 3b1be0b..b0d8c8c 100644 --- a/!TheEsc/c/Mission2 +++ b/!TheEsc/c/Mission2 @@ -21,9 +21,12 @@ extern _kernel_swi_regs outreg; // map[0] is the 'master', [1] and [2] represents what is currently // believed to be displayed in the corresponding (+1) screen buffer // and we run a compare to see if re-drawing is needed. 0xFF is used -// for a re-draw being required (so it's set on the tile under the player +// for a re-draw being required (so it's set on the tile under the player) +// _overlay is used for the second layer on of tiles (optional) unsigned char map[3][TILESX][TILESY]; -unsigned char fullmap[10000]; +unsigned char map_overlay[3][TILESX][TILESY]; + +unsigned char fullmap[10000*2]; unsigned char areaname[13]; @@ -364,6 +367,17 @@ void game2_fillmap(int xoffset, int yoffset) memcpy(map[0][7],fullmap+yoffset+(xoffset*100)+700,10); memcpy(map[0][8],fullmap+yoffset+(xoffset*100)+800,10); memcpy(map[0][9],fullmap+yoffset+(xoffset*100)+900,10); + + memcpy(map_overlay[0][0],fullmap+yoffset+(xoffset*100)+10000,10); + memcpy(map_overlay[0][1],fullmap+yoffset+(xoffset*100)+100+10000,10); + memcpy(map_overlay[0][2],fullmap+yoffset+(xoffset*100)+200+10000,10); + memcpy(map_overlay[0][3],fullmap+yoffset+(xoffset*100)+300+10000,10); + memcpy(map_overlay[0][4],fullmap+yoffset+(xoffset*100)+400+10000,10); + memcpy(map_overlay[0][5],fullmap+yoffset+(xoffset*100)+500+10000,10); + memcpy(map_overlay[0][6],fullmap+yoffset+(xoffset*100)+600+10000,10); + memcpy(map_overlay[0][7],fullmap+yoffset+(xoffset*100)+700+10000,10); + memcpy(map_overlay[0][8],fullmap+yoffset+(xoffset*100)+800+10000,10); + memcpy(map_overlay[0][9],fullmap+yoffset+(xoffset*100)+900+10000,10); } void game2_setup_audio() @@ -730,7 +744,7 @@ int game2_tick() } // Redraw any tiles we're overlapping - if(map[0][x][y] ^ map[screen+1][x][y]) + if((map[0][x][y] ^ map[screen+1][x][y]) || (map_overlay[0][x][y] ^ map_overlay[screen+1][x][y])) { map[screen+1][x][y] = map[0][x][y]; if(map[screen+1][x][y] < 128) @@ -739,6 +753,13 @@ int game2_tick() sprintf(tilenamebuffer,"%i",(map[screen+1][x][y]-128)); draw_tile(tilenamebuffer,x*100,y*100); + + map_overlay[screen+1][x][y] = map_overlay[0][x][y]; + if(map_overlay[screen+1][x][y] > 0) + { + sprintf(tilenamebuffer,"%i",map_overlay[screen+1][x][y]); + draw_tile_trans(tilenamebuffer,x*100,y*100); + } } } } diff --git a/!TheEsc/m2_map,ffd b/!TheEsc/m2_map,ffd index c88b08e..263cf2f 100644 Binary files a/!TheEsc/m2_map,ffd and b/!TheEsc/m2_map,ffd differ