Example #1
0
static const char *show_speed(void)
{
	static char buffer[10];
	int tmp = player->state.speed;
	if (player->timed[TMD_FAST]) tmp -= 10;
	if (player->timed[TMD_SLOW]) tmp += 10;
	if (tmp == 110) return "Normal";
	strnfmt(buffer, sizeof(buffer), "%d", tmp - 110);
	return buffer;
}
Example #2
0
/**
 * Display an entry on the item menu
 */
void get_curse_display(struct menu *menu, int oid, bool cursor, int row,
					  int col, int width)
{
	struct curse **choice = menu_priv(menu);
	int attr = cursor ? COLOUR_L_BLUE : COLOUR_WHITE;
	char buf[80];
	int power = choice[oid]->power;
	strnfmt(buf, sizeof(buf), "%s (power %d)", choice[oid]->name, power);
	c_put_str(attr, buf, row + oid, col);
}
Example #3
0
/*
 * Display additional information about each race during the selection.
 */
static void race_aux_hook(birth_menu r_str)
{
	int race, i, adj;
	char s[50];
	byte attr;

	/* Extract the proper race index from the string. */
	for (race = 0; race < z_info->p_max; race++)
	{
		if (!strcmp(r_str.name, p_name + p_info[race].name)) break;
	}

	if (race == z_info->p_max) return;

	/* Display the stats */
	for (i = 0; i < A_MAX; i++)
	{
		/*dump the stats*/
		strnfmt(s, sizeof(s), "%s", stat_names[i]);
		Term_putstr(RACE_AUX_COL, TABLE_ROW + i, -1, TERM_WHITE, s);
		
		adj = p_info[race].r_adj[i];
		strnfmt(s, sizeof(s), "%+d", adj);
		
		if (adj < 0)		attr = TERM_RED;
		else if (adj == 0)	attr = TERM_L_DARK;
		else if (adj == 1)	attr = TERM_GREEN;
		else if (adj == 2)	attr = TERM_L_GREEN;
		else				attr = TERM_L_BLUE;
		
		Term_putstr(RACE_AUX_COL + 4, TABLE_ROW + i, -1, attr, s);
	}

	/* Display the race flags */
	
	Term_putstr(RACE_AUX_COL, TABLE_ROW + A_MAX + 1, -1, TERM_WHITE, "                    ");
	Term_putstr(RACE_AUX_COL, TABLE_ROW + A_MAX + 2, -1, TERM_WHITE, "                    ");
	Term_putstr(RACE_AUX_COL, TABLE_ROW + A_MAX + 3, -1, TERM_WHITE, "                    ");
	Term_putstr(RACE_AUX_COL, TABLE_ROW + A_MAX + 4, -1, TERM_WHITE, "                    ");
	
	print_rh_flags(race, 0, RACE_AUX_COL, TABLE_ROW + A_MAX + 1);
	
}
Example #4
0
/*
 * Prints players max/cur spell points
 */
static void prt_sp(int row, int col)
{
    char cur_sp[32], max_sp[32];
    byte color = player_sp_attr();

    /* Do not show mana unless we have some */
    if (!p_ptr->msp)
	return;

    put_str("SP ", row, col);

    strnfmt(max_sp, sizeof(max_sp), "%4d", p_ptr->msp);
    strnfmt(cur_sp, sizeof(cur_sp), "%4d", p_ptr->csp);

    /* Show mana */
    c_put_str(color, cur_sp, row, col + 3);
    c_put_str(TERM_WHITE, "/", row, col + 7);
    c_put_str(TERM_L_GREEN, max_sp, row, col + 8);
}
Example #5
0
static const char *show_depth(void)
{
	static char buffer[13];

	if (player->max_depth == 0) return "Town";

	strnfmt(buffer, sizeof(buffer), "%d' (L%d)",
	        player->max_depth * 50, player->max_depth);
	return buffer;
}
Example #6
0
/*
 * Converts stat num into a six-char (right justified) string
 */
void cnv_stat(int val, char *out_val, size_t out_len)
{
    /* Above 18 */
    if (val > 18) {
	int bonus = (val - 18);

	if (bonus >= 220)
	    strnfmt(out_val, out_len, "18/***");
	else if (bonus >= 100)
	    strnfmt(out_val, out_len, "18/%03d", bonus);
	else
	    strnfmt(out_val, out_len, " 18/%02d", bonus);
    }

    /* From 3 to 18 */
    else {
	strnfmt(out_val, out_len, "    %2d", val);
    }
}
Example #7
0
/**
 * Describe an item's origin
 */
