#include "player.h" #include "item.h" #include "aoe.h" #include static int xp_to_next_level(int level) { return 5 * (level + 2) * (level + 2); } fighter_stats_t player_compute_growth(entity_t *e, int *equips) { player_data_t *p = getcomp(e, fighter)->player; fighter_stats_t m[3] = { item_stat_model(p->inventory[equips[0]]), item_stat_model(p->inventory[equips[1]]), item_stat_model(p->inventory[equips[2]]), }; return fighter_stats_add(4, m[0], m[1], m[2], p->stats_growth); } bool player_add_xp(entity_t *e, int points) { fighter_t *f = getcomp(e, fighter); player_data_t *p = f->player; bool leveled_up = false; p->xp_current += max(points, 0); while(p->xp_current >= p->xp_to_next_level) { p->xp_current -= p->xp_to_next_level; p->xp_level++; p->xp_to_next_level = xp_to_next_level(p->xp_level); fighter_stats_t growth = player_compute_growth(e, p->equipment); fighter_increase_stats(f, &growth); leveled_up = true; } return leveled_up; } void player_compute_skills(entity_t *e, int *equips, int *skills) { player_data_t *p = getcomp(e, fighter)->player; int *inv = p->inventory; for(int i = 0; i < 6; i++) skills[i] = -1; /* Default attack */ skills[0] = AOE_SLASH; /* Sword/staff */ if(equips[0] >= 0) item_skills(inv[equips[0]], &skills[0], &skills[1], &skills[2]); /* Armor */ if(equips[1] >= 0) item_skills(inv[equips[1]], &skills[3], &skills[4], NULL); /* Accessory */ if(equips[2] >= 0) item_skills(inv[equips[2]], &skills[5], NULL, NULL); } bool player_give_item(entity_t *e, int item) { player_data_t *p = getcomp(e, fighter)->player; for(int i = 0; i < 8; i++) { if(p->inventory[i] < 0) { p->inventory[i] = item; return true; } } return false; }