Re: Request for Project Hospital
Posted: Mon Jul 22, 2019 7:27 pm
Community Cheat Tables of Cheat Engine
https://fearlessrevolution.com/
It does work perfectly here. Also, since the game is using mono and mono is using JIT (Just in time) compilation, the game might generate code differently on different system to optimize performance,eg:(amd vs intel cpu). So, if the table has been updated to the latest steam/gog version and you're still can't use it (or partially use it), then your game is generating code differently than my game, which I can't do much because we don't have the same system.
Heyo fantomas,fantomas wrote: ↑Mon Jul 22, 2019 8:37 pmIt does work perfectly here. Also, since the game is using mono and mono is using JIT (Just in time) compilation, the game might generate code differently on different system to optimize performance,eg:(amd vs intel cpu). So, if the table has been updated to the latest steam/gog version and you're still can't use it (or partially use it), then your game is generating code differently than my game, which I can't do much because we don't have the same system.
aobscanregion(aobMoney,Mirage:MoneyUI:OnMoneyChanged,Mirage:MoneyUI:OnMoneyChanged+100,48 89)
aobScanRegion(SymbolName, StartAddress, StopAddress, AOBString)
- In your example, your StopAddress is Mirage:MoneyUI:OnMoneyChanged+100, while in my system (or another one), it can be the same or could be different (ex: Mirage:MoneyUI:OnMoneyChanged+102). And if is that the case, the script will not work.My apologies for my ignorance but: why is the table not fully working now that I have updated the game while it worked well before? I mean, how is it possible that the game is "generating code differently" just now? Thanks!fantomas wrote: ↑Mon Jul 22, 2019 8:37 pmIt does work perfectly here. Also, since the game is using mono and mono is using JIT (Just in time) compilation, the game might generate code differently on different system to optimize performance,eg:(amd vs intel cpu). So, if the table has been updated to the latest steam/gog version and you're still can't use it (or partially use it), then your game is generating code differently than my game, which I can't do much because we don't have the same system.
Yes, cfemen's suggestion would be more appropriate approche than mine when dealing with mono games. Here the updated script for build v1.1.17351 but as I didn't play the game since a long time, I no longer know how the script is supposing to affect the employee's skills/specs. The max value is 5 (float), this is what the script is doing but I didn't see any change on the screen value. Maybe you have better eyes. But I just did Tutorial 1.Cronos91 wrote: ↑Tue Nov 05, 2019 7:34 amMy apologies for my ignorance but: why is the table not fully working now that I have updated the game while it worked well before? I mean, how is it possible that the game is "generating code differently" just now? Thanks!
Edit: I have been reading comments also on your MTatPortia Table and I see the "problem" is still the same so: how can I find and then edit those little values to adapt your Project Hospital table (Mainly your fantastic Max Skills/Spec feature) to my system? If I sound like a complete noob in this is because I actually am . Thanks in advance!
Code: Select all
{ Game: Project Hospital
Version: 1.1.17351 Steam
Date : 2019-11-05
Author : fantomas
This script gives your employees skills and specializations max level
}
[ENABLE]
//SkillLevelSegmentController:UpdateData+20
aobscanregion(maxSkillLevel,SkillLevelSegmentController:UpdateData,SkillLevelSegmentController:UpdateData+100,F3 0F 10 4E)
alloc(newmem,$1000,maxSkillLevel)
label(code)
label(return)
newmem:
mov [rsi+28],(float)5 { 100 }
code:
movss xmm1,[rsi+28]
jmp return
maxSkillLevel:
jmp newmem
return:
registersymbol(maxSkillLevel)
[DISABLE]
maxSkillLevel:
db F3 0F 10 4E 28
unregistersymbol(maxSkillLevel)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: SkillLevelSegmentController:UpdateData+20
0E9B7101: 48 8B EC - mov rbp,rsp
0E9B7104: 56 - push rsi
0E9B7105: 57 - push rdi
0E9B7106: 41 55 - push r13
0E9B7108: 41 56 - push r14
0E9B710A: 48 83 EC 20 - sub rsp,20
0E9B710E: 48 8B F9 - mov rdi,rcx
0E9B7111: 48 8B F2 - mov rsi,rdx
0E9B7114: F3 0F 10 05 34 03 00 00 - movss xmm0,[0E9B7450]
0E9B711C: F3 0F 5A C0 - cvtss2sd xmm0,xmm0
// ---------- INJECTING HERE ----------
0E9B7120: F3 0F 10 4E 28 - movss xmm1,[rsi+28]
// ---------- DONE INJECTING ----------
0E9B7125: F3 0F 5A C9 - cvtss2sd xmm1,xmm1
0E9B7129: F3 0F 10 15 0F 03 00 00 - movss xmm2,[0E9B7440]
0E9B7131: F3 0F 5A D2 - cvtss2sd xmm2,xmm2
0E9B7135: F2 0F 5C CA - subsd xmm1,xmm2
0E9B7139: F2 0F 59 C1 - mulsd xmm0,xmm1
0E9B713D: F3 0F 10 0D EB 02 00 00 - movss xmm1,[0E9B7430]
0E9B7145: F3 0F 5A C9 - cvtss2sd xmm1,xmm1
0E9B7149: F2 0F 5E C1 - divsd xmm0,xmm1
0E9B714D: F2 44 0F 2C F0 - cvttsd2si r14d,xmm0
0E9B7152: 48 85 F6 - test rsi,rsi
}
Wow, I actually don't know what you did but it worked like a charm! Thank you so much for your help, really ! So kind!fantomas wrote: ↑Tue Nov 05, 2019 2:55 pmYes, cfemen's suggestion would be more appropriate approche than mine when dealing with mono games. Here the updated script for build v1.1.17351 but as I didn't play the game since a long time, I no longer know how the script is supposing to affect the employee's skills/specs. The max value is 5 (float), this is what the script is doing but I didn't see any change on the screen value. Maybe you have better eyes. But I just did Tutorial 1.Cronos91 wrote: ↑Tue Nov 05, 2019 7:34 amMy apologies for my ignorance but: why is the table not fully working now that I have updated the game while it worked well before? I mean, how is it possible that the game is "generating code differently" just now? Thanks!
Edit: I have been reading comments also on your MTatPortia Table and I see the "problem" is still the same so: how can I find and then edit those little values to adapt your Project Hospital table (Mainly your fantastic Max Skills/Spec feature) to my system? If I sound like a complete noob in this is because I actually am . Thanks in advance!
Code: Select all
[ENABLE] aobscanregion(aobSkillControllerScan,SkillLevelSegmentController:UpdateData,SkillLevelSegmentController:UpdateData+360,F3 0F 10 05) alloc(newmem,$1000,aobSkillControllerScan) label(code) label(return) newmem: mov [rsi+28],(float)5 { 100 } code: movss xmm1,[rsi+28] jmp return aobSkillControllerScan+0C: jmp newmem return: registersymbol(aobSkillControllerScan) [DISABLE] aobSkillControllerScan+0C: db F3 0F 10 4E 28 unregistersymbol(aobSkillControllerScan) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: SkillLevelSegmentController:UpdateData+20 051B8E52: 8B EC - mov ebp,esp 051B8E54: 56 - push rsi 051B8E55: 57 - push rdi 051B8E56: 41 55 - push r13 051B8E58: 41 56 - push r14 051B8E5A: 48 83 EC 20 - sub rsp,20 051B8E5E: 48 8B F9 - mov rdi,rcx 051B8E61: 48 8B F2 - mov rsi,rdx 051B8E64: F3 0F 10 05 44 03 00 00 - movss xmm0,[051B91B0] //the aobscan starts here - F3 0F 10 05 051B8E6C: F3 0F 5A C0 - cvtss2sd xmm0,xmm0 // ---------- INJECTING HERE ---------- 051B8E70: F3 0F 10 4E 28 - movss xmm1,[rsi+28] //to jump here // ---------- DONE INJECTING ---------- 051B8E75: F3 0F 5A C9 - cvtss2sd xmm1,xmm1 051B8E79: F3 0F 10 15 1F 03 00 00 - movss xmm2,[051B91A0] 051B8E81: F3 0F 5A D2 - cvtss2sd xmm2,xmm2 051B8E85: F2 0F 5C CA - subsd xmm1,xmm2 051B8E89: F2 0F 59 C1 - mulsd xmm0,xmm1 051B8E8D: F3 0F 10 0D FB 02 00 00 - movss xmm1,[051B9190] 051B8E95: F3 0F 5A C9 - cvtss2sd xmm1,xmm1 051B8E99: F2 0F 5E C1 - divsd xmm0,xmm1 051B8E9D: F2 44 0F 2C F0 - cvttsd2si r14d,xmm0 051B8EA2: 48 85 F6 - test rsi,rsi }
A new patch and dlc was released with the staff editor.
Hi,
Code: Select all
{ Game: Project Hospital
Version: 1.1.17617 Steam
Date: 2019-11-29
Author: fantomas
This script gives your employees fast level up
}
[ENABLE]
//Lopital:EmployeeComponent:AddExperiencePoints+204
aobscanregion(fastLevelUp,Lopital:EmployeeComponent:AddExperiencePoints+100,Lopital:EmployeeComponent:AddExperiencePoints+300,48 63 40 70 48 89 45 C0)
alloc(newmem,$1000,fastLevelUp)
label(code)
label(return)
newmem:
mov [rax+48],#0 //m_salary
mov [rax+68],(float)100 //m_efficiency
mov [rax+6C],#5 //m_level
mov [rax+70],#3000 //m_points
code:
movsxd rax,dword ptr [rax+70]
mov [rbp-40],rax
jmp return
fastLevelUp:
jmp newmem
nop 3
return:
registersymbol(fastLevelUp)
[DISABLE]
fastLevelUp:
db 48 63 40 70 48 89 45 C0
unregistersymbol(fastLevelUp)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Lopital:EmployeeComponent:AddExperiencePoints+204
094BD3C8: 49 BB 50 12 53 09 00 00 00 00 - mov r11,0000000009531250
094BD3D2: 41 FF D3 - call r11
094BD3D5: 48 83 C4 20 - add rsp,20
094BD3D9: 48 8B D0 - mov rdx,rax
094BD3DC: B9 03 00 00 00 - mov ecx,00000003
094BD3E1: B8 05 00 00 00 - mov eax,00000005
094BD3E6: 48 85 D2 - test rdx,rdx
094BD3E9: 48 0F 44 C1 - cmove rax,rcx
094BD3ED: 89 45 DC - mov [rbp-24],eax
094BD3F0: 48 8B 47 18 - mov rax,[rdi+18]
// ---------- INJECTING HERE ----------
094BD3F4: 48 63 40 70 - movsxd rax,dword ptr [rax+70]
094BD3F8: 48 89 45 C0 - mov [rbp-40],rax
// ---------- DONE INJECTING ----------
094BD3FC: 48 8B CF - mov rcx,rdi
094BD3FF: 48 83 EC 20 - sub rsp,20
094BD403: 49 BB A0 DE DA 9F 00 00 00 00 - mov r11,000000009FDADEA0
094BD40D: 41 FF D3 - call r11
094BD410: 48 83 C4 20 - add rsp,20
094BD414: 48 8B C8 - mov rcx,rax
094BD417: 48 8B 45 C0 - mov rax,[rbp-40]
094BD41B: 3B C1 - cmp eax,ecx
094BD41D: 0F 8C 2D 0B 00 00 - jl 094BDF50
094BD423: 48 8B 47 18 - mov rax,[rdi+18]
}
I'm not sure, but it seems LVL up does not allow you to take specialization to a doctor. Plus, it resets the specializations of the doctors that I created in the character editor.fantomas wrote: ↑Sat Nov 30, 2019 9:26 amMinor fixes to support the last update v1.1.17617 for Steam.
It probably will work in GoG version as well.
Enjoy!
fantomas
Thank you for your feedback - Just a question, did it work before (with previous game/table version)?