51 lines
1.2 KiB
Markdown
51 lines
1.2 KiB
Markdown
# Decomp notes
|
|
|
|
The original code generally prefers:
|
|
|
|
1. ">" instead of "<=" and vice versa
|
|
2. Generally nested if statements instead of early returns
|
|
3. For loops like `(i = 0, ptr = start_of_array; condition; i++, ptr++)`
|
|
|
|
In a for loop, a pattern lile this indicates something like
|
|
|
|
```asm
|
|
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
|
|
```
|