Index: bindings.doc ================================================================== --- bindings.doc +++ bindings.doc @@ -75,10 +75,13 @@ Display the level title popup. '^d' Display the pop-up help text of the object at the location. +'^g' + Display values of global variables. + '^o' List objects at the specified coordinates, to examine their values. '^s' Toggle solution replay. Index: default.heromeshrc ================================================================== --- default.heromeshrc +++ default.heromeshrc @@ -122,10 +122,11 @@ ?.gameKey.f5: ^M ?.gameKey.f6: ^< ?.gameKey.f7: ^> ?.gameKey.f8: ^s ?.gameKey.tab: ^I +?.gameKey.alt.G: ^g ! Editor key bindings ?.editKey.1: select 'mr',0; ?.editKey.2: select 'mr',1; ?.editKey.3: select 'mr',2; Index: game.c ================================================================== --- game.c +++ game.c @@ -300,10 +300,13 @@ draw_text(200,y,"",0xF0,0xF6); break; case TY_MARK: draw_text(200,y,"",0xF0,0xF3); break; + case TY_ARRAY: + draw_text(200,y,"",0xF0,0xF9); + break; default: snprintf(buf,80,"<%lu:%lu>",(long)v.u,(long)v.t); draw_text(200,y,buf,0xF0,0xFA); i=strlen(buf)*8+208; if(v.ugeneration==v.t) { @@ -406,10 +409,64 @@ while(sqlite3_step(st)==SQLITE_ROW) { i=sqlite3_column_int(st,1); exam_value(sqlite3_column_text(st,0),i+28,o->uservars[i]); } quiz: + sqlite3_reset(st); + SDL_UnlockSurface(screen); + SDL_Flip(screen); + while(SDL_WaitEvent(&ev)) switch(ev.type) { + case SDL_KEYDOWN: + switch(ev.key.keysym.sym) { + case SDLK_ESCAPE: case SDLK_RETURN: case SDLK_KP_ENTER: sqlite3_finalize(st); return; + case SDLK_UP: if(exam_scroll) exam_scroll--; break; + case SDLK_DOWN: exam_scroll++; break; + case SDLK_HOME: exam_scroll=0; break; + case SDLK_PAGEUP: exam_scroll-=screen->h/8; if(exam_scroll<0) exam_scroll=0; break; + case SDLK_PAGEDOWN: exam_scroll+=screen->h/8; break; + } + goto redraw; + case SDL_MOUSEMOTION: + if(ev.motion.y!=y && ev.motion.yh) { + SDL_LockSurface(screen); + draw_back_line(y,0xF0); + draw_back_line(y=ev.motion.y,0xF1); + SDL_UnlockSurface(screen); + SDL_Flip(screen); + } + break; + case SDL_VIDEOEXPOSE: + goto redraw; + case SDL_QUIT: + exit(0); + break; + } +} + +static void global_examine(void) { + sqlite3_stmt*st; + SDL_Event ev; + SDL_Rect r; + int i,y; + y=0; + i=sqlite3_prepare_v2(userdb,"SELECT '@'||`NAME`,`ID` FROM `VARIABLES` WHERE `ID` BETWEEN 0x0000 AND 0xFFFF ORDER BY `ID`",-1,&st,0); + if(i) fatal("SQL error (%d): %s",i,sqlite3_errmsg(userdb)); + exam_scroll=0; + redraw: + set_cursor(XC_arrow); + r.x=r.y=0; + r.w=screen->w; + r.h=screen->h; + SDL_FillRect(screen,&r,0xF0); + SDL_LockSurface(screen); + exam_value("MoveNumber:",0,NVALUE(move_number)); + exam_value("LevelStrings:",1,NVALUE(nlevelstrings)); + exam_value("Generation:",2,NVALUE(generation_number)); + while(sqlite3_step(st)==SQLITE_ROW) { + i=sqlite3_column_int(st,1); + exam_value(sqlite3_column_text(st,0),i+4,globals[i]); + } sqlite3_reset(st); SDL_UnlockSurface(screen); SDL_Flip(screen); while(SDL_WaitEvent(&ev)) switch(ev.type) { case SDL_KEYDOWN: @@ -621,10 +678,13 @@ case '^T': // Show title modal_draw_popup(level_title); return prev; case '^d': // Describe object describe_at(number-65); + return prev; + case '^g': // Display global variables + global_examine(); return prev; case '^o': // List objects list_objects_at(number-65); return prev; case '^s': // Toggle solution replay Index: picture.c ================================================================== --- picture.c +++ picture.c @@ -787,15 +787,17 @@ SDL_UnlockSurface(screen); } int modal_draw_popup(const unsigned char*txt) { SDL_Event ev; +#if 0 SDL_Rect r; r.x=r.y=0; r.w=screen->w; r.h=4; SDL_FillRect(screen,&r,0xFE); +#endif set_cursor(XC_iron_cross); redraw: draw_popup(txt); SDL_Flip(screen); while(SDL_WaitEvent(&ev)) switch(ev.type) {