Code edits in FalloutEngine.cpp

Added comments to some defines in Define.h.
This commit is contained in:
NovaRain
2021-02-09 22:08:30 +08:00
parent c9eb5c2dee
commit e5b04d81e3
4 changed files with 66 additions and 55 deletions
+46 -38
View File
@@ -202,29 +202,29 @@ enum Material : long
namespace ObjectFlag { namespace ObjectFlag {
enum ObjectFlag : DWORD { enum ObjectFlag : DWORD {
Mouse_3d = 0x1, Mouse_3d = 0x1,
WalkThru = 0x4, WalkThru = 0x4,
Flat = 0x8, Flat = 0x8,
NoBlock = 0x10, NoBlock = 0x10,
Lighting = 0x20, Lighting = 0x20,
Temp = 0x400, Temp = 0x400,
MultiHex = 0x800, MultiHex = 0x800,
NoHighlight = 0x1000, NoHighlight = 0x1000,
Used = 0x2000, Used = 0x2000,
TransRed = 0x4000, TransRed = 0x4000,
TransNone = 0x8000, TransNone = 0x8000,
TransWall = 0x10000, TransWall = 0x10000,
TransGlass = 0x20000, TransGlass = 0x20000,
TransSteam = 0x40000, TransSteam = 0x40000,
TransEnergy = 0x80000, TransEnergy = 0x80000,
Left_Hand = 0x1000000, Left_Hand = 0x1000000,
Right_Hand = 0x2000000, Right_Hand = 0x2000000,
Worn = 0x4000000, Worn = 0x4000000,
HiddenItem = 0x8000000, HiddenItem = 0x8000000,
WallTransEnd = 0x10000000, WallTransEnd = 0x10000000,
LightThru = 0x20000000, LightThru = 0x20000000,
Seen = 0x40000000, Seen = 0x40000000,
ShootThru = 0x80000000, ShootThru = 0x80000000,
}; };
} }
@@ -274,7 +274,7 @@ enum ProtoId : long
//XXXXXXXXXXXXXXXXXXXXX //XXXXXXXXXXXXXXXXXXXXX
// Trait defines // // Trait defines //
#define TRAIT_PERK (0) #define TRAIT_PERK (0)
#define TRAIT_OBJECT (1) #define TRAIT_OBJECT (1)
#define TRAIT_TRAIT (2) #define TRAIT_TRAIT (2)
@@ -475,10 +475,10 @@ enum Stat : long
STAT_rad_resist = 31, STAT_rad_resist = 31,
STAT_poison_resist = 32, STAT_poison_resist = 32,
// poison_resist MUST be the last derived stat // poison_resist MUST be the last derived stat
// nonderived stats // non-derived stats
STAT_age = 33, STAT_age = 33,
STAT_gender = 34, STAT_gender = 34,
// gender MUST be the last nonderived stat // gender MUST be the last non-derived stat
STAT_current_hp = 35, STAT_current_hp = 35,
STAT_current_poison = 36, STAT_current_poison = 36,
STAT_current_rad = 37, STAT_current_rad = 37,
@@ -683,6 +683,13 @@ enum RollResult
ROLL_CRITICAL_SUCCESS = 0x3, ROLL_CRITICAL_SUCCESS = 0x3,
}; };
enum CombatStateFlag : long
{
in_combat = 1,
enemy_out_of_range = 2,
is_fleeing = 4,
};
namespace Fields { namespace Fields {
enum CommonObj : long enum CommonObj : long
{ {
@@ -750,13 +757,14 @@ namespace WinFlags {
namespace AIpref { namespace AIpref {
enum distance : long enum distance : long
{ {
DIST_stay_close = 0, DIST_stay_close = 0, // the attacker will stay at a distance no more than 5 hexes from the player (defined in ai_move_steps_closer, cai_perform_distance_prefs)
DIST_charge = 1, DIST_charge = 1, // AI will always try to get close to its target before or after attack
DIST_snipe = 2, DIST_snipe = 2, // when the distance between the attacker and the target decreases, the attacker will try to move away from the target to a distance of up to 10 hexes
DIST_on_your_own = 3, DIST_on_your_own = 3, // no special behavior defined for this
DIST_stay = 4 DIST_stay = 4 // the attacker will, if possible, stay at the hex where the combat started (defined in ai_move_steps_closer, ai_move_away)
}; };
// presets for party members
enum disposition : long enum disposition : long
{ {
DISP_none = -1, DISP_none = -1,
@@ -769,11 +777,11 @@ namespace AIpref {
enum attack_who : long enum attack_who : long
{ {
ATKWHO_whomever_attacking_me = 0, ATKWHO_whomever_attacking_me = 0, // attack the target that the player is attacking (only for party members)
ATKWHO_strongest = 1, ATKWHO_strongest = 1, // attack stronger targets (will switch to stronger ones in combat)
ATKWHO_weakest = 2, ATKWHO_weakest = 2, // attack weaker targets
ATKWHO_whomever = 3, ATKWHO_whomever = 3, // anyone
ATKWHO_closest = 4, ATKWHO_closest = 4, // only attack near targets
}; };
enum run_away_mode : long enum run_away_mode : long
@@ -795,13 +803,13 @@ namespace AIpref {
WEAPON_ranged_over_melee = 3, WEAPON_ranged_over_melee = 3,
WEAPON_ranged = 4, WEAPON_ranged = 4,
WEAPON_unarmed = 5, WEAPON_unarmed = 5,
WEAPON_unarmed_over_thrown = 6, // not available in party member control panel WEAPON_unarmed_over_thrown = 6, // not available for party member in control panel
WEAPON_random = 7 // not available in party member control panel WEAPON_random = 7 // not available for party member in control panel
}; };
enum area_attack_mode : long enum area_attack_mode : long
{ {
AREA_no_pref = -1, // special logic for NPC (not available in party member control panel) AREA_no_pref = -1, // special logic for NPC (not available for party member in control panel)
AREA_always = 0, AREA_always = 0,
AREA_sometimes = 1, // use random value from cap.secondary_freq AREA_sometimes = 1, // use random value from cap.secondary_freq
AREA_be_sure = 2, // 85% hit chance AREA_be_sure = 2, // 85% hit chance
+6 -10
View File
@@ -512,7 +512,7 @@ const char* GetMessageStr(const MSGList* fileAddr, long messageId) {
return fo_getmsg(fileAddr, &messageBuf, messageId); return fo_getmsg(fileAddr, &messageBuf, messageId);
} }
const char* MsgSearch(const MSGList* fileAddr, long messageId) { const char* MessageSearch(const MSGList* fileAddr, long messageId) {
messageBuf.number = messageId; messageBuf.number = messageId;
if (fo_message_search(fileAddr, &messageBuf) == 1) { if (fo_message_search(fileAddr, &messageBuf) == 1) {
return messageBuf.message; return messageBuf.message;
@@ -520,7 +520,7 @@ const char* MsgSearch(const MSGList* fileAddr, long messageId) {
return nullptr; return nullptr;
} }
Queue* QueueFindUtil(TGameObj* object, long type) { Queue* QueueFind(TGameObj* object, long type) {
if (*ptr_queue) { if (*ptr_queue) {
Queue* queue = *ptr_queue; Queue* queue = *ptr_queue;
while (queue->object != object && queue->type != type) { while (queue->object != object && queue->type != type) {
@@ -534,20 +534,16 @@ Queue* QueueFindUtil(TGameObj* object, long type) {
long AnimCodeByWeapon(TGameObj* weapon) { long AnimCodeByWeapon(TGameObj* weapon) {
if (weapon != nullptr) { if (weapon != nullptr) {
sProto* proto = GetProto(weapon->protoId); sProto* proto = nullptr;
if (proto != nullptr && proto->item.type == item_type_weapon) { if (GetProto(weapon->protoId, proto) && proto->item.type == item_type_weapon) {
return proto->item.weapon.animationCode; return proto->item.weapon.animationCode;
} }
} }
return 0; return 0;
} }
sProto* GetProto(long pid) { bool GetProto(long pid, sProto* outProto) {
sProto* protoPtr; return (fo_proto_ptr(pid, &outProto) != -1);
if (fo_proto_ptr(pid, &protoPtr) != -1) {
return protoPtr;
}
return nullptr;
} }
void SkillGetTags(long* result, long num) { void SkillGetTags(long* result, long num) {
+11 -4
View File
@@ -500,15 +500,22 @@ __forceinline void sf_rect_free(RectList* rect) {
const char* GetMessageStr(const MSGList* fileAddr, long messageId); const char* GetMessageStr(const MSGList* fileAddr, long messageId);
// similar to GetMessageStr, but returns nullptr when no message is found // similar to GetMessageStr, but returns nullptr when no message is found
const char* MsgSearch(const MSGList* fileAddr, long messageId); const char* MessageSearch(const MSGList* fileAddr, long messageId);
Queue* QueueFindUtil(TGameObj* object, long type); Queue* QueueFind(TGameObj* object, long type);
// returns weapon animation code // returns weapon animation code
long AnimCodeByWeapon(TGameObj* weapon); long AnimCodeByWeapon(TGameObj* weapon);
// returns pointer to prototype by PID, or nullptr on failure // returns False if the prototype does not exist, or pointer to prototype by PID in the outProto argument
sProto* GetProto(long pid); bool GetProto(long pid, sProto* outProto);
// returns pointer to prototype by PID, or nullptr on get failure
// NOTE: not an efficient construction
__forceinline sProto* GetProto(long pid) {
sProto* proto = nullptr;
return GetProto(pid, proto) ? proto : nullptr;
}
// wrapper for skill_get_tags with bounds checking // wrapper for skill_get_tags with bounds checking
void SkillGetTags(long* result, long num); void SkillGetTags(long* result, long num);
+3 -3
View File
@@ -315,7 +315,7 @@ static void __cdecl DisplaySizeStats(TGameObj* critter, const char* &message, DW
sizeMax = limitMax; sizeMax = limitMax;
size = sfgame_item_total_size(critter); size = sfgame_item_total_size(critter);
const char* msg = MsgSearch(ptr_inventry_message_file, 35); const char* msg = MessageSearch(ptr_inventry_message_file, 35);
message = (msg != nullptr) ? msg : ""; message = (msg != nullptr) ? msg : "";
strcpy(InvenFmt, InvenFmt1); strcpy(InvenFmt, InvenFmt1);
@@ -343,13 +343,13 @@ static char SizeMsgBuf[32];
static const char* __stdcall SizeInfoMessage(TGameObj* item) { static const char* __stdcall SizeInfoMessage(TGameObj* item) {
int size = fo_item_size(item); int size = fo_item_size(item);
if (size == 1) { if (size == 1) {
const char* message = MsgSearch(ptr_proto_main_msg_file, 543); const char* message = MessageSearch(ptr_proto_main_msg_file, 543);
if (message == nullptr) if (message == nullptr)
strcpy(SizeMsgBuf, "It occupies 1 unit."); strcpy(SizeMsgBuf, "It occupies 1 unit.");
else else
strncpy_s(SizeMsgBuf, message, _TRUNCATE); strncpy_s(SizeMsgBuf, message, _TRUNCATE);
} else { } else {
const char* message = MsgSearch(ptr_proto_main_msg_file, 542); const char* message = MessageSearch(ptr_proto_main_msg_file, 542);
if (message == nullptr) if (message == nullptr)
sprintf(SizeMsgBuf, "It occupies %d units.", size); sprintf(SizeMsgBuf, "It occupies %d units.", size);
else else