Index: bindings.doc ================================================================== --- bindings.doc +++ bindings.doc @@ -70,10 +70,13 @@ Toggle the inventory/move-list display. '^M' Set the replay mark position. +'^S' + If the level is in a won state, record the solution. + '^T' Display the level title popup. '^d' Display the pop-up help text of the object at the location. Index: default.heromeshrc ================================================================== --- default.heromeshrc +++ default.heromeshrc @@ -106,10 +106,11 @@ ! Game key bindings ?.gameKey.ctrl.E: ^E ?.gameKey.ctrl.I: select 'mi',:import_move_list; ?.gameKey.ctrl.Q: ^Q +?.gameKey.ctrl.S: ^S ?.gameKey.ctrl.T: ^T ?.gameKey.ctrl.X: select 'mx',:export_move_list; ?.gameClick.right: ^o ?.gameClick.middle: ^d ?.gameKey.kp_enter: =0 Index: game.c ================================================================== --- game.c +++ game.c @@ -30,10 +30,12 @@ static Uint8 side_mode=255; static Uint8 should_record_solution; static Uint8 replay_speed; static Uint8 replay_time; +static void record_solution(void); + static void setup_game(void) { const char*v; optionquery[1]=Q_showInventory; v=xrm_get_resource(resourcedb,optionquery,optionquery,2)?:""; side_mode=boolxrm(v,1); @@ -726,10 +728,13 @@ case '^M': // Mark replay position replay_mark=replay_pos+inputs_count; return prev; case '^Q': // Quit return -1; + case '^S': // Save solution + if(gameover==1) record_solution(); + return 1; case '^T': // Show title modal_draw_popup(level_title); return prev; case '^d': // Describe object describe_at(number-65);