1.2 KiB
1.2 KiB
Decomp notes
The original code generally prefers:
- ">" instead of "<=" and vice versa
- Generally nested if statements instead of early returns
- For loops like
(i = 0, ptr = start_of_array; condition; i++, ptr++)
In a for loop, a pattern lile this indicates something like
jne 0x5
jmp -0x10a
if (1) {
continue;
}
Pulling a local variable into a compiler-generated variable, then a set of cmp/jmp's pointing to code locations above means a switch. The ordering of the cmp/jmp appears to be numerically sorted, regardless of the ordering in the origina C code
For example, this came from a switch statement like
switch (version) {
case '2':
case '3':
case '4':
...
case '1':
...
break;
}
.text:0041F567 loc_41F567: ; CODE XREF: ReadMechanicsData+680↑j
.text:0041F567 cmp [ebp+var_1A8], 31h ; '1'
.text:0041F56E jz loc_41F4F2
.text:0041F574 cmp [ebp+var_1A8], 32h ; '2'
.text:0041F57B jl loc_41F593
.text:0041F581 cmp [ebp+var_1A8], 34h ; '4'
.text:0041F588 jle loc_41F480
.text:0041F58E jmp $+5