{ 0, Gcol_cyan }, /* Iron = dark cyan */
{ A_BOLD, Gcol_brown }, /* Gold = yellow */
{ A_BOLD, Gcol_l_grey }, /* Silver = white */
+ /* UI customizable colours */
+ { A_BOLD, Gcol_d_grey },
+ { 0, Gcol_l_grey },
+ { A_BOLD, Gcol_brown },
+ { A_BOLD, Gcol_red },
+ { A_BOLD, Gcol_blue }
};
cchar_t terrain_tiles[NUM_TERRAINS];
mvwadd_wch(world_window, i, j, back_buffer[c.y][c.x]);
if (!player_fov.test(d))
{
- mvwchgat(world_window, i, j, 1, A_BOLD, Gcol_d_grey, NULL);
+ mvwchgat(world_window, i, j, 1, A_BOLD, Gcol_d_grey, nullptr);
}
front_buffer[i][j] = back_buffer[c.y][c.x];
}
wchar_t wch[2];
wch[0] = L'@';
wch[1] = 0;
- setcchar(&player_tile, wch, 0, 0, NULL);
+ setcchar(&player_tile, wch, 0, 0, nullptr);
wch[0] = L' ';
- setcchar(&blank_tile, wch, 0, 0, NULL);
+ setcchar(&blank_tile, wch, 0, 0, nullptr);
}
for (i = 0; i < NUM_OF_PERMONS; ++i)
{
wch[1] = 0;
setcchar(permon_tiles + i, wch,
colour_data[permons[i].colour].attr,
- colour_data[permons[i].colour].cpair, NULL);
+ colour_data[permons[i].colour].cpair, nullptr);
}
for (i = 0; i < NUM_TERRAINS; ++i)
{
wch[1] = 0;
setcchar(terrain_tiles + i, wch,
colour_data[terrain_props[i].colour].attr,
- colour_data[terrain_props[i].colour].cpair, NULL);
+ colour_data[terrain_props[i].colour].cpair, nullptr);
}
for (i = 0; i < NUM_OF_PERMOBJS; ++i)
{
/// welp. someone didn't see the above warning
}
wch[1] = 0;
- setcchar(permobj_tiles + i, wch, 0, 0, NULL);
+ setcchar(permobj_tiles + i, wch, 0, 0, nullptr);
}
}
wchar_t wch[2];
wch[0] = L'@';
wch[1] = 0;
- setcchar(&player_tile, wch, 0, 0, NULL);
+ setcchar(&player_tile, wch, 0, 0, nullptr);
wch[0] = L' ';
- setcchar(&blank_tile, wch, 0, 0, NULL);
+ setcchar(&blank_tile, wch, 0, 0, nullptr);
}
for (i = 0; i < NUM_OF_PERMONS; ++i)
{
wch[1] = 0;
setcchar(permon_tiles + i, wch,
colour_data[permons[i].colour].attr,
- colour_data[permons[i].colour].cpair, NULL);
+ colour_data[permons[i].colour].cpair, nullptr);
}
for (i = 0; i < NUM_TERRAINS; ++i)
{
wch[1] = 0;
setcchar(terrain_tiles + i, wch,
colour_data[terrain_props[i].colour].attr,
- colour_data[terrain_props[i].colour].cpair, NULL);
+ colour_data[terrain_props[i].colour].cpair, nullptr);
}
for (i = 0; i < NUM_OF_PERMOBJS; ++i)
{
wchar_t wch[2];
wch[0] = permobjs[i].sym;
wch[1] = 0;
- setcchar(permobj_tiles + i, wch, 0, 0, NULL);
+ setcchar(permobj_tiles + i, wch, 0, 0, nullptr);
}
}
fullscreen_window = newwin(24, 80, 0, 0);
fullscreen_panel = new_panel(fullscreen_window);
wattr_set(inventory_window, colour_data[Gcol_l_grey].attr,
- colour_data[Gcol_l_grey].cpair, NULL);
+ colour_data[Gcol_l_grey].cpair, nullptr);
hide_panel(inventory_panel);
clear();
curs_set(0);
* the player should be flagged *before* print_msg() is called with the
* message announcing the change.
*
+ * \param prio Message priority
+ * \param fmt printf-style format string
* \todo Handle the message window getting resized.
* \todo Implement message scrollback.
* \todo Put line breaks at word gaps in long messages.
display_update();
}
+/*! \brief Print some text in the message window (priority variant)
+ *
+ * Calling print_msg() prints formatted text (printf-style) to the message
+ * window. It also calls display_update(), so any change to the map or
+ * the player should be flagged *before* print_msg() is called with the
+ * message announcing the change.
+ *
+ * This version of print_msg() applies a message priority attribute to
+ * the message being printed.
+ *
+ * \param prio Message priority
+ * \param fmt printf-style format string
+ * \todo Handle the message window getting resized.
+ * \todo Implement message scrollback.
+ * \todo Put line breaks at word gaps in long messages.
+ * \todo Handle large volumes of messages between player turns.
+ */
+void print_msg(Msg_prio prio, char const *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ switch (prio)
+ {
+ case Msg_prio::Low:
+ wattr_set(message_window, colour_data[Gcol_prio_low].attr, colour_data[Gcol_prio_low].cpair, nullptr);
+ break;
+ case Msg_prio::Normal:
+ wattr_set(message_window, colour_data[Gcol_prio_normal].attr, colour_data[Gcol_prio_normal].cpair, nullptr);
+ break;
+ case Msg_prio::Alert:
+ wattr_set(message_window, colour_data[Gcol_prio_alert].attr, colour_data[Gcol_prio_alert].cpair, nullptr);
+ break;
+ case Msg_prio::Warn:
+ wattr_set(message_window, colour_data[Gcol_prio_warn].attr, colour_data[Gcol_prio_warn].cpair, nullptr);
+ break;
+ case Msg_prio::Bug:
+ wattr_set(message_window, colour_data[Gcol_prio_bug].attr, colour_data[Gcol_prio_bug].cpair, nullptr);
+ break;
+ }
+ vw_printw(message_window, fmt, ap);
+ wattr_set(message_window, colour_data[Gcol_prio_normal].attr, colour_data[Gcol_prio_normal].cpair, nullptr);
+ va_end(ap);
+ display_update();
+}
+
/*! \brief Set a message and whether 'nothing' should be listed in inventory
*
* \param s Message to set.
*/
void reset_inventory_message(void)
{
- wattr_set(inventory_window, colour_data[Gcol_l_grey].attr, colour_data[Gcol_l_grey].cpair, NULL);
+ wattr_set(inventory_window, colour_data[Gcol_l_grey].attr, colour_data[Gcol_l_grey].cpair, nullptr);
mvwprintw(inventory_window, 0, 0, " === INVENTORY ===");
mvwprintw(inventory_window, 20, 0, " ");
}
{
int i;
char inv_line[60];
- wattr_set(inventory_window, colour_data[Gcol_d_grey].attr, colour_data[Gcol_d_grey].cpair, NULL);
+ wattr_set(inventory_window, colour_data[Gcol_d_grey].attr, colour_data[Gcol_d_grey].cpair, nullptr);
for (i = 0; i < 19; i++)
{
if (u.inventory[i] == NO_OBJ)
{
- wattr_set(inventory_window, colour_data[Gcol_d_grey].attr, colour_data[Gcol_d_grey].cpair, NULL);
+ wattr_set(inventory_window, colour_data[Gcol_d_grey].attr, colour_data[Gcol_d_grey].cpair, nullptr);
mvwprintw(inventory_window, i + 1, 0, "%c) -----\n", 'a' + i);
}
else
if ((filter == POCLASS_NONE) ||
(permobjs[objects[u.inventory[i]].obj_id].poclass == filter))
{
- wattr_set(inventory_window, colour_data[Gcol_l_grey].attr, colour_data[Gcol_l_grey].cpair, NULL);
+ wattr_set(inventory_window, colour_data[Gcol_l_grey].attr, colour_data[Gcol_l_grey].cpair, nullptr);
}
else
{
- wattr_set(inventory_window, colour_data[Gcol_d_grey].attr, colour_data[Gcol_d_grey].cpair, NULL);
+ wattr_set(inventory_window, colour_data[Gcol_d_grey].attr, colour_data[Gcol_d_grey].cpair, nullptr);
}
sprintf(inv_line, "%c) ", 'a' + i);
sprint_obj_name(inv_line + 3, u.inventory[i], 45);
print_msg("You have nothing to %s.\n", action);
return SLOT_CANCEL;
}
- wattr_set(inventory_window, colour_data[Gcol_l_grey].attr, colour_data[Gcol_l_grey].cpair, NULL);
+ wattr_set(inventory_window, colour_data[Gcol_l_grey].attr, colour_data[Gcol_l_grey].cpair, nullptr);
snprintf(msg, 58, "What do you want to %s?\n", action);
set_inventory_message(msg, accept_blank);
update_inv(filter);
- wattr_set(inventory_window, colour_data[Gcol_l_grey].attr, colour_data[Gcol_l_grey].cpair, NULL);
+ wattr_set(inventory_window, colour_data[Gcol_l_grey].attr, colour_data[Gcol_l_grey].cpair, nullptr);
mvwprintw(inventory_window, 21, 17, "[ESC or SPACE to cancel]");
show_inv();
tryagain:
{
if (lvl.obj_at(u.pos) != NO_OBJ)
{
- print_msg("There is already an item here.\n");
+ print_msg(Msg_prio::Alert, "There is already an item here.\n");
}
else
{
if ((u.inventory[slot] == u.ring) ||
(u.inventory[slot] == u.armour))
{
- print_msg("You cannot drop something you are wearing.\n");
+ print_msg(Msg_prio::Alert, "You cannot drop something you are wearing.\n");
}
else
{
}
break;
case ';':
- print_msg("Monster examination not implemented yet.\n");
+ print_msg(Msg_prio::Bug, "TODO: implement monster examination.\n");
break;
case '#':
show_terrain = 1;
case 'R':
if (u.ring == NO_OBJ)
{
- print_msg("You have no ring to remove!\n");
+ print_msg("You are not wearing a ring.\n");
}
else if (ring_removal_unsafe(Noise_std) == You_pass)
{
break;
}
}
- print_msg("BUG: broke out of input loop!\n");
+ print_msg(Msg_prio::Bug, "BUG: broke out of input loop!\n");
act->cmd = QUIT;
return;
}
#ifndef DISPLAY_HH
#define DISPLAY_HH
+enum class Msg_prio
+{
+ Low,
+ Normal,
+ Alert,
+ Warn,
+ Bug
+};
+
extern void print_msg(char const *fmt, ...);
+extern void print_msg(Msg_prio prio, char const *fmt, ...);
extern int read_input(char *buffer, int length);
extern void print_help(void);
extern int launch_user_interface(void);
player_fov.exclude_centre = false;
player_fov.opaque_fun = dflt_blk;
player_fov.effect_fun = mark_explored;
- player_fov.pvt = NULL;
+ player_fov.pvt = nullptr;
compute_radiance(&player_fov);
resolve_radiance(&player_fov);
}
int i;
snprintf(filename, 31, "%s.dump", u.name);
fp = fopen(filename, "w");
- if (fp == NULL)
+ if (fp == nullptr)
{
debug_dump_write_failed();
return;
{
delete[] l->chunks[i][j];
}
- l->chunks[i][j] = NULL;
+ l->chunks[i][j] = nullptr;
}
delete[] l->chunks[i];
- l->chunks[i] = NULL;
+ l->chunks[i] = nullptr;
}
delete[] l->chunks;
- l->chunks = NULL;
+ l->chunks = nullptr;
}
}
}
} while (lvl.flags_at(c) & MAPFLAG_HARDWALL);
intrusion_size = inclusive_flat(27, 54);
- run_random_walk(c, intrusion_write, NULL, intrusion_size);
+ run_random_walk(c, intrusion_write, nullptr, intrusion_size);
}
c.y = DUN_HEIGHT / 2;
c.x = DUN_WIDTH / 2;
void notify_death(Death d, char const *what)
{
- print_msg("\n\nTHOU ART SLAIN!\n\n");
+ print_msg(Msg_prio::Warn, "\n\nTHOU ART SLAIN!\n\n");
switch (d)
{
case DEATH_KILLED:
print_msg("You are getting quite hungry.\n");
break;
case 2:
- print_msg("You are feeling hunger pangs, and will recover\nmore slowly from your injuries.\n");
+ print_msg(Msg_prio::Warn, "You are feeling hunger pangs, and will recover more slowly from your injuries.\n");
break;
}
}
void debug_move_oob(Coord c)
{
- print_msg("NOTICE: Attempted move out of bounds (dest %d, %d)\n", c.y, c.x);
+ print_msg(Msg_prio::Bug, "BUG: Attempted move out of bounds (dest %d, %d)\n", c.y, c.x);
}
void notify_swing_bow(void)
switch (objects[u.armour].obj_id)
{
case PO_SET_OF_RIBBONS:
- print_msg("You grit your teeth, trying to get used to the tingle of the ribbons' magic against your skin.\n");
+ if (u.sybaritic())
+ {
+ print_msg("The ribbons tingle delightfully against your skin.\n");
+ }
+ else
+ {
+ print_msg("You grit your teeth, trying to get used to the tingle of the ribbons' magic against your skin.\n");
+ }
break;
default:
- print_msg("BUG: object '%s' has POF_NOTIFY_EQUIP defined but no special message written.\n", pobj->name);
+ print_msg(Msg_prio::Bug, "BUG: object '%s' has POF_NOTIFY_EQUIP defined but no special message written.\n", pobj->name);
break;
}
}
}
break;
default:
- print_msg("BUG: object '%s' has POF_NOTIFY_EQUIP defined but no special message written.\n", pobj->name);
+ print_msg(Msg_prio::Bug, "BUG: object '%s' has POF_NOTIFY_EQUIP defined but no special message written.\n", pobj->name);
break;
}
}
void notify_lava_blocks_unequip(void)
{
- print_msg("That item is your only current source of fire resistance; setting it aside here would incinerate you.\n");
+ print_msg(Msg_prio::Warn, "That item is your only current source of fire resistance; setting it aside here would incinerate you.\n");
}
void notify_water_blocks_unequip(void)
{
- print_msg("Setting that item aside here would cause your death by drowning.\n");
+ print_msg(Msg_prio::Warn, "Setting that item aside here would cause your death by drowning.\n");
}
void notify_player_touch_effect(Damtyp dt)
print_msg("You feel vaguely queasy for a moment.\n");
break;
default:
- print_msg("BUG: You shouldn't be resisting damage type %d\n", (int) dt);
+ print_msg(Msg_prio::Bug, "BUG: You shouldn't be resisting damage type %d\n", (int) dt);
break;
}
}
print_msg("You activate your ring's power of teleportation.\n");
break;
case 2:
- print_msg("BUG: Some clown thinks teleport rings have a 'item isn't hungry' message.\n");
+ print_msg(Msg_prio::Bug, "BUG: Some clown thinks teleport rings have a 'item isn't hungry' message.\n");
break;
case 3:
- print_msg("BUG: Some clown thinks teleport rings have a 'item force-activates itself' message.\n");
+ print_msg(Msg_prio::Bug, "BUG: Some clown thinks teleport rings have a 'item force-activates itself' message.\n");
break;
default:
- print_msg("BUG: notify_telering_activation called with invalid subcode %d\n", specific);
+ print_msg(Msg_prio::Bug, "BUG: notify_telering_activation called with invalid subcode %d\n", specific);
break;
}
}
print_msg("You unleash the fiery powers of your staff!\n");
break;
case 2:
- print_msg("BUG: Some clown thinks staves of fire have a 'item isn't hungry' message.\n");
+ print_msg(Msg_prio::Bug, "BUG: Some clown thinks staves of fire have a 'item isn't hungry' message.\n");
break;
case 3:
- print_msg("BUG: Some clown thinks staves of fire have a 'item force-activates itself' message.\n");
+ print_msg(Msg_prio::Bug, "BUG: Some clown thinks staves of fire have a 'item force-activates itself' message.\n");
break;
default:
- print_msg("BUG: notify_firestaff_activation called with invalid subcode %d\n", specific);
+ print_msg(Msg_prio::Bug, "BUG: notify_firestaff_activation called with invalid subcode %d\n", specific);
break;
}
}
print_msg("You are too hungry to willingly let the lash draw on your strength.\n");
break;
case 1:
- if (u.sympathy[FePo_flesh] > 10)
- {
- print_msg("A delightful tingle runs up your arm as the lash draws on your strength to repair itself.\n");
- }
- else
- {
- print_msg("A pins-and-needles sensation runs up your arm as the lash draws on your strength to repair itself.\n");
- }
+ print_msg("%s runs up your arm as the lash draws on your strength to repair itself.\n", u.sybaritic() ? "A delightful tingle" : "A pins-and-needles sensation");
break;
case 2:
print_msg("The lash is undamaged; it hungers not for your strength.\n");
break;
case 3:
- print_msg("Pain explodes%s through your arm as the lash restores itself!\n", (u.sympathy[FePo_flesh] > 10) ? " delightfully" : "");
+ print_msg("Pain explodes%s through your arm as the lash restores itself!\n", u.sybaritic() ? " delightfully" : "");
break;
default:
- print_msg("BUG: notify_ribbon_activation called with invalid subcode %d\n", specific);
+ print_msg(Msg_prio::Bug, "BUG: notify_ribbon_activation called with invalid subcode %d\n", specific);
break;
}
}
print_msg("You are too hungry to willingly let the ribbons draw on your strength.\n");
break;
case 1:
- print_msg("You gasp%s as the ribbons draw on your strength to repair themselves.\n", (u.sympathy[FePo_flesh] > 10) ? " in delight" : "");
+ print_msg("You gasp%s as the ribbons draw on your strength to repair themselves.\n", u.sybaritic() ? " in delight" : "");
break;
case 2:
print_msg("The ribbons are undamaged; they hunger not for your strength.\n");
break;
+ case 3:
+ print_msg("Pain explodes%s through your body as the lash restores itself!\n", u.sybaritic() ? " delightfully" : "");
+ break;
default:
- print_msg("BUG: notify_ribbon_activation called with invalid subcode %d\n", specific);
+ print_msg(Msg_prio::Bug, "BUG: notify_ribbon_activation called with invalid subcode %d\n", specific);
break;
}
}
void notify_weapon_broke(int obj)
{
- print_msg("Your weapon breaks!\n");
+ print_msg(Msg_prio::Warn, "Your weapon breaks!\n");
}
void notify_armour_broke(int obj)
{
- print_msg("Your armour is ruined!\n");
+ print_msg(Msg_prio::Warn, "Your armour is ruined!\n");
}
void notify_drop_item(int obj)
void notify_drop_blocked(void)
{
- print_msg("There is already an item here.\n");
+ print_msg(Msg_prio::Alert, "There is no room to drop that here.\n");
}
void notify_get_item(int from, int slot)
{
- if (from)
+ if (from != NO_OBJ)
{
print_msg("You get ");
print_obj_name(from);
void notify_pack_full(void)
{
- print_msg("Your pack is full.\n");
+ print_msg(Msg_prio::Alert, "Your pack is full.\n");
}
/* Debugging notifications */
void debug_bad_monspell(int spell)
{
- print_msg("BUG: Attempt by monster to cast bogus/unimplemented spell %d!\n", spell);
+ print_msg(Msg_prio::Bug, "BUG: Attempt by monster to cast bogus/unimplemented spell %d!\n", spell);
}
void debug_agility_gain(int amount)
{
- print_msg("BUG: Attempt to cause negative agility gain %d\n", amount);
+ print_msg(Msg_prio::Bug, "BUG: Attempt to cause negative agility gain %d\n", amount);
}
void debug_body_gain(int amount)
{
- print_msg("BUG: Attempt to cause negative body gain %d\n", amount);
+ print_msg(Msg_prio::Bug, "BUG: Attempt to cause negative body gain %d\n", amount);
}
void debug_player_resists_phys(void)
{
- print_msg("BUG: Player resisting physical damage\n");
+ print_msg(Msg_prio::Bug, "BUG: Player resisting physical damage\n");
}
void debug_bad_damage_type(int dt)
{
- print_msg("BUG: bogus damage type %d.\n", dt);
+ print_msg(Msg_prio::Bug, "BUG: bogus damage type %d.\n", dt);
}
void debug_throw_non_flask(void)
{
- print_msg("BUG: Throwing non-flask.\n");
+ print_msg(Msg_prio::Bug, "BUG: Throwing non-flask.\n");
}
void debug_unimplemented(void)
{
- print_msg("NOTICE: Attempt to activate unimplemented feature\n");
+ print_msg(Msg_prio::Bug, "BUG: Attempt to activate unimplemented feature\n");
}
void debug_wear_while_wearing(void)
{
- print_msg("BUG: Got to wear_armour while wearing armour\n");
+ print_msg(Msg_prio::Bug, "BUG: Got to wear_armour while wearing armour\n");
}
void debug_wear_uncarried_armour(void)
{
- print_msg("NOTICE: Attempt to wear uncarried armour\n");
+ print_msg(Msg_prio::Bug, "BUG: Attempt to wear uncarried armour\n");
}
void debug_remove_no_ring(void)
{
- print_msg("BUG: calling remove_ring with no ring equipped.\n");
+ print_msg(Msg_prio::Bug, "BUG: calling remove_ring with no ring equipped.\n");
}
void debug_put_on_second_ring(void)
{
- print_msg("BUG: calling put_on_ring with ring already equipped.\n");
+ print_msg(Msg_prio::Bug, "BUG: calling put_on_ring with ring already equipped.\n");
}
void debug_put_on_uncarried_ring(void)
{
- print_msg("BUG: attempting to put on uncarried ring.\n");
+ print_msg(Msg_prio::Bug, "BUG: attempting to put on uncarried ring.\n");
}
void debug_read_non_scroll(void)
{
- print_msg("Impossible: reading non-scroll\n");
+ print_msg(Msg_prio::Bug, "BUG: reading non-scroll\n");
}
void debug_eat_non_food(int obj)
{
- print_msg("Error: attempt to eat non-food (%d)!\n", objects[obj].obj_id);
+ print_msg(Msg_prio::Bug, "BUG: attempt to eat non-food (%d)!\n", objects[obj].obj_id);
}
void debug_quaff_non_potion(void)
{
- print_msg("Impossible: quaffing non-potion\n");
+ print_msg(Msg_prio::Bug, "BUG: quaffing non-potion\n");
}
void debug_descend_non_stairs(void)
{
- print_msg("BUG: Received use-stairs command standing on non-stairs.\n");
+ print_msg(Msg_prio::Bug, "BUG: Received use-stairs command standing on non-stairs.\n");
}
void debug_wizmode_violation(void)
{
- print_msg("BUG: Received wizmode command when not in wizmode.\n");
+ print_msg(Msg_prio::Bug, "BUG: Received wizmode command when not in wizmode.\n");
}
void debug_take_off_no_armour(void)
{
- print_msg("BUG: Taking off armour when no armour equipped.\n");
+ print_msg(Msg_prio::Bug, "BUG: Taking off armour when no armour equipped.\n");
}
void debug_excavation_bailout(void)
{
- print_msg("BUG: Bailed out while excavating level!\n");
+ print_msg(Msg_prio::Bug, "BUG: Bailed out while excavating level!\n");
}
void debug_object_pool_exhausted(void)
{
- print_msg("NOTICE: Ran out of objects[].\n");
+ print_msg(Msg_prio::Bug, "BUG: Ran out of objects[].\n");
}
void debug_pobj_select_failed(void)
{
- print_msg("NOTICE: Failed to choose a permobj.\n");
+ print_msg(Msg_prio::Bug, "BUG: Failed to choose a permobj.\n");
}
void debug_misplaced_monster(void)
{
- print_msg("BUG: Misplaced monster detected.\n");
+ print_msg(Msg_prio::Bug, "BUG: Misplaced monster detected.\n");
}
void debug_create_mon_occupied(Coord c)
{
- print_msg("BUG: Attempt to create mon at occupied space y=%d x=%d\n", c.y, c.x);
+ print_msg(Msg_prio::Bug, "BUG: Attempt to create mon at occupied space y=%d x=%d\n", c.y, c.x);
}
void debug_monster_pool_exhauseted(void)
{
- print_msg("NOTICE: Ran out of monsters[].\n");
+ print_msg(Msg_prio::Bug, "BUG: Ran out of monsters[].\n");
}
void debug_pmon_select_failed(void)
{
- print_msg("BUG: Failed to choose a permon.\n");
+ print_msg(Msg_prio::Bug, "BUG: Failed to choose a permon.\n");
}
void debug_dump_write_failed(void)
{
- print_msg("NOTICE: Couldn't create dump file. Dump failed.\n");
+ print_msg(Msg_prio::Alert, "NOTICE: Couldn't create dump file. Dump failed.\n");
}
void debug_unwield_nothing(void)
{
- print_msg("BUG: got to player_unwield() with no weapon wielded - have a quiet word with your HCI module's author, please.\n");
+ print_msg(Msg_prio::Bug, "BUG: got to player_unwield() with no weapon wielded - have a quiet word with your HCI module's author, please.\n");
}
void debug_unimplemented_activation(int po)
{
- print_msg("BUG: permobj %d should be activatable but has no activation handler.\n");
+ print_msg(Msg_prio::Bug, "BUG: permobj %d should be activatable but has no activation handler.\n");
}
void debug_unimplemented_break_reaction(int po)
{
- print_msg("BUG: permobj %d should react to hitting durability 0 but has no break reaction handler.\n");
+ print_msg(Msg_prio::Bug, "BUG: permobj %d should react to hitting durability 0 but has no break reaction handler.\n");
}
void debug_mon_invalid_move(int mon, Coord c)
{
- print_msg("BUG: monster %d attempted move to impassable location y=%d x=%d\n", mon, c.y, c.x);
+ print_msg(Msg_prio::Bug, "BUG: monster %d attempted move to impassable location y=%d x=%d\n", mon, c.y, c.x);
}
void debug_unimplemented_radiance_order(int order)
{
- print_msg("FATAL: attempt to use unimplemented radiance evaluation order %d\n", order);
+ print_msg(Msg_prio::Bug, "FATAL: attempt to use unimplemented radiance evaluation order %d\n", order);
}
void debug_save_unlink_failed(void)
{
- print_msg("NOTICE: savefile unlink() failed - are you trying to savescum?\n");
+ print_msg(Msg_prio::Alert, "NOTICE: savefile unlink() failed - are you trying to savescum?\n");
}
/* notify-local-tty.cc */
* (The currently selected PRNG has an initialization function which
* only takes one input value.)
*/
- rng.init((uint32_t) (time(NULL) ^ getpid() ^ (getuid() << 16)));
+ rng.init((uint32_t) (time(nullptr) ^ getpid() ^ (getuid() << 16)));
saved_state_size = rng.state_size();
saved_state_buffer = malloc(saved_state_size);
}
Gcol_white, Gcol_l_red, Gcol_l_blue, Gcol_l_green,
Gcol_l_purple, Gcol_yellow, Gcol_l_cyan,
/* Fancy colours now! */
- Gcol_iron, Gcol_gold, Gcol_silver
+ Gcol_iron, Gcol_gold, Gcol_silver,
+ /* UI customizable colours */
+ Gcol_prio_low, Gcol_prio_normal, Gcol_prio_alert, Gcol_prio_warn, Gcol_prio_bug
};
#define LAST_CORE_COLOUR Gcol_l_cyan
-#define LAST_COLOUR Gcol_silver
+#define LAST_FIXED_COLOUR Gcol_silver
+#define LAST_COLOUR Gcol_prio_bug
+
/* XXX enum damtyp - types of damage. */
enum Damtyp {
DT_PHYS = 0, DT_COLD, DT_FIRE, DT_NECRO,