Skip to content

Commit

Permalink
Use CrtrExpLevel typedef for most level-related stuff (#3820)
Browse files Browse the repository at this point in the history
No functional changes
  • Loading branch information
walt253 authored Jan 28, 2025
1 parent 098af5c commit 2779eac
Show file tree
Hide file tree
Showing 69 changed files with 687 additions and 705 deletions.
6 changes: 3 additions & 3 deletions src/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -1793,7 +1793,7 @@ TbBool create_empty_high_score_table(void)
{
int i;
int npoints = 100 * VISIBLE_HIGH_SCORES_COUNT;
int nlevel = 1 * VISIBLE_HIGH_SCORES_COUNT;
int nmap = 1 * VISIBLE_HIGH_SCORES_COUNT;
long arr_size = campaign.hiscore_count * sizeof(struct HighScore);
if (campaign.hiscore_table == NULL)
campaign.hiscore_table = (struct HighScore *)calloc(arr_size, 1);
Expand All @@ -1804,9 +1804,9 @@ TbBool create_empty_high_score_table(void)
if (i >= campaign.hiscore_count) break;
sprintf(campaign.hiscore_table[i].name, "Bullfrog");
campaign.hiscore_table[i].score = npoints;
campaign.hiscore_table[i].lvnum = nlevel;
campaign.hiscore_table[i].lvnum = nmap;
npoints -= 100;
nlevel -= 1;
nmap -= 1;
}
while (i < campaign.hiscore_count)
{
Expand Down
2 changes: 1 addition & 1 deletion src/config_rules.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ const struct NamedField rules_rooms_named_fields[] = {
{"PRISONBREAKCHANCE", &game.conf.rules.rooms.prison_break_chance, var_type(game.conf.rules.rooms.prison_break_chance ), 0, ULONG_MAX},
{"TORTUREDEATHCHANCE", &game.conf.rules.rooms.torture_death_chance, var_type(game.conf.rules.rooms.torture_death_chance ), 0, 100},
{"BARRACKMAXPARTYSIZE", &game.conf.rules.rooms.barrack_max_party_size, var_type(game.conf.rules.rooms.barrack_max_party_size ), 0, GROUP_MEMBERS_COUNT},
{"TRAININGROOMMAXLEVEL", &game.conf.rules.rooms.training_room_max_level, var_type(game.conf.rules.rooms.training_room_max_level ), 0, 11},
{"TRAININGROOMMAXLEVEL", &game.conf.rules.rooms.training_room_max_level, var_type(game.conf.rules.rooms.training_room_max_level ), 0,CREATURE_MAX_LEVEL+1},
{NULL, NULL, 0, 0, 0},
};

Expand Down
2 changes: 1 addition & 1 deletion src/config_rules.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ struct RoomRulesConfig {
unsigned char bodies_for_vampire;
unsigned short graveyard_convert_time;
short barrack_max_party_size;
unsigned short training_room_max_level;
CrtrExpLevel training_room_max_level;
TbBool scavenge_good_allowed;
TbBool scavenge_neutral_allowed;
unsigned long time_between_prison_break;
Expand Down
4 changes: 2 additions & 2 deletions src/creature_control.c
Original file line number Diff line number Diff line change
Expand Up @@ -339,11 +339,11 @@ TbBool creature_can_gain_experience(const struct Thing *thing)
struct Dungeon* dungeon = get_dungeon(thing->owner);
struct CreatureControl* cctrl = creature_control_get_from_thing(thing);
// Creatures which reached players max level can't be trained
if (cctrl->explevel >= dungeon->creature_max_level[thing->model])
if (cctrl->exp_level >= dungeon->creature_max_level[thing->model])
return false;
// Creatures which reached absolute max level and have no grow up creature
struct CreatureStats* crstat = creature_stats_get_from_thing(thing);
if ((cctrl->explevel >= (CREATURE_MAX_LEVEL-1)) && (crstat->grow_up == 0))
if ((cctrl->exp_level >= (CREATURE_MAX_LEVEL-1)) && (crstat->grow_up == 0))
return false;
return true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/creature_control.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ struct CreatureControl {
ThingIndex players_prev_creature_idx;
ThingIndex players_next_creature_idx;
unsigned short slap_turns;
unsigned char explevel;
CrtrExpLevel exp_level;
long exp_points;
long prev_exp_points;
struct Coord3d moveto_pos;
Expand Down
40 changes: 20 additions & 20 deletions src/creature_groups.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ extern "C" {
struct Thing *get_highest_experience_and_score_creature_in_group(struct Thing *grptng)
{
struct CreatureControl* cctrl = creature_control_get_from_thing(grptng);
CrtrExpLevel best_explevel = 0;
CrtrExpLevel best_exp_level = 0;
long best_score = 0;
struct Thing* best_creatng = INVALID_THING;
long i = cctrl->group_info & TngGroup_LeaderIndex;
Expand All @@ -62,11 +62,11 @@ struct Thing *get_highest_experience_and_score_creature_in_group(struct Thing *g
if (creature_control_invalid(cctrl))
break;
// Per-thing code
if (best_explevel <= cctrl->explevel) {
if (best_exp_level <= cctrl->exp_level) {
long score = get_creature_thing_score(ctng);
// If got a new best score, or best level changed - update best values
if ((best_score < score) || (best_explevel < cctrl->explevel)) {
best_explevel = cctrl->explevel;
if ((best_score < score) || (best_exp_level < cctrl->exp_level)) {
best_exp_level = cctrl->exp_level;
best_score = score;
best_creatng = ctng;
}
Expand Down Expand Up @@ -388,7 +388,7 @@ static short creatures_group_has_special_digger_to_lead(struct Thing* grptng)
struct Thing* get_best_creature_to_lead_group(struct Thing* grptng)
{
struct CreatureControl* cctrl = creature_control_get_from_thing(grptng);
CrtrExpLevel best_explevel = 0;
CrtrExpLevel best_exp_level = 0;
long best_score = 0;
short has_digger = 0;
TbBool is_digger = 0;
Expand Down Expand Up @@ -424,19 +424,19 @@ struct Thing* get_best_creature_to_lead_group(struct Thing* grptng)
// If the current unit does not defend party, overwrite any unit that does.
if (bcctrl->party_objective == CHeroTsk_DefendParty)
{
best_explevel = cctrl->explevel;
best_exp_level = cctrl->exp_level;
best_score = score;
best_creatng = ctng;
}
else
{
// Otherwise the level needs to be at least as high
if (best_explevel <= cctrl->explevel)
if (best_exp_level <= cctrl->exp_level)
{
// For equal levels, the score is most important
if ((score > best_score) || (cctrl->explevel > best_explevel))
if ((score > best_score) || (cctrl->exp_level > best_exp_level))
{
best_explevel = cctrl->explevel;
best_exp_level = cctrl->exp_level;
best_score = score;
best_creatng = ctng;
}
Expand All @@ -451,12 +451,12 @@ struct Thing* get_best_creature_to_lead_group(struct Thing* grptng)
{
if (has_digger < 1 || is_digger) // if we want a digger, do not consider non-diggers
{
if (best_explevel <= cctrl->explevel)
if (best_exp_level <= cctrl->exp_level)
{
// For equal levels, the score is most important
if ((score > best_score) || (cctrl->explevel > best_explevel))
if ((score > best_score) || (cctrl->exp_level > best_exp_level))
{
best_explevel = cctrl->explevel;
best_exp_level = cctrl->exp_level;
best_score = score;
best_creatng = ctng;
}
Expand Down Expand Up @@ -585,7 +585,7 @@ TbBool create_party(const char *prtname)
return true;
}

TbBool add_member_to_party(int party_id, long crtr_model, long crtr_level, long carried_gold, long objctv_id, long countdown)
TbBool add_member_to_party(int party_id, long crtr_model, CrtrExpLevel exp_level, long carried_gold, long objctv_id, long countdown)
{
if ((party_id < 0) && (party_id >= CREATURE_PARTYS_COUNT))
{
Expand All @@ -603,15 +603,15 @@ TbBool add_member_to_party(int party_id, long crtr_model, long crtr_level, long
member->flags &= ~TrgF_DISABLED;
member->crtr_kind = crtr_model;
member->carried_gold = carried_gold;
member->crtr_level = crtr_level-1;
member->exp_level = exp_level-1;
member->field_6F = 1;
member->objectv = objctv_id;
member->countdown = countdown;
party->members_num++;
return true;
}

TbBool delete_member_from_party(int party_id, long crtr_model, long crtr_level)
TbBool delete_member_from_party(int party_id, long crtr_model, CrtrExpLevel exp_level)
{
if ((party_id < 0) && (party_id >= CREATURE_PARTYS_COUNT))
{
Expand All @@ -623,7 +623,7 @@ TbBool delete_member_from_party(int party_id, long crtr_model, long crtr_level)
for (int i = 0; i < party->members_num; i++)
{
struct PartyMember* member = &(party->members[i]);
if ((member->crtr_kind == crtr_model) && (member->crtr_level == (crtr_level-1)))
if ((member->crtr_kind == crtr_model) && (member->exp_level == (exp_level-1)))
{
memmove(member, member + 1, sizeof(*member) * (party->members_num - i - 1));
party->members_num--;
Expand Down Expand Up @@ -903,7 +903,7 @@ struct Thing *script_process_new_party(struct Party *party, PlayerNumber plyr_id
break;
}
struct PartyMember* member = &(party->members[k]);
struct Thing* thing = script_create_new_creature(plyr_idx, member->crtr_kind, location, member->carried_gold, member->crtr_level, SpwnT_Default);
struct Thing* thing = script_create_new_creature(plyr_idx, member->crtr_kind, location, member->carried_gold, member->exp_level, SpwnT_Default);
if (!thing_is_invalid(thing))
{
struct CreatureControl* cctrl = creature_control_get_from_thing(thing);
Expand Down Expand Up @@ -931,7 +931,7 @@ struct Thing *script_process_new_party(struct Party *party, PlayerNumber plyr_id
// if best and current unit want to defend party, or neither do, the strongest will be leader
if (((cctrl->party_objective == CHeroTsk_DefendParty) && (bestctrl->party_objective == CHeroTsk_DefendParty)) || ((cctrl->party_objective != CHeroTsk_DefendParty) && (bestctrl->party_objective != CHeroTsk_DefendParty)))
{
if ((cctrl->explevel > bestctrl->explevel) || ((cctrl->explevel == bestctrl->explevel) && (get_creature_thing_score(thing) > get_creature_thing_score(bestng))))
if ((cctrl->exp_level > bestctrl->exp_level) || ((cctrl->exp_level == bestctrl->exp_level) && (get_creature_thing_score(thing) > get_creature_thing_score(bestng))))
{
add_creature_to_group_as_leader(thing, grptng);
leadtng = thing;
Expand All @@ -954,9 +954,9 @@ struct Thing *script_process_new_party(struct Party *party, PlayerNumber plyr_id
return leadtng;
}

void script_process_new_tunneller_party(PlayerNumber plyr_idx, long prty_id, TbMapLocation location, TbMapLocation heading, unsigned char crtr_level, unsigned long carried_gold)
void script_process_new_tunneller_party(PlayerNumber plyr_idx, long prty_id, TbMapLocation location, TbMapLocation heading, CrtrExpLevel exp_level, unsigned long carried_gold)
{
struct Thing* ldthing = script_process_new_tunneler(plyr_idx, location, heading, crtr_level, carried_gold);
struct Thing* ldthing = script_process_new_tunneler(plyr_idx, location, heading, exp_level, carried_gold);
if (thing_is_invalid(ldthing))
{
ERRORLOG("Couldn't create tunneling group leader");
Expand Down
8 changes: 4 additions & 4 deletions src/creature_groups.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ struct PartyMember { // sizeof = 13
ThingModel crtr_kind;
unsigned char objectv;
long countdown;
unsigned char crtr_level;
CrtrExpLevel exp_level;
unsigned short carried_gold;
unsigned short field_6F;
};
Expand Down Expand Up @@ -99,13 +99,13 @@ TbBool make_group_member_leader(struct Thing *leadtng);

TbBool create_party(const char *prtname);
int get_party_index_of_name(const char *prtname);
TbBool add_member_to_party(int party_id, long crtr_model, long crtr_level, long carried_gold, long objctv_id, long countdown);
TbBool delete_member_from_party(int party_id, long crtr_model, long crtr_level);
TbBool add_member_to_party(int party_id, long crtr_model, CrtrExpLevel exp_level, long carried_gold, long objctv_id, long countdown);
TbBool delete_member_from_party(int party_id, long crtr_model, CrtrExpLevel exp_level);
long process_obey_leader(struct Thing *thing);
void leader_find_positions_for_followers(struct Thing *leadtng);

struct Thing *script_process_new_party(struct Party *party, PlayerNumber plyr_idx, TbMapLocation location, long copies_num);
void script_process_new_tunneller_party(PlayerNumber plyr_idx, long prty_id, TbMapLocation location, TbMapLocation heading, unsigned char crtr_level, unsigned long carried_gold);
void script_process_new_tunneller_party(PlayerNumber plyr_idx, long prty_id, TbMapLocation location, TbMapLocation heading, CrtrExpLevel exp_level, unsigned long carried_gold);
/******************************************************************************/
#ifdef __cplusplus
}
Expand Down
8 changes: 4 additions & 4 deletions src/creature_instances.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,10 +221,10 @@ void creature_increase_available_instances(struct Thing *thing)
int k = crstat->learned_instance_id[i];
if (k > 0)
{
if (crstat->learned_instance_level[i] <= cctrl->explevel+1) {
if (crstat->learned_instance_level[i] <= cctrl->exp_level+1) {
cctrl->instance_available[k] = true;
}
else if ( (crstat->learned_instance_level[i] > cctrl->explevel+1) && !(game.conf.rules.game.classic_bugs_flags & ClscBug_RebirthKeepsSpells) )
else if ( (crstat->learned_instance_level[i] > cctrl->exp_level+1) && !(game.conf.rules.game.classic_bugs_flags & ClscBug_RebirthKeepsSpells) )
{
cctrl->instance_available[k] = false;
}
Expand Down Expand Up @@ -564,11 +564,11 @@ long instf_creature_cast_spell(struct Thing *creatng, long *param)

if (target != NULL)
{
creature_cast_spell_at_thing(creatng, target, spl_idx, cctrl->explevel);
creature_cast_spell_at_thing(creatng, target, spl_idx, cctrl->exp_level);
}
else
{
creature_cast_spell(creatng, spl_idx, cctrl->explevel, cctrl->targtstl_x, cctrl->targtstl_y);
creature_cast_spell(creatng, spl_idx, cctrl->exp_level, cctrl->targtstl_x, cctrl->targtstl_y);
}

// Start cooldown after spell effect activates
Expand Down
2 changes: 1 addition & 1 deletion src/creature_jobs.c
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ TbBool attempt_anger_job_mad_psycho(struct Thing *creatng)
TbBool attempt_anger_job_persuade(struct Thing *creatng)
{
struct CreatureControl* cctrl = creature_control_get_from_thing(creatng);
if (cctrl->explevel <= 5) {
if (cctrl->exp_level <= 5) {
return false;
}
if (!can_change_from_state_to(creatng, creatng->active_state, CrSt_CreaturePersuade)) {
Expand Down
10 changes: 5 additions & 5 deletions src/creature_states.c
Original file line number Diff line number Diff line change
Expand Up @@ -1680,7 +1680,7 @@ void set_creature_size_stuff(struct Thing *creatng)
}
else
{
creatng->sprite_size = game.conf.crtr_conf.sprite_size + (game.conf.crtr_conf.sprite_size * game.conf.crtr_conf.exp.size_increase_on_exp * cctrl->explevel) / 100;
creatng->sprite_size = game.conf.crtr_conf.sprite_size + (game.conf.crtr_conf.sprite_size * game.conf.crtr_conf.exp.size_increase_on_exp * cctrl->exp_level) / 100;
}
}

Expand All @@ -1700,7 +1700,7 @@ short creature_change_from_chicken(struct Thing *creatng)
struct Thing *efftng = create_effect_element(&creatng->mappos, TngEffElm_Chicken, creatng->owner);
if (!thing_is_invalid(efftng))
{
long n = (10 - cctrl->countdown) * (game.conf.crtr_conf.sprite_size + (game.conf.crtr_conf.sprite_size * game.conf.crtr_conf.exp.size_increase_on_exp * cctrl->explevel) / 100) / 10;
long n = (10 - cctrl->countdown) * (game.conf.crtr_conf.sprite_size + (game.conf.crtr_conf.sprite_size * game.conf.crtr_conf.exp.size_increase_on_exp * cctrl->exp_level) / 100) / 10;
unsigned long k = get_creature_anim(creatng, 0);
set_thing_draw(efftng, k, 256, n, -1, 0, ODC_Default);
clear_flag(efftng->rendering_flags, TRF_Transpar_Flags);
Expand Down Expand Up @@ -4624,15 +4624,15 @@ TbBool check_experience_upgrade(struct Thing *thing)
struct Dungeon *dungeon = get_dungeon(thing->owner);
struct CreatureControl *cctrl = creature_control_get_from_thing(thing);
struct CreatureStats *crstat = creature_stats_get_from_thing(thing);
long i = crstat->to_level[cctrl->explevel] << 8;
long i = crstat->to_level[cctrl->exp_level] << 8;
if (cctrl->exp_points < i)
{
return false;
}
cctrl->exp_points -= i;
if (cctrl->explevel < dungeon->creature_max_level[thing->model])
if (cctrl->exp_level < dungeon->creature_max_level[thing->model])
{
if ((cctrl->explevel < CREATURE_MAX_LEVEL - 1) || (crstat->grow_up != 0))
if ((cctrl->exp_level < CREATURE_MAX_LEVEL - 1) || (crstat->grow_up != 0))
{
cctrl->exp_level_up = true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/creature_states_combt.c
Original file line number Diff line number Diff line change
Expand Up @@ -1795,7 +1795,7 @@ long ranged_combat_move(struct Thing *thing, struct Thing *enmtng, MapCoordDelta
if (enmdist < subtile_coord(3,0)) {
creature_retreat_from_combat(thing, enmtng, nstat, 1);
} else
if (enmdist > compute_creature_attack_range(subtile_coord(8,0), 0, cctrl->explevel)) {
if (enmdist > compute_creature_attack_range(subtile_coord(8,0), 0, cctrl->exp_level)) {
creature_move_to(thing, &enmtng->mappos, cctrl->max_speed, 0, 0);
}
return thing_in_field_of_view(thing, enmtng);
Expand Down
4 changes: 2 additions & 2 deletions src/creature_states_hero.c
Original file line number Diff line number Diff line change
Expand Up @@ -1299,14 +1299,14 @@ TbBool script_support_send_tunneller_to_appropriate_dungeon(struct Thing *creatn
return send_tunneller_to_point_in_dungeon(creatng, plyr_idx, &pos);
}

struct Thing *script_process_new_tunneler(unsigned char plyr_idx, TbMapLocation location, TbMapLocation heading, unsigned char crtr_level, unsigned long carried_gold)
struct Thing *script_process_new_tunneler(unsigned char plyr_idx, TbMapLocation location, TbMapLocation heading, CrtrExpLevel exp_level, unsigned long carried_gold)
{
ThingModel diggerkind = get_players_special_digger_model(plyr_idx);
struct Thing* creatng = script_create_creature_at_location(plyr_idx, diggerkind, location, SpwnT_Default);
if (thing_is_invalid(creatng))
return INVALID_THING;
creatng->creature.gold_carried = carried_gold;
init_creature_level(creatng, crtr_level);
init_creature_level(creatng, exp_level);
switch (get_map_location_type(heading))
{
case MLoc_ACTIONPOINT:
Expand Down
2 changes: 1 addition & 1 deletion src/creature_states_hero.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ short setup_person_tunnel_to_position(struct Thing *creatng, MapSubtlCoord stl_x
long get_best_dungeon_to_tunnel_to(struct Thing *creatng);
TbBool send_tunneller_to_point_in_dungeon(struct Thing *creatng, PlayerNumber plyr_idx, struct Coord3d *pos);
TbBool is_hero_tunnelling_to_attack(struct Thing *creatng);
struct Thing *script_process_new_tunneler(unsigned char plyr_idx, TbMapLocation location, TbMapLocation heading, unsigned char crtr_level, unsigned long carried_gold);
struct Thing *script_process_new_tunneler(unsigned char plyr_idx, TbMapLocation location, TbMapLocation heading, CrtrExpLevel exp_level, unsigned long carried_gold);
/******************************************************************************/
#ifdef __cplusplus
}
Expand Down
4 changes: 2 additions & 2 deletions src/creature_states_lair.c
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ CrStateRet creature_add_lair_to_room(struct Thing *creatng, struct Room *room)
lairtng->lair.belongs_to = creatng->index;
lairtng->lair.cssize = 1;
// Lair size depends on creature level
lairtng->lair.spr_size = game.conf.crtr_conf.sprite_size + (game.conf.crtr_conf.sprite_size * game.conf.crtr_conf.exp.size_increase_on_exp * cctrl->explevel) / 100;
lairtng->lair.spr_size = game.conf.crtr_conf.sprite_size + (game.conf.crtr_conf.sprite_size * game.conf.crtr_conf.exp.size_increase_on_exp * cctrl->exp_level) / 100;
lairtng->move_angle_xy = CREATURE_RANDOM(creatng, 2*LbFPMath_PI);
struct ObjectConfigStats* objst = get_object_model_stats(lairtng->model);
unsigned long i = convert_td_iso(objst->sprite_anim_idx);
Expand Down Expand Up @@ -534,7 +534,7 @@ short creature_sleep(struct Thing *thing)
{
if (((game.play_gameturn + thing->index) % game.conf.rules.creature.recovery_frequency) == 0)
{
HitPoints recover = compute_creature_max_health(crstat->sleep_recovery, cctrl->explevel);
HitPoints recover = compute_creature_max_health(crstat->sleep_recovery, cctrl->exp_level);
apply_health_to_thing_and_display_health(thing, recover);
}
}
Expand Down
Loading

0 comments on commit 2779eac

Please sign in to comment.