Overview
Comment: | Implement SHIFT+DELETE to delete moves up to the mark. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
5c766650a2805ab7b715894d4225a488 |
User & Date: | user on 2023-10-17 01:33:53 |
Other Links: | manifest | tags |
Context
2023-10-18
| ||
04:56 | Change colour of (X,Y) coordinates to make it easier to read. check-in: 1ca3a03298 user: user tags: trunk | |
2023-10-17
| ||
01:33 | Implement SHIFT+DELETE to delete moves up to the mark. check-in: 5c766650a2 user: user tags: trunk | |
2023-10-16
| ||
00:12 | Implement save state slots, including loading personal best solutions. check-in: cc0df8402f user: user tags: trunk | |
Changes
Modified bindings.doc from [be07d45d1e] to [84cdf61435].
︙ | |||
115 116 117 118 119 120 121 | 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | - + + + + + + + | '^s' Toggle solution replay. '^x' Cancel dead animation. 'lo' <location> |
︙ |
Modified default.heromeshrc from [d8800e43cf] to [15c07e1dd4].
︙ | |||
140 141 142 143 144 145 146 147 148 149 150 151 152 153 | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | + | ?.gameKey.alt.P: ^p ?.gameKey.alt.R: select 'go',id from levels where not solved order by random() limit 1; ?.gameKey.alt.X: ^x ?.gameKey.alt.leftbracket: select 'rs',-5; ?.gameKey.alt.rightbracket: select 'rs',+5; ?.gameKey.delete: ^- ?.gameKey.ctrl.delete: ^D ?.gameKey.shift.delete: select 'md',mark()-movenumber(); ?.gameKey.insert: ^+ ?.gameKey.alt.kp_minus: select 'go',-ord from levels where ord<$level and not solved order by ord desc limit 1; ?.gameKey.alt.kp_plus: select 'go',-ord from levels where ord>$level and not solved order by ord asc limit 1; ?.gameKey.shift.1: select 'ss',0; ?.gameKey.shift.2: select 'ss',1; ?.gameKey.shift.3: select 'ss',2; ?.gameKey.shift.4: select 'ss',3; |
︙ |
Modified function.c from [298c389de1] to [691117504c].
︙ | |||
1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 | 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 | + + | sqlite3_create_function(userdb,"LEVEL",0,SQLITE_UTF8,&level_ord,fn_level,0,0); sqlite3_create_function(userdb,"LEVEL_CACHEID",0,SQLITE_UTF8|SQLITE_DETERMINISTIC,ptr0,fn_cacheid,0,0); sqlite3_create_function(userdb,"LEVEL_CODE",0,SQLITE_UTF8,&level_code,fn_level,0,0); sqlite3_create_function(userdb,"LEVEL_ID",0,SQLITE_UTF8,&level_id,fn_level,0,0); sqlite3_create_function(userdb,"LEVEL_TITLE",0,SQLITE_UTF8,0,fn_level_title,0,0); sqlite3_create_function(userdb,"LEVEL_VERSION",0,SQLITE_UTF8,&level_version,fn_level,0,0); sqlite3_create_function(userdb,"LOAD_LEVEL",1,SQLITE_UTF8,0,fn_load_level,0,0); sqlite3_create_function(userdb,"MARK",0,SQLITE_UTF8,&replay_mark,fn_level,0,0); sqlite3_create_function(userdb,"MAX_LEVEL",0,SQLITE_UTF8,0,fn_max_level,0,0); sqlite3_create_function(userdb,"MODSTATE",0,SQLITE_UTF8,0,fn_modstate,0,0); sqlite3_create_function(userdb,"MOVE_LIST",0,SQLITE_UTF8,0,fn_move_list,0,0); sqlite3_create_function(userdb,"MOVECOUNT",0,SQLITE_UTF8,&replay_count,fn_level,0,0); sqlite3_create_function(userdb,"MOVENUMBER",0,SQLITE_UTF8,0,fn_movenumber,0,0); sqlite3_create_function(userdb,"MVALUE",1,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_mvalue,0,0); sqlite3_create_function(userdb,"NVALUE",1,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_zero_extend,0,0); sqlite3_create_function(userdb,"OVALUE",1,SQLITE_UTF8,0,fn_ovalue,0,0); sqlite3_create_function(userdb,"PFHEIGHT",0,SQLITE_UTF8,&pfheight,fn_pfsize,0,0); sqlite3_create_function(userdb,"PFWIDTH",0,SQLITE_UTF8,&pfwidth,fn_pfsize,0,0); sqlite3_create_function(userdb,"PICTURE_SIZE",0,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_picture_size,0,0); |
︙ |
Modified game.c from [1d7efeafa0] to [db30238ae3].
︙ | |||
1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 | 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 | + + + + + + + + + + + + + + + | if(solution_replay) { screen_message("You cannot load states during solution replay"); return -3; } number=exchange_state(number&7,'l'); if(number<0) return -3; goto restart; case 'md': // Delete multiple moves inputs_count=0; if(solution_replay) { screen_message("You cannot delete moves during the solution replay"); return -3; } if(replay_pos==replay_count || number<=0) return 0; if(number>replay_count-replay_pos) number=replay_count-replay_pos; memmoveM(replay_list+replay_pos,replay_list+replay_pos+number,replay_count-replay_pos-number); replay_count-=number; if(replay_mark>replay_pos) { replay_mark-=number; if(replay_mark<replay_pos) replay_mark=replay_pos; } return 0; case 'mi': // Move list import if(argc<2 || solution_replay) break; if(replay_pos) begin_level(level_id); do_import_moves(sqlite3_column_text(args,1)); return 1; case 'ml': // Move list load if(argc<2 || solution_replay) break; |
︙ |
Modified game.doc from [6b233e488f] to [a5b8aab4e8].
︙ | |||
178 179 180 181 182 183 184 185 186 187 188 189 190 191 | 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | + | ALT+P Begin slow replay ALT+R Select a unsolved level at random ALT+[ Increase slow replay speed ALT+] Decrease slow replay speed INS Toggle insertion mode DEL Delete a move CTRL+DEL Delete all moves forward SHIFT+DEL Delete moves up to mark SHIFT+num Save state 1 to 8 CTRL+num Load state 1 to 8 ALT+num Exchange state 1 to 8 Mouse (in grid): MIDDLE Describe topmost object |
︙ |
Modified sql.doc from [6cfdf31851] to [2156835595].
︙ | |||
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | + + + + + + | LEVEL_VERSION() The version number of the current level. LOAD_LEVEL(level_id) Only valid when Free Hero Mesh is invoked with the -x switch. Loads the level with the specified ID number. MARK() The number of moves in the replay list before the mark. MAX_LEVEL() The number of levels in this puzzle set (equal to the maximum valid level order number). MVALUE(number) Makes a game value of type 'message'. MODSTATE() The SDL keyboard modifier state. MOVE_LIST() Return the current move list as a blob. MOVECOUNT() The total number of moves in the replay list. MOVENUMBER() Return the number of moves executed so far since the level restarted. NVALUE(number) Makes a game value of type 'number'. Same as ZERO_EXTEND. OVALUE(number) |
︙ |