static bool describe_origin(textblock *tb, const struct object *obj, bool terse)
{
	char loot_spot[80];
	char name[80];
	int origin;
	const char *droppee;
	const char *article;

	/* Only give this info in chardumps if wieldable */
	if (terse && !obj_can_wear(obj))
		return false;

	/* Set the origin - care needed for mimics */
	if ((obj->origin == ORIGIN_DROP_MIMIC) && (obj->mimicking_m_idx != 0))
		origin = ORIGIN_FLOOR;
	else
		origin = obj->origin;

	/* Name the place of origin */
	if (obj->origin_depth)
		strnfmt(loot_spot, sizeof(loot_spot), "at %d feet (level %d)",
		        obj->origin_depth * 50, obj->origin_depth);
	else
		my_strcpy(loot_spot, "in town", sizeof(loot_spot));

	/* Name the monster of origin */
	if (r_info[obj->origin_xtra].ridx)
		droppee = r_info[obj->origin_xtra].name;
	else
		droppee = "monster lost to history";
	article = is_a_vowel(droppee[0]) ? "an " : "a ";
	if (rf_has(r_info[obj->origin_xtra].flags, RF_UNIQUE))
		my_strcpy(name, droppee, sizeof(name));
	else {
		my_strcpy(name, article, sizeof(name));
		my_strcat(name, droppee, sizeof(name));
	}

	/* Print an appropriate description */
	switch (origins[origin].args)
	{
		case -1: return false;
		case 0: textblock_append(tb, origins[origin].desc); break;
		case 1: textblock_append(tb, origins[origin].desc, loot_spot);
				break;
		case 2:
			textblock_append(tb, origins[origin].desc, name, loot_spot);
			break;
	}

	textblock_append(tb, "\n\n");

	return true;
}
Example #8
0
static void project_player_handler_FORCE(project_player_handler_context_t *context)
{
	char grids_away[5];

	/* Stun */
	(void)player_inc_timed(player, TMD_STUN, randint1(20), true, true);

	/* Thrust player away. */
	strnfmt(grids_away, sizeof(grids_away), "%d", 3 + context->dam / 20);
	effect_simple(EF_THRUST_AWAY, context->origin, grids_away, context->y, context->x, 0, NULL);
}
Example #9
0
/**
 * Display an entry on the item menu
 */
void get_curse_display(struct menu *menu, int oid, bool cursor, int row,
					  int col, int width)
{
	struct curse_menu_data *choice = menu_priv(menu);
	int attr = cursor ? COLOUR_L_BLUE : COLOUR_WHITE;
	char buf[80];
	int power = choice[oid].power;
	char *name = curses[choice[oid].index].name;

	strnfmt(buf, sizeof(buf), "  %s (curse strength %d)", name, power);
	c_put_str(attr, buf, row, col);
}
Example #10
0
static const char *show_adv_exp(void)
{
	if (player->lev < PY_MAX_LEVEL) {
		static char buffer[30];
		s32b advance = (player_exp[player->lev - 1] * player->expfact / 100L);
		strnfmt(buffer, sizeof(buffer), "%d", advance);
		return buffer;
	}
	else {
		return "********";
	}
}
Example #11
0
/**
 * Show quiver missiles in full inventory
 */
