Some code edits regarding BodyPart defines

This commit is contained in:
NovaRain
2021-03-03 10:40:15 +08:00
parent e7dff360ee
commit b883bb30a3
5 changed files with 109 additions and 121 deletions
+1 -1
View File
@@ -566,7 +566,7 @@ void Combat_Init() {
// Remove the dependency of Body_Torso from Body_Uncalled
SafeWrite8(0x423830, CODETYPE_JumpShort); // compute_attack_
BlockCall(0x42303F); // block Body_Torso check (combat_attack_)
SafeWrite8(0x42A713, 7); // Body_Uncalled > Body_Groin (ai_called_shot_)
SafeWrite8(0x42A713, BODY_Groin); // Body_Uncalled > Body_Groin (ai_called_shot_)
SafeWriteBatch<BYTE>(BODY_Uncalled, bodypartAddr); // replace Body_Torso with Body_Uncalled
const DWORD pickHitBodypartAddr[] = {0x429E8C, 0x429ECC, 0x429F09};
HookCalls(ai_pick_hit_mode_hook_bodypart, pickHitBodypartAddr);
+93 -105
View File
@@ -135,18 +135,6 @@ static int CritTableLoad() {
return 0;
}
enum BodyPart {
Head,
ArmLeft,
ArmRight,
Torso,
LegRight,
LegLeft,
Eyes,
Groin,
Uncalled
};
enum CritParam {
DmgMult,
Flags,
@@ -167,139 +155,139 @@ static void CriticalTableOverride() {
if (mode == 2 || mode == 3) { // bug fixes
// Children
SetEntry(2, LegRight, 1, FlagsFail, 0);
SetEntry(2, LegRight, 1, Message, 5216);
SetEntry(2, LegRight, 1, MsgFail, 5000);
SetEntry(2, BODY_LegRight, 1, FlagsFail, 0);
SetEntry(2, BODY_LegRight, 1, Message, 5216);
SetEntry(2, BODY_LegRight, 1, MsgFail, 5000);
SetEntry(2, LegRight, 2, FlagsFail, 0);
SetEntry(2, LegRight, 2, Message, 5216);
SetEntry(2, LegRight, 2, MsgFail, 5000);
SetEntry(2, BODY_LegRight, 2, FlagsFail, 0);
SetEntry(2, BODY_LegRight, 2, Message, 5216);
SetEntry(2, BODY_LegRight, 2, MsgFail, 5000);
SetEntry(2, LegLeft, 1, FlagsFail, 0);
SetEntry(2, LegLeft, 1, Message, 5216);
SetEntry(2, LegLeft, 1, MsgFail, 5000);
SetEntry(2, BODY_LegLeft, 1, FlagsFail, 0);
SetEntry(2, BODY_LegLeft, 1, Message, 5216);
SetEntry(2, BODY_LegLeft, 1, MsgFail, 5000);
SetEntry(2, LegLeft, 2, FlagsFail, 0);
SetEntry(2, LegLeft, 2, Message, 5216);
SetEntry(2, LegLeft, 2, MsgFail, 5000);
SetEntry(2, BODY_LegLeft, 2, FlagsFail, 0);
SetEntry(2, BODY_LegLeft, 2, Message, 5216);
SetEntry(2, BODY_LegLeft, 2, MsgFail, 5000);
// Super Mutants
SetEntry(3, LegLeft, 1, MsgFail, 5306);
SetEntry(3, BODY_LegLeft, 1, MsgFail, 5306);
// Ghouls
SetEntry(4, Head, 4, StatCheck, -1);
SetEntry(4, BODY_Head, 4, StatCheck, -1);
// Brahmin
SetEntry(5, Head, 4, StatCheck, -1);
SetEntry(5, BODY_Head, 4, StatCheck, -1);
// Radscorpions
SetEntry(6, LegRight, 1, FlagsFail, DAM_KNOCKED_DOWN);
SetEntry(6, BODY_LegRight, 1, FlagsFail, DAM_KNOCKED_DOWN);
SetEntry(6, LegLeft, 1, FlagsFail, DAM_KNOCKED_DOWN);
SetEntry(6, LegLeft, 2, MsgFail, 5608);
SetEntry(6, BODY_LegLeft, 1, FlagsFail, DAM_KNOCKED_DOWN);
SetEntry(6, BODY_LegLeft, 2, MsgFail, 5608);
// Centaurs
SetEntry(9, Torso, 3, FlagsFail, DAM_KNOCKED_DOWN);
SetEntry(9, BODY_Torso, 3, FlagsFail, DAM_KNOCKED_DOWN);
// Deathclaws
SetEntry(13, LegLeft, 1, FlagsFail, DAM_CRIP_LEG_LEFT);
SetEntry(13, LegLeft, 2, FlagsFail, DAM_CRIP_LEG_LEFT);
SetEntry(13, LegLeft, 3, FlagsFail, DAM_CRIP_LEG_LEFT);
SetEntry(13, LegLeft, 4, FlagsFail, DAM_CRIP_LEG_LEFT);
SetEntry(13, LegLeft, 5, FlagsFail, DAM_CRIP_LEG_LEFT);
SetEntry(13, BODY_LegLeft, 1, FlagsFail, DAM_CRIP_LEG_LEFT);
SetEntry(13, BODY_LegLeft, 2, FlagsFail, DAM_CRIP_LEG_LEFT);
SetEntry(13, BODY_LegLeft, 3, FlagsFail, DAM_CRIP_LEG_LEFT);
SetEntry(13, BODY_LegLeft, 4, FlagsFail, DAM_CRIP_LEG_LEFT);
SetEntry(13, BODY_LegLeft, 5, FlagsFail, DAM_CRIP_LEG_LEFT);
// Big Bad Boss
SetEntry(18, Head, 0, Message, 5001);
SetEntry(18, Head, 1, Message, 5001);
SetEntry(18, Head, 2, Message, 5001);
SetEntry(18, Head, 3, Message, 7105);
SetEntry(18, Head, 4, Message, 7101);
SetEntry(18, Head, 4, MsgFail, 7104);
SetEntry(18, Head, 5, Message, 7101);
SetEntry(18, BODY_Head, 0, Message, 5001);
SetEntry(18, BODY_Head, 1, Message, 5001);
SetEntry(18, BODY_Head, 2, Message, 5001);
SetEntry(18, BODY_Head, 3, Message, 7105);
SetEntry(18, BODY_Head, 4, Message, 7101);
SetEntry(18, BODY_Head, 4, MsgFail, 7104);
SetEntry(18, BODY_Head, 5, Message, 7101);
SetEntry(18, ArmLeft, 0, Message, 5008);
SetEntry(18, ArmLeft, 1, Message, 5008);
SetEntry(18, ArmLeft, 2, Message, 5009);
SetEntry(18, ArmLeft, 3, Message, 5009);
SetEntry(18, ArmLeft, 4, Message, 7102);
SetEntry(18, ArmLeft, 5, Message, 7102);
SetEntry(18, BODY_ArmLeft, 0, Message, 5008);
SetEntry(18, BODY_ArmLeft, 1, Message, 5008);
SetEntry(18, BODY_ArmLeft, 2, Message, 5009);
SetEntry(18, BODY_ArmLeft, 3, Message, 5009);
SetEntry(18, BODY_ArmLeft, 4, Message, 7102);
SetEntry(18, BODY_ArmLeft, 5, Message, 7102);
SetEntry(18, ArmRight, 0, Message, 5008);
SetEntry(18, ArmRight, 1, Message, 5008);
SetEntry(18, ArmRight, 2, Message, 5009);
SetEntry(18, ArmRight, 3, Message, 5009);
SetEntry(18, ArmRight, 4, Message, 7102);
SetEntry(18, ArmRight, 5, Message, 7102);
SetEntry(18, BODY_ArmRight, 0, Message, 5008);
SetEntry(18, BODY_ArmRight, 1, Message, 5008);
SetEntry(18, BODY_ArmRight, 2, Message, 5009);
SetEntry(18, BODY_ArmRight, 3, Message, 5009);
SetEntry(18, BODY_ArmRight, 4, Message, 7102);
SetEntry(18, BODY_ArmRight, 5, Message, 7102);
SetEntry(18, Torso, 4, Message, 7101);
SetEntry(18, Torso, 5, Message, 7101);
SetEntry(18, BODY_Torso, 4, Message, 7101);
SetEntry(18, BODY_Torso, 5, Message, 7101);
SetEntry(18, LegRight, 0, Message, 5023);
SetEntry(18, LegRight, 1, Message, 7101);
SetEntry(18, LegRight, 1, MsgFail, 7103);
SetEntry(18, LegRight, 2, Message, 7101);
SetEntry(18, LegRight, 2, MsgFail, 7103);
SetEntry(18, LegRight, 3, Message, 7103);
SetEntry(18, LegRight, 4, Message, 7103);
SetEntry(18, LegRight, 5, Message, 7103);
SetEntry(18, BODY_LegRight, 0, Message, 5023);
SetEntry(18, BODY_LegRight, 1, Message, 7101);
SetEntry(18, BODY_LegRight, 1, MsgFail, 7103);
SetEntry(18, BODY_LegRight, 2, Message, 7101);
SetEntry(18, BODY_LegRight, 2, MsgFail, 7103);
SetEntry(18, BODY_LegRight, 3, Message, 7103);
SetEntry(18, BODY_LegRight, 4, Message, 7103);
SetEntry(18, BODY_LegRight, 5, Message, 7103);
SetEntry(18, LegLeft, 0, Message, 5023);
SetEntry(18, LegLeft, 1, Message, 7101);
SetEntry(18, LegLeft, 1, MsgFail, 7103);
SetEntry(18, LegLeft, 2, Message, 7101);
SetEntry(18, LegLeft, 2, MsgFail, 7103);
SetEntry(18, LegLeft, 3, Message, 7103);
SetEntry(18, LegLeft, 4, Message, 7103);
SetEntry(18, LegLeft, 5, Message, 7103);
SetEntry(18, BODY_LegLeft, 0, Message, 5023);
SetEntry(18, BODY_LegLeft, 1, Message, 7101);
SetEntry(18, BODY_LegLeft, 1, MsgFail, 7103);
SetEntry(18, BODY_LegLeft, 2, Message, 7101);
SetEntry(18, BODY_LegLeft, 2, MsgFail, 7103);
SetEntry(18, BODY_LegLeft, 3, Message, 7103);
SetEntry(18, BODY_LegLeft, 4, Message, 7103);
SetEntry(18, BODY_LegLeft, 5, Message, 7103);
SetEntry(18, Eyes, 0, Message, 5027);
SetEntry(18, Eyes, 1, Message, 5027);
SetEntry(18, Eyes, 2, Message, 5027);
SetEntry(18, Eyes, 3, Message, 5027);
SetEntry(18, Eyes, 4, Message, 7104);
SetEntry(18, Eyes, 5, Message, 7104);
SetEntry(18, BODY_Eyes, 0, Message, 5027);
SetEntry(18, BODY_Eyes, 1, Message, 5027);
SetEntry(18, BODY_Eyes, 2, Message, 5027);
SetEntry(18, BODY_Eyes, 3, Message, 5027);
SetEntry(18, BODY_Eyes, 4, Message, 7104);
SetEntry(18, BODY_Eyes, 5, Message, 7104);
SetEntry(18, Groin, 0, Message, 5033);
SetEntry(18, Groin, 1, Message, 5027);
SetEntry(18, Groin, 1, MsgFail, 7101);
SetEntry(18, Groin, 2, Message, 7101);
SetEntry(18, Groin, 3, Message, 7101);
SetEntry(18, Groin, 4, Message, 7101);
SetEntry(18, Groin, 5, Message, 7101);
SetEntry(18, BODY_Groin, 0, Message, 5033);
SetEntry(18, BODY_Groin, 1, Message, 5027);
SetEntry(18, BODY_Groin, 1, MsgFail, 7101);
SetEntry(18, BODY_Groin, 2, Message, 7101);
SetEntry(18, BODY_Groin, 3, Message, 7101);
SetEntry(18, BODY_Groin, 4, Message, 7101);
SetEntry(18, BODY_Groin, 5, Message, 7101);
// Fixes for uncalled tables
// Men
SetEntry(0, Uncalled, 2, Flags, DAM_KNOCKED_DOWN | DAM_BYPASS); // 0
SetEntry(0, Uncalled, 2, Message, 5019); // 5018
SetEntry(0, BODY_Uncalled, 2, Flags, DAM_KNOCKED_DOWN | DAM_BYPASS); // 0
SetEntry(0, BODY_Uncalled, 2, Message, 5019); // 5018
// Children
SetEntry(2, Uncalled, 1, DmgMult, 4); // 3
SetEntry(2, Uncalled, 2, Flags, DAM_KNOCKED_DOWN | DAM_BYPASS); // DAM_BYPASS
SetEntry(2, Uncalled, 2, Message, 5212); // 5211
SetEntry(2, BODY_Uncalled, 1, DmgMult, 4); // 3
SetEntry(2, BODY_Uncalled, 2, Flags, DAM_KNOCKED_DOWN | DAM_BYPASS); // DAM_BYPASS
SetEntry(2, BODY_Uncalled, 2, Message, 5212); // 5211
// Centaurs
SetEntry(9, Uncalled, 3, FlagsFail, DAM_KNOCKED_DOWN); // 0
SetEntry(9, BODY_Uncalled, 3, FlagsFail, DAM_KNOCKED_DOWN); // 0
// Geckos
SetEntry(15, Uncalled, 0, Message, 6701); // 6700
SetEntry(15, Uncalled, 1, Message, 6701); // 6700
SetEntry(15, Uncalled, 2, Flags, DAM_KNOCKED_DOWN | DAM_BYPASS); // 0
SetEntry(15, Uncalled, 2, Message, 6704); // 6700
SetEntry(15, Uncalled, 3, Message, 6704); // 6700
SetEntry(15, Uncalled, 4, Message, 6704); // 6700
SetEntry(15, Uncalled, 5, Message, 6704); // 6700
SetEntry(15, BODY_Uncalled, 0, Message, 6701); // 6700
SetEntry(15, BODY_Uncalled, 1, Message, 6701); // 6700
SetEntry(15, BODY_Uncalled, 2, Flags, DAM_KNOCKED_DOWN | DAM_BYPASS); // 0
SetEntry(15, BODY_Uncalled, 2, Message, 6704); // 6700
SetEntry(15, BODY_Uncalled, 3, Message, 6704); // 6700
SetEntry(15, BODY_Uncalled, 4, Message, 6704); // 6700
SetEntry(15, BODY_Uncalled, 5, Message, 6704); // 6700
// Aliens
SetEntry(16, Uncalled, 2, Flags, DAM_KNOCKED_DOWN | DAM_BYPASS); // 0
SetEntry(16, BODY_Uncalled, 2, Flags, DAM_KNOCKED_DOWN | DAM_BYPASS); // 0
// Giant Ants
SetEntry(17, Uncalled, 2, Flags, DAM_KNOCKED_DOWN | DAM_BYPASS); // 0
SetEntry(17, BODY_Uncalled, 2, Flags, DAM_KNOCKED_DOWN | DAM_BYPASS); // 0
// Big Bad Boss
SetEntry(18, Uncalled, 2, DmgMult, 3); // 4
SetEntry(18, Uncalled, 4, DmgMult, 4); // 5
SetEntry(18, Uncalled, 4, Message, 7101); // 7106
SetEntry(18, Uncalled, 5, Message, 7101); // 7106
SetEntry(18, BODY_Uncalled, 2, DmgMult, 3); // 4
SetEntry(18, BODY_Uncalled, 4, DmgMult, 4); // 5
SetEntry(18, BODY_Uncalled, 4, Message, 7101); // 7106
SetEntry(18, BODY_Uncalled, 5, Message, 7101); // 7106
}
if (CritTableLoad()) {
+5 -5
View File
@@ -96,13 +96,13 @@ enum AnimCommand : long
RB_END_ANIM = 0x200
};
enum BodyParts : long {
enum BodyPart : long {
BODY_Head = 0,
BODY_LeftArm = 1,
BODY_RightArm = 2,
BODY_ArmLeft = 1,
BODY_ArmRight = 2,
BODY_Torso = 3,
BODY_RightLeg = 4,
BODY_LeftLeg = 5,
BODY_LegRight = 4,
BODY_LegLeft = 5,
BODY_Eyes = 6,
BODY_Groin = 7,
BODY_Uncalled = 8
+6 -6
View File
@@ -9,7 +9,7 @@ static void __stdcall SafeWriteFunc(BYTE code, DWORD addr, void* func) {
VirtualProtect((void*)addr, 5, oldProtect, &oldProtect);
}
static __declspec(noinline) void __stdcall SafeWriteFunc(BYTE code, DWORD addr, void* func, DWORD len) {
static __declspec(noinline) void __stdcall SafeWriteFunc(BYTE code, DWORD addr, void* func, size_t len) {
DWORD oldProtect,
protectLen = len + 5,
addrMem = addr + 5,
@@ -19,13 +19,13 @@ static __declspec(noinline) void __stdcall SafeWriteFunc(BYTE code, DWORD addr,
*((BYTE*)addr) = code;
*((DWORD*)(addr + 1)) = data;
for (unsigned int i = 0; i < len; i++) {
for (size_t i = 0; i < len; i++) {
*((BYTE*)(addrMem + i)) = CODETYPE_Nop;
}
VirtualProtect((void*)addr, protectLen, oldProtect, &oldProtect);
}
void SafeWriteBytes(DWORD addr, BYTE* data, int count) {
void SafeWriteBytes(DWORD addr, BYTE* data, size_t count) {
DWORD oldProtect;
VirtualProtect((void*)addr, count, PAGE_EXECUTE_READWRITE, &oldProtect);
@@ -74,7 +74,7 @@ void MakeCall(DWORD addr, void* func) {
SafeWriteFunc(CODETYPE_Call, addr, func);
}
void MakeCall(DWORD addr, void* func, int len) {
void MakeCall(DWORD addr, void* func, size_t len) {
SafeWriteFunc(CODETYPE_Call, addr, func, len);
}
@@ -82,11 +82,11 @@ void MakeJump(DWORD addr, void* func) {
SafeWriteFunc(CODETYPE_Jump, addr, func);
}
void MakeJump(DWORD addr, void* func, int len) {
void MakeJump(DWORD addr, void* func, size_t len) {
SafeWriteFunc(CODETYPE_Jump, addr, func, len);
}
void SafeMemSet(DWORD addr, BYTE val, int len) {
void SafeMemSet(DWORD addr, BYTE val, size_t len) {
DWORD oldProtect;
VirtualProtect((void*)addr, len, PAGE_EXECUTE_READWRITE, &oldProtect);
+4 -4
View File
@@ -35,14 +35,14 @@ void __stdcall SafeWrite16(DWORD addr, WORD data);
void __stdcall SafeWrite32(DWORD addr, DWORD data);
void __stdcall SafeWriteStr(DWORD addr, const char* data);
void SafeMemSet(DWORD addr, BYTE val, int len);
void SafeWriteBytes(DWORD addr, BYTE* data, int count);
void SafeMemSet(DWORD addr, BYTE val, size_t len);
void SafeWriteBytes(DWORD addr, BYTE* data, size_t count);
void HookCall(DWORD addr, void* func);
void MakeCall(DWORD addr, void* func);
void MakeCall(DWORD addr, void* func, int len);
void MakeCall(DWORD addr, void* func, size_t len);
void MakeJump(DWORD addr, void* func);
void MakeJump(DWORD addr, void* func, int len);
void MakeJump(DWORD addr, void* func, size_t len);
void BlockCall(DWORD addr);
// emulation of 4.x HookCalls/MakeCalls/MakeJumps