mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Fixed the timing of setting DIALOG game mode flag
(also fixed the issue of DialogGenderWords mentioned in previous commit) Fixed AI disposition values in define_extra.h. Minor code edits to world map travel markers.
This commit is contained in:
@@ -334,7 +334,6 @@
|
||||
#define ai_area_be_absolutely_sure (4)
|
||||
|
||||
// AI attack who mode values
|
||||
#define ai_attack_no_pref (-1)
|
||||
#define ai_attack_whomever_attacking_me (0)
|
||||
#define ai_attack_strongest (1)
|
||||
#define ai_attack_weakest (2)
|
||||
@@ -351,12 +350,12 @@
|
||||
#define ai_run_away_never (7)
|
||||
|
||||
// AI disposition values
|
||||
#define ai_disposition_none (0)
|
||||
#define ai_disposition_custom (1)
|
||||
#define ai_disposition_coward (2)
|
||||
#define ai_disposition_defensive (3)
|
||||
#define ai_disposition_aggressive (4)
|
||||
#define ai_disposition_berserk (5)
|
||||
#define ai_disposition_none (-1)
|
||||
#define ai_disposition_custom (0)
|
||||
#define ai_disposition_coward (1)
|
||||
#define ai_disposition_defensive (2)
|
||||
#define ai_disposition_aggressive (3)
|
||||
#define ai_disposition_berserk (4)
|
||||
|
||||
// AI distance values
|
||||
#define ai_distance_stay_close (0)
|
||||
|
||||
@@ -646,6 +646,30 @@ enum BodyType : long
|
||||
Robotic = 2
|
||||
};
|
||||
|
||||
enum KillType : long
|
||||
{
|
||||
men_type = 0,
|
||||
women_type = 1,
|
||||
children_type = 2,
|
||||
super_mutant_type = 3,
|
||||
ghoul_type = 4,
|
||||
brahmin_type = 5,
|
||||
radscorpion_type = 6,
|
||||
rat_type = 7,
|
||||
floater_type = 8,
|
||||
centaur_type = 9,
|
||||
robot_type = 10,
|
||||
dog_type = 11,
|
||||
manti_type = 12,
|
||||
deathclaw_type = 13,
|
||||
plant_type = 14,
|
||||
gecko_type = 15,
|
||||
alien_type = 16,
|
||||
giant_ant_type = 17,
|
||||
big_boss_type = 18,
|
||||
count
|
||||
};
|
||||
|
||||
#define PLAYER_ID (18000)
|
||||
|
||||
#define OBJFLAG_CAN_WEAR_ITEMS (0xF000000)
|
||||
@@ -662,6 +686,8 @@ enum BodyType : long
|
||||
|
||||
#define AUTOMAP_MAX (160)
|
||||
|
||||
#define MSG_GENDER_CHECK_FLG (0x80) // bit 8
|
||||
|
||||
enum TicksTime : unsigned long
|
||||
{
|
||||
ONE_GAME_YEAR = 315360000
|
||||
|
||||
@@ -478,13 +478,15 @@ static bool backImageIsCopy = false;
|
||||
struct DotPosition {
|
||||
long x;
|
||||
long y;
|
||||
|
||||
DotPosition(long x, long y) : x(x), y(y) {}
|
||||
};
|
||||
static std::vector<DotPosition> dots;
|
||||
|
||||
static long optionLenDot = 1;
|
||||
static long optionSpaceDot = 2;
|
||||
|
||||
static unsigned char colorDot = 0; // color index in palette: R = 252, G = 0, B = 0
|
||||
static unsigned char colorDot = 0;
|
||||
static long spaceLen = 2;
|
||||
static long dotLen = 1;
|
||||
static long dot_xpos = 0;
|
||||
@@ -500,13 +502,9 @@ static void AddNewDot() {
|
||||
return;
|
||||
}
|
||||
dotLen--;
|
||||
|
||||
DotPosition dot;
|
||||
dot.x = dot_xpos;
|
||||
dot.y = dot_ypos;
|
||||
dots.push_back(std::move(dot));
|
||||
|
||||
spaceLen = optionSpaceDot;
|
||||
|
||||
dots.emplace_back(dot_xpos, dot_ypos);
|
||||
}
|
||||
|
||||
static void __declspec(naked) DrawingDots() {
|
||||
@@ -692,9 +690,10 @@ static void WorldMapInterfacePatch() {
|
||||
}
|
||||
|
||||
if (GetConfigInt("Interface", "WorldTravelMarkers", 0)) {
|
||||
dlog("Applying world map travel markers patch.", DL_INIT);
|
||||
optionLenDot = GetConfigInt("Interface", "TravelMarkerLength", optionLenDot);
|
||||
optionSpaceDot = GetConfigInt("Interface", "TravelMarkerSpaces", optionSpaceDot);
|
||||
int color = GetConfigInt("Interface", "TravelMarkerColor", 133);
|
||||
int color = GetConfigInt("Interface", "TravelMarkerColor", 133); // color index in palette: R = 252, G = 0, B = 0
|
||||
|
||||
if (color > 255) color = 255; else if (color < 1) color = 1;
|
||||
colorDot = color;
|
||||
@@ -705,6 +704,7 @@ static void WorldMapInterfacePatch() {
|
||||
LoadGameHook::OnGameReset() += []() {
|
||||
dots.clear();
|
||||
};
|
||||
dlogr(" Done", DL_INIT);
|
||||
}
|
||||
// Fallout 1 features, travel markers and displaying terrain type
|
||||
HookCall(0x4C3C7E, wmInterfaceRefresh_hook); // when calling wmDrawCursorStopped_
|
||||
|
||||
@@ -521,6 +521,14 @@ end:
|
||||
}
|
||||
}
|
||||
|
||||
static void __declspec(naked) DialogHookStart() {
|
||||
__asm {
|
||||
_InLoop2(1, DIALOG);
|
||||
mov ebx, 1;
|
||||
retn;
|
||||
}
|
||||
}
|
||||
|
||||
static void __declspec(naked) DialogHook() {
|
||||
__asm {
|
||||
test inLoop, DIALOG; // check byte flag
|
||||
@@ -711,7 +719,8 @@ void LoadGameHook::init() {
|
||||
HookCalls(OptionsMenuHook, {0x48FCE4, 0x48FD17, 0x48FD4D, 0x48FD6A, 0x48FD87, 0x48FDB3});
|
||||
HookCalls(HelpMenuHook, {0x443A50});
|
||||
HookCalls(CharacterHook, {0x443320}); // 0x4A73EB, 0x4A740A for character creation
|
||||
HookCalls(DialogHook, {0x445748});
|
||||
MakeCall(0x445285, DialogHookStart); // gdialogInitFromScript_
|
||||
HookCall(0x445748, DialogHook);
|
||||
HookCalls(PipboyHook, {0x443463, 0x443605});
|
||||
HookCalls(SkilldexHook, {0x4434AC, 0x44C7BD});
|
||||
HookCalls(HandleInventoryHook, {0x443357});
|
||||
|
||||
@@ -60,8 +60,6 @@ static long msgNumCounter = 0x3000;
|
||||
|
||||
static long heroIsFemale = -1;
|
||||
|
||||
#define MSG_GENDER_CHECK_FLG (0x8)
|
||||
|
||||
// Searches the special character in the text and removes the word depending on the player's gender
|
||||
// example: MaleWord^FemaleWord
|
||||
static long __fastcall ReplaceGenderWord(fo::MessageNode* msgData, DWORD* msgFile) {
|
||||
|
||||
Reference in New Issue
Block a user