static void item_menu_browser(int oid, void *data, const region *area)
{
	char tmp_val[80];
	int count, j, i = num_obj;
	int quiver_slots = (player->upkeep->quiver_cnt + z_info->stack_size - 1)
		/ z_info->stack_size;

	/* Set up to output below the menu */
	text_out_hook = text_out_to_screen;
	text_out_wrap = 0;
	text_out_indent = area->col - 1;
	text_out_pad = 1;
	prt("", area->row + area->page_rows, MAX(0, area->col - 1));
	Term_gotoxy(area->col, area->row + area->page_rows);

	/* Quiver may take multiple lines */
	for (j = 0; j < quiver_slots; j++, i++) {
		const char *fmt = "in Quiver: %d missile%s\n";
		char letter = I2A(i);

		/* Number of missiles in this "slot" */
		if (j == quiver_slots - 1)
			count = player->upkeep->quiver_cnt - (z_info->stack_size *
													  (quiver_slots - 1));
		else
			count = z_info->stack_size;

		/* Print the (disabled) label */
		strnfmt(tmp_val, sizeof(tmp_val), "%c) ", letter);
		text_out_c(COLOUR_SLATE, tmp_val, area->row + i, area->col);

		/* Print the count */
		strnfmt(tmp_val, sizeof(tmp_val), fmt, count,
				count == 1 ? "" : "s");
		text_out_c(COLOUR_L_UMBER, tmp_val, area->row + i, area->col + 3);
	}

	text_out_pad = 0;
	text_out_indent = 0;
}
Example #12
0
/**
 * Request a "quantity" from the user
 */
int textui_get_quantity(const char *prompt, int max)
{
    int amt = 1;

    /* Prompt if needed */
    if (max != 1) {
        char tmp[80];
        char buf[80];

        /* Build a prompt if needed */
        if (!prompt) {
            /* Build a prompt */
            strnfmt(tmp, sizeof(tmp), "Quantity (0-%d, *=all): ", max);

            /* Use that prompt */
            prompt = tmp;
        }

        /* Build the default */
        strnfmt(buf, sizeof(buf), "%d", amt);

        /* Ask for a quantity */
        if (!get_string(prompt, buf, 7)) return (0);

        /* Extract a number */
        amt = atoi(buf);

        /* A star or letter means "all" */
        if ((buf[0] == '*') || isalpha((unsigned char)buf[0])) amt = max;
    }

    /* Enforce the maximum */
    if (amt > max) amt = max;

    /* Enforce the minimum */
    if (amt < 0) amt = 0;

    /* Return the result */
    return (amt);
}
Example #13
0
/*
 * Centers a string within a 31 character string
 */
static void center_string(char *buf, size_t len, cptr str)
{
	int i, j;

	/* Total length */
	i = strlen(str);

	/* Necessary border */
	j = 15 - i / 2;

	/* Mega-Hack */
	strnfmt(buf, len, "%*s%s%*s", j, "", str, 31 - i - j, "");
}
Example #14
0
/*
 * Search the monster, item, and feature types to find the
 * meaning for the given symbol.
 *
 * Note: We currently search items first, then features, then
 * monsters, and we return the first hit for a symbol.
 * This is to prevent mimics and lurkers from matching
 * a symbol instead of the item or feature it is mimicking.
 *
 * Todo: concatenate all matches into buf. This will be much
 * easier once we can loop through item tvals instead of items
 * (see note below.)
 *
 * Todo: Should this take the user's pref files into account?
 */
static void lookup_symbol(struct keypress sym, char *buf, size_t max)
{
	int i;
	monster_base *race;

	/* Look through items */
	/* Note: We currently look through all items, and grab the tval when we find a match.
	It would make more sense to loop through tvals, but then we need to associate
	a display character with each tval. */
	for (i = 1; i < z_info->k_max; i++) {
		if (k_info[i].d_char == (char)sym.code) {
			strnfmt(buf, max, "%c - %s.", (char)sym.code, tval_find_name(k_info[i].tval));
			return;
		}
	}

	/* Look through features */
	/* Note: We need a better way of doing this. Currently '#' matches secret door,
	and '^' matches trap door (instead of the more generic "trap"). */
	for (i = 1; i < z_info->f_max; i++) {
		if (f_info[i].d_char == (char)sym.code) {
			strnfmt(buf, max, "%c - %s.", (char)sym.code, f_info[i].name);
			return;
		}
	}
	
	/* Look through monster templates */
	for (race = rb_info; race; race = race->next){
		if ((char)sym.code == race->d_char) {
			strnfmt(buf, max, "%c - %s.", (char)sym.code, race->text);
			return;
		}
	}

	/* No matches */
	strnfmt(buf, max, "%c - %s.", (char)sym.code, "Unknown Symbol");
	
	return;
}
Example #15
0
static void module_reset_dir_aux(cptr *dir, cptr new_path)
{
	char buf[1024];

	/* Build the new path */
	strnfmt(buf, sizeof (buf), "%s%s%s", dir, PATH_SEP, new_path);

	string_free(*dir);
	*dir = string_make(buf);

	/* Make it if needed */
	if (!private_check_user_directory(*dir))
		quit(format("Unable to create module dir %s\n", *dir));
}
Example #16
0
/*
 * Find a default user name from the system.
 */
