30 #define STAT_BAR_GRACE 2
31 #define STAT_BAR_FOOD 3
32 #define STAT_BAR_EXP 4
33 #define MAX_STAT_BARS 5
36 "hp",
"sp",
"grace",
"food",
"exp"
41 #define STYLE_NORMAL 0
44 #define STYLE_GRAD_NORMAL 3
45 #define STYLE_GRAD_LOW 4
46 #define STYLE_GRAD_SUPER 5
54 "bar_normal",
"bar_low",
"bar_super",
55 "gradual_bar_normal",
"gradual_bar_low",
"gradual_bar_super"
68 #define SKILL_BOXES_X 6
69 #define SKILL_BOXES_Y 17
71 #define PROTECTION_BOXES_X 6
72 #define PROTECTION_BOXES_Y 6
121 for (sub_style=0; sub_style <
NUM_STYLES; sub_style++) {
124 tmp_style = gtk_rc_get_style_by_paths(gtk_settings_get_default(), NULL, buf, G_TYPE_NONE);
131 LOG(
LOG_INFO,
"stats.c::stats_get_styles()",
"Unable to find style '%s'", buf);
137 &tmp_style->base[GTK_STATE_SELECTED],
sizeof(GdkColor));
160 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_playername"));
162 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_str"));
164 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_dex"));
166 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_con"));
168 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_int"));
170 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_wis"));
172 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_pow"));
174 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_cha"));
176 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_wc"));
178 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_dam"));
180 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_ac"));
182 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_armor"));
184 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_speed"));
186 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_weapon_speed"));
188 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_range"));
190 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_exp"));
192 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"label_level"));
201 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"table_skills_exp"));
210 x, x+1, y, y+1, GTK_EXPAND, 0, 0, 0);
221 GTK_WIDGET(gtk_builder_get_object(
window_xml,
"table_protections"));
226 x, x+1, y, y+1, GTK_EXPAND, 0, 0, 0);
245 const char SI_SUFFIX[] = {
'\0',
'k',
'M',
'G'};
246 const float SI_VALUE[] = {1, 1000, 1000000, 1000000000};
252 for (i =
sizeof(SI_SUFFIX) /
sizeof(
char) - 1; i > 0; i--) {
253 if (number / SI_VALUE[i] >= 10) {
259 value = number / SI_VALUE[suffix];
262 if (value - (
int)value == 0) {
263 return g_strdup_printf(
"%.0f%c", value, SI_SUFFIX[suffix]);
265 return g_strdup_printf(
"%.1f%c", value, SI_SUFFIX[suffix]);
291 void update_stat(
int stat_no, gint64 max_stat, gint64 current_stat,
292 gint64 statbar_max, gint64 statbar_stat,
int can_alert)
295 GdkColor ncolor, *set_color=NULL;
298 if (
lastval[stat_no] == current_stat &&
lastmax[stat_no] == max_stat) {
302 lastval[stat_no] = current_stat;
305 if (statbar_max > 0) {
306 bar = (float) statbar_stat / (
float) statbar_max;
316 GdkColor *hcolor, *lcolor;
345 if (lcolor && hcolor) {
347 memcpy(&ncolor, lcolor,
sizeof(GdkColor));
349 ncolor.red += (hcolor->red - lcolor->red) * diff;
350 ncolor.green += (hcolor->green - lcolor->green) * diff;
351 ncolor.blue += (hcolor->blue - lcolor->blue) * diff;
373 memcpy(&ncolor, hcolor,
sizeof(GdkColor));
375 if (lcolor->red > hcolor->red) {
376 ncolor.red = 2 * lcolor->red * (1.0 - diff);
379 if (lcolor->green > hcolor->green) {
380 ncolor.green = 2 * lcolor->green * (1.0 - diff);
383 if (lcolor->blue > hcolor->blue) {
384 ncolor.blue = 2 * lcolor->blue * (1.0 - diff);
388 memcpy(&ncolor, lcolor,
sizeof(GdkColor));
390 if (hcolor->red > lcolor->red) {
391 ncolor.red = 2 * hcolor->red * diff;
394 if (hcolor->green > lcolor->green) {
395 ncolor.green = 2 * hcolor->green * diff;
398 if (hcolor->blue > lcolor->blue) {
399 ncolor.blue = 2 * hcolor->blue * diff;
404 fprintf(stderr,
"stat %d, val %d, r/g/b=%d/%d/%d\n",
405 stat_no, current_stat, ncolor.red, ncolor.green, ncolor.blue);
410 if (statbar_stat * 4 < statbar_max) {
412 }
else if (statbar_stat > statbar_max) {
425 GtkProgressBar *curr_bar = GTK_PROGRESS_BAR(
stat_bar[stat_no]);
431 gtk_widget_modify_base(
stat_bar[stat_no], GTK_STATE_SELECTED, set_color);
433 gtk_widget_modify_bg(
stat_bar[stat_no], GTK_STATE_PRELIGHT, set_color);
441 label = g_strdup_printf(
"%s/%s", exp_curr, exp_max);
445 label = g_strdup_printf(
"%" G_GINT64_FORMAT
"/%" G_GINT64_FORMAT,
446 current_stat, max_stat);
449 gtk_progress_bar_set_fraction(curr_bar, bar);
450 gtk_progress_bar_set_text(curr_bar, label);
461 static int lastbeep=0;
462 static gint64 level_diff;
514 return g_ascii_strcasecmp(a->
name, b->
name);
556 static Stats last_stats;
558 static int init_before=0, max_drawn_skill=0, max_drawn_resists=0;
566 memset(&last_stats, 0,
sizeof(
Stats));
585 snprintf(buff,
sizeof(buff),
"Experience: %5" G_GINT64_FORMAT,
598 snprintf(buff,
sizeof(buff),
"%2d",
cpl.
stats.
Str);
604 snprintf(buff,
sizeof(buff),
"%2d",
cpl.
stats.
Dex);
610 snprintf(buff,
sizeof(buff),
"%2d",
cpl.
stats.
Con);
616 snprintf(buff,
sizeof(buff),
"%2d",
cpl.
stats.
Int);
622 snprintf(buff,
sizeof(buff),
"%2d",
cpl.
stats.
Wis);
628 snprintf(buff,
sizeof(buff),
"%2d",
cpl.
stats.
Pow);
634 snprintf(buff,
sizeof(buff),
"%2d",
cpl.
stats.
Cha);
640 snprintf(buff,
sizeof(buff),
"%2d",
cpl.
stats.
wc);
652 snprintf(buff,
sizeof(buff),
"%d",
cpl.
stats.
ac);
664 snprintf(buff,
sizeof(buff),
"%3.2f",
679 snprintf(buff,
sizeof(buff),
"%3.2f", weap_sp);
685 snprintf(buff,
sizeof(buff),
"Range: %s",
cpl.
range);
709 snprintf(buff,
sizeof(buff),
"%" G_GINT64_FORMAT
" (%d)",
728 if (on_skill < max_drawn_skill) {
729 for (
int k = on_skill; k <= max_drawn_skill; k++) {
733 max_drawn_skill = on_skill;
756 if (j < max_drawn_resists) {
757 for (
int i = j; i <= max_drawn_resists; i++) {
761 max_drawn_resists = j;