Skip to content

Commit

Permalink
Add healing items improvements (#29)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexbatalov committed Aug 14, 2022
1 parent c3bffa6 commit d482f0e
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 4 deletions.
6 changes: 2 additions & 4 deletions src/combat_ai.cc
Original file line number Diff line number Diff line change
Expand Up @@ -988,8 +988,7 @@ static int _ai_check_drugs(Object* critter)
}

int drugPid = drug->pid;
if ((drugPid == PROTO_ID_STIMPACK || drugPid == PROTO_ID_SUPER_STIMPACK || drugPid == PROTO_ID_HEALING_POWDER)
&& itemRemove(critter, drug, 1) == 0) {
if (itemIsHealing(drugPid) && itemRemove(critter, drug, 1) == 0) {
if (_item_d_take_drug(critter, drug) == -1) {
itemAdd(critter, drug, 1);
} else {
Expand Down Expand Up @@ -1027,8 +1026,7 @@ static int _ai_check_drugs(Object* critter)
}

if (index < AI_PACKET_CHEM_PRIMARY_DESIRE_COUNT) {
if (drugPid != PROTO_ID_STIMPACK && drugPid != PROTO_ID_SUPER_STIMPACK && drugPid != 273
&& itemRemove(critter, drug, 1) == 0) {
if (!itemIsHealing(drugPid) && itemRemove(critter, drug, 1) == 0) {
if (_item_d_take_drug(critter, drug) == -1) {
itemAdd(critter, drug, 1);
} else {
Expand Down
54 changes: 54 additions & 0 deletions src/item.cc
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ static void explosionsInit();
static void explosionsReset();
static void explosionsExit();

static void healingItemsInit();
static void healingItemsInitVanilla();
static void healingItemsInitCustom();

typedef struct DrugDescription {
int drugPid;
int gvar;
Expand Down Expand Up @@ -179,6 +183,7 @@ static int gExplosionFrm;
static int gExplosionRadius;
static int gExplosionDamageType;
static int gExplosionMaxTargets;
static int gHealingItemPids[HEALING_ITEM_COUNT];

// 0x4770E0
int itemsInit()
Expand All @@ -197,6 +202,7 @@ int itemsInit()
// SFALL
booksInit();
explosionsInit();
healingItemsInit();

return 0;
}
Expand Down Expand Up @@ -3584,3 +3590,51 @@ void explosionSetMaxTargets(int maxTargets)
{
gExplosionMaxTargets = maxTargets;
}

static void healingItemsInit()
{
healingItemsInitVanilla();
healingItemsInitCustom();
}

static void healingItemsInitVanilla()
{
gHealingItemPids[HEALING_ITEM_STIMPACK] = PROTO_ID_STIMPACK;
gHealingItemPids[HEALING_ITEM_SUPER_STIMPACK] = PROTO_ID_SUPER_STIMPACK;
gHealingItemPids[HEALING_ITEM_HEALING_POWDER] = PROTO_ID_HEALING_POWDER;
}

static void healingItemsInitCustom()
{
char* tweaksFilePath = NULL;
configGetString(&gSfallConfig, SFALL_CONFIG_MISC_KEY, SFALL_CONFIG_TWEAKS_FILE_KEY, &tweaksFilePath);
if (tweaksFilePath != NULL && *tweaksFilePath == '\0') {
tweaksFilePath = NULL;
}

if (tweaksFilePath == NULL) {
return;
}

Config tweaksConfig;
if (configInit(&tweaksConfig)) {
if (configRead(&tweaksConfig, tweaksFilePath, false)) {
configGetInt(&gSfallConfig, "Items", "STIMPAK", &(gHealingItemPids[HEALING_ITEM_STIMPACK]));
configGetInt(&gSfallConfig, "Items", "SUPER_STIMPAK", &(gHealingItemPids[HEALING_ITEM_SUPER_STIMPACK]));
configGetInt(&gSfallConfig, "Items", "HEALING_POWDER", &(gHealingItemPids[HEALING_ITEM_HEALING_POWDER]));
}

configFree(&tweaksConfig);
}
}

bool itemIsHealing(int pid)
{
for (int index = 0; index < HEALING_ITEM_COUNT; index++) {
if (gHealingItemPids[index] == pid) {
return true;
}
}

return false;
}
8 changes: 8 additions & 0 deletions src/item.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ typedef enum _WeaponClass {
ATTACK_TYPE_COUNT,
} WeaponClass;

typedef enum HealingItem {
HEALING_ITEM_STIMPACK,
HEALING_ITEM_SUPER_STIMPACK,
HEALING_ITEM_HEALING_POWDER,
HEALING_ITEM_COUNT,
} HealingItem;

int itemsInit();
void itemsReset();
void itemsExit();
Expand Down Expand Up @@ -143,5 +150,6 @@ int explosionGetDamageType();
void explosionSetDamageType(int damageType);
int explosionGetMaxTargets();
void explosionSetMaxTargets(int maxTargets);
bool itemIsHealing(int pid);

#endif /* ITEM_H */
1 change: 1 addition & 0 deletions src/sfall_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
#define SFALL_CONFIG_USE_REPAIR_FRM_KEY "Repair"
#define SFALL_CONFIG_SCIENCE_REPAIR_TARGET_TYPE_KEY "ScienceOnCritters"
#define SFALL_CONFIG_GAME_DIALOG_FIX_KEY "DialogueFix"
#define SFALL_CONFIG_TWEAKS_FILE_KEY "TweaksFile"

#define SFALL_CONFIG_BURST_MOD_DEFAULT_CENTER_MULTIPLIER 1
#define SFALL_CONFIG_BURST_MOD_DEFAULT_CENTER_DIVISOR 3
Expand Down

0 comments on commit d482f0e

Please sign in to comment.