static void user_name(char *buf, size_t len, int id)
{
	struct passwd *pw = getpwuid(id);

	/* Default to PLAYER */
	if (!pw)
	{
		my_strcpy(buf, "PLAYER", len);
		return;
	}

	/* Capitalise and copy */
	strnfmt(buf, len, "%^s", pw->pw_name);
}
Example #17
0
/*
 * Restrict scrolling to within these rows
 */
static void do_cs(int y1, int y2)
{

#ifdef USE_TERMCAP
	if (cs) tp(tgoto(cs, y2, y1));
#endif

#ifdef USE_HARDCODE
	char temp[64];
	strnfmt(temp, sizeof(temp), cs, y1, y2);
	tp (temp);
#endif

}
Example #18
0
/*
 * Prints level
 */
static void prt_level(int row, int col)
{
    char tmp[32];

    strnfmt(tmp, sizeof(tmp), "%6d", p_ptr->lev);

    if (p_ptr->lev >= p_ptr->max_lev) {
	put_str("LEVEL ", row, col);
	c_put_str(TERM_L_GREEN, tmp, row, col + 6);
    } else {
	put_str("Level ", row, col);
	c_put_str(TERM_YELLOW, tmp, row, col + 6);
    }
}
Example #19
0
/*
 * Go to the given screen location directly
 */
static void do_cm(int x, int y)
{

#ifdef USE_TERMCAP
	if (cm) tp(tgoto(cm, x, y));
#endif

#ifdef USE_HARDCODE
	char temp[64];
	strnfmt(temp, sizeof(temp), cm, y+1, x+1);
	tp(temp);
#endif

}
Example #20
0
/**
 * Save the game
 */
void save_game(void)
{
	char name[80];
	char path[1024];

	/* Disturb the player */
	disturb(player, 1);

	/* Clear messages */
	event_signal(EVENT_MESSAGE_FLUSH);

	/* Handle stuff */
	handle_stuff(player);

	/* Message */
	prt("Saving game...", 0, 0);

	/* Refresh */
	Term_fresh();

	/* The player is not dead */
	my_strcpy(player->died_from, "(saved)", sizeof(player->died_from));

	/* Forbid suspend */
	signals_ignore_tstp();

	/* Save the player */
	if (savefile_save(savefile))
		prt("Saving game... done.", 0, 0);
	else
		prt("Saving game... failed!", 0, 0);

	/* Refresh */
	Term_fresh();

	/* Save the window prefs */
	strnfmt(name, sizeof(name), "%s.prf", player_safe_name(player, TRUE));
	path_build(path, sizeof(path), ANGBAND_DIR_USER, name);
	if (!prefs_save(path, option_dump, "Dump window settings"))
		prt("Failed to save subwindow preferences", 0, 0);

	/* Allow suspend again */
	signals_handle_tstp();

	/* Refresh */
	Term_fresh();

	/* Note that the player is not dead */
	my_strcpy(player->died_from, "(alive and well)", sizeof(player->died_from));
}
Example #21
0
/*
 * Go to any level
 */
static void do_cmd_wiz_jump(void)
{
	/* Ask for level */
	if (p_ptr->command_arg <= 0)
	{
		char ppp[80];

		char tmp_val[160];

		/* Prompt */
		strnfmt(ppp, sizeof(ppp), "Jump to level (0-%d): ", MAX_DEPTH-1);

		/* Default */
		strnfmt(tmp_val, sizeof(tmp_val), "%d", p_ptr->depth);

		/* Ask for a level */
		if (!get_string(ppp, tmp_val, 11)) return;

		/* Extract request */
		p_ptr->command_arg = atoi(tmp_val);
	}

	/* Paranoia */
	if (p_ptr->command_arg < 0) p_ptr->command_arg = 0;

	/* Paranoia */
	if (p_ptr->command_arg > MAX_DEPTH - 1) p_ptr->command_arg = MAX_DEPTH - 1;

	/* Accept request */
	msg("You jump to dungeon level %d.", p_ptr->command_arg);

	/* New depth */
	p_ptr->depth = p_ptr->command_arg;

	/* Leaving */
	p_ptr->leaving = TRUE;
}
Example #22
0
/*
 * Special key actions for object inscription.
 */
