balancing and level 1
This commit is contained in:
parent
b844a1d434
commit
34ba2eeece
|
@ -7,14 +7,15 @@ spawner: 18,5
|
|||
spawner: 5,7
|
||||
|
||||
wave: 9s 3*slime/1
|
||||
wave: 12s 6*slime/1
|
||||
item: armor1
|
||||
wave: 12s 12*slime/1
|
||||
wave: 2s 1*bat/2
|
||||
wave: 20s 10*slime/1
|
||||
wave: 8s 4*bat/2
|
||||
item: sword1
|
||||
wave: 18s 10*slime/1 2*bat/2
|
||||
wave: 8s 6*bat/2
|
||||
wave: 8s 12*slime/1 4*bat/2
|
||||
delay: 4s
|
||||
item: potion_hp
|
||||
wave: 8s 16*slime/1 6*bat/2
|
||||
delay: 2s
|
||||
wave: 6s 8*slime/1 8*bat/2 2*fire_slime/4
|
||||
delay: 2s
|
||||
delay: 6s
|
||||
wave: 8s 12*bat/2 4*fire_slime/4 1*gunslinger/8
|
||||
|
|
|
@ -7,19 +7,23 @@
|
|||
#include <stdarg.h>
|
||||
#include <gint/defs/util.h>
|
||||
|
||||
fighter_stat_model_t fighter_stat_model_add(int amount, ...)
|
||||
fighter_stat_model_t fighter_stat_model_mul(int amount, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, amount);
|
||||
|
||||
fighter_stat_model_t model = { 0 };
|
||||
fighter_stat_model_t model = {
|
||||
.HP = fix(1),
|
||||
.ATK = fix(1),
|
||||
.DEF = fix(1),
|
||||
.MAG = fix(1), };
|
||||
|
||||
for(int i = 0; i < amount; i++) {
|
||||
fighter_stat_model_t op = va_arg(args, fighter_stat_model_t);
|
||||
model.HP += op.HP;
|
||||
model.ATK += op.ATK;
|
||||
model.DEF += op.DEF;
|
||||
model.MAG += op.MAG;
|
||||
model.HP = fmul(model.HP , op.HP);
|
||||
model.ATK = fmul(model.ATK, op.ATK);
|
||||
model.DEF = fmul(model.DEF, op.DEF);
|
||||
model.MAG = fmul(model.MAG, op.MAG);
|
||||
}
|
||||
|
||||
va_end(args);
|
||||
|
@ -35,13 +39,23 @@ static int instantiate_stat(fixed_t affinity, fixed_t multiplier, int level)
|
|||
}
|
||||
|
||||
fighter_stat_model_t fighter_stat_model_instantiate(
|
||||
fighter_stat_model_t const *model, int level, fixed_t multiplier)
|
||||
fighter_stat_model_t const *model, fighter_stat_model_t const *equipment,
|
||||
int level, fixed_t hp_multiplier)
|
||||
{
|
||||
fighter_stat_model_t m;
|
||||
m.HP = fix(instantiate_stat(model->HP, 2 * multiplier, level));
|
||||
m.HP = fix(instantiate_stat(model->HP, 3 * hp_multiplier, level));
|
||||
m.ATK = fix(instantiate_stat(model->ATK, fix(1.6), level));
|
||||
m.DEF = fix(instantiate_stat(model->DEF, fix(0.9), level));
|
||||
m.DEF = fix(instantiate_stat(model->DEF, fix(0.7), level));
|
||||
m.MAG = fix(instantiate_stat(model->MAG, fix(1.2), level));
|
||||
|
||||
/* Apply equipment boost */
|
||||
if(equipment) {
|
||||
m.HP = fmul(m.HP, equipment->HP);
|
||||
m.ATK = fmul(m.ATK, equipment->ATK);
|
||||
m.DEF = fmul(m.DEF, equipment->DEF);
|
||||
m.MAG = fmul(m.MAG, equipment->MAG);
|
||||
}
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
|
@ -59,11 +73,11 @@ int fighter_damage(entity_t *e, int base_damage)
|
|||
|
||||
if(f->HP == 0) return 0;
|
||||
|
||||
base_damage -= f->DEF;
|
||||
if(base_damage <= 0) return 0;
|
||||
base_damage = max(base_damage - f->DEF, 0);
|
||||
|
||||
int variation = (base_damage >= 4) ? (rand() % (base_damage / 4)) : 0;
|
||||
int damage = (base_damage * 7) / 8 + variation;
|
||||
damage = max(damage, 1);
|
||||
|
||||
if(f->HP < damage) f->HP = 0;
|
||||
else f->HP -= damage;
|
||||
|
|
|
@ -54,12 +54,13 @@ typedef struct
|
|||
|
||||
} fighter_t;
|
||||
|
||||
/* Adds two or more stat models */
|
||||
fighter_stat_model_t fighter_stat_model_add(int amount, ...);
|
||||
/* Multiply equipment stat modifiers */
|
||||
fighter_stat_model_t fighter_stat_model_mul(int amount, ...);
|
||||
|
||||
/* Instantiate a statistics model */
|
||||
/* Instantiate a statistics model with optional equipment and HP multiplier */
|
||||
fighter_stat_model_t fighter_stat_model_instantiate(
|
||||
fighter_stat_model_t const *model, int level, fixed_t multiplier);
|
||||
fighter_stat_model_t const *model, fighter_stat_model_t const *equipment,
|
||||
int level, fixed_t hp_multiplier);
|
||||
|
||||
/* Initialize fighter's stats by using the instantiated stat model */
|
||||
void fighter_set_stats(fighter_t *f, fighter_stat_model_t const *instance);
|
||||
|
|
|
@ -158,7 +158,7 @@ entity_t *enemy_make(int enemy_id)
|
|||
memset(f, 0, sizeof *f);
|
||||
|
||||
fighter_stat_model_t inst = fighter_stat_model_instantiate(&data->stats,
|
||||
data->level, fix(1.0));
|
||||
NULL, data->level, fix(1.0));
|
||||
fighter_set_stats(f, &inst);
|
||||
f->HP = f->HP_max;
|
||||
f->combo_length = 1;
|
||||
|
|
52
src/item.c
52
src/item.c
|
@ -112,30 +112,38 @@ int item_equipment_slot(int item)
|
|||
|
||||
fighter_stat_model_t item_stat_model(int item)
|
||||
{
|
||||
fighter_stat_model_t m = {
|
||||
.HP = fix(1.0),
|
||||
.ATK = fix(1.0),
|
||||
.DEF = fix(1.0),
|
||||
.MAG = fix(1.0),
|
||||
};
|
||||
|
||||
switch(item) {
|
||||
case ITEM_SWORD1: return (fighter_stat_model_t){
|
||||
.ATK = fix(0.4),
|
||||
.MAG = fix(0.2),
|
||||
};
|
||||
case ITEM_SWORD2: return (fighter_stat_model_t){
|
||||
.ATK = fix(0.8),
|
||||
.MAG = fix(0.3),
|
||||
};
|
||||
case ITEM_SCEPTER1: return (fighter_stat_model_t){
|
||||
.ATK = fix(0.15),
|
||||
.DEF = fix(0.1),
|
||||
.MAG = fix(0.3),
|
||||
};
|
||||
case ITEM_SCEPTER2: return (fighter_stat_model_t){
|
||||
.ATK = fix(0.3),
|
||||
.DEF = fix(0.15),
|
||||
.MAG = fix(0.6),
|
||||
};
|
||||
case ITEM_ARMOR1: return (fighter_stat_model_t){
|
||||
.DEF = fix(0.25),
|
||||
};
|
||||
default: return (fighter_stat_model_t){ 0 };
|
||||
case ITEM_SWORD1:
|
||||
m.ATK = fix(1.4);
|
||||
m.MAG = fix(1.2);
|
||||
break;
|
||||
case ITEM_SWORD2:
|
||||
m.ATK = fix(1.8);
|
||||
m.MAG = fix(1.3);
|
||||
break;
|
||||
case ITEM_SCEPTER1:
|
||||
m.ATK = fix(1.15);
|
||||
m.DEF = fix(1.1);
|
||||
m.MAG = fix(1.3);
|
||||
break;
|
||||
case ITEM_SCEPTER2:
|
||||
m.ATK = fix(1.25);
|
||||
m.DEF = fix(1.15);
|
||||
m.MAG = fix(1.6);
|
||||
break;
|
||||
case ITEM_ARMOR1:
|
||||
m.DEF = fix(1.3);
|
||||
break;
|
||||
}
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
void item_skills(int item, int *skill1, int *skill2, int *skill3)
|
||||
|
|
10
src/player.c
10
src/player.c
|
@ -38,17 +38,17 @@ fighter_stat_model_t player_compute_stats(entity_t *e, int *equips)
|
|||
{
|
||||
player_data_t *p = getcomp(e, fighter)->player;
|
||||
|
||||
fighter_stat_model_t m[4] = {
|
||||
p->stat_model,
|
||||
fighter_stat_model_t m[3] = {
|
||||
item_stat_model(equips[0]),
|
||||
item_stat_model(equips[1]),
|
||||
item_stat_model(equips[2]),
|
||||
};
|
||||
|
||||
fighter_stat_model_t model = fighter_stat_model_add(4,
|
||||
m[0], m[1], m[2], m[3]);
|
||||
fighter_stat_model_t equip_model = fighter_stat_model_mul(3,
|
||||
m[0], m[1], m[2]);
|
||||
|
||||
return fighter_stat_model_instantiate(&model, p->xp_level, fix(2.0));
|
||||
return fighter_stat_model_instantiate(&p->stat_model, &equip_model,
|
||||
p->xp_level, fix(3.0));
|
||||
}
|
||||
|
||||
void player_compute_skills(entity_t *e, int *equips, int *skills)
|
||||
|
|
Loading…
Reference in New Issue