Re: map editor season cycle
Posted: 19 Nov 2020, 13:39
No they didn't use .IES. Scenarios are stored in game folders as .dll files (whatever they used).
The only one active forum about Empire Earth II
https://forum.ee2.eu/
I hear ya, but I will love you forever if you manage to make cycle time of day available for scenario making! Will be patient!Dr.MonaLisa wrote: ↑19 Nov 2020, 13:48 Yes, impossible.
We could try with the cycle time of day, but it's complicated procedure, and I would need to search a lot.
Code: Select all
Game time location: 0C9C3E4
Constant where game pointer it's stored at: 0CF8568
Writable5 (clicked change settings -2nd): 00FA6B62
Float(2) - 1: 00FA6B6A
Float(5) - 1: 00FA6B6E
Float(10) - 1: 00FA6B72
Float(15) -2: 00FA6B76
Float1 (+5 floats): 00FA6B7E (before 00FA6839)
Float2 (+2nd float): 00FA6B82
Writable1 (+4th floats): 00FA6B8A - last time (before 00FA6851)
Writable2 (+4th floats): 00FA6B92 - temp for esp (before 00FA6861)
Writable3: (2nd floats): 00FA6B9A - decides if day changing is active
Writable4: (2nd floats): 00FA6BA0 - store previous game time
New function (+ 10th floats): 00FA6BAE
JMP @L00000012
JMP @L00000112
;aos loading fix not used in EE2:
;JMP @L00001112
@L00000050:
;HotFix for clearing playback crownstatus:
CMP DWORD PTR DS:[0FA6478],1
JNE @L00000550
MOV DWORD PTR DS:[0FA6478],0
@L00000550:
;its 00FA6BB3
PUSHAD
PUSHFD
MOV DWORD PTR DS:[00FA6B92],ESP
;New function to check if game changed (@ThisCycleTimeAddress)
MOV ECX,DWORD PTR DS:[0CF8568]
CMP DWORD PTR DS:[@ThisCycleTimeAddress],ECX
JE @AfterNewFunction
;not same, overwrite and set day variable:
MOV DWORD PTR DS:[@ThisCycleTimeAddress],ECX
MOV ECX,DWORD PTR DS:[ECX+1C]
MOV DWORD PTR DS:[@ThisCycleTimeValue],ECX
;NEW. Game changes so show welcome message:
CALL 00FA7663
;End of new function
@AfterNewFunction:
;MOV ECX,DWORD PTR DS:[EDI+1C]
;disabling those 2 in new update:
;MOV ECX,DWORD PTR DS:[0CF8568]
;MOV ECX,DWORD PTR DS:[ECX+1C]
;new check in new update:
MOV ECX,DWORD PTR DS:[@ThisCycleTimeValue]
CMP ECX,4
JGE @L00000051
CMP DWORD PTR DS:[00FA6B9A],0
JE @L00000099
FLD DWORD PTR DS:[0C9C3E4]
FCOMP DWORD PTR DS:[00FA6B8A]
FSTSW AX
SAHF
JA @L00000001
;Compare last saved time with now to check if new game with new settings started.
FLD DWORD PTR DS:[00FA6BA0]
;FLD1
;FADDP
FCOMP DWORD PTR DS:[0C9C3E4]
FSTSW AX
SAHF
JBE @L00000003
FLDZ
FSTP DWORD PTR DS:[00FA6B8A]
;Disable dynamic time in case option changed in next game:
MOV DWORD PTR DS:[00FA6B9A],0
JMP @L00000099
@L00000003:
JMP @L00000099
@L00000001:
;Store new next time
FLD DWORD PTR DS:[0C9C3E4]
FLD DWORD PTR DS:[00FA6B7E]
FADDP
FSTP DWORD PTR DS:[00FA6B8A]
;Save current game time to writable4:
FLD DWORD PTR DS:[0C9C3E4]
FSTP DWORD PTR DS:[00FA6BA0]
@L00000005:
;Things to change season
;disabling in new update, or not
MOV EAX,DWORD PTR DS:[0CF8568]
CMP ECX,0
JE @L00000081
CMP ECX,1
JE @L00000082
CMP ECX,2
JE @L00000083
CMP ECX,3
JE @L00000084
@L00000081:
;MOV DWORD PTR DS:[EAX+1C],1
MOV ECX,DWORD PTR DS:[EAX+1C]
MOV DWORD PTR DS:[@ThisCycleTimeTemp],ECX
MOV DWORD PTR DS:[@ThisCycleTimeValue],1
MOV DWORD PTR DS:[EAX+1C],1
PUSH -1
PUSH @str2
CALL 00A1D9C0
PUSH EAX
CALL 007A26A0
JMP @L00000090
@L00000082:
;MOV DWORD PTR DS:[EAX+1C],2
MOV ECX,DWORD PTR DS:[EAX+1C]
MOV DWORD PTR DS:[@ThisCycleTimeTemp],ECX
MOV DWORD PTR DS:[@ThisCycleTimeValue],2
MOV DWORD PTR DS:[EAX+1C],2
PUSH -1
PUSH @str3
CALL 00A1D9C0
PUSH EAX
CALL 007A26A0
JMP @L00000090
@L00000083:
;MOV DWORD PTR DS:[EAX+1C],3
MOV ECX,DWORD PTR DS:[EAX+1C]
MOV DWORD PTR DS:[@ThisCycleTimeTemp],ECX
MOV DWORD PTR DS:[@ThisCycleTimeValue],3
MOV DWORD PTR DS:[EAX+1C],3
PUSH -1
PUSH @str4
CALL 00A1D9C0
PUSH EAX
CALL 007A26A0
JMP @L00000090
@L00000084:
;MOV DWORD PTR DS:[EAX+1C],0
MOV ECX,DWORD PTR DS:[EAX+1C]
MOV DWORD PTR DS:[@ThisCycleTimeTemp],ECX
MOV DWORD PTR DS:[@ThisCycleTimeValue],0
MOV DWORD PTR DS:[EAX+1C],0
PUSH -1
PUSH @str1
CALL 00A1D9C0
PUSH EAX
CALL 007A26A0
@L00000090:
;Dont worry, it's constant for EE2 game pointer
MOV ECX,DWORD PTR DS:[0CF8568]
CALL 006CAF70
;new:
MOV ECX,DWORD PTR DS:[@ThisCycleTimeTemp]
MOV EAX,DWORD PTR DS:[0CF8568]
MOV DWORD PTR DS:[EAX+1C],ECX
;check if clicked "change settings". We are skipping it now, because of bugs when loading saves
JMP @L00006969
CMP DWORD PTR DS:[00FA6B62],1
JNE @L00000099
;call save settings function
@L00006969:
MOV EAX,DWORD PTR DS:[0D02200]
MOV ECX,DWORD PTR DS:[EAX+4]
CALL 0087D7C0
;check if afternoon, so no more fixes needed
;MOV ECX,DWORD PTR DS:[0CF8568]
;MOV ECX,DWORD PTR DS:[ECX+1C]
MOV ECX,DWORD PTR DS:[@ThisCycleTimeValue]
CMP ECX,1
JNE @L00000099
MOV DWORD PTR DS:[00FA6B62],0
@L00000099:
;Jump back to the right place
MOV ESP,DWORD PTR DS:[00FA6B92]
POPFD
POPAD
@L00000098:
MOV AL,BYTE PTR DS:[0D0DFC0]
JMP 0059A3E8
@L00000051:
;Set floats and stuff depending on selected time of day
CMP ECX,4
JE @L00000041
CMP ECX,5
JE @L00000042
CMP ECX,6
JE @L00000043
CMP ECX,7
JE @L00000044
@L00000041:
;2 min
FLD DWORD PTR DS:[00FA6B6A]
FSTP DWORD PTR DS:[00FA6B7E]
JMP @L00000030
@L00000042:
;5 min
FLD DWORD PTR DS:[00FA6B6E]
FSTP DWORD PTR DS:[00FA6B7E]
JMP @L00000030
@L00000043:
;10 min
FLD DWORD PTR DS:[00FA6B72]
FSTP DWORD PTR DS:[00FA6B7E]
JMP @L00000030
@L00000044:
;15 min
FLD DWORD PTR DS:[00FA6B76]
FSTP DWORD PTR DS:[00FA6B7E]
@L00000030:
;reset save settings variable:
MOV DWORD PTR DS:[00FA6B62],0
;dynamic time active
MOV DWORD PTR DS:[00FA6B9A],1
;setting night cus will change to morning:
;MOV EAX,DWORD PTR DS:[0CF8568]
;MOV DWORD PTR DS:[EAX+1C],3
MOV DWORD PTR DS:[@ThisCycleTimeValue],3
;reset timer:
FLDZ
FSTP DWORD PTR DS:[00FA6B8A]
JMP @L00000099
;set settings changed 1
@L00000112:
MOV DWORD PTR DS:[00FA6B62],1
MOV ECX,DWORD PTR DS:[0D235B4]
JMP 0087D8E4
@L00000012:
JL @L00000013
CMP EAX,17
JE @L00000014
;compare in this strange way with texts:
PUSHAD
PUSHFD
MOV DWORD PTR DS:[00FA6B92],ESP
MOV ECX,DWORD PTR DS:[EAX]
MOV EDX,DWORD PTR DS:[@str5]
CMP ECX,EDX
JE @L00000221
MOV EDX,DWORD PTR DS:[@str6]
CMP ECX,EDX
JE @L00000222
MOV EDX,DWORD PTR DS:[@str7]
CMP ECX,EDX
JE @L00000223
MOV EDX,DWORD PTR DS:[@str8]
CMP ECX,EDX
JE @L00000224
JMP @L00000225
@L00000221:
MOV DWORD PTR DS:[@AosTempFix],4
JMP @L00000226
@L00000222:
MOV DWORD PTR DS:[@AosTempFix],5
JMP @L00000226
@L00000223:
MOV DWORD PTR DS:[@AosTempFix],6
JMP @L00000226
@L00000224:
MOV DWORD PTR DS:[@AosTempFix],7
JMP @L00000226
@L00000225:
MOV DWORD PTR DS:[@AosTempFix],5
@L00000226:
MOV ESP,DWORD PTR DS:[00FA6B92]
POPFD
POPAD
MOV EAX,DWORD PTR DS:[@AosTempFix]
;MOV EAX,5
JMP @L00000015
@L00000014:
MOV EAX,3
JMP @L00000015
@L00000013:
MOV EAX,2
@L00000015:
JMP 0088544B
ADD BYTE PTR DS:[EAX],AL
ADD BYTE PTR DS:[EAX],AL
@str1:
"tx_changing_to_dawn\0"
@str2:
"tx_changing_to_afternoon\0"
@str3:
"tx_changing_to_sunset\0"
@str4:
"tx_changing_to_night\0"
;2 mins:
@str5:
"LargeIslands\0"
;5 mins:
@str6:
"SmallIslands\0"
;10 mins:
@str7:
"Pangea\0"
;15 mins:
@str8:
"Plains\0"
@ThisCycleTimeAddress:
"\0\0\0\0\0\0\0\0"
@ThisCycleTimeValue:
"\0\0\0\0\0\0\0\0"
@ThisCycleTimeTemp:
"\0\0\0\0\0\0\0\0"
ADD BYTE PTR DS:[EAX],AL
@AosTempFix:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
Code: Select all
MOV ECX,DWORD PTR DS:[0CF8568]
[...]
MOV ECX,DWORD PTR DS:[ECX+1C]
Holy crap, thanks for sharing, it's just a bit above my head!Dr.MonaLisa wrote: ↑19 Nov 2020, 18:27 Sorry, it's impossible without heavier debugging.
For EE2 I made it this way:
[...]
90% of players dislike Cycle time of day, make sure that you really want to have it used in your scenario.
Code: Select all
MOV ECX,DWORD PTR DS:[0CF8568]
[...]
MOV ECX,DWORD PTR DS:[ECX+1C]
Good to know it is within the realm of the possible! I half understand the technical hurdle, but I appreciate it isn't easyDr.MonaLisa wrote: ↑19 Nov 2020, 19:16 Theoretically you can do this. You can set other time of day values there (0 to 3 I think). But getting pointer from 0CF8568, then finding +1C offset isn't something that can be done easily or instantly :/