[Add] Combat rating based on mass of pilots killed. -- [Add] Player name.
This commit is contained in:
parent
84558ae2c9
commit
439fce48c8
@ -7,6 +7,7 @@
|
||||
#include "pause.h"
|
||||
#include "pilot.h"
|
||||
#include "space.h"
|
||||
#include "player.h"
|
||||
#include "menu.h"
|
||||
|
||||
#define MENU_WIDTH 120
|
||||
@ -89,9 +90,10 @@ void info_menu(void) {
|
||||
"Combat Rating:\n");
|
||||
|
||||
snprintf(str, 128,
|
||||
"Foobar\n"
|
||||
"Luser\n");
|
||||
|
||||
"%s\n"
|
||||
"%s\n",
|
||||
player_name, player_rating());
|
||||
|
||||
window_addText(wid, 120, 20,
|
||||
INFO_WIDTH-120-BUTTON_WIDTH, INFO_HEIGHT-60,
|
||||
0, "txtPilot", &gl_smallFont, &cBlack, str);
|
||||
|
14
src/pilot.c
14
src/pilot.c
@ -21,7 +21,9 @@ static unsigned int pilot_id = PLAYER_ID;
|
||||
Pilot** pilot_stack = NULL; // Not static, it is used in player.c and weapon.c and ai.c
|
||||
int pilots = 0;
|
||||
static int mpilots = 0;
|
||||
|
||||
extern Pilot* player;
|
||||
extern unsigned int combat_rating;
|
||||
|
||||
// Stack of fleets.
|
||||
static Fleet* fleet_stack = NULL;
|
||||
@ -177,8 +179,8 @@ static void pilot_shootWeapon(Pilot* p, PilotOutfit* w, const unsigned int t) {
|
||||
}
|
||||
|
||||
// Damage the pilot.
|
||||
void pilot_hit(Pilot* p, const Solid* w,const double damage_shield,
|
||||
const double damage_armour) {
|
||||
void pilot_hit(Pilot* p, const Solid* w, const unsigned int shooter,
|
||||
const double damage_shield, const double damage_armour) {
|
||||
|
||||
double dam_mod;
|
||||
|
||||
@ -197,8 +199,16 @@ void pilot_hit(Pilot* p, const Solid* w,const double damage_shield,
|
||||
dam_mod = damage_armour/p->armour_max;
|
||||
}
|
||||
else {
|
||||
// We are officially dead.
|
||||
p->armour = 0.;
|
||||
dam_mod = 0.;
|
||||
|
||||
if(!pilot_isFlag(p, PILOT_DEAD)) {
|
||||
pilot_setFlag(p, PILOT_DEAD);
|
||||
|
||||
// Adjust the combat rating based on pilot mass.
|
||||
if(shooter == PLAYER_ID) combat_rating += MAX(1, p->ship->mass/50);
|
||||
}
|
||||
}
|
||||
|
||||
vect_cadd(&p->solid->vel,
|
||||
|
@ -29,7 +29,8 @@
|
||||
#define PILOT_HYP_BEGIN (1<<6) // Pilot is starting engines.
|
||||
#define PILOT_HYPERSPACE (1<<7) // Pilot is in hyperspace.
|
||||
#define PILOT_DISABLED (1<<9) // Pilot is disabled.
|
||||
#define PILOT_DELETE (1<<10) // Pilot will get delete asap.
|
||||
#define PILOT_DEAD (1<<10) // Pilot is on it's death bed.
|
||||
#define PILOT_DELETE (1<<15) // Pilot will get delete asap.
|
||||
|
||||
// Just makes life simpler.
|
||||
#define pilot_isPlayer(p) ((p)->flags & PILOT_PLAYER)
|
||||
@ -105,7 +106,7 @@ Fleet* fleet_get(const char* name);
|
||||
|
||||
// MISC.
|
||||
void pilot_shoot(Pilot* p, const unsigned int target, const int secondary);
|
||||
void pilot_hit(Pilot* p, const Solid* w,
|
||||
void pilot_hit(Pilot* p, const Solid* w, const unsigned int shooter,
|
||||
const double damage_shield, const double damage_armour);
|
||||
void pilot_setAmmo(Pilot* p);
|
||||
double pilot_face(Pilot* p, const float dir);
|
||||
|
31
src/player.c
31
src/player.c
@ -31,12 +31,17 @@
|
||||
|
||||
// Player stuff.
|
||||
Pilot* player = NULL; // extern in pilot.h
|
||||
unsigned int credits = 0;
|
||||
// Player global properties.
|
||||
char* player_name = NULL; // Player name.
|
||||
unsigned int credits = NULL; // Ze monies.
|
||||
unsigned int combat_rating = 0; // Ze rating.
|
||||
unsigned int player_flags = 0; // Player flags.
|
||||
// Input.c
|
||||
double player_turn = 0.; // Turn velocity from input.
|
||||
double player_acc = 0.; // Accel velocity from input.
|
||||
unsigned int player_target = PLAYER_ID; // Targetted pilot.
|
||||
static int planet_target = -1; // Targetted planet.
|
||||
// Internal.
|
||||
static int hyperspace_target = -1; // Target hyperspace route.
|
||||
static double hyperspace_flash = 0.;
|
||||
|
||||
@ -158,6 +163,8 @@ void player_new(void) {
|
||||
else if(xml_isNode(tmp, "y")) y = xml_getFloat(tmp);
|
||||
} while((tmp = tmp->next));
|
||||
}
|
||||
else if(xml_isNode(cur, "combat_rating"))
|
||||
combat_rating = xml_getInt(cur);
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
}while((node = node->next));
|
||||
@ -213,6 +220,28 @@ void player_clear(void) {
|
||||
hyperspace_target = -1;
|
||||
}
|
||||
|
||||
static char* player_ratings[] = {
|
||||
"None",
|
||||
"Smallfry",
|
||||
"Minor",
|
||||
"Average",
|
||||
"Major",
|
||||
"Fearsom",
|
||||
"Godlike"
|
||||
};
|
||||
|
||||
const char* player_rating(void) {
|
||||
if(combat_rating == 0) return player_ratings[0];
|
||||
else if(combat_rating < 50) return player_ratings[1];
|
||||
else if(combat_rating < 200) return player_ratings[2];
|
||||
else if(combat_rating < 500) return player_ratings[3];
|
||||
else if(combat_rating < 1000) return player_ratings[4];
|
||||
else if(combat_rating < 2500) return player_ratings[5];
|
||||
else if(combat_rating < 10000) return player_ratings[6];
|
||||
else return player_ratings[7];
|
||||
|
||||
}
|
||||
|
||||
// Render the background player stuff, namely planet target
|
||||
void player_renderBG(void) {
|
||||
double x, y;
|
||||
|
@ -16,8 +16,10 @@
|
||||
|
||||
// The player.
|
||||
extern Pilot* pilot;
|
||||
extern char* player_name;
|
||||
extern unsigned int player_flags;
|
||||
extern unsigned int credits;
|
||||
extern unsigned int combat_rating;
|
||||
|
||||
typedef enum { RADAR_RECT, RADAR_CIRCLE } RadarShape; // For render functions.
|
||||
|
||||
@ -34,6 +36,7 @@ void player_renderBG(void); // Render BG layer.
|
||||
void player_message(const char* fmt, ...);
|
||||
void player_clear(void);
|
||||
void player_warp(const double x, const double y);
|
||||
const char* player_rating(void);
|
||||
|
||||
// Keybind actions.
|
||||
void player_setRadarRel(int mod);
|
||||
|
@ -243,7 +243,7 @@ static void weapon_hit(Weapon* w, Pilot* p, WeaponLayer layer) {
|
||||
pilot_setFlag(p, PILOT_HOSTILE);
|
||||
|
||||
// Let the ship know that is should take some kind of damage.
|
||||
pilot_hit(p, w->solid, w->outfit->damage_shield, w->outfit->damage_armour);
|
||||
pilot_hit(p, w->solid, w->parent, w->outfit->damage_shield, w->outfit->damage_armour);
|
||||
// We don't need the weapon particle any longer.
|
||||
weapon_destroy(w, layer);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user