static void o_xtra_act(struct keypress ch, int oid)
{
	object_kind *k_ptr = &k_info[oid];
	s16b idx = get_autoinscription_index(oid);

	/* Forget it if we've never seen the thing */
	if (!k_ptr->everseen)
		return;

	/* Uninscribe */
	if (ch.code == '}') {
		if (idx != -1)
			remove_autoinscription(oid);
		return;
	}

	/* Inscribe */
	else if (ch.code == '{') {
		char note_text[80] = "";

		/* Avoid the prompt getting in the way */
		screen_save();

		/* Prompt */
		prt("Inscribe with: ", 0, 0);

		/* Default note */
		if (idx != -1)
			strnfmt(note_text, sizeof(note_text), "%s",
					get_autoinscription(oid));

		/* Get an inscription */
		if (askfor_aux(note_text, sizeof(note_text), NULL)) {
			/* Remove old inscription if existent */
			if (idx != -1)
				remove_autoinscription(oid);

			/* Add the autoinscription */
			add_autoinscription(oid, note_text);

			/* Notice stuff (later) */
			p_ptr->notice |= (PN_AUTOINSCRIBE);
			p_ptr->redraw |= (PR_INVEN | PR_EQUIP);
		}

		/* Reload the screen */
		screen_load();
	}
}
Example #23
0
static const char *show_missile_weapon(const object_type *o_ptr)
{
	static char buffer[12];
	int hit = p_ptr->state.dis_to_h;
	int dam = 0;

	if (object_attack_plusses_are_visible(o_ptr))
	{
		hit += o_ptr->to_h;
		dam += o_ptr->to_d;
	}

	strnfmt(buffer, sizeof(buffer), "(%+d,%+d)", hit, dam);
	return buffer;
}
Example #24
0
static void print_history_header(void)
{
    char buf[80];

    /* Print the header (character name and title) */
    strnfmt(buf, sizeof(buf), "%s the %s %s", op_ptr->full_name,
	    rp_ptr->name, cp_ptr->name);

    c_put_str(TERM_WHITE, buf, 0, 0);
    c_put_str(TERM_WHITE, "============================================================", 1, 0);
    c_put_str(TERM_WHITE, "CHAR.", 2, 34);
    c_put_str(TERM_WHITE, "|   TURN  |      LOCATION        |LEVEL| EVENT",
	      3, 0);
    c_put_str(TERM_WHITE, "============================================================", 4, 0);
}
Example #25
0
File: cmd3.c Project: fph/mortsil
/*
 * Helper function which actually removes the inscription
 */
void uninscribe(object_type *o_ptr)
{
	/* Remove the inscription */
	o_ptr->obj_note = 0;
	
	/*The object kind has an autoinscription*/
	// Sil-y: removed restriction to known items (through 'object_aware')
	if (!(k_info[o_ptr->k_idx].flags3 & (TR3_INSTA_ART)) &&
	    (get_autoinscription_index(o_ptr->k_idx) != -1))
	{
		char tmp_val[160];
		char o_name2[80];
		
		/*make a fake object so we can give a proper message*/
		object_type *i_ptr;
		object_type object_type_body;
		
		/* Get local object */
		i_ptr = &object_type_body;
		
		/* Wipe the object */
		object_wipe(i_ptr);
		
		/* Create the object */
		object_prep(i_ptr, o_ptr->k_idx);
		
		/*make it plural*/
		i_ptr->number = 2;
		
		/*now describe with correct amount*/
		object_desc(o_name2, sizeof(o_name2), i_ptr, FALSE, 0);
		
		/* Prompt */
		strnfmt(tmp_val, sizeof(tmp_val), "Remove automatic inscription for %s? ", o_name2);
		
		/* Auto-Inscribe if they want that */
		if (get_check(tmp_val)) obliterate_autoinscription(o_ptr->k_idx);
	}
	
	/* Message */
	msg_print("Inscription removed.");
	
	/* Combine the pack */
	p_ptr->notice |= (PN_COMBINE);
	
	/* Window stuff */
	p_ptr->window |= (PW_INVEN | PW_EQUIP);
}
Example #26
0
/*
 * Abort the Borg, noting the reason
 */
static void borg_oops_aux(cptr what)
{
	char buf[1024];

	/* Stop processing */
	borg_active = FALSE;

	/* Format the string */
	(void)strnfmt(buf, 1024, "# Aborting (%s).", what);

	/* Give a warning */
	borg_note(buf);

	/* Forget borg keys */
	borg_flush();
}
Example #27
0
/*
 * Write a description of the character
 */
void wr_description(void)
{
	char buf[1024];

	if (p_ptr->is_dead)
		strnfmt(buf, sizeof buf, "%s, dead (%s)", op_ptr->full_name, p_ptr->died_from);
	else
		strnfmt(buf, sizeof buf, "%s, L%d %s %s, at DL%d",
				op_ptr->full_name,
				p_ptr->lev,
				p_ptr->race->name,
				p_ptr->class->name,
				p_ptr->depth);

	wr_string(buf);
}
Example #28
0
/*
 * Verify something with the user
 *
 * The "prompt" should take the form "Query? "
 *
 * Note that "[y/n]" is appended to the prompt.
 */
bool get_check(const char *prompt)
{
	//struct keypress ke;
	ui_event ke;

	char buf[80];

	bool repeat = FALSE;
  
	/* Paranoia XXX XXX XXX */
	message_flush();

	/* Hack -- Build a "useful" prompt */
	strnfmt(buf, 78, "%.70s[y/n] ", prompt);

	/* Hack - kill the repeat button */
	if (button_kill('n')) repeat = TRUE;
	
	/* Make some buttons */
	button_add("[y]", 'y');
	button_add("[n]", 'n');
	redraw_stuff(p_ptr);
  
	/* Prompt for it */
	prt(buf, 0, 0);
	ke = inkey_m();

	/* Kill the buttons */
	button_kill('y');
	button_kill('n');

	/* Hack - restore the repeat button */
	if (repeat) button_add("[Rpt]", 'n');
	redraw_stuff(p_ptr);
  
	/* Erase the prompt */
	prt("", 0, 0);

	/* Normal negation */
	if (ke.type == EVT_MOUSE) {
		if ((ke.mouse.button != 1) && (ke.mouse.y != 0)) return (FALSE);
	} else
	if ((ke.key.code != 'Y') && (ke.key.code != 'y')) return (FALSE);

	/* Success */
	return (TRUE);
}
Example #29
0
/*
 * Hack -- prevent certain choices depending on the inscriptions on the item.
 *
 * The item can be negative to mean "item on floor".
 */
bool get_item_allow(int item, unsigned char ch, cmd_code cmd, bool is_harmless)
{
	object_type *o_ptr;
	char verify_inscrip[] = "!*";

	unsigned n;

	/* Inventory or floor */
	if (item >= 0)
		o_ptr = &p_ptr->inventory[item];
	else
		o_ptr = object_byid(0 - item);

	/* Hack - Only shift the command key if it actually needs to be shifted. */
	if (ch < 0x20)
		ch = UN_KTRL(ch);

	/* The inscription to look for */
	verify_inscrip[1] = ch;

	/* Look for the inscription */
	n = check_for_inscrip(o_ptr, verify_inscrip);

	/* Also look for for the inscription '!*' */
	if (!is_harmless)
		n += check_for_inscrip(o_ptr, "!*");

	/* Choose string for the prompt */
	if (n) {
		char prompt[1024];

		const char *verb = cmd_get_verb(cmd);
		if (!verb)
			verb = "do that with";

		strnfmt(prompt, sizeof(prompt), "Really %s", verb);

		/* Promt for confirmation n times */
		while (n--) {
			if (!verify_item(prompt, item))
				return (FALSE);
		}
	}

	/* Allow it */
	return (TRUE);
}
Example #30
0
/*
 * Prints depth in stat area
 */
static void prt_depth(int row, int col)
{
	char depths[32];

	if (!p_ptr->depth)
	{
		my_strcpy(depths, "Town", sizeof(depths));
	}
	else
	{
		strnfmt(depths, sizeof(depths), "%d' (L%d)",
		        p_ptr->depth * 50, p_ptr->depth);
	}

	/* Right-Adjust the "depth", and clear old values */
	put_str(format("%-13s", depths), row, col);
}