From 75e36a59bab59f78b6a5e9a356d79e9572746e62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 9 Apr 2010 04:29:24 +0200 Subject: [PATCH] Fix for map reading --- dfhack/modules/Maps.cpp | 2 ++ examples/veinlook.cpp | 38 +++++++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/dfhack/modules/Maps.cpp b/dfhack/modules/Maps.cpp index 6f0a3cd53..3734a9fdb 100644 --- a/dfhack/modules/Maps.cpp +++ b/dfhack/modules/Maps.cpp @@ -199,6 +199,8 @@ bool Maps::ReadBlock40d(uint32_t x, uint32_t y, uint32_t z, mapblock40d * buffer if (addr) { g_pProcess->read (addr + d->offsets.tile_type_offset, sizeof (buffer->tiletypes), (uint8_t *) buffer->tiletypes); + g_pProcess->read (addr + d->offsets.designation_offset, sizeof (buffer->designation), (uint8_t *) buffer->designation); + g_pProcess->read (addr + d->offsets.biome_stuffs, sizeof (biome_indices40d), (uint8_t *) buffer->biome_indices); buffer->origin = addr; uint32_t addr_of_struct = g_pProcess->readDWord(addr); buffer->blockflags.whole = g_pProcess->readDWord(addr_of_struct); diff --git a/examples/veinlook.cpp b/examples/veinlook.cpp index 3f16036d1..14f056d84 100644 --- a/examples/veinlook.cpp +++ b/examples/veinlook.cpp @@ -6,6 +6,7 @@ #include #include #include +#include using namespace std; #include @@ -382,6 +383,8 @@ main(int argc, char *argv[]) bool dig = false; bool dump = false; bool digbit = false; + bool dotwiddle; + unsigned char twiddle = 0; int vein = 0; int filenum = 0; bool dirtybit = false; @@ -397,6 +400,7 @@ main(int argc, char *argv[]) { dig = false; dump = false; + dotwiddle = false; digbit = false; int c = getch(); /* refresh, accept single keystroke of input */ @@ -438,6 +442,15 @@ main(int argc, char *argv[]) case 'z': digbit = true; break; + case '/': + if(twiddle != 0) twiddle--; + break; + case '*': + twiddle++; + break; + case 't': + dotwiddle = true; + break; default: break; } @@ -449,6 +462,9 @@ main(int argc, char *argv[]) cursorY = min(cursorY, y_max - 1); cursorZ = min(cursorZ, z_max - 1); + if(twiddle > 31) + twiddle = 31; + // clear data before we suspend memset(blocks,0,sizeof(blocks)); veinVector.clear(); @@ -504,6 +520,14 @@ main(int argc, char *argv[]) } Maps->WriteDesignations(cursorX+i,cursorY+j,cursorZ, &(Block->designation)); } + if(dotwiddle) + { + bitset<32> bs = Block->designation[0][0].whole; + bs.flip(twiddle); + Block->designation[0][0].whole = bs.to_ulong(); + Maps->WriteDesignations(cursorX+i,cursorY+j,cursorZ, &(Block->designation)); + dotwiddle = false; + } // do a dump of the block data if(dump) { @@ -530,24 +554,27 @@ main(int argc, char *argv[]) { int color = COLOR_BLACK; color = pickColor(Block->tiletypes[x][y]); - //if(!Block->designation[x][y].bits.hidden) - /*{ + /* + if(!Block->designation[x][y].bits.hidden) + { puttile(x+(i+1)*16,y+(j+1)*16,Block->tiletypes[x][y], color); } else*/ { + attron(A_STANDOUT); puttile(x+(i+1)*16,y+(j+1)*16,Block->tiletypes[x][y], color); attroff(A_STANDOUT); + } } // print effects for the center tile - + /* if(i == 0 && j == 0) { for(uint zz = 0; zz < effects.size();zz++) { - if(effects[zz].z == cursorZ /*&& !effects[zz].isHidden*/) + if(effects[zz].z == cursorZ && !effects[zz].isHidden) { // block coords to tile coords uint16_t x = effects[zz].x - (cursorX * 16); @@ -559,6 +586,7 @@ main(int argc, char *argv[]) } } } + */ } gotoxy(0,48); cprintf("arrow keys, PGUP, PGDN = navigate"); @@ -650,7 +678,7 @@ main(int argc, char *argv[]) gotoxy (0,52); cprintf("block address 0x%x, flags 0x%08x",blockaddr, bflags.whole); gotoxy (0,53); - cprintf("dirty bit: %d",dirtybit); + cprintf("dirty bit: %d, twiddle: %d",dirtybit,twiddle); gotoxy (0,54); cprintf ("d - dig veins, o - dump map block, z - toggle dirty bit"); wrefresh(stdscr);