peterthepigeon Posted July 28, 2013 Share Posted July 28, 2013 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 More sharing options...
Nyerguds Posted July 29, 2013 Share Posted July 29, 2013 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 More sharing options...
peterthepigeon Posted July 29, 2013 Author Share Posted July 29, 2013 That call is the function which resets Ion Cannon, Airstrike and Nuke. Link to comment Share on other sites More sharing options...
Nyerguds Posted July 29, 2013 Share Posted July 29, 2013 Ohh. Right. I misunderstood. So that's the place to sniff around to see why single player nukes don't repeat, then... and what makes the difference with one-shot superweapons from crates in multiplayer Awesome. Link to comment Share on other sites More sharing options...
peterthepigeon Posted July 30, 2013 Author Share Posted July 30, 2013 Have you solved the airstrike logic for the number of planes? Link to comment Share on other sites More sharing options...
Nyerguds Posted July 31, 2013 Share Posted July 31, 2013 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 More sharing options...
peterthepigeon Posted August 3, 2013 Author Share Posted August 3, 2013 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. eg: 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 More sharing options...
Nyerguds Posted August 3, 2013 Share Posted August 3, 2013 Hmm. Then that's the actual AI for the bombing run, not the spawning-in-the air logic. All the same, neat stuff Link to comment Share on other sites More sharing options...
peterthepigeon Posted August 3, 2013 Author Share Posted August 3, 2013 Well it's called right after you select a target to bomb, so it gets us closer to the range where we can find out how the game chooses how many A-10s to spawn. Link to comment Share on other sites More sharing options...
peterthepigeon Posted August 3, 2013 Author Share Posted August 3, 2013 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 More sharing options...
peterthepigeon Posted August 3, 2013 Author Share Posted August 3, 2013 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 More sharing options...
Nyerguds Posted August 4, 2013 Share Posted August 4, 2013 ooh, awesome Link to comment Share on other sites More sharing options...
peterthepigeon Posted August 4, 2013 Author Share Posted August 4, 2013 ooh, awesome np happy to take some load off your shoulders Going to take a look at tiberium spawning logic now. Blossom tree is sorta whatever because it would likely fall in with buildings and they're already documented by some cnc editors. Link to comment Share on other sites More sharing options...
Nyerguds Posted August 4, 2013 Share Posted August 4, 2013 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 More sharing options...
peterthepigeon Posted August 4, 2013 Author Share Posted August 4, 2013 I found the tiberium spread to new cells code. However I've yet to find how to increase the growth rate, short of setting speed to super fast. Link to comment Share on other sites More sharing options...
Nyerguds Posted August 4, 2013 Share Posted August 4, 2013 Well, looking at what the Overrun option actually changes in the program flow may give some insight in what they were trying to do with it. Link to comment Share on other sites More sharing options...
Iran Posted August 7, 2013 Share Posted August 7, 2013 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 .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 .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 .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 .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 .text:00468A4F loc_468A4F: ; CODE XREF: MapClass::Logic(void)+3Aj .text:00468A4F xor ebp, ebp .text:00468A51 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .text:00468B91 loc_468B91: ; CODE XREF: MapClass::Logic(void)+18Ej .text:00468B91 mov [esp+38h+var_38], 2 .text:00468B98 .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 .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 .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 .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 .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 .text:00468C86 loc_468C86: ; CODE XREF: MapClass::Logic(void)+25Fj .text:00468C86 mov byte ptr [ebp+7], 1 .text:00468C8A .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 .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 .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 .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 .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 .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 .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 More sharing options...
Nyerguds Posted August 8, 2013 Share Posted August 8, 2013 Thanks... I should really start putting this all into my DB. Problem is I mostly work on this on the train Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now