aboutsummaryrefslogtreecommitdiff
path: root/gst/info.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/info.c')
-rw-r--r--gst/info.c86
1 files changed, 84 insertions, 2 deletions
diff --git a/gst/info.c b/gst/info.c
index 985b7dd..15c7c0b 100644
--- a/gst/info.c
+++ b/gst/info.c
@@ -130,8 +130,10 @@ float info_unit_get_health(infos *info, info_unit *u) {
sum += info->augs[u->augs[i]].add_hp[lvl];
}
}
- sum += info->chassis[u->chassis].hp[lc];
- return sum;
+ float mult = (1 + sum/100.0f);
+ if (mult < 0) mult = 0;
+ float ret = info->chassis[u->chassis].hp[lc] * mult;
+ return ret;
}
float info_unit_get_speed(infos *info, info_unit *u) {
@@ -175,6 +177,39 @@ float info_unit_get_damage_target (infos *info, info_unit *u, int w,
return damage * mult;
}
+float info_unit_get_aoe (infos *info, info_unit *u, int w) {
+ int lc = u->levels[LEVEL_CHASSIS];
+ float sum = 0;
+ for(int i=0; i<16; i++) {
+ if (u->augs[i] != -1 && info->chassis[u->chassis].slot_aug[lc]) {
+ int lvl = u->levels[LEVEL_AUGS+i];
+ //sum += info->augs[u->augs[i]].add_aoe[lvl];
+ }
+ }
+ int lw = u->levels[LEVEL_WEAPONS+w];
+ float dam = info->weapons[u->weapons[w]].aoe[lw] + sum;
+ return dam;
+}
+
+float info_unit_get_knockback (infos *info, info_unit *u, int w) {
+ int lc = u->levels[LEVEL_CHASSIS];
+ float sum = 0;
+ for(int i=0; i<16; i++) {
+ if (u->augs[i] != -1 && info->chassis[u->chassis].slot_aug[lc]) {
+ int lvl = u->levels[LEVEL_AUGS+i];
+ //sum += info->augs[u->augs[i]].add_knockback[lvl];
+ }
+ }
+ int lw = u->levels[LEVEL_WEAPONS+w];
+ float dam = info->weapons[u->weapons[w]].knockback[lw] + sum;
+ return dam;
+}
+
+float info_unit_get_stun (infos *info, info_unit *u, int w) {
+ // TODO
+ return 0;
+}
+
float info_unit_get_cooldown(infos *info, info_unit *u, int w) {
int lc = u->levels[LEVEL_CHASSIS];
float sum = 0;
@@ -228,6 +263,53 @@ float info_unit_get_armor(infos *info, info_unit *u, int d) {
return sum;
}
+float info_unit_get_cost (infos *info, info_unit *u) {
+ // see design/notes.txt:implement cost function
+ float sum = 0;
+ int lc = u->levels[LEVEL_CHASSIS];
+ info_chassis *chassis = info->chassis+u->chassis;
+ float sumchassis = 0;
+ sumchassis += powf(2, chassis->slot_weapon[lc])*20;
+ sumchassis += powf(2, chassis->slot_armor[lc])*10;
+ sumchassis += powf(2, chassis->slot_aug[lc])*5;
+ sumchassis += chassis->weight_max[lc]/5;
+ sumchassis += chassis->hp[lc]/20;
+ sumchassis += chassis->speed[lc]*32;
+ sum += sumchassis;
+ if (u->battery != -1) {
+ int lb = u->levels[LEVEL_BATTERY];
+ info_battery *battery = info->batteries+u->battery;
+ float sumbattery = 0;
+ sumbattery += battery->capacity[lb];
+ sum += sumbattery;
+ }
+ for(int i=0; i<8; i++) {
+ int lw = u->levels[LEVEL_WEAPONS+i];
+ int la = u->levels[LEVEL_ARMOR+i];
+ if (u->weapons[i] != -1 && i<chassis->slot_weapon[lc]) {
+ info_weapon *weapon = info->weapons+u->weapons[i];
+ float sumweap = 0;
+ float dam = info_unit_get_damage(info, u, i);
+ float cool = info_unit_get_cooldown(info, u, i);
+ float damtot = dam / cool;
+ float aoe = info_unit_get_aoe(info, u, i);
+ float knockback = info_unit_get_knockback(info, u, i);
+ float stun = info_unit_get_stun(info, u, i);
+ float mult = 1+aoe*5 + 10;
+ damtot = damtot*mult;
+ damtot += knockback * 20 + stun * 50;
+ sumweap = damtot;
+ sum += sumweap;
+ }
+ }
+ for(int t=0; t<7; t++) {
+ float armortot = info_unit_get_armor(info, u, t) * 3;
+ sum += armortot;
+ }
+
+ return sum;
+}
+
void weapon_init (info_weapon *w) {
strcpy(w->name, "nameless");