Jump to content

Superweapon stuff in Tiberian Dawn


Recommended Posts

Let's start shall we?


0044C465   E8 523DFCFF             CALL C&C95.004101BC


This little pup resets the superweapon timers back when you use it.  Haven't tested nuke yet.


Within the body of the function, this little nugget:


004101D4   8828                    MOV BYTE PTR DS:[EAX],CH


Seems that when the superweapon is fully charged CH is 5.


Also this:


0041029D   8D40 00                 LEA EAX,DWORD PTR DS:[EAX]
004102A0   53                      PUSH EBX
004102A1   51                      PUSH ECX
004102A2   52                      PUSH EDX
004102A3   8A10                    MOV DL,BYTE PTR DS:[EAX]
004102A5   F6C2 01                 TEST DL,1
004102A8   74 68                   JE SHORT C&C95.00410312
004102AA   F6C2 04                 TEST DL,4
004102AD   74 09                   JE SHORT C&C95.004102B8
004102AF   B8 66000000             MOV EAX,66
004102B4   5A                      POP EDX
004102B5   59                      POP ECX
004102B6   5B                      POP EBX
004102B7   C3                      RETN


I'll update this post when I reverse more.  Maybe a full week down the road.


Ion Cannon damage and so on I was working on but lost the data.


Link to comment
Share on other sites

This little pup resets the superweapon timers back when you use it.  Haven't tested nuke yet.

Umm, doesn't the game kinda, y'know... do that automatically anyway?


Ion Cannon damage and so on I was working on but lost the data.

The block at 0041848E will give you the ion cannon data. You'll see the warhead value 5 (special warhead reserved for the ion cannon) and damage 600 (0x258).


The stuff for the nuke is at 00418013


Hmm, I never really looked at this before. It seems the nuke damage is 0x3E8 (1000), but I didn't know its warhead was 4... that's "SUPER" (100% vs everything). Really odd.

The multiplayer behaviour seems to give the nuke a damage of only 200 (and not 300 as previously thought), and the Fire warhead. Interesting.


By the way, this is in no way a "superweapons" function in the exe. It's a function that makes animations play in a way that does damage. Any situation in which the ion cannon or nuke animation is played will automatically make it do the associated damage. There are some more animations defined in there, like the grenadier death explosion and the fire bursts when flamethrowers and flame tanks die. All of those do damage independent from any real weapon systems. And it's all done in code, without any general objects system X_x


...I'm tempted to build one now, though.

Link to comment
Share on other sites

I haven't looked into that. Problem is, the A10 has internal ID '0', which makes it irritating to look for code spawning it. Heck, I don't even know the aircraft spawning function. Though I may be able to get there from the MP unit spawning... yay for classes with the same superclass!


Not sure if I'll have time to look into that any time soon, though.


Mind you, it's possible the normal spawn function is useless for this, since A10s spawn in the air. But I believe I got the air reinforce function mapped too somewhere.


Link to comment
Share on other sites

004712D3   8B56 08          MOV EDX,DWORD PTR DS:[ESI+8]                       ; Cases D,14 of switch 004713C0
004712D6   89F0             MOV EAX,ESI
004712D8   FF92 18010000    CALL DWORD PTR DS:[EDX+118]                        ; C&C95.00413D58
004712DE   8D7E 1E          LEA EDI,DWORD PTR DS:[ESI+1E]
004712E1   8B15 D8DC5300    MOV EDX,DWORD PTR DS:[53DCD8]
004712E7   8D7424 30        LEA ESI,DWORD PTR SS:[ESP+30]
004712EB   894424 34        MOV DWORD PTR SS:[ESP+34],EAX
004712EF   895424 30        MOV DWORD PTR SS:[ESP+30],EDX
004712F3   A5               MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
004712F4   A5               MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
004712F5   81C4 98000000    ADD ESP,98
004712FB   5F               POP EDI
004712FC   5E               POP ESI
004712FD   5A               POP EDX
004712FE   5B               POP EBX
004712FF   C3               RETN


This code seems to "spawn" or maybe "draw" the A10s.  It also controls the behavior.




00413E92   C646 1D 02       MOV BYTE PTR DS:[ESI+1D],2


2 Tells the A10 to start it's bombing run.


00413DA9   C646 1D 01       MOV BYTE PTR DS:[ESI+1D],1


Setting the var to 1 A10 to circle around it's target, but doesn't drop bombs.


I've not tested 0 yet.

Link to comment
Share on other sites

Think I found the spawning function.

004108F8   . 53                 PUSH EBX
004108F9   . 51                 PUSH ECX
004108FA   . 89C1               MOV ECX,EAX
004108FC   . B8 B2000000        MOV EAX,0B2
00410901   . E8 7E2C0000        CALL C&C95.00413584
00410906   . 85C0               TEST EAX,EAX
00410908   . 74 10              JE SHORT C&C95.0041091A
0041090A   . 8B1A               MOV EBX,DWORD PTR DS:[EDX]
0041090C   . 8B51 48            MOV EDX,DWORD PTR DS:[ECX+48]
0041090F   . 0FBE1B             MOVSX EBX,BYTE PTR DS:[EBX]
00410912   . C1FA 18            SAR EDX,18
00410915   . E8 9E2C0000        CALL C&C95.004135B8
0041091A   > 59                 POP ECX                                                                           ;  C&C95.00530018
0041091B   . 5B                 POP EBX
0041091C   . C3                 RETN



00410915   . E8 9E2C0000        CALL C&C95.004135B8


When you trigger A-10.  Check EDX.


I've gotten it to spawn A-10 and Cargo plane, A-10 and orca, 3 orcas, cargo plane, etc.

Link to comment
Share on other sites

Found it Nyerguds:


004398CB   E8 D02A0100           CALL C&C95.0044C3A0


Spawn function:


0044C68E   BA 01000000           MOV EDX,1
0044C693   E8 B0CD0400           CALL C&C95.00499448


Notice EDX.  That's the index into the string table for unit names.  EDX is moved into EAX.


0049945A  |. 8B0485 38045000           MOV EAX,DWORD PTR DS:[EAX*4+500438]                                               ;  C&C95.00530018


Now we have the unit name to reinforce/spawn, etc.


You to adjust the buildlevel to spawn more than 1 A-10, ORCA, etc, not the number of aircraft spawned.


0044C637   BB 03000000      MOV EBX,3
0044C63C   A1 10525000      MOV EAX,DWORD PTR DS:[505210]
0044C641   31D2             XOR EDX,EDX
0044C643   F7F3             DIV EBX
0044C645   89D9             MOV ECX,EBX
0044C647   EB 16            JMP SHORT C&C95.0044C65F
0044C649   A1 64525000      MOV EAX,DWORD PTR DS:[505264]
0044C64E   89C2             MOV EDX,EAX
0044C650   BB 05000000      MOV EBX,5
0044C655   C1FA 1F          SAR EDX,1F
0044C658   F7FB             IDIV EBX
0044C65A   B9 03000000      MOV ECX,3
0044C65F   BB 01000000      MOV EBX,1
0044C664   39CB             CMP EBX,ECX
0044C666   7C 02            JL SHORT C&C95.0044C66A
0044C668   87CB             XCHG EBX,ECX
0044C66A   39D8             CMP EAX,EBX
0044C66C   7F 02            JG SHORT C&C95.0044C670
0044C66E   89D8             MOV EAX,EBX
0044C670   39C8             CMP EAX,ECX
0044C672   7C 02            JL SHORT C&C95.0044C676


This is the build level stuff.  This helps to control how many units are spawned, in addition what's below.


004994CA  |. 8A86 2A010000             |MOV AL,BYTE PTR DS:[ESI+12A]
004994D0  |. 3C 03                     |CMP AL,3
004994D2  |.^77 EE                     |JA SHORT C&C95.004994C2


ESI+12A = number of aircraft to spawn, limited to 3.







Link to comment
Share on other sites

Blossom tree is a Terrain (tree/rock object) type, not a Structure. Besides my rules dump of their stats, hardly anything is known about those, really.


As for the tiberium spawning logic, in my patch, trace the "TiberiumOverrun" ini option. It is a beta option that was supposed to make tiberium grow faster, but which seems to be broken and has the effect that it completely disables spawning of tiberium on new cells (it even disables the initial spawn of tiberium as described in map ini files at the start of missions). So it's pretty much guaranteed to link to that code. It's a bit flag in a whole byte of options, though, making the spot where that specific bit is used slightly harder to pinpoint.


The option can be enabled in rules.ini, which is located in updatec.mix

Link to comment
Share on other sites

Here's the code causing Tiberium to spread and grow for cells.


.text:004689F8 void MapClass::Logic(void) proc near    ; CODE XREF: LogicClass::AI(void)+2DDp
.text:004689F8                                         ; DATA XREF: .data:004FC8C8o ...
.text:004689F8 var_38          = dword ptr -38h
.text:004689F8 var_34          = dword ptr -34h
.text:004689F8 var_30          = dword ptr -30h
.text:004689F8 var_2C          = dword ptr -2Ch
.text:004689F8 var_28          = dword ptr -28h
.text:004689F8 var_24          = word ptr -24h
.text:004689F8 var_20          = byte ptr -20h
.text:004689F8 var_1C          = byte ptr -1Ch
.text:004689F8                 push    ebx
.text:004689F9                 push    ecx
.text:004689FA                 push    edx
.text:004689FB                 push    esi
.text:004689FC                 push    edi
.text:004689FD                 push    ebp
.text:004689FE                 sub     esp, 20h
.text:00468A01                 mov     esi, eax
.text:00468A03                 mov     ah, ds:byte_53E4A2
.text:00468A09                 test    ah, 8
.text:00468A0C                 jnz     short loc_468A17
.text:00468A0E                 test    ah, 10h
.text:00468A11                 jz      loc_468D77
.text:00468A17 loc_468A17:                             ; CODE XREF: MapClass::Logic(void)+14j
.text:00468A17                 mov     eax, [esi+102h]
.text:00468A1D                 mov     edx, 1Eh
.text:00468A22                 sar     eax, 10h
.text:00468A25                 mov     [esp+38h+var_28], edx
.text:00468A29                 mov     [esp+38h+var_2C], eax
.text:00468A2D                 cmp     eax, 1000h
.text:00468A32                 jl      short loc_468A4F
.text:00468A34                 jmp     loc_468B56
.text:00468A39 ; ---------------------------------------------------------------------------
.text:00468A39 loc_468A39:                             ; CODE XREF: MapClass::Logic(void)+158j
.text:00468A39                 mov     ecx, [esp+38h+var_2C]
.text:00468A3D                 inc     ecx
.text:00468A3E                 mov     [esp+38h+var_2C], ecx
.text:00468A42                 cmp     ecx, 1000h
.text:00468A48                 jl      short loc_468A51
.text:00468A4A                 jmp     loc_468B56
.text:00468A4F ; ---------------------------------------------------------------------------
.text:00468A4F loc_468A4F:                             ; CODE XREF: MapClass::Logic(void)+3Aj
.text:00468A4F                 xor     ebp, ebp
.text:00468A51 loc_468A51:                             ; CODE XREF: MapClass::Logic(void)+50j
.text:00468A51                 mov     dh, [esi+106h]
.text:00468A57                 mov     ebx, [esp+38h+var_2C]
.text:00468A5B                 test    dh, 1
.text:00468A5E                 jnz     short loc_468A69
.text:00468A60                 mov     ebx, 0FFFh
.text:00468A65                 sub     ebx, [esp+38h+var_2C]
.text:00468A69 loc_468A69:                             ; CODE XREF: MapClass::Logic(void)+66j
.text:00468A69                 movsx   eax, bx
.text:00468A6C                 imul    eax, 21h
.text:00468A6F                 mov     edx, [esi]
.text:00468A71                 add     eax, edx
.text:00468A73                 mov     dl, ds:byte_53E4A2
.text:00468A79                 mov     ecx, eax
.text:00468A7B                 test    dl, 8
.text:00468A7E                 jz      short loc_468AC6
.text:00468A80                 mov     dl, [eax+20h]
.text:00468A83                 cmp     dl, 5
.text:00468A86                 jnz     short loc_468AC6
.text:00468A88                 mov     al, [eax+7]
.text:00468A8B                 and     eax, 0FFh
.text:00468A90                 cmp     eax, 0Bh
.text:00468A93                 jge     short loc_468AC6
.text:00468A95                 mov     edi, [esi+98h]
.text:00468A9B                 cmp     edi, 32h
.text:00468A9E                 jnb     short loc_468AB7
.text:00468AA0                 lea     edx, ds:0[edi*2]
.text:00468AA7                 lea     eax, [edi+1]
.text:00468AAA                 mov     [esi+98h], eax
.text:00468AB0                 mov     [edx+esi+34h], bx
.text:00468AB5                 jmp     short loc_468AC6
.text:00468AB7 ; ---------------------------------------------------------------------------
.text:00468AB7 loc_468AB7:                             ; CODE XREF: MapClass::Logic(void)+A6j
.text:00468AB7                 lea     edx, [edi-1]
.text:00468ABA                 mov     eax, ebp
.text:00468ABC                 call    RandomStraw_RandomRanged
.text:00468AC1                 mov     [esi+eax*2+34h], bx
.text:00468AC6 loc_468AC6:                             ; CODE XREF: MapClass::Logic(void)+86j
.text:00468AC6                                         ; MapClass::Logic(void)+8Ej ...
.text:00468AC6                 mov     eax, ecx
.text:00468AC8                 call    sub_4266B8
.text:00468ACD                 test    ds:byte_53E4A2, 10h
.text:00468AD4                 jz      short loc_468AE8
.text:00468AD6                 mov     dl, [ecx+20h]
.text:00468AD9                 cmp     dl, 5
.text:00468ADC                 jnz     short loc_468AE8
.text:00468ADE                 xor     edx, edx
.text:00468AE0                 mov     dl, [ecx+7]
.text:00468AE3                 cmp     edx, 6
.text:00468AE6                 jg      short loc_468AF5
.text:00468AE8 loc_468AE8:                             ; CODE XREF: MapClass::Logic(void)+DCj
.text:00468AE8                                         ; MapClass::Logic(void)+E4j
.text:00468AE8                 test    eax, eax
.text:00468AEA                 jz      short loc_468B45
.text:00468AEC                 mov     edx, [eax+1Eh]
.text:00468AEF                 test    byte ptr [edx+21h], 4
.text:00468AF3                 jz      short loc_468B45
.text:00468AF5 loc_468AF5:                             ; CODE XREF: MapClass::Logic(void)+EEj
.text:00468AF5                 mov     edi, 1
.text:00468AFA                 test    eax, eax
.text:00468AFC                 jz      short loc_468B03
.text:00468AFE                 mov     edi, 3
.text:00468B03 loc_468B03:                             ; CODE XREF: MapClass::Logic(void)+104j
.text:00468B03                 mov     ecx, ebp
.text:00468B05                 test    edi, edi
.text:00468B07                 jle     short loc_468B45
.text:00468B09                 jmp     short loc_468B22
.text:00468B0B ; ---------------------------------------------------------------------------
.text:00468B0B loc_468B0B:                             ; CODE XREF: MapClass::Logic(void)+133j
.text:00468B0B                 lea     edx, [eax-1]
.text:00468B0E                 mov     eax, ebp
.text:00468B10                 call    RandomStraw_RandomRanged
.text:00468B15                 mov     [esi+eax*2+9Ch], bx
.text:00468B1D loc_468B1D:                             ; CODE XREF: MapClass::Logic(void)+14Bj
.text:00468B1D                 inc     ecx
.text:00468B1E                 cmp     ecx, edi
.text:00468B20                 jge     short loc_468B45
.text:00468B22 loc_468B22:                             ; CODE XREF: MapClass::Logic(void)+111j
.text:00468B22                 mov     eax, [esi+100h]
.text:00468B28                 cmp     eax, 32h
.text:00468B2B                 jnb     short loc_468B0B
.text:00468B2D                 lea     edx, ds:0[eax*2]
.text:00468B34                 inc     eax
.text:00468B35                 mov     [esi+100h], eax
.text:00468B3B                 mov     [edx+esi+9Ch], bx
.text:00468B43                 jmp     short loc_468B1D
.text:00468B45 ; ---------------------------------------------------------------------------
.text:00468B45 loc_468B45:                             ; CODE XREF: MapClass::Logic(void)+F2j
.text:00468B45                                         ; MapClass::Logic(void)+FBj ...
.text:00468B45                 mov     edx, [esp+38h+var_28]
.text:00468B49                 dec     edx
.text:00468B4A                 mov     [esp+38h+var_28], edx
.text:00468B4E                 cmp     ebp, edx
.text:00468B50                 jnz     loc_468A39
.text:00468B56 loc_468B56:                             ; CODE XREF: MapClass::Logic(void)+3Cj
.text:00468B56                                         ; MapClass::Logic(void)+52j
.text:00468B56                 mov     eax, [esp+38h+var_2C]
.text:00468B5A                 mov     [esi+104h], ax
.text:00468B61                 mov     eax, [esi+102h]
.text:00468B67                 sar     eax, 10h
.text:00468B6A                 cmp     eax, 1000h
.text:00468B6F                 jl      loc_468D77
.text:00468B75                 mov     ebp, 1
.text:00468B7A                 mov     ch, ds:byte_53E4A2
.text:00468B80                 mov     [esp+38h+var_38], ebp
.text:00468B83                 test    ch, 20h
.text:00468B86                 jnz     short loc_468B91
.text:00468B88                 cmp     ds:SessionClass__Session, 0
.text:00468B8F                 jz      short loc_468B98
.text:00468B91 loc_468B91:                             ; CODE XREF: MapClass::Logic(void)+18Ej
.text:00468B91                 mov     [esp+38h+var_38], 2
.text:00468B98 loc_468B98:                             ; CODE XREF: MapClass::Logic(void)+197j
.text:00468B98                 lea     eax, [esi+106h]
.text:00468B9E                 mov     dh, [esi+106h]
.text:00468BA4                 mov     word ptr [esi+104h], 0
.text:00468BAD                 test    dh, 1
.text:00468BB0                 setz    dl
.text:00468BB3                 mov     bl, [eax]
.text:00468BB5                 and     bl, 0FEh
.text:00468BB8                 and     edx, 0FFh
.text:00468BBE                 mov     [eax], bl
.text:00468BC0                 and     edx, 1
.text:00468BC3                 or      [eax], edx
.text:00468BC5                 cmp     dword ptr [esi+98h], 0
.text:00468BCC                 jz      short loc_468C13
.text:00468BCE                 mov     edi, [esp+38h+var_38]
.text:00468BD1                 xor     ebx, ebx
.text:00468BD3                 test    edi, edi
.text:00468BD5                 jle     short loc_468C13
.text:00468BD7                 mov     ebp, [esp+38h+var_38]
.text:00468BDA                 xor     ecx, ecx
.text:00468BDC Grow_Tiberium:                          ; CODE XREF: MapClass::Logic(void)+219j
.text:00468BDC                 mov     edx, [esi+98h]
.text:00468BE2                 mov     eax, ecx
.text:00468BE4                 dec     edx
.text:00468BE5                 call    RandomStraw_RandomRanged
.text:00468BEA                 mov     ax, [esi+eax*2+34h]
.text:00468BEF                 cwde
.text:00468BF0                 imul    edx, eax, 21h
.text:00468BF3                 mov     eax, [esi]
.text:00468BF5                 add     eax, edx
.text:00468BF7                 mov     dl, [eax+20h]
.text:00468BFA                 cmp     dl, 5
.text:00468BFD                 jnz     short loc_468C0E
.text:00468BFF                 xor     edx, edx
.text:00468C01                 mov     dl, [eax+7]
.text:00468C04                 cmp     edx, 0Bh        ; tiberium check?
.text:00468C07                 jge     short loc_468C0E
.text:00468C09                 inc     dl
.text:00468C0B                 mov     [eax+7], dl     ; Set to new tiberium stage?
.text:00468C0E loc_468C0E:                             ; CODE XREF: MapClass::Logic(void)+205j
.text:00468C0E                                         ; MapClass::Logic(void)+20Fj
.text:00468C0E                 inc     ebx
.text:00468C0F                 cmp     ebx, ebp
.text:00468C11                 jl      short Grow_Tiberium
.text:00468C13 loc_468C13:                             ; CODE XREF: MapClass::Logic(void)+1D4j
.text:00468C13                                         ; MapClass::Logic(void)+1DDj
.text:00468C13                 mov     eax, [esi+100h]
.text:00468C19                 mov     dword ptr [esi+98h], 0
.text:00468C23                 test    eax, eax
.text:00468C25                 jz      loc_468D6D
.text:00468C2B                 xor     edx, edx
.text:00468C2D                 mov     ebx, [esp+38h+var_38]
.text:00468C30                 mov     [esp+38h+var_34], edx
.text:00468C34                 test    ebx, ebx
.text:00468C36                 jle     loc_468D6D
.text:00468C3C                 jmp     loc_468CB4
.text:00468C41 ; ---------------------------------------------------------------------------
.text:00468C41 SpreadTiberium:                         ; CODE XREF: MapClass::Logic(void)+362j
.text:00468C41                                         ; MapClass::Logic(void)+36Dj
.text:00468C41                                         ; DATA XREF: ...
.text:00468C41                 mov     [esp+38h+var_30], 1 ; jumptable 00468D65 cases 1,3,5
.text:00468C49                 mov     eax, 1Eh
.text:00468C4E                 call    OverlayClass::operator new(uint)
.text:00468C53                 mov     edi, eax
.text:00468C55                 test    eax, eax
.text:00468C57                 jz      short loc_468C86
.text:00468C59                 mov     eax, offset MouseClass Map
.text:00468C5E                 mov     edx, ebp
.text:00468C60                 call    sub_4C1398
.text:00468C65                 mov     edx, 11h
.text:00468C6A                 movsx   ebx, ax
.text:00468C6D                 mov     eax, 6
.text:00468C72                 mov     ecx, 0FFFFFFFFh
.text:00468C77                 call    RandomStraw_RandomRanged
.text:00468C7C                 movsx   edx, al
.text:00468C7F                 mov     eax, edi
.text:00468C81                 call    OverlayClass::OverlayClass(OverlayType,short,HousesType)
.text:00468C86 loc_468C86:                             ; CODE XREF: MapClass::Logic(void)+25Fj
.text:00468C86                 mov     byte ptr [ebp+7], 1
.text:00468C8A loc_468C8A:                             ; CODE XREF: MapClass::Logic(void)+36Dj
.text:00468C8A                                         ; DATA XREF: .text:off_4689DCo
.text:00468C8A                 cmp     [esp+38h+var_30], 0 ; jumptable 00468D65 cases 0,2,4,6
.text:00468C8F                 jnz     short loc_468CA0
.text:00468C91 loc_468C91:                             ; CODE XREF: MapClass::Logic(void)+329j
.text:00468C91                                         ; MapClass::Logic(void)+33Aj ...
.text:00468C91                 mov     cl, [esp+38h+var_20]
.text:00468C95                 inc     cl
.text:00468C97                 mov     [esp+38h+var_20], cl
.text:00468C9B                 cmp     cl, 8
.text:00468C9E                 jl      short loc_468CFA
.text:00468CA0 loc_468CA0:                             ; CODE XREF: MapClass::Logic(void)+297j
.text:00468CA0                                         ; MapClass::Logic(void)+2EAj
.text:00468CA0                 mov     ebx, [esp+38h+var_34]
.text:00468CA4                 inc     ebx
.text:00468CA5                 mov     ecx, [esp+38h+var_38]
.text:00468CA8                 mov     [esp+38h+var_34], ebx
.text:00468CAC                 cmp     ebx, ecx
.text:00468CAE                 jge     loc_468D6D
.text:00468CB4 loc_468CB4:                             ; CODE XREF: MapClass::Logic(void)+244j
.text:00468CB4                 mov     edx, [esi+100h]
.text:00468CBA                 xor     eax, eax
.text:00468CBC                 dec     edx
.text:00468CBD                 call    RandomStraw_RandomRanged
.text:00468CC2                 mov     ax, [esi+eax*2+9Ch]
.text:00468CCA                 mov     [esp+38h+var_24], ax
.text:00468CCF                 mov     edx, [esp+38h+var_28+2]
.text:00468CD3                 mov     eax, offset MouseClass Map
.text:00468CD8                 sar     edx, 10h
.text:00468CDB                 call    sub_468444
.text:00468CE0                 test    eax, eax
.text:00468CE2                 jz      short loc_468CA0
.text:00468CE4                 mov     edx, 7
.text:00468CE9                 xor     eax, eax
.text:00468CEB                 call    RandomStraw_RandomRanged
.text:00468CF0                 xor     dh, dh
.text:00468CF2                 mov     [esp+38h+var_1C], al
.text:00468CF6                 mov     [esp+38h+var_20], dh
.text:00468CFA loc_468CFA:                             ; CODE XREF: MapClass::Logic(void)+2A6j
.text:00468CFA                 mov     dl, [esp+38h+var_20]
.text:00468CFE                 add     dl, [esp+38h+var_1C]
.text:00468D02                 mov     ebx, [esp+38h+var_28+2]
.text:00468D06                 sar     ebx, 10h
.text:00468D09                 imul    ebx, 21h
.text:00468D0C                 and     dl, 7
.text:00468D0F                 mov     eax, [esi]
.text:00468D11                 movsx   edx, dl
.text:00468D14                 add     eax, ebx
.text:00468D16                 call    sub_427BAC
.text:00468D1B                 mov     ecx, eax
.text:00468D1D                 mov     ebp, eax
.text:00468D1F                 test    eax, eax
.text:00468D21                 jz      loc_468C91
.text:00468D27                 xor     ebx, ebx
.text:00468D29                 xor     edx, edx
.text:00468D2B                 call    sub_4266C8
.text:00468D30                 test    eax, eax
.text:00468D32                 jnz     loc_468C91
.text:00468D38                 mov     al, [ecx+20h]
.text:00468D3B                 test    al, al
.text:00468D3D                 jnz     loc_468C91
.text:00468D43                 cmp     byte ptr [ecx+6], 0FFh
.text:00468D47                 jnz     loc_468C91
.text:00468D4D                 mov     al, [ecx+4]
.text:00468D50                 xor     edi, edi
.text:00468D52                 sub     al, 0A5h
.text:00468D54                 mov     [esp+38h+var_30], edi
.text:00468D58                 cmp     al, 6
.text:00468D5A                 ja      SpreadTiberium  ; jumptable 00468D65 cases 1,3,5
.text:00468D60                 and     eax, 0FFh       ; switch 7 cases
.text:00468D65                 jmp     cs:off_4689DC[eax*4] ; switch jump
.text:00468D6D ; ---------------------------------------------------------------------------
.text:00468D6D loc_468D6D:                             ; CODE XREF: MapClass::Logic(void)+22Dj
.text:00468D6D                                         ; MapClass::Logic(void)+23Ej ...
.text:00468D6D                 mov     dword ptr [esi+100h], 0
.text:00468D77 loc_468D77:                             ; CODE XREF: MapClass::Logic(void)+19j
.text:00468D77                                         ; MapClass::Logic(void)+177j
.text:00468D77                 add     esp, 20h
.text:00468D7A                 pop     ebp
.text:00468D7B                 pop     edi
.text:00468D7C                 pop     esi
.text:00468D7D                 pop     edx
.text:00468D7E                 pop     ecx
.text:00468D7F                 pop     ebx
.text:00468D80                 retn
.text:00468D80 void MapClass::Logic(void) endp


There's also a call in TerrainClass::AI() which might be for creating Tiberium by Blossom trees. Not sure:


.text:00436D7C                 call    OverlayClass::OverlayClass(OverlayType,short,HousesType)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...