{

===========================================

 Game Title    : Test

 Game Version  : 2.3.3 (DAQH)

 Game Sponsor  : Test

 Proces Name   : TestgameHacking.exe

 Script Version: 7.1

 CE Version    : 6.4

 Release date  : 09-Mar-2015

 Author        : Recifense

 History:

 18-Oct-2014: Release for version 2.2.0 (Steam)

 19-Nov-2014: Release for version 2.2.1-DPOO (Steam)(s5.1)

 17-Dec-2014: Release for version 2.3.0-BTOF (Steam)

 18-Dec-2014: Fixed a bug related to UPGRADE cheat (s5.2)

 19-Dec-2014: Added Change Culture and Religion (s6.0)

 21-Dec-2014: Fix in changing Culture/Religion of Vassal's counties (s6.1)

 23-Dec-2014: Added pointer to indexed PERK (s7.0)

 28-Dec-2014: New approach for perks (s7.1)

 15-Jan-2015: Release for version 2.3.2-MMUR (Steam)

 09-Mar-2015: Release for version 2.3.3-DAQH (Steam)

 Features:

 - Minimum Gold

 - Upgrade in 1 Day

 - Construction in 1 Day

 - Movement in 1 Day

 - God Mode

 - Morale

 - Damage (x16)

 - Siege

 - Super Ruler

   - Diplomacy   (base) >= 70

   - Martial     (base) >= 70

   - Stewardship (base) >= 70

   - Intrigue    (base) >= 70

   - Learning    (base) >= 70

   - Fertility           = 1

   - Health              = 9.9

   - Prestige           >= 50

   - Piety              >= 50

 - Revolt Risk

 - Technology Level    (user defined => max = 8)

 - Decadence

 - Upgrade in 1 Day for Player's Vassals

 - Construction in 1 Day for Player's Vassals

 - Change Culture  of a County

 - Change Religion of a County

 - Ajust Pointer to Perk[X]

 - Some pointers

===========================================

}


//=========================================

// Definitions


define(MPLR,CK2game.exe+0034dcf5) //=#==

define(MCAP,CK2game.exe+0006c2ad) //=#==

define(MDAT,CK2game.exe+0034d9fe) //=#==

define(MOUP,CK2game.exe+00559be9) //=#==

define(MBLD,CK2game.exe+004e8880) //=#==

define(MMOV,CK2game.exe+0063d383) //##==

define(GMDE,CK2game.exe+00473c9c) //====

define(MMOR,CK2game.exe+00473d9b) //====

define(MSIE,CK2game.exe+001ed6b4) //=#==

define(GMDS,CK2game.exe+001dbeee) //====

define(MTLE,CK2game.exe+004eb230) //=#==

define(MOSC,CK2game.exe+002804c7) //=#==

define(MCCR,CK2game.exe+0050fc9a) //-N==


define(UPNL,CK2game.exe+004e90e8) // Upgrade: Normal

define(UPRB,CK2game.exe+00093492) // Upgrade: Republic Owner  Expansion

define(UPRX,CK2game.exe+004e91cb) // Upgrade: Republic Vassal Expansion

define(PERK,CK2game.exe+00C23BA4) // pPerkList


//=========================================

// Constants used in the script (that can be changed)

define(ctCE64,(float)6.4)

define(ctMMON,#64000)  // Minimum Money

define(ctMATT,#10)     // Minimum Attributes


//=========================================

[ENABLE]

//=========================================

// Check if script is compatible to this game version

// If false the script will not be loaded


assert(MPLR,8d 87 a0 00 00 00 3b fb ?? ?? b8 ?? ?? ?? ?? 8b 10 8b 40 04)

assert(MCAP,8b 46 20 8b 40 14 8b 80 00 02 00 00 8b 80 33 01 00 00 83 c0)

assert(MDAT,8b b8 68 02 00 00 8d 8f ?? ?? ?? ?? b8 ab aa aa 2a f7 e9 c1)

assert(MOUP,8b 08 3b 4f 14 8b 17 8b cf ?? ?? 8b 42 20 ff d0 3c 01 ?? ??)

assert(MBLD,8b 08 3b 4f 14 8b 17 8b cf 0f 8c ?? ?? ?? ?? 8b 42 20 ff d0)

assert(MMOV,8b 83 88 00 00 00 3b 45 08 0f 8e ?? ?? ?? ?? 83 3d ?? ?? ??)

assert(GMDE,2b c8 89 0b 8b 4d ec 01 04 19 01 45 f8 8b 4d f4 8b 45 08 8b)

assert(MMOR,29 08 83 38 00 ?? ?? c7 00 00 00 00 00 5f 8b c6 5b 8b e5 5d)

assert(MSIE,03 c2 39 43 14 ?? ?? 5f 5e b0 01 5b 8b e5 5d c2 04 00 5f 5e)

assert(GMDS,89 88 d8 00 00 00 2b fa e9 ?? ?? ?? ?? 5f 5e 5b 8b e5 5d c2)

assert(MTLE,8b 4f 38 8b 0c 81 8d 14 85 00 00 00 00 8b 47 48 8b 04 10 2b)

assert(MOSC,0f be 81 f4 00 00 00 89 45 ec 8b 41 58 89 4d dc 3b c3 ?? ??)

assert(MCCR,8b b2 fc 07 00 00 8b 4b 20 8b 01 8b 40 3c 6a 00 8d 55 d8 52)


//=========================================

alloc(MyCode,4096,CK2game.exe)

//=========================================

// Declaration section

label(_MonPlayer)

label(_MonP0P)

label(_MonP00)

label(_MonP01)

label(_MonP02)

label(_MonP03)

label(_BackMP)

label(_ExitMP)

label(_MonCapital)

label(_BackMC)

label(_ExitMC)

label(_MonDate)

label(_BackMD)

label(_ExitMD)

label(_MonUpgrade)

label(_MonU00)

label(_MonU02)

label(_BackMU)

label(_ExitMU)

label(_MonBuilding)

label(_MonB00)

label(_MonB01)

label(_MonB02)

label(_BackMB)

label(_ExitMB)

label(_MonMovement)

label(_BackMM)

label(_ExitMM)

label(_GodMode)

label(_GodM00)

label(_BackGM)

label(_ExitGM)

label(_MonMorale)

label(_BackMMo)

label(_ExitMMo)

label(_MonSiege)

label(_MonS00)

label(_MonS01)

label(_BackMS)

label(_ExitMS)

label(_GodModeS)

label(_BackGMS)

label(_ExitGMS)

label(_MonTechLevel)

label(_BackMTL)

label(_ExitMTL)

label(_MonSelChar)

label(_BackMSC)

label(_ExitMSC)

label(_MonCountyCultureReligion)

label(_MonCR00)

label(_MonCR01)

label(_BackCCR)

label(_ExitCCR)


label(_UpdPerkInfo)

label(_ExitUPI)

label(_GetPerkPointer)

label(_ExitGPP)


label(iEnableMG)

label(iEnableMU)

label(iEnableMB)

label(iEnableMM)

label(iEnableGM)

label(iEnableMMo)

label(iEnableMD)

label(iEnableMDe)

label(iEnableMS)

label(iEnableSR)

label(iEnableRR)

label(iEnableMTL)

label(iEnableMUV)

label(iEnableMBV)

label(iEnableMCC)

label(iEnableMCR)

label(iEnableCRV)


label(iDate)

label(iMinTech)


label(iPerkID)

label(iPerkIndex)

label(iPPerkIndex)

label(iSPerkIndex)

label(imPerkIndex)

label(imPPerkIndex)

label(imSPerkIndex)


label(pUnit)

label(pPlayer)

label(pOwner)

label(pCapital)

label(pProvince)

label(pSelPlayer)

label(pSelOwner)

label(pReligion)

label(pCulture)

label(pSelCounty)


label(pPerk)

label(pPlrPerk)

label(pSelPerk)

label(pPPerkID)

label(pSPerkID)


//=========================================

// Registering Symbols

registersymbol(MyCode)

registersymbol(iEnableMG)

registersymbol(iEnableMU)

registersymbol(iEnableMB)

registersymbol(iEnableMM)

registersymbol(iEnableGM)

registersymbol(iEnableMMo)

registersymbol(iEnableMD)

registersymbol(iEnableMDe)

registersymbol(iEnableMS)

registersymbol(iEnableSR)

registersymbol(iEnableRR)

registersymbol(iEnableMTL)

registersymbol(iEnableMUV)

registersymbol(iEnableMBV)

registersymbol(iEnableMCC)

registersymbol(iEnableMCR)

registersymbol(iEnableCRV)


registersymbol(iMinTech)


registersymbol(iPerkID)

registersymbol(iPerkIndex)

registersymbol(iPPerkIndex)

registersymbol(iSPerkIndex)

registersymbol(imPerkIndex)

registersymbol(imPPerkIndex)

registersymbol(imSPerkIndex)


registersymbol(pUnit)

registersymbol(pPlayer)

registersymbol(pOwner)

registersymbol(pCapital)

registersymbol(pProvince)

registersymbol(pSelPlayer)

registersymbol(pSelOwner)

registersymbol(pSelCounty)


registersymbol(pPerk)

registersymbol(pPlrPerk)

registersymbol(pSelPerk)

registersymbol(pPPerkID)

registersymbol(pSPerkID)


//=========================================

MyCode:

//========================================= v2.3.0

// On main screen (change to consider negative gold amount)

_MonPlayer:

 push ebx

 push ecx

 push esi


 mov esi,edi

 test esi,esi

 jz _ExitMP


 cmp esi,[pPlayer]

 je _MonP0P


 mov [pPlayer],esi


 xor eax,eax

 mov [pSelPlayer],eax

 mov [pSelOwner],eax

 mov [pSelPerk],eax

 mov [pPlrPerk],eax

 mov [pPerk],eax

 mov [pPPerkID],eax

 mov [pSPerkID],eax


 mov [imPerkIndex],eax

 mov [imPPerkIndex],eax

 mov [imSPerkIndex],eax


 inc eax


 mov [iPerkID],eax

 mov [iPPerkIndex],eax

 mov [iSPerkIndex],eax


 inc eax


 mov [iPerkIndex],eax


_MonP0P:

 mov eax,[esi+04]

 test eax,eax

 jz _MonP01


 mov eax,[eax+04]

 test eax,eax

 jz _MonP01


 mov eax,[eax+0c]

 mov [pOwner],eax


 test eax,eax

 jz _MonP01


 cmp eax,[eax+000000e4]

 jne _MonP01


 mov ecx,[eax+0000010c]

 mov [pReligion],ecx


 mov ecx,[eax+00000110]

 mov [pCulture],ecx


 cmp dword ptr [iEnableSR],0

 je _MonP00                        // Jump if feature is disabled


 xor ecx,ecx

 mov ebx,#70


 mov cl,[eax+000000f4]             // Diplomacy (base)

 cmp ebx,ecx

 cmovg ecx,ebx

 mov [eax+000000f4],cl


 mov cl,[eax+000000f5]             // Martial (base)

 cmp ebx,ecx

 cmovg ecx,ebx

 mov [eax+000000f5],cl


 mov cl,[eax+000000f6]             // Stewardship (base)

 cmp ebx,ecx

 cmovg ecx,ebx

 mov [eax+000000f6],cl


 mov cl,[eax+000000f7]             // Intrigue (base)

 cmp ebx,ecx

 cmovg ecx,ebx

 mov [eax+000000f7],cl


 mov cl,[eax+000000f8]             // Learning (base)

 cmp ebx,ecx

 cmovg ecx,ebx

 mov [eax+000000f8],cl


//Other structure


 mov ebx,#1000

 mov ecx,[esi+00000088]            // Fertility (base)

 cmp ebx,ecx

 cmovg ecx,ebx

 mov [esi+00000088],ecx


 mov ecx,[esi+0000008c]            // Fertility (base)

 cmp ebx,ecx

 cmovg ecx,ebx

 mov [esi+0000008c],ecx


 mov ebx,#9900

 mov ecx,[esi+00000090]            // Health (base)

 cmp ebx,ecx

 cmovg ecx,ebx

 mov [esi+00000090],ecx


 mov ebx,#100000

 mov ecx,[esi+00000098]            // Prestige

 cmp ebx,ecx

 cmovg ecx,ebx

 mov [esi+00000098],ecx


 mov ecx,[esi+0000009c]            // Piety

 cmp ebx,ecx

 cmovg ecx,ebx

 mov [esi+0000009c],ecx


// Other Structure


 mov ebx,[iDate]

 mov ecx,0006aef0

 sub ebx,ecx

 js _MonP00


 mov ecx,[eax+00000098]            // Age

 cmp ebx,ecx

 cmovg ecx,ebx

 mov [eax+00000098],ecx


_MonP00:

 cmp dword ptr [iEnableMDe],0

 je _MonP01                        // Jump if feature is disabled


 mov ecx,[eax+000000a0]            // pDinasty

 test ecx,ecx

 jz _MonP01


 mov ebx,[ecx+5c]

 test ebx,ebx

 js _MonP01


 mov [ecx+58],0

 mov [ecx+5c],0


 mov ebx,[ecx+64]

 test ebx,ebx

 js _MonP01


 mov [ecx+60],0

 mov [ecx+64],0


 mov ebx,[ecx+6c]

 test ebx,ebx

 js _MonP01


 mov [ecx+68],0

 mov [ecx+6c],0


 mov ebx,[ecx+74]

 test ebx,ebx

 js _MonP01


 mov [ecx+70],0

 mov [ecx+74],0


_MonP01:

 cmp dword ptr [iEnableMG],0

 je _MonP03                        // Jump if feature is disabled


 mov eax,[esi+000000a4]

 test eax,eax

 js _MonP02

 jnz _MonP03


_MonP02:

 xor eax,eax

 mov [esi+000000a4],eax


 mov eax,0c800000

 cmp eax,[esi+000000a0]

 jle _MonP03


 mov [esi+000000a0],eax


_MonP03:

 call _UpdPerkInfo


_ExitMP:

 pop esi

 pop ecx

 pop ebx


 lea eax,[edi+000000A0]            // Original code (pMoney)

 jmp _BackMP                       // Back to main code


//========================================= v2.3.0

// On Selecting the Capital of a County

_MonCapital:

 mov eax,[esi+20]


 mov [pCapital],eax


 mov eax,[eax+34]

 mov [pProvince],eax


 cmp dword ptr [iEnableRR],0

 je _ExitMC                        // Jump if feature is disabled


 mov eax,[eax+00000804]            // pStrName

 test eax,eax

 jz _ExitMC


 mov eax,[eax+00000200]

 cmp eax,[pOwner]

 jne _ExitMC


 mov eax,[pCapital]

 mov [eax+68],0


 mov eax,[pProvince]

 mov [eax+0000035c],0


_ExitMC:

 mov eax,[esi+20]                  // Original code (pCap)

 mov eax,[eax+14]                  // Original code (pCapInfo)

 jmp _BackMC                       // Back to main code


//========================================= v2.3.0

// On Main Screen

_MonDate:

 mov edi,[eax+00000268]            // Original code (Get Date)


 mov [iDate],edi


_ExitMD:

 jmp _BackMD                       // Back to main code


//========================================= v2.3.0

// When changing date

// Building and Upgrading in county's regions

// Building Port in Republic Counties

_MonUpgrade:

 push ebx

 push edi

 push esi


 cmp dword ptr [iEnableMU],0

 je _ExitMU                        // Jump if feature is disabled


 mov edi,edi


 mov ecx,[edi+28]                  // Get pCapital

 test ecx,ecx

 jz _ExitMU


 mov ecx,[edi+20]                  // Get pCounty

 test ecx,ecx

 jz _ExitMU


 mov ebx,[ebp+04]

 cmp ebx,UPNL

 je _MonU00


 cmp ebx,UPRB

 je _MonU00


 cmp ebx,UPRX

 jne _ExitMU


 mov ebx,[edi+28]                  // Get pCapital

 mov ecx,[ebx+1c]                  // Get pManager

 cmp ecx,[pOwner]

 je _MonU02


 cmp dword ptr [iEnableMUV],0

 je _ExitMU                        // Jump if feature is disabled


 mov ebx,[ebx+1c]                  // Get pManager

 mov ecx,[ebx+0000012b]            // Get pLieage

 cmp ecx,[pOwner]

 je _MonU02

 jmp _ExitMU

//==

_MonU00:

 mov ebx,[ecx+00000804]            // Get pCountyName

 test ebx,ebx

 jz _ExitMU


 mov ecx,[ebx+00000200]            // Get pOwner

 cmp ecx,[pOwner]

 je _MonU02


 cmp dword ptr [iEnableMUV],0

 je _ExitMU                        // Jump if feature is disabled


 mov ebx,[ebx+00000168]            // Get pRealOwner

 test ebx,ebx

 jz _ExitMU


 mov ecx,[ebx+00000200]            // Get pOwner

 cmp ecx,[pOwner]

 je _MonU02

 jmp _ExitMU

//==

_MonU02:

 cmp ecx,[pOwner]

 jne _ExitMU


 mov ecx,[eax]                     // Get current date

 mov [edi+14],ecx                  // Update finishing Date

 mov ecx,[edi+18]

 imul ecx,ecx,000003e8

 mov [edi+1c],ecx


_ExitMU:

 pop esi

 pop edi

 pop ebx


 mov ecx,[eax]                     // Original code

 cmp ecx,[edi+14]                  // Original code

 jmp _BackMU                       // Back to main code


//========================================= v2.3.0

// When changing date (construction)

_MonBuilding:

 push ebx


 cmp dword ptr [iEnableMB],0

 je _ExitMB                        // Jump if feature is disabled


 mov ecx,[edi+20]                  // Get pCounty

 test ecx,ecx

 jz _MonB01


 mov ebx,[ecx+00000804]            // Get pCountyName

 test ebx,ebx

 jz _MonB01


 mov ecx,[ebx+00000200]            // Get pOwner

 cmp ecx,[pOwner]

 je _MonB02


_MonB00:

 cmp dword ptr [iEnableMBV],0

 je _MonB01                        // Jump if feature is disabled


 mov ebx,[ebx+00000168]

 test ebx,ebx

 jz _MonB01


 mov ecx,[ebx+00000200]            // Get pOwner

 cmp ecx,[pOwner]

 je _MonB02


_MonB01:

 cmp dword ptr [iEnableMBV],0

 je _ExitMB                        // Jump if feature is disabled


 mov ecx,[edi+28]

 cmp ecx,[pOwner]

 jne _ExitMB


_MonB02:

 mov ecx,[eax]                     // Get current date

 mov [edi+14],ecx                  // Update finishing Date


_ExitMB:

 pop ebx


 mov ecx,[eax]                     // Original code

 cmp ecx,[edi+14]                  // Original code

 jmp _BackMB                       // Back to main code


//========================================= v2.3.0

// When changing date

_MonMovement:

 cmp dword ptr [iEnableMM],0

 je _ExitMM                        // Jump if feature is disabled


 mov eax,[ebx+00000128]            // Get pOwner

 cmp eax,[pOwner]

 jne _ExitMM


 mov eax,[ebp+08]

 inc eax

 mov [ebx+00000088],eax


_ExitMM:

 mov eax,[ebx+00000088]            // Original code

 jmp _BackMM                       // Back to main code


//========================================= v2.2.0

// During combat

_GodMode:

 push esi


 mov esi,[ebp+08]

 test esi,esi

 jz _ExitGM


 lea esi,[esi-b4]

 mov esi,[esi+50]                  // Get pOwner

 cmp esi,[pOwner]

 jne _GodM00


 cmp dword ptr [iEnableGM],0

 je _ExitGM                        // Jump if feature is disabled


 mov ecx,[ebx+20]

 mov [ebx],ecx


 xor eax,eax                       // Value2decrease = 0

 jmp _ExitGM


_GodM00:

 cmp dword ptr [iEnableMD],0

 je _ExitGM                        // Jump if feature is disabled


 shl eax,4                         // Damage * 16

 cmp ecx,eax

 cmovl eax,ecx


_ExitGM:

 pop esi


 sub ecx,eax                       // Original code

 mov [ebx],ecx                     // Original code

 mov ecx,[ebp-14]                  // Original code

 jmp _BackGM                       // Back to main code


//========================================= v2.2.0

// When in combat

_MonMorale:

 push edi


 cmp dword ptr [iEnableMMo],0

 je _ExitMMo                       // Jump if feature is disabled


 mov edi,[eax+0c]                  // Get pOwner

 cmp edi,[pOwner]

 jne _ExitMMo


 mov edi,#1000

 mov [eax],edi


 xor ecx,ecx                       // value2decrease = 0


_ExitMMo:

 pop edi


 sub [eax],ecx                     // Original code

 cmp dword ptr [eax],00            // Original code

 jmp _BackMMo                      // Back to main code


//========================================= v2.3.0

// Selected County in Siege

// If a player's county, set value to 1 day

// If a Enemy's county, set value to maximum (Enable Assault)

_MonSiege:

 push ecx

 push edi

 push esi


 add eax,edx                       // Original code


 cmp dword ptr [iEnableMS],0

 je _ExitMS                        // Jump if feature is disabled


 mov edi,[ebx+10]                  // Get pCapital

 test edi,edi

 jz _ExitMS


 mov edi,[edi+14]                  // Get pInfo

 test edi,edi

 jz _ExitMS


 mov edi,[edi+00000200]            // Get pOwner

 cmp edi,[pOwner]

 jne _MonS00


 mov dword ptr [ebx+14],1

 mov eax,#100

 jmp _ExitMS

// Enemy Province's Capital

_MonS00:

 mov esi,[ebx+10]                  // Get pCapital


 mov esi,[esi+34]                  // Get pCounty

 test esi,esi

 jz _ExitMS


 mov edi,[esi+000007b4]            // Get ppArmy

 test edi,edi

 jz _ExitMS


 mov edi,[edi]                     // Get p1stArmy

 test edi,edi

 jz _ExitMS


 mov ecx,[edi+00000128]            // Get pOwner

 cmp ecx,[pOwner]

 je _MonS01


 mov edi,[esi+000007b8]            // Get ppArmy

 test edi,edi

 jz _ExitMS


 mov edi,[edi]                     // Get pLastArmy

 test edi,edi

 jz _ExitMS


 mov ecx,[edi+00000128]            // Get pOwner

 cmp ecx,[pOwner]

 jne _ExitMS


_MonS01:

 cmp ebx,[edi+64]                  // Sieged by the player?

 jne _ExitMS


 mov [ebx+14],eax                  // Enable Assault


_ExitMS:

 pop esi

 pop edi

 pop ecx


 cmp [ebx+14],eax                  // Original code

 jmp _BackMS                       // Back to main code


//========================================= v2.2.0

// Army During Siege

_GodModeS:

 push esi

 push edi

 push ecx


 mov [eax+000000D8],ecx            // Original code


 cmp dword ptr [iEnableGM],0

 je _ExitGMS                       // Jump if feature is disabled


 mov esi,[eax+50]                  // Get pOwner

 cmp esi,[pOwner]

 jne _ExitGMS


 pushfd

 cld


 lea esi,[eax+000000dc]

 lea edi,[eax+000000bc]

 mov ecx,8


 rep movsd


 popfd


 mov [eax+44],#1000                // Morale


_ExitGMS:

 pop ecx

 pop edi

 pop esi

 jmp _BackGMS                      // Back to main code


//========================================= v2.3.0

// Looking at the Technology Screen

// ESI = province or demesne part, EDI = Index

_MonTechLevel:

 push edx

 push ebx


 cmp dword ptr [iEnableMTL],0

 je _ExitMTL                       // Jump if feature is disabled


 mov ebx,[edi+00000804]            // Get pCountyName

 test ebx,ebx

 jz _ExitMTL


 mov ebx,[ebx+00000200]            // Get pOwner

 cmp ebx,[pOwner]

 jne _ExitMTL


 mov ecx,[edi+38]                  // pTechLevel

 test ecx,ecx

 jz _ExitMTL


 mov ebx,[iMinTech]

 cmp ebx,8

 jg _ExitMTL


 test ebx,ebx

 js _ExitMTL


 push eax

 mov eax,#1000

 imul ebx,eax

 pop eax


 cmp ebx,[ecx+eax*4]

 jle _ExitMTL


 mov [ecx+eax*4],ebx


_ExitMTL:

 pop ebx

 pop edx


 mov ecx,[edi+38]                  // Original code

 mov ecx,[ecx+eax*4]               // Original code

 jmp _BackMTL                      // Back to main code


//========================================= v2.3.0

// When a character detail is displayed (select the portrait)

_MonSelChar:

 mov eax,[ecx+58]


 mov [pSelPlayer],eax

 mov [pSelOwner],ecx


 xor eax,eax

 mov [pSelPerk],eax

 mov [imSPerkIndex],eax

 mov [pSPerkID],eax

 inc eax

 mov [iSPerkIndex],eax


_ExitMSC:

 movsx eax,byte ptr [ecx+000000F4] // Original code

 jmp _BackMSC                      // Back to main code


//========================================= v2.3.0 new

// When Selecting County

_MonCountyCultureReligion:

 push ecx


 mov [pSelCounty],edx


 mov esi,[edx+00000804]            // Get pCountyName

 test esi,esi

 jz _ExitCCR


 mov ecx,[esi+00000200]            // Get pOwner

 cmp ecx,[pOwner]

 je _MonCR00


 cmp dword ptr [iEnableCRV],0

 je _ExitCCR                       // Jump if feature is disabled


 mov ecx,[esi+00000168]

 test ecx,ecx

 jz _ExitCCR


 mov ecx,[ecx+00000200]            // Get pOwner

 cmp ecx,[pOwner]

 jne _ExitCCR


_MonCR00:

 cmp dword ptr [iEnableMCC],0

 je _MonCR01                       // Jump if feature is disabled


 mov ecx,[pCulture]

 test ecx,ecx

 jz _MonCR01


 mov [edx+000007FC],ecx


_MonCR01:

 cmp dword ptr [iEnableMCR],0

 je _ExitCCR                       // Jump if feature is disabled


 mov ecx,[pReligion]

 test ecx,ecx

 jz _ExitCCR


 mov [edx+00000800],ecx


_ExitCCR:

 pop ecx


 mov esi,[edx+000007FC]            // Original code

 jmp _BackCCR                      // Back to main code


//=========================================

// Procedure to update Perk Info

_UpdPerkInfo:

 push eax

 push ebx


 // Checking Perk List

 mov ebx,[PERK]

 test ebx,ebx

 jz _ExitUPI


 mov eax,[ebx]

 mov [imPerkIndex],eax


// Dealing with Any Perk Info


 mov eax,[iPerkIndex]

 cmp eax,[imPerkIndex]

 jg _ExitUPI


 test eax,eax

 jz _ExitUPI


 dec eax

 mov [iPerkID],eax


 mov ebx,[PERK]

 mov ebx,[ebx+0c]

 mov eax,[ebx+eax*4]

 mov [pPerk],eax


// Dealing with Human Player


 mov ebx,[pOwner]                  // Just for safety

 test ebx,ebx

 jz _ExitUPI


 mov eax,[ebx+000000fc]

 test eax,eax

 jz _ExitUPI


 mov eax,[ebx+00000100]

 test eax,eax

 jz _ExitUPI


 sub eax,[ebx+000000fc]

 shr eax,1

 mov [imPPerkIndex],eax


 mov eax,[iPPerkIndex]

 test eax,eax

 jz _ExitUPI


 cmp eax,[imPPerkIndex]

 jg _ExitUPI


 push eax

 push ebx

 push pPPerkID

 push pPlrPerk

 call _GetPerkPointer


// Dealing with Last Selected Character


 mov ebx,[pSelOwner]

 test ebx,ebx

 jz _ExitUPI


 mov eax,[ebx+000000fc]

 test eax,eax

 jz _ExitUPI


 mov eax,[ebx+00000100]

 test eax,eax

 jz _ExitUPI


 sub eax,[ebx+000000fc]

 shr eax,1

 mov [imSPerkIndex],eax


 mov eax,[iSPerkIndex]

 test eax,eax

 jz _ExitUPI


 cmp eax,[imSPerkIndex]

 jg _ExitUPI


 mov eax,[iSPerkIndex]

 test eax,eax

 jz _ExitUPI


 cmp eax,[imSPerkIndex]

 jg _ExitUPI


 push eax

 push ebx

 push pSPerkID

 push pSelPerk

 call _GetPerkPointer


_ExitUPI:

 pop ebx

 pop eax

 ret


//=========================================

// Procedure to Get Perk Pointer

_GetPerkPointer:

 push ebp

 mov ebp,esp


 push eax

 push ebx

 push ecx

 push edx


 mov ebx,[ebp+10]                  // Get pOwnerStr

 mov ecx,[ebp+14]                  // Get Index

 mov edx,[ebp+0C]                  // Get pPerkID


 dec  ecx                          // Adjust Index


 mov ebx,[ebx+000000fc]            // get pPerkIDList

 lea eax,[ebx+ecx*2]               // Point to ID

 mov [edx],eax


 movzx ecx,word ptr [eax]          // Get ID(Index)


 mov edx,[PERK]                    // Get pPerkList

 mov edx,[edx+0c]                  // Get PerkList


 mov eax,[edx+ecx*4]               // Get pPerk address

 mov ebx,[ebp+08]                  // Get pPerk

 mov [ebx],eax


_ExitGPP:

 pop edx

 pop ecx

 pop ebx

 pop eax


 pop ebp

 ret 0010


//=========================================

 db '=================================>'

 db 'CE6.4 Script by Recifense 030915'

//=========================================

// Variables

iEnableMG:

 dd 0

iEnableMU:

 dd 0

iEnableMUV:

 dd 0

iEnableMB:

 dd 0

iEnableMBV:

 dd 0

iEnableMM:

 dd 0

iEnableGM:

 dd 0

iEnableMMo:

 dd 0

iEnableMD:

 dd 0

iEnableMS:

 dd 0

iEnableSR:

 dd 0

iEnableRR:

 dd 0

iEnableMTL:

 dd 0

iEnableMDe:

 dd 0

iEnableMCC:

 dd 0

iEnableMCR:

 dd 0

iEnableCRV:

 dd 0

iDate:

 dd 0

iMinTech:

 dd 1

iPerkIndex:

 dd 2

iPPerkIndex:

 dd 1

iSPerkIndex:

 dd 1

imPerkIndex:

 dd 1

imPPerkIndex:

 dd 1

imSPerkIndex:

 dd 1

iPerkID:

 dd 0

pUnit:

 dd 0

pPlayer:

 dd 0

pOwner:

 dd MyCode

pCapital:

 dd 0

pProvince:

 dd 0

pSelPlayer:

 dd 0

pSelOwner:

 dd 0

pReligion:

 dd 0

pCulture:

 dd 0

pSelCounty:

 dd 0

pPerk:

 dd 0

pPlrPerk:

 dd 0

pSelPerk:

 dd 0

pPPerkID:

 dd 0

pSPerkID:

 dd 0


//=========================================

MPLR:

 jmp _MonPlayer

 nop

_BackMP:


MCAP:

 jmp _MonCapital

 nop

_BackMC:


MDAT:

 jmp _MonDate

 nop

_BackMD:


MOUP:

 jmp _MonUpgrade

_BackMU:


MBLD:

 jmp _MonBuilding

_BackMB:


MMOV:

 jmp _MonMovement

 nop

_BackMM:


GMDE:

 jmp _GodMode

 nop

 nop

_BackGM:


MMOR:

 jmp _MonMorale

_BackMMo:


MSIE:

 jmp _MonSiege

_BackMS:


GMDS:

 jmp _GodModeS

 nop

_BackGMS:


MTLE:

 jmp _MonTechLevel

 nop

_BackMTL:


MOSC:

 jmp _MonSelChar

 nop

 nop

_BackMSC:


MCCR:

 jmp _MonCountyCultureReligion

 nop

_BackCCR:


//=========================================

// Script for Restoring Original Codes

[DISABLE]

MPLR:

// lea eax,[edi+000000A0]

 db 8d 87 a0 00 00 00


MCAP:

// mov eax,[esi+20]

// mov eax,[eax+14]

 db 8b 46 20 8b 40 14


MDAT:

// mov edi,[eax+00000268]

 db 8b b8 68 02 00 00


MOUP:

// mov ecx,[eax]

// cmp ecx,[edi+14]

 db 8b 08 3b 4f 14


MBLD:

// mov ecx,[eax]

// cmp ecx,[edi+14]

 db 8b 08 3b 4f 14


MMOV:

// mov eax,[ebx+00000088]

 db 8b 83 88 00 00 00


GMDE:

// sub ecx,eax

// mov [ebx],ecx

// mov ecx,[ebp-14]

 db 2b c8 89 0b 8b 4d ec


MMOR:

// sub [eax],ebx

// cmp dword ptr [eax],00

 db 29 08 83 38 00


MSIE:

// add eax,edx

// cmp [ebx+14],eax

 db 03 c2 39 43 14


GMDS:

// mov [eax+000000D8],ecx

 db 89 88 d8 00 00 00


MTLE:

// mov ecx,[edi+38]

// mov ecx,[ecx+eax*4]

 db 8b 4f 38 8b 0c 81


MOSC:

// movsx eax,byte ptr [ecx+000000F4]

 db 0f be 81 f4 00 00 00


MCCR:

// mov esi,[edx+000007FC]

 db 8b b2 fc 07 00 00


//=========================================

// Unregistering Symbols

unregistersymbol(MyCode)

unregistersymbol(iEnableMG)

unregistersymbol(iEnableMU)

unregistersymbol(iEnableMB)

unregistersymbol(iEnableMM)

unregistersymbol(iEnableGM)

unregistersymbol(iEnableMMo)

unregistersymbol(iEnableMD)

unregistersymbol(iEnableMDe)

unregistersymbol(iEnableMS)

unregistersymbol(iEnableSR)

unregistersymbol(iEnableRR)

unregistersymbol(iEnableMTL)

unregistersymbol(iEnableMUV)

unregistersymbol(iEnableMBV)

unregistersymbol(iEnableMCC)

unregistersymbol(iEnableMCR)

unregistersymbol(iEnableCRV)


unregistersymbol(iMinTech)


unregistersymbol(iPerkID)

unregistersymbol(iPerkIndex)

unregistersymbol(iPPerkIndex)

unregistersymbol(iSPerkIndex)

unregistersymbol(imPerkIndex)

unregistersymbol(imPPerkIndex)

unregistersymbol(imSPerkIndex)


unregistersymbol(pUnit)

unregistersymbol(pOwner)

unregistersymbol(pCapital)

unregistersymbol(pProvince)

unregistersymbol(pPlayer)

unregistersymbol(pSelPlayer)

unregistersymbol(pSelOwner)

unregistersymbol(pSelCounty)


unregistersymbol(pPerk)

unregistersymbol(pPlrPerk)

unregistersymbol(pSelPerk)

unregistersymbol(pPPerkID)

unregistersymbol(pSPerkID)


//=========================================

dealloc(MyCode)

//============= Scripts End ===============


// ****************************************

// NOTES

// ****************************************

{

2.3.2 (MMUR):

define(MPLR,CK2game.exe+0034cc45) //=#=

define(MCAP,CK2game.exe+0006c70d) //=#=

define(MDAT,CK2game.exe+0034c94e) //=#=

define(MOUP,CK2game.exe+00559d59) //=#=

define(MBLD,CK2game.exe+004e7b10) //=#=

define(MMOV,CK2game.exe+0063d593) //##=

define(GMDE,CK2game.exe+0047339c) //===

define(MMOR,CK2game.exe+0047349b) //===

define(MSIE,CK2game.exe+001eced4) //=#=

define(GMDS,CK2game.exe+001db36e) //===

define(MTLE,CK2game.exe+004ea4e0) //=#=

define(MOSC,CK2game.exe+0027fe47) //=#=

define(MCCR,CK2game.exe+0050ee0a) //-N=


define(UPNL,CK2game.exe+004e8378) // Upgrade: Normal

define(UPRB,CK2game.exe+00093832) // Upgrade: Republic Owner  Expansion

define(UPRX,CK2game.exe+004e845b) // Upgrade: Republic Vassal Expansion

define(PERK,CK2game.exe+00C22BA4) // pPerkList


}