Перейти к содержанию

[Serious Sam - The Second Encounter] GOG v1.07


Рекомендуемые сообщения

Проверено на лицензии. Ломается также. Но тут версия по сути отличается от "The First Encounter".

На одноручный и двуручный револьвер оказывается разные инструкции срабатывают. Так что по револьверам нужно тереть в двух местах.

Можно объединить их в один. Но вставлю их тут отдельно для наглядности.

 

NoDamageHealth:

Обходит урон здоровью если игрок

Спойлер

{ Game   : SeriousSam.exe THE SECOND ENCOUNTER
  Version: 
  Date   : 2021-03-31
  Author : Templar

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(NoDamageHealth,Engine.dll,D8 65 10 8D 4D C4) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
label(nosub)

newmem:

code:
  ///фильтр
  cmp [esi+000000CC+18],#1 ///id игрока
  je nosub ///перепрыгиваем урон если игрок

  fsub dword ptr [ebp+10] ///урон
nosub:
  lea ecx,[ebp-3C]
  jmp return

NoDamageHealth:
  jmp newmem
  nop
return:
registersymbol(NoDamageHealth)

[DISABLE]

NoDamageHealth:
  db D8 65 10 8D 4D C4

unregistersymbol(NoDamageHealth)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Engine.CLiveEntity::ReceiveDamage+2F

Engine.CLiveEntity::ReceiveDamage+11: 64 89 25 00 00 00 00  - mov fs:[00000000],esp
Engine.CLiveEntity::ReceiveDamage+18: 83 EC 64              - sub esp,64
Engine.CLiveEntity::ReceiveDamage+1B: 56                    - push esi
Engine.CLiveEntity::ReceiveDamage+1C: 8B F1                 - mov esi,ecx
Engine.CLiveEntity::ReceiveDamage+1E: 85 F6                 - test esi,esi
Engine.CLiveEntity::ReceiveDamage+20: 89 75 F0              - mov [ebp-10],esi
Engine.CLiveEntity::ReceiveDamage+23: 74 03                 - je Engine.CLiveEntity::ReceiveDamage+28
Engine.CLiveEntity::ReceiveDamage+25: FF 46 18              - inc [esi+18]
Engine.CLiveEntity::ReceiveDamage+28: 57                    - push edi
Engine.CLiveEntity::ReceiveDamage+29: D9 86 CC 00 00 00     - fld dword ptr [esi+000000CC]
// ---------- INJECTING HERE ----------
Engine.CLiveEntity::ReceiveDamage+2F: D8 65 10              - fsub dword ptr [ebp+10]
// ---------- DONE INJECTING  ----------
Engine.CLiveEntity::ReceiveDamage+32: 8D 4D C4              - lea ecx,[ebp-3C]
Engine.CLiveEntity::ReceiveDamage+35: C7 45 FC 00 00 00 00  - mov [ebp-04],00000000
Engine.CLiveEntity::ReceiveDamage+3C: D9 9E CC 00 00 00     - fstp dword ptr [esi+000000CC]
Engine.CLiveEntity::ReceiveDamage+42: E8 D9 33 05 00        - call Engine.EDamage::EDamage
Engine.CLiveEntity::ReceiveDamage+47: 8B 7D 08              - mov edi,[ebp+08]
Engine.CLiveEntity::ReceiveDamage+4A: C6 45 FC 01           - mov byte ptr [ebp-04],01
Engine.CLiveEntity::ReceiveDamage+4E: 85 FF                 - test edi,edi
Engine.CLiveEntity::ReceiveDamage+50: 74 03                 - je Engine.CLiveEntity::ReceiveDamage+55
Engine.CLiveEntity::ReceiveDamage+52: FF 47 18              - inc [edi+18]
Engine.CLiveEntity::ReceiveDamage+55: 8B 45 CC              - mov eax,[ebp-34]
}

 

 

RevolverNoReload(OneHand):

Револьвер в одной руке без перезарядки

Спойлер

{ Game   : SeriousSam.exe THE SECOND ENCOUNTER
  Version: 
  Date   : 2021-03-31
  Author : Templar

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(RevolverNoReload,EntitiesMP.dll,4F 6A 00 8B CE) // should be unique
registersymbol(RevolverNoReload)

RevolverNoReload:
  db 90 6A 00 8B CE ///перетираем один байт на отнимание

[DISABLE]

RevolverNoReload:
  db 4F 6A 00 8B CE

unregistersymbol(RevolverNoReload)

{
// ORIGINAL CODE - INJECTION POINT: EntitiesMP.CPlayerWeapons::FireColt+B1

EntitiesMP.CPlayerWeapons::FireColt+88: 68 70 C7 1C 08     - push EntitiesMP.CPlayerWeapons_DLLClass+2068
EntitiesMP.CPlayerWeapons::FireColt+8D: FF 15 14 B5 14 08  - call dword ptr [EntitiesMP.dll+17B514]
EntitiesMP.CPlayerWeapons::FireColt+93: 83 C4 04           - add esp,04
EntitiesMP.CPlayerWeapons::FireColt+96: 8B CE              - mov ecx,esi
EntitiesMP.CPlayerWeapons::FireColt+98: E8 B3 5A FF FF     - call EntitiesMP.CPlayerWeapons::DoRecoil
EntitiesMP.CPlayerWeapons::FireColt+9D: 68 00 00 20 42     - push 42200000
EntitiesMP.CPlayerWeapons::FireColt+A2: 8B CE              - mov ecx,esi
EntitiesMP.CPlayerWeapons::FireColt+A4: E8 27 AE FF FF     - call EntitiesMP.CPlayerWeapons::SpawnRangeSound
EntitiesMP.CPlayerWeapons::FireColt+A9: 8B BE 14 03 00 00  - mov edi,[esi+00000314]
EntitiesMP.CPlayerWeapons::FireColt+AF: 6A 02              - push 02
// ---------- INJECTING HERE ----------
EntitiesMP.CPlayerWeapons::FireColt+B1: 4F                 - dec edi
// ---------- DONE INJECTING  ----------
EntitiesMP.CPlayerWeapons::FireColt+B2: 6A 00              - push 00
EntitiesMP.CPlayerWeapons::FireColt+B4: 8B CE              - mov ecx,esi
EntitiesMP.CPlayerWeapons::FireColt+B6: 89 BE 14 03 00 00  - mov [esi+00000314],edi
EntitiesMP.CPlayerWeapons::FireColt+BC: E8 AF 77 FF FF     - call EntitiesMP.CPlayerWeapons::SetFlare
EntitiesMP.CPlayerWeapons::FireColt+C1: 6A 00              - push 00
EntitiesMP.CPlayerWeapons::FireColt+C3: 6A 04              - push 04
EntitiesMP.CPlayerWeapons::FireColt+C5: 8B CE              - mov ecx,esi
EntitiesMP.CPlayerWeapons::FireColt+C7: E8 04 7A FF FF     - call EntitiesMP.CPlayerWeapons::PlayLightAnim
EntitiesMP.CPlayerWeapons::FireColt+CC: 8B 86 EC 00 00 00  - mov eax,[esi+000000EC]
EntitiesMP.CPlayerWeapons::FireColt+D2: 6A 06              - push 06
}

 

 

TwoHandRevolverNoReload:

Револьвер в двух руках без перезарядки

Спойлер

{ Game   : SeriousSam.exe THE SECOND ENCOUNTER
  Version: 
  Date   : 2021-03-31
  Author : Templar

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(TwoHandRevolverNoReload,EntitiesMP.dll,48 6A 00 8B CE) // should be unique
registersymbol(TwoHandRevolverNoReload)

TwoHandRevolverNoReload:
  db 90 6A 00 8B CE  ///перетираем один байт на отнимание

[DISABLE]

TwoHandRevolverNoReload:
  db 48 6A 00 8B CE

unregistersymbol(TwoHandRevolverNoReload)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: EntitiesMP.CPlayerWeapons::FireDoubleColt+8F

EntitiesMP.CPlayerWeapons::FireDoubleColt+66: 68 88 C7 FA 07     - push EntitiesMP.CPlayerWeapons_DLLClass+2080
EntitiesMP.CPlayerWeapons::FireDoubleColt+6B: FF 15 14 B5 F2 07  - call dword ptr [EntitiesMP.dll+17B514]
EntitiesMP.CPlayerWeapons::FireDoubleColt+71: 83 C4 04           - add esp,04
EntitiesMP.CPlayerWeapons::FireDoubleColt+74: 8B CE              - mov ecx,esi
EntitiesMP.CPlayerWeapons::FireDoubleColt+76: E8 45 56 FF FF     - call EntitiesMP.CPlayerWeapons::DoRecoil
EntitiesMP.CPlayerWeapons::FireDoubleColt+7B: 68 00 00 48 42     - push 42480000
EntitiesMP.CPlayerWeapons::FireDoubleColt+80: 8B CE              - mov ecx,esi
EntitiesMP.CPlayerWeapons::FireDoubleColt+82: E8 B9 A9 FF FF     - call EntitiesMP.CPlayerWeapons::SpawnRangeSound
EntitiesMP.CPlayerWeapons::FireDoubleColt+87: 8B 86 14 03 00 00  - mov eax,[esi+00000314]
EntitiesMP.CPlayerWeapons::FireDoubleColt+8D: 6A 02              - push 02
// ---------- INJECTING HERE ----------
EntitiesMP.CPlayerWeapons::FireDoubleColt+8F: 48                 - dec eax
// ---------- DONE INJECTING  ----------
EntitiesMP.CPlayerWeapons::FireDoubleColt+90: 6A 00              - push 00
EntitiesMP.CPlayerWeapons::FireDoubleColt+92: 8B CE              - mov ecx,esi
EntitiesMP.CPlayerWeapons::FireDoubleColt+94: 89 86 14 03 00 00  - mov [esi+00000314],eax
EntitiesMP.CPlayerWeapons::FireDoubleColt+9A: E8 41 73 FF FF     - call EntitiesMP.CPlayerWeapons::SetFlare
EntitiesMP.CPlayerWeapons::FireDoubleColt+9F: 6A 00              - push 00
EntitiesMP.CPlayerWeapons::FireDoubleColt+A1: 6A 04              - push 04
EntitiesMP.CPlayerWeapons::FireDoubleColt+A3: 8B CE              - mov ecx,esi
EntitiesMP.CPlayerWeapons::FireDoubleColt+A5: E8 96 75 FF FF     - call EntitiesMP.CPlayerWeapons::PlayLightAnim
EntitiesMP.CPlayerWeapons::FireDoubleColt+AA: 8B 86 EC 00 00 00  - mov eax,[esi+000000EC]
EntitiesMP.CPlayerWeapons::FireDoubleColt+B0: 6A 06              - push 06
}

 

 

AmmoNoSub:

Патроны не тратятся

Спойлер

{ Game   : SeriousSam.exe THE SECOND ENCOUNTER
  Version: 
  Date   : 2021-03-31
  Author : Templar

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(AmmoNoSub,EntitiesMP.dll,29 08 5D C3 90) // should be unique
registersymbol(AmmoNoSub)

AmmoNoSub:
  db 90 90 5D C3 90  ///перетираем два байта на отнимание

[DISABLE]

AmmoNoSub:
  db 29 08 5D C3 90

unregistersymbol(AmmoNoSub)

{
// ORIGINAL CODE - INJECTION POINT: EntitiesMP.EWeaponChanged::EWeaponChanged+177D

EntitiesMP.EWeaponChanged::EWeaponChanged+1760: 55                 - push ebp
EntitiesMP.EWeaponChanged::EWeaponChanged+1761: 8B EC              - mov ebp,esp
EntitiesMP.EWeaponChanged::EWeaponChanged+1763: A1 FC B2 14 08     - mov eax,[EntitiesMP.dll+17B2FC]
EntitiesMP.EWeaponChanged::EWeaponChanged+1768: 8B 08              - mov ecx,[eax]
EntitiesMP.EWeaponChanged::EWeaponChanged+176A: FF 15 F8 B2 14 08  - call dword ptr [EntitiesMP.dll+17B2F8]
EntitiesMP.EWeaponChanged::EWeaponChanged+1770: 8B 48 54           - mov ecx,[eax+54]
EntitiesMP.EWeaponChanged::EWeaponChanged+1773: 85 C9              - test ecx,ecx
EntitiesMP.EWeaponChanged::EWeaponChanged+1775: 75 08              - jne EntitiesMP.EWeaponChanged::EWeaponChanged+177F
EntitiesMP.EWeaponChanged::EWeaponChanged+1777: 8B 45 08           - mov eax,[ebp+08]
EntitiesMP.EWeaponChanged::EWeaponChanged+177A: 8B 4D 0C           - mov ecx,[ebp+0C]
// ---------- INJECTING HERE ----------
EntitiesMP.EWeaponChanged::EWeaponChanged+177D: 29 08              - sub [eax],ecx
// ---------- DONE INJECTING  ----------
EntitiesMP.EWeaponChanged::EWeaponChanged+177F: 5D                 - pop ebp
EntitiesMP.EWeaponChanged::EWeaponChanged+1780: C3                 - ret 
EntitiesMP.EWeaponChanged::EWeaponChanged+1781: 90                 - nop 
EntitiesMP.EWeaponChanged::EWeaponChanged+1782: 90                 - nop 
EntitiesMP.EWeaponChanged::EWeaponChanged+1783: 90                 - nop 
EntitiesMP.EWeaponChanged::EWeaponChanged+1784: 90                 - nop 
EntitiesMP.EWeaponChanged::EWeaponChanged+1785: 90                 - nop 
EntitiesMP.EWeaponChanged::EWeaponChanged+1786: 90                 - nop 
EntitiesMP.EWeaponChanged::EWeaponChanged+1787: 90                 - nop 
EntitiesMP.EWeaponChanged::EWeaponChanged+1788: 90                 - nop 
}

 

 

  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Tzeentch сказал:

db 90 6A 00 8B CE ///перетираем один байт на отнимание

А что не так к примеру :)  

db 90 61 00 8B CE 89 BE 14 03 00 00 E8 AF 77 FF FF 6A 00 6A 04 8B CE E8 04 74 FF FF 8B 86 EC 00 00 00 // < перетираем 1 байт

Это я к тому, что перетираем то один, а тащим с собой все 5 зачем то. 

Тогда уж и надо было.

db 90

С другой стороны работать будет и в твоём случаи и в моём (менее универсальном) но зато всё лишнее, не понятно... Наверное как СЕ сгенерировало на 5 байт, так и оставил.

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, LIRW сказал:

С другой стороны работать будет и в твоём случаи и в моём (менее универсальном) но зато всё лишнее, не понятно... Наверное как СЕ сгенерировало на 5 байт, так и оставил.

Мне так удобнее оказалось оформить. В моём случае тоже работает.

Я в редакторе памяти смотрел, вроде всё нормально было.

Ссылка на комментарий
Поделиться на другие сайты

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.