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

[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 
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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 байт, так и оставил.

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

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

Поделиться сообщением


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр

×
×
  • Создать...

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

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