He gets these beautiful shots of the battlefield from very high altitude. How does he do it?
I cannot raise the camera that high with standard DEI.
Also, I looked for mods to do this, but they don't seem to alter the camera.
Thanks!
He gets these beautiful shots of the battlefield from very high altitude. How does he do it?
I cannot raise the camera that high with standard DEI.
Also, I looked for mods to do this, but they don't seem to alter the camera.
Thanks!
I think he uses a custom camera mod. However, you should not use camera mods with DeI. They'll mess up the scripts. DeI already has camera changes included because of that. Not sure if Jackie is using something compatible with DeI or if he's doing something else. You could probably edit the DeI files yourself to adjust the camera to your liking.
Is it a straight text file and just one figure to boost max altitude?
Thanks.
I think it's all in cameras/battle_action_camera.txt but I haven't messed with it myself.
Thanks. I will take a look.
There is a simple way to make this resistant to mod releases. I often run my games via a continuous resident back ground script to do many things. Examples:
* Launched script to change key/function key behavior using auto-hotkey. Like I have a script for DEI that rapidly flips battle graphics settings.
* A script that checkpoints autosaves and quick with a time stamp. You get a whole history of saves.
* A script that places hot spots on the maps of an operational war game. Besides remember hot spots the zoom level too.
* A script that adds extra features to a commercial backup software.
So, the way to address something like file conflicts with DEI releases is to dynamically recreate the changes each time by scripted text editing right before launching the EXE. Maybe using the UNIX Stream Editor aka SED.
I am assuming that is a real question. Here it the script that runs Rome 2/DEI. It does many things, beyond launching the game:
* Gets rid of splash screens
* Calls other background scripts that redefines function keys (only in the game)
* Time stamps screen shots and offers an optional suffix describing what is of importance
* Time stamps/checkpoints auto saves and quick saves
Remember this code is not for presentation and does NOT illustrate best practices (just personal use).
; 08/31/16 - Run Shogun 2 and checkpoint quick saves
; 09/03/16 - Added improved game EXE launcher which handles STEAM mods.
; Was crashing without doing this through AutoHotKey.
; Assume that the Shogun2 Mod Manager will always launch.
; 09/06/16 - Added code to support Steam updates.
; 09/17/16 - Added screen shot capability.
; Added true pend waiting for Steam Updates.
; 09/18/16 - Put in a prompted delay
; 05/11/17 - Fix FRAPS shutdown
; 10/18/17 - Fix problem in suffix prompt sometimes being hidden behind other windows.
; 11/29/17 - Skip splash screens
; 08/02/18 - Modified for ROME2
; 08/03/18 - Solved tought problem of forcing game to minimize
; 08/23/18 - Get rid of autosave replays.
; 08/28/18 - Add a selector setter for CA and DEI versions
; 08/31/18 - Fix cancel handling for CA/DEI (abort) and ScreenShot (abort).
; 10/18/18 - Get rid of extraneous time stamp characters on screenshot.
; 03/07/19 - Fix prompt box for Steam's new manager.
; 06/12/19 - WIN10 perhaps restarting the remap keys program is unnecessary.
; 08.05/20 - Remove option to toggle between CA and DEI versions.
WhoAmI="ROME2 Mgr"
If WinExist(WhoAmI)Then Exit
WinTitle(WinName(), WhoAmI)
WinHide(WhoAmI)
; ----- Definitions ------
Interval=1
GameEXE="D:\User\MK\Software\Games\ROME2\Utility\ROME2 URL launch.exe"
GameName1="Total War: ROME 2"
GameName2="Total War Launcher"
GameName3="Steam"
FrapsEXE="C:\Program Files (x86)\Fraps\fraps.exe"
FrapsPath="C:\Program Files (x86)\Fraps"
GameSaveDir="E:\Games\Steam ROME2 Data\ROME2\save_games"
GameSave1="E:\Games\Steam ROME2 Data\ROME2\save_games\Quick Save.save"
GameSave2="E:\Games\Steam ROME2 Data\ROME2\save_games\Auto_save.save"
SystemTrayRestart="C:\Program Files\SystemTrayRefresh\SystemTrayRefresh.exe"
GameReplayDir="E:\Games\Steam Rome2 Data\Rome2\replays"
CA_Log="D:\User\MK\Software\Games\Rome2\Log.doc.CA"
DEI_Log="D:\User\MK\Software\Games\Rome2\Log.doc.DEI"
THE_Log="D:\User\MK\Software\Games\Rome2\Log.doc"
CA_Screens="E:\FRAPS\ScreenFrap\Recon9Fraps.CA"
DEI_Screens="E:\FRAPS\ScreenFrap\Recon9Fraps.DEI"
THE_Screens="E:\FRAPS\ScreenFrap\Recon9Fraps"
CA_Saves="E:\Games\Steam Rome2 Data\Rome2\save_games.CA"
DEI_Saves="E:\Games\Steam Rome2 Data\Rome2\save_games.DEI"
THE_Saves="E:\Games\Steam Rome2 Data\Rome2\save_games"
CA_Replays="E:\Games\Steam Rome2 Data\Rome2\replays.CA"
DEI_Replays="E:\Games\Steam Rome2 Data\Rome2\replays.DEI"
THE_Replays="E:\Games\Steam Rome2 Data\Rome2\replays"
; ----- Set up paths -----
;VerI=IniReadPvt("Mod", "Version", "DEI", "ROME2 MGR.INI")
;IntControl(72, 0, @TRUE, "CANCEL", 0); exit on cancel
;AnsV=AskYesNo("Game Version Selection", StrCat("YES [DEFAULT] = DEI", @CR, @CR, "NO = CA", @CR, @CR, "CANCEL = QUIT"))
;IntControl(72, 1, @TRUE, "CANCEL", 0); goto cancel handler
;If AnsV==@Yes Then VerQ="DEI"
;If AnsV==@No Then VerQ="CA"
;Message("Game Version", "Make sure to have the Mod Manager which comes up next MATCH YOUR CHOICE!")
;If VerI<>VerQ Then
; If VerQ=="CA" Then
; FileRename(THE_Log, DEI_Log)
; FileRename(CA_Log, THE_log)
; FileRename(THE_Screens, DEI_Screens)
; FileRename(CA_Screens, THE_Screens)
; FileRename(THE_Saves, DEI_Saves)
; FileRename(CA_Saves, THE_Saves)
; FileRename(THE_Replays, DEI_Replays)
; FileRename(CA_Replays, THE_Replays)
; IniWritePvt("Mod", "Version", "CA", "ROME2 MGR.INI")
; End If
; If VerQ=="DEI" Then
; FileRename(THE_Log, CA_Log)
; FileRename(DEI_Log, THE_log)
; FileRename(THE_Screens, CA_Screens)
; FileRename(DEI_Screens, THE_Screens)
; FileRename(THE_Saves, CA_Saves)
; FileRename(DEI_Saves, THE_Saves)
; FileRename(THE_Replays, CA_Replays)
; FileRename(DEI_Replays, THE_Replays)
; IniWritePvt("Mod", "Version", "DEI", "ROME2 MGR.INI")
; End If
;End If
; ----- Start it and wait -----
Run(FrapsEXE,"")
Delay(3)
RunShell(GameEXE, "", ".", @NORMAL, @NOWAIT); must RunShell
;IntControl(63, 745, 635, 930, 745)
;IntControl(63, 775, 655, 960, 765)
IntControl(63, 825, 655, 975, 765)
BoxMsg=""
BoxMsg=StrCat(BoxMsg, "C L I C K H E R E F I R S T", @CR)
BoxMsg=StrCat(BoxMsg, "the game will be ready to play after 3 beeps")
AskTextbox( "CLICK HERE FIRST", BoxMsg , "", 0, 0)
IntControl(63, 0, 0, 0, 0)
WinWaitExist(GameName1, 2)
If WinExist(GameName2) Then
WinWaitClose(GameName2, -1)
End If
WinWaitExist(GameName1, 5)
; ----- Skip the splash screens -----
For J=1 to 30
Delay(1)
SendKey("{ESC}")
Next
Beep
Delay(1)
Beep
Delay(1)
Beep
; ----- Main menu is up -----
DirChange(GameSaveDir)
While WinExist(GameName1)
If IsKeyDown(@CTRL & @SHIFT) Then
winiconize("Total War: ROME 2")
End If
If FileExist(GameSave1) || FileExist(GameSave2) Then
Delay(2)
Base=TimeYmdHms()
NewBase1=StrSub(Base, 3, 17)
NewBase2=StrReplace(NewBase1, ":", "_")
If FileExist(GameSave1) Then
NewBase3=StrCat(NewBase2, "_Q.save")
FileRename(GameSave1, NewBase3)
End If
If FileExist(GameSave2) Then
NewBase3=StrCat(NewBase2, "_A.save")
FileRename(GameSave2, NewBase3)
End If
Beep()
Delay(1)
Beep()
End IF
CurrentDir=DirGet()
DirChange(GameReplayDir)
If FileExist("auto_save.replay") Then
FileDelete("auto_save.replay")
End If
DirChange(CurrentDir)
ErrorMode(@OFF)
FileMove ("E:\FRAPS\ScreenFrap\*.jpg", "E:\FRAPS\ScreenFrap\Recon9Fraps", @TRUE)
ErrorMode(@CANCEL)
CurrentDir=DirGet()
DirChange("E:\FRAPS\ScreenFrap\Recon9Fraps")
ShotFileName=FileItemize("ROME2 *.*")
If ShotFileName<>"" Then
CancelFlag=@False
IntControl(72, 1, @TRUE, "CANCEL", 0); goto cancel handler
Prompt=StrCat("Enter The Suffix Text")
WinShow(WhoAmI)
SaveSuffix=AskLine("SaveSuffix", Prompt, "", 0)
WinHide(WhoAmI)
Goto SKIP
:CANCEL
WinHide(WhoAmI)
CancelFlag=@True
:SKIP
If CancelFlag Then
FileDelete(ShotFileName)
Else
;Base=StrSub(ShotFileName, 7, 22)
Base=StrSub(ShotFileName, 7, 19)
If SaveSuffix<>"" Then
NewFileName=StrCat(Base, " ", SaveSuffix, ".jpg")
Else
NewFileName=StrCat(Base, ".jpg")
End If
FileRename(ShotFileName, NewFileName)
Beep()
End If
;Run("C:\Program Scripts\Windows7 Remap Keys.exe","")
WinActivate(GameName1)
End IF
DirChange(CurrentDir)
Delay(Interval)
End While
Delay(2)
; ----- Kill Unwanted Processes -----
Addextender("wwprc44i.dll")
ProgramEXE="fraps|"
Processlist=tListProc() ; get list
ptr1=StrIndexNC(processlist,ProgramEXE,0,@fwdscan)
;Message("Debug list",Processlist)
While ptr1<>0 ; terminate while processes left
ptr2=StrIndex(processlist,"|",ptr1,@fwdscan)
ptr3=StrIndex(processlist,@tab,ptr2,@fwdscan)
if ptr3==0;if last item in list
pid=Strsub(processlist,ptr2+1,-1)
ptr1=0 ; last one killed
else
pid=Strsub(processlist,ptr2+1,ptr3-ptr2-1)
ptr1=ptr3 ; set up for next process
ptr1=StrIndexNC(processlist,ProgramEXE,ptr1,@fwdscan)
endif
;Message("Debug pid",pid)
hProcess=tOpenProc(pid,3) ; mark able to terminate
TKillProc(hProcess) ; terminate
TCloseProc(hProcess) ; terminate
End While
ProgramEXE="fraps64.dat|"
Processlist=tListProc() ; get list
ptr1=StrIndexNC(processlist,ProgramEXE,0,@fwdscan)
;Message("Debug list",Processlist)
While ptr1<>0 ; terminate while processes left
ptr2=StrIndex(processlist,"|",ptr1,@fwdscan)
ptr3=StrIndex(processlist,@tab,ptr2,@fwdscan)
if ptr3==0;if last item in list
pid=Strsub(processlist,ptr2+1,-1)
ptr1=0 ; last one killed
else
pid=Strsub(processlist,ptr2+1,ptr3-ptr2-1)
ptr1=ptr3 ; set up for next process
ptr1=StrIndexNC(processlist,ProgramEXE,ptr1,@fwdscan)
endif
;Message("Debug pid",pid)
hProcess=tOpenProc(pid,3) ; mark able to terminate
TKillProc(hProcess) ; terminate
TCloseProc(hProcess) ; terminate
End While
Goto Steam
ProgramEXE="Steam|"
Processlist=tListProc() ; get list
ptr1=StrIndexNC(processlist,ProgramEXE,0,@fwdscan)
;Message("Debug list",Processlist)
While ptr1<>0 ; terminate while processes left
ptr2=StrIndex(processlist,"|",ptr1,@fwdscan)
ptr3=StrIndex(processlist,@tab,ptr2,@fwdscan)
if ptr3==0;if last item in list
pid=Strsub(processlist,ptr2+1,-1)
ptr1=0 ; last one killed
else
pid=Strsub(processlist,ptr2+1,ptr3-ptr2-1)
ptr1=ptr3 ; set up for next process
ptr1=StrIndexNC(processlist,ProgramEXE,ptr1,@fwdscan)
endif
;Message("Debug pid",pid)
hProcess=tOpenProc(pid,3) ; mark able to terminate
TKillProc(hProcess) ; terminate
TCloseProc(hProcess) ; terminate
End While
:Steam
Delay(1)
Run(SystemTrayRestart, "")
;Delay(1)
;Run("C:\Program Scripts\Windows7 Remap Keys.exe","")
yeah... question was serious, I'm always interested into these kind of things, even if I'm not a RL coder at all.
... And where is this? Did you decompile the dll via Ghidra or it's somewhere else?
Would you mind joining DeI's discord so we can talk directly via chat?
You can PM me there, username is always Jake Armitage
https://discord.gg/Wez6GSY
Yes. I am retired manager/software engineer (CTO actually).
Most of what I code for games, you can consider utilities, and most are co-resident. This means that they do not alter or patch the game files, but run along side and accomplish their magic either underneath the game via OS (WIN10) or by interacting with the game's UI, but not as a person, but more like a bot.
The above is WinBatch. It first appeared in the early 90s for Windows 3.0, and has now been sold off and it mainly in maintenance mode.
Why? Well, because you can get great scripting for free by using: AutoHotKey, PowerShell, Bash, etc... I also script in AutoHotKey.
---
I've never used discord. I will give it a click check it out. Thanks.