1157
"[ Active Cheat Table ]"
Auto Assembler Script
[ENABLE]
{$lua}
LaunchMonoDataCollector()
{$asm}
LuaCall(function cycleFullCompact(sender,force) local state = not(compactmenuitem.Caption == 'Compact View Mode'); if force~=nil then state = not force end; compactmenuitem.Caption = state and 'Compact View Mode' or 'Full View Mode'; getMainForm().Splitter1.Visible = state; getMainForm().Panel4.Visible = state; getMainForm().Panel5.Visible = state; end; function addCompactMenu() if compactmenualreadyexists then return end; local parent = getMainForm().Menu.Items; compactmenuitem = createMenuItem(parent); parent.add(compactmenuitem); compactmenuitem.Caption = 'Compact View Mode'; compactmenuitem.OnClick = cycleFullCompact; compactmenualreadyexists = 'yes'; end; addCompactMenu(); cycleFullCompact(nil,true))
[DISABLE]
LuaCall(cycleFullCompact(nil,false))
1151
"Pay"
Auto Assembler Script
[ENABLE]
//Spend
//Lopital:Hospital:Spend+39
aobscanregion(spend,Lopital:Hospital:Spend,Lopital:Hospital:Spend+1ef,2BCF)
spend:
db 01 F9
//add ecx,edi
registersymbol(spend)
//***********************************************//
//Lopital:Hospital:Pay+36
aobscanregion(pay,Lopital:Hospital:Pay,Lopital:Hospital:Pay+1ef,486348)
alloc(newmem,1000,pay)
alloc(pay_ptr,8)
registersymbol(pay)
registersymbol(pay_ptr)
label(code)
label(return)
newmem:
mov [pay_ptr],rax
mov edi,186A0 //100000
code:
movsxd rcx,dword ptr [rax+10]
add ecx,edi
jmp return
pay:
jmp newmem
nop
return:
[DISABLE]
spend:
db 2B CF
//sub ecx,edi
unregistersymbol(spend)
//**********************************************//
pay:
db 48 63 48 10 03 CF
unregistersymbol(pay)
unregistersymbol(pay_ptr)
dealloc(pay)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Lopital:Hospital:Pay+36
20415A92: 49 8B F0 - mov rsi,r8
20415A95: 83 FE 05 - cmp esi,05
20415A98: 75 14 - jne 20415AAE
20415A9A: 49 8B 47 28 - mov rax,[r15+28]
20415A9E: 48 8B 40 40 - mov rax,[rax+40]
20415AA2: 0F B6 40 10 - movzx eax,byte ptr [rax+10]
20415AA6: 85 C0 - test eax,eax
20415AA8: 0F 85 93 01 00 00 - jne 20415C41
20415AAE: 49 8B 47 28 - mov rax,[r15+28]
20415AB2: 48 8B 40 10 - mov rax,[rax+10]
// ---------- INJECTING HERE ----------
20415AB6: 48 63 48 10 - movsxd rcx,dword ptr [rax+10]
20415ABA: 03 CF - add ecx,edi
// ---------- DONE INJECTING ----------
20415ABC: 89 48 10 - mov [rax+10],ecx
20415ABF: 49 8B 47 28 - mov rax,[r15+28]
20415AC3: 48 8B 40 10 - mov rax,[rax+10]
20415AC7: 48 63 40 10 - movsxd rax,dword ptr [rax+10]
20415ACB: 3D 60 AE 0A 00 - cmp eax,000AAE60
20415AD0: 0F 8C 68 00 00 00 - jl 20415B3E
20415AD6: B8 00 6A C1 17 - mov eax,17C16A00
20415ADB: 48 89 45 D8 - mov [rbp-28],rax
20415ADF: 48 83 EC 20 - sub rsp,20
20415AE3: 49 BB 8A 7A 0F 05 00 00 00 00 - mov r11,00000000050F7A8A
}
1152
"m_totalMoneySpend"
4 Bytes
[pay_ptr]+10
1154
"m_achievementsUnlocked"
Auto Assembler Script
[ENABLE]
AchievementManager:IsAchievementUnlocked:
ret
[DISABLE]
AchievementManager:IsAchievementUnlocked:
push ebp
1156
"Unlock All Departments"
Auto Assembler Script
{ Game: Project Hospital
Version: 1.1.18580 Steam
Date: 2020-03-10
Author: fantomas
This script unlocks all departments
}
[ENABLE]
//Lopital:Hospital:Update+570
aobscanregion(unlockAllPrefabs,Lopital:Hospital:Update,Lopital:Hospital:Update+6df,0FB68958)
alloc(newmem,$1000,unlockAllPrefabs)
label(code)
label(return)
newmem:
mov byte ptr [rcx+00000155],0 //0: No | 1:Yes
mov byte ptr [rcx+00000156],0 //m_hospitalizationLocked
code:
movzx ecx,byte ptr [rcx+00000158]
jmp return
unlockAllPrefabs:
jmp newmem
nop 2
return:
registersymbol(unlockAllPrefabs)
[DISABLE]
unlockAllPrefabs:
db 0F B6 89 58 01 00 00
unregistersymbol(unlockAllPrefabs)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Lopital:Hospital:Update+570
254B26601D6: 0F B6 89 59 01 00 00 - movzx ecx,byte ptr [rcx+00000159]
254B26601DD: 3B C1 - cmp eax,ecx
254B26601DF: 75 2A - jne 254B266020B
254B26601E1: 48 8B CB - mov rcx,rbx
254B26601E4: 48 83 EC 20 - sub rsp,20
254B26601E8: 83 3B 00 - cmp dword ptr [rbx],00
254B26601EB: 49 BB A0 99 F5 55 54 02 00 00 - mov r11,0000025455F599A0
254B26601F5: 41 FF D3 - call r11
254B26601F8: 48 83 C4 20 - add rsp,20
254B26601FC: 48 8B 4B 28 - mov rcx,[rbx+28]
// ---------- INJECTING HERE ----------
254B2660200: 0F B6 89 58 01 00 00 - movzx ecx,byte ptr [rcx+00000158]
// ---------- DONE INJECTING ----------
254B2660207: 3B C1 - cmp eax,ecx
254B2660209: 74 06 - je 254B2660211
254B266020B: 41 BE 01 00 00 00 - mov r14d,00000001
254B2660211: 48 8B 43 28 - mov rax,[rbx+28]
254B2660215: 48 89 85 C8 FE FF FF - mov [rbp-00000138],rax
254B266021C: 48 8B CB - mov rcx,rbx
254B266021F: 48 83 EC 20 - sub rsp,20
254B2660223: 83 3B 00 - cmp dword ptr [rbx],00
254B2660226: 49 BB 00 9C F5 55 54 02 00 00 - mov r11,0000025455F59C00
254B2660230: 41 FF D3 - call r11
}
1158
"Unlock All Campaigns"
Auto Assembler Script
[ENABLE]
PlayerProfile:IsCampaignLevelUnlocked:
ret
[DISABLE]
PlayerProfile:IsCampaignLevelUnlocked:
push rbp
1166
"Max Skills (only)"
Auto Assembler Script
{ Game: Project Hospital
Version: 1.0.14398
Date: 2018-11-10
Author: fantomas
This script gives your employees max skill level [ 100 ]
}
[ENABLE]
//Lopital:Skill:AddPoints+1f8
aobscanregion(maxSkillOnly,Lopital:Skill:AddPoints+100,Lopital:Skill:AddPoints+58f,F20F5AE8F341)
maxSkillOnly+03:
db EA
//F2 0F 5A EA
//cvtsd2ss xmm5,xmm2
registersymbol(maxSkillOnly)
[DISABLE]
maxSkillOnly+03:
db E8
//F2 0F 5A E8
//cvtsd2ss xmm5,xmm0
unregistersymbol(maxSkillOnly)
{
// ORIGINAL CODE - INJECTION POINT: Lopital:Skill:AddPoints+1f8
0CAD27C8: F3 0F 5A C9 - cvtss2sd xmm1,xmm1
0CAD27CC: F2 0F 2A D7 - cvtsi2sd xmm2,edi
0CAD27D0: F3 0F 10 1D 38 03 00 00 - movss xmm3,[Lopital:Skill:AddPoints+510]
0CAD27D8: F3 0F 5A DB - cvtss2sd xmm3,xmm3
0CAD27DC: F2 0F 59 D3 - mulsd xmm2,xmm3
0CAD27E0: F2 0F 59 CA - mulsd xmm1,xmm2
0CAD27E4: F3 0F 10 15 14 03 00 00 - movss xmm2,[Lopital:Skill:AddPoints+500] [100.00]
0CAD27EC: F3 0F 5A D2 - cvtss2sd xmm2,xmm2
0CAD27F0: F2 0F 5E CA - divsd xmm1,xmm2
0CAD27F4: F2 0F 58 C1 - addsd xmm0,xmm1
// ---------- INJECTING HERE ----------
0CAD27F8: F2 0F 5A E8 - cvtsd2ss xmm5,xmm0
0CAD27FC: F3 41 0F 11 6F 28 - movss [r15+28],xmm5 //current value
// ---------- DONE INJECTING ----------
0CAD2802: E9 D1 00 00 00 - jmp Lopital:Skill:AddPoints+2d8
0CAD2807: 83 3E 00 - cmp dword ptr [rsi],00
0CAD280A: 41 BA 40 38 54 10 - mov r10d,10543840
0CAD2810: 48 8B CE - mov rcx,rsi
0CAD2813: 48 83 EC 20 - sub rsp,20
0CAD2817: 49 BB 80 1E B5 0F 00 00 00 00 - mov r11,GLib:Entity:GetComponent
0CAD2821: 41 FF D3 - call r11
0CAD2824: 48 83 C4 20 - add rsp,20
0CAD2828: 48 8B 40 18 - mov rax,[rax+18]
0CAD282C: 48 8B C8 - mov rcx,rax
}
1172
"Max Skills/Specializations"
Auto Assembler Script
{ 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+38f,F30F104E)
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
}
1176
"Fast LVL Up"
Auto Assembler Script
{ Game : Project Hospital
Version: 1.1.18580 Steam
Date : 2020-03-10
Author : fantomas
This script gives your employees fast level up
}
[ENABLE]
//Lopital:EmployeeComponent:AddExperiencePoints+204
aobscanregion(fastLevelUp,Lopital:EmployeeComponent:AddExperiencePoints+100,Lopital:EmployeeComponent:AddExperiencePoints+ecf,486340703D90010000)
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]
cmp eax,00000190
jmp return
fastLevelUp:
jmp newmem
nop 4
return:
registersymbol(fastLevelUp)
[DISABLE]
fastLevelUp:
db 48 63 40 70 3D 90 01 00 00
unregistersymbol(fastLevelUp)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Lopital:EmployeeComponent:AddExperiencePoints+223
2541566F8E7: 49 BB D0 60 F8 55 54 02 00 00 - mov r11,0000025455F860D0
2541566F8F1: 41 FF D3 - call r11
2541566F8F4: 48 83 C4 20 - add rsp,20
2541566F8F8: 48 8B D0 - mov rdx,rax
2541566F8FB: B9 03 00 00 00 - mov ecx,00000003
2541566F900: B8 05 00 00 00 - mov eax,00000005
2541566F905: 48 85 D2 - test rdx,rdx
2541566F908: 48 0F 44 C1 - cmove rax,rcx
2541566F90C: 89 45 DC - mov [rbp-24],eax
2541566F90F: 48 8B 47 18 - mov rax,[rdi+18]
// ---------- INJECTING HERE ----------
2541566F913: 48 63 40 70 - movsxd rax,dword ptr [rax+70]
2541566F917: 3D 90 01 00 00 - cmp eax,00000190
// ---------- DONE INJECTING ----------
2541566F91C: 0F 8C FA 0B 00 00 - jl 2541567051C
2541566F922: 48 8B 47 18 - mov rax,[rdi+18]
2541566F926: 48 63 40 6C - movsxd rax,dword ptr [rax+6C]
2541566F92A: 3B 45 DC - cmp eax,[rbp-24]
2541566F92D: 0F 8D E9 0B 00 00 - jnl 2541567051C
2541566F933: 48 8B 47 18 - mov rax,[rdi+18]
2541566F937: 48 63 48 70 - movsxd rcx,dword ptr [rax+70]
2541566F93B: 81 E9 90 01 00 00 - sub ecx,00000190
2541566F941: 89 48 70 - mov [rax+70],ecx
2541566F944: 48 8B 47 18 - mov rax,[rdi+18]
}
1159
"Finish All Campaigns"
Auto Assembler Script
[ENABLE]
PlayerProfile:IsCampaignLevelFinished:
ret
[DISABLE]
PlayerProfile:IsCampaignLevelFinished:
push rbp
1182
"Dev Tools"
808080
1
1177
"Resolve DebugControllerEngine"
FF0000
Auto Assembler Script
[ENABLE]
label(DebugControllerEngine.threadexit)
label(classname)
label(namespace)
label(assemblyname)
label(status)
label(domain)
label(assembly)
label(DebugControllerEngine.Static)
label(DebugControllerEngine.Class)
alloc(DebugControllerEngine.threadstart, 2048, mono.mono_thread_attach)
registersymbol(DebugControllerEngine.Static)
registersymbol(DebugControllerEngine.Class)
DebugControllerEngine.threadstart:
sub rsp,28
xor rax,rax
mov [DebugControllerEngine.Class],rax
mov [DebugControllerEngine.Static],rax
call mono.mono_get_root_domain
cmp rax,0
je DebugControllerEngine.threadexit
mov [domain],rax
mov rcx,[domain]
call mono.mono_thread_attach
mov rcx,assemblyname
mov rdx,status
call mono.mono_assembly_load_with_partial_name
cmp rax,0
je DebugControllerEngine.threadexit
mov rcx,rax
call mono.mono_assembly_get_image
cmp rax,0
je DebugControllerEngine.threadexit
mov [assembly], rax
mov rcx,eax
mov rdx,namespace
mov r8,classname
call mono.mono_class_from_name_case
cmp rax,0
je DebugControllerEngine.threadexit
mov [DebugControllerEngine.Class],rax
mov rcx,[domain]
mov rdx,rax
call mono.mono_class_vtable
cmp rax,0
je DebugControllerEngine.threadexit
mov rcx,rax
call mono.mono_vtable_get_static_field_data
mov [DebugControllerEngine.Static],rax
jmp DebugControllerEngine.threadexit
///////////////////////////////////////////////////////
// Data section
DebugControllerEngine.Static:
dq 0
DebugControllerEngine.Class:
dq 0
assemblyname:
db 'Assembly-CSharp',0
namespace:
db '',0
classname:
db 'DebugControllerEngine',0
status:
dq 0
domain:
dq 0
assembly:
dq 0
DebugControllerEngine.threadexit:
add rsp,28
ret
createthread(DebugControllerEngine.threadstart)
[DISABLE]
unregistersymbol(DebugControllerEngine.Static)
unregistersymbol(DebugControllerEngine.Class)
dealloc(DebugControllerEngine.threadstart)
1181
"DEVELOPER_BUILD"
Byte
DebugControllerEngine.Static
1
player
140002B10
level_points_ptr
062E0010