void spoil_spells_aux(FILE *fff, spell_info *table) { int i; variant vn, vd; var_init(&vn); var_init(&vd); fprintf(fff, "\n== Spells ==\n"); fprintf(fff, "|| || *Lvl* || *Cost* || *Fail* || *Description* ||\n"); for (i = 0; ; i++) { spell_info *base = &table[i]; if (!base->fn) break; base->fn(SPELL_SPOIL_NAME, &vn); if (var_is_null(&vn)) base->fn(SPELL_NAME, &vn); base->fn(SPELL_SPOIL_DESC, &vd); if (var_is_null(&vd)) base->fn(SPELL_DESC, &vd); fprintf(fff, "||%s||%d||%d||%d||`%s`||\n", var_get_string(&vn), base->level, base->cost, base->fail, var_get_string(&vd)); } var_clear(&vn); var_clear(&vd); }
void spoil_powers_aux(FILE *fff, power_info *table) { int i; variant vn, vd; var_init(&vn); var_init(&vd); fprintf(fff, "\n== Powers ==\n"); fprintf(fff, "|| || *Stat* || *Lvl* || *Cost* || *Fail* || *Description* ||\n"); for (i = 0; ; i++) { power_info *base = &table[i]; if (!base->spell.fn) break; base->spell.fn(SPELL_SPOIL_NAME, &vn); if (var_is_null(&vn)) base->spell.fn(SPELL_NAME, &vn); base->spell.fn(SPELL_SPOIL_DESC, &vd); if (var_is_null(&vd)) base->spell.fn(SPELL_DESC, &vd); fprintf(fff, "||%s||%s||%d||%d||%d||`%s`||\n", var_get_string(&vn), stat_abbrev_true[base->stat], base->spell.level, base->spell.cost, base->spell.fail, var_get_string(&vd) ); } var_clear(&vn); var_clear(&vd); }
void _gain_power(int level) { int group_idx = -1; if (level % 2 == 1) group_idx = level/2; if (group_idx >= 0 && group_idx < _MAX_TALENTS && _group_size(group_idx) > 0) { variant name; int idx = randint0(_group_size(group_idx)); talent_t *talent = &_talents[group_idx][idx]; if (!talent->spell.fn) { msg_print("BUG: Where is your talent?!"); return; } var_init(&name); (talent->spell.fn)(SPELL_NAME, &name); msg_format("You gain the power of '%s' %s.", var_get_string(&name), talent->gain_desc); p_ptr->magic_num1[group_idx] = idx + 1; var_clear(&name); } }
void dump_spells_aux(FILE *fff, spell_info *table, int ct) { int i; variant vn, vd, vc, vfm; if (!ct) return; var_init(&vn); var_init(&vd); var_init(&vc); var_init(&vfm); if (character_dump_hack) { fprintf(fff, "=================================== Spells ====================================\n\n"); fprintf(fff, "%-20.20s Lvl Cost Fail %-15.15s Cast Fail\n", "", "Desc"); } else { fprintf(fff, "\n[[[[r|%-20.20s Lvl Cost Fail %-15.15s Cast Fail\n", "Spells", "Desc"); } for (i = 0; i < ct; i++) { spell_info *spell = &table[i]; spell_stats_ptr stats = spell_stats(spell); spell->fn(SPELL_NAME, &vn); spell->fn(SPELL_INFO, &vd); spell->fn(SPELL_COST_EXTRA, &vc); spell->fn(SPELL_FAIL_MIN, &vfm); fprintf(fff, "%-20.20s %3d %4d %3d%% %-15.15s %4d %4d %3d%%\n", var_get_string(&vn), spell->level, calculate_cost(spell->cost + var_get_int(&vc)), MAX(spell->fail, var_get_int(&vfm)), var_get_string(&vd), stats->ct_cast, stats->ct_fail, spell_stats_fail(stats) ); } var_clear(&vn); var_clear(&vd); var_clear(&vc); var_clear(&vfm); }
static void _character_dump(doc_ptr doc) { int i; spell_info spells[MAX_SPELLS]; int ct = _get_spells_imp(spells, MAX_SPELLS, 0, _MAX_TALENTS - 1); for (i = 0; i < ct; i++) { spell_info* current = &spells[i]; current->cost += get_spell_cost_extra(current->fn); current->fail = MAX(current->fail, get_spell_fail_min(current->fn)); } if (ct > 0) { int i; variant name, info; var_init(&name); var_init(&info); doc_printf(doc, "<topic:WildTalent>================================= <color:keypress>W</color>ild Talents ================================\n\n"); doc_printf(doc, "<color:G>%-23.23s Lv Stat Cost Fail Info</color>\n", ""); for (i = 0; i < ct; ++i) { spell_info *spell = &spells[i]; (spell->fn)(SPELL_NAME, &name); (spell->fn)(SPELL_INFO, &info); doc_printf(doc, "%-23.23s %2d %4.4s %4d %3d%% %s\n", var_get_string(&name), spell->level, stat_abbrev_true[_which_stat(i)], spell->cost, spell->fail, var_get_string(&info)); } var_clear(&name); var_clear(&info); doc_newline(doc); } }
cptr get_spell_desc(ang_spell spell) { static char buf[1024]; variant v; var_init(&v); spell(SPELL_DESC, &v); sprintf(buf, "%s", var_get_string(&v)); var_clear(&v); return buf; }
cptr get_spell_name(ang_spell spell) { static char buf[255]; variant v; var_init(&v); spell(SPELL_NAME, &v); sprintf(buf, "%s", var_get_string(&v)); var_clear(&v); return buf; }
void mut_name(int i, char* buf) { variant v; var_init(&v); if (i >= 0 && i < MAX_MUTATIONS) (_mutations[i].spell.fn)(SPELL_NAME, &v); else var_set_string(&v, "None"); sprintf(buf, "%s", var_get_string(&v)); var_clear(&v); }
static void _list(menu_ptr menu, char *keys) { char temp[255]; int i; int y = 1; int x = 13; Term_erase(x, y, 255); if (menu->heading) put_str(format(" %s", menu->heading), y++, x); for (i = 0; i < menu->count; i++) { byte attr = TERM_WHITE; variant key, text, color; var_init(&key); var_init(&text); var_init(&color); menu->fn(MENU_KEY, i, menu->cookie, &key); if (var_is_null(&key)) keys[i] = I2A(i); else keys[i] = (char)var_get_int(&key); if (menu->count <= 26) keys[i] = tolower(keys[i]); menu->fn(MENU_TEXT, i, menu->cookie, &text); if (var_is_null(&text)) var_set_string(&text, ""); menu->fn(MENU_COLOR, i, menu->cookie, &color); if (!var_is_null(&color)) attr = var_get_int(&color); if (attr == TERM_DARK) keys[i] = '\0'; sprintf(temp, " %c) %s", keys[i], var_get_string(&text)); c_prt(attr, temp, y + i, x); var_clear(&key); var_clear(&text); var_clear(&color); } Term_erase(x, y + menu->count, 255); }
static bool _describe_spell(spell_info *spell, int col_height) { bool result = TRUE; variant info; var_init(&info); (spell->fn)(SPELL_ON_BROWSE, &info); if (!var_get_bool(&info)) { char tmp[62*5]; int i, line; rect_t display = ui_menu_rect(); /* 2 lines below list of spells, 5 lines for description */ for (i = 0; i < 7; i++) Term_erase(display.x, display.y + col_height + i + 2, display.cx); /* Get the description, and line break it (max 5 lines) */ (spell->fn)(SPELL_DESC, &info); roff_to_buf(var_get_string(&info), 62, tmp, sizeof(tmp)); line = display.y + col_height + 3; for(i = 0; tmp[i]; i += 1+strlen(&tmp[i])) { put_str(&tmp[i], line, display.x + 2); line++; } (spell->fn)(SPELL_INFO, &info); put_str(format("%^s", var_get_string(&info)), line, display.x + 2); result = FALSE; } var_clear(&info); return result; }
void mut_dump_file(FILE* file) { int i; variant desc; var_init(&desc); for (i = 0; i < MAX_MUTATIONS; ++i) { if (mut_present(i)) { (_mutations[i].spell.fn)(SPELL_MUT_DESC, &desc); fprintf(file, "%s\n", var_get_string(&desc)); } } var_clear(&desc); }
static void _describe(menu_ptr menu, int which) { variant v; var_init(&v); menu->fn(MENU_HELP, which, menu->cookie, &v); if (!var_is_null(&v)) { char tmp[255*10]; int i, line; for (i = 0; i < 2+10; i++) Term_erase(13, menu->count + i + 1 + (menu->heading ? 1 : 0), 255); roff_to_buf(var_get_string(&v), 80-15, tmp, sizeof(tmp)); for(i = 0, line = menu->count + 2 + (menu->heading ? 1 : 0); tmp[i]; i += 1+strlen(&tmp[i])) { prt(&tmp[i], line, 15); line++; } } var_clear(&v); }
static void _list_spells(spell_info* spells, int ct, int max_cost) { char temp[140]; int i; rect_t display = ui_menu_rect(); int col_height = _col_height(ct); int col_width; variant name, info, color; var_init(&name); var_init(&info); var_init(&color); Term_erase(display.x, display.y, display.cx); if (col_height == ct) { put_str("Lvl Cost Fail Desc", display.y, display.x + 29); } else { col_width = 42; put_str("Lvl Cost Fail", display.y, display.x + 29); put_str("Lvl Cost Fail", display.y, display.x + col_width + 29); } for (i = 0; i < ct; i++) { char letter = '\0'; byte attr = TERM_WHITE; spell_info* spell = &spells[i]; var_set_int(&color, TERM_WHITE); (spell->fn)(SPELL_NAME, &name); (spell->fn)(SPELL_INFO, &info); (spell->fn)(SPELL_COLOR, &color); attr = var_get_int(&color); if (i < 26) letter = I2A(i); else if (i < 52) letter = 'A' + i - 26; else letter = '0' + i - 52; sprintf(temp, " %c) ", letter); strcat(temp, format("%-23.23s %3d %4d %3d%%", var_get_string(&name), spell->level, spell->cost, spell->fail)); if (col_height == ct) strcat(temp, format(" %s", var_get_string(&info))); if (spell->fail == 100) attr = TERM_L_DARK; if (spell->cost > max_cost) attr = TERM_L_DARK; if (spell->level > p_ptr->lev) attr = TERM_L_DARK; if (i < col_height) { Term_erase(display.x, display.y + i + 1, display.cx); c_put_str(attr, temp, display.y + i + 1, display.x); } else { c_put_str(attr, temp, display.y + (i - col_height) + 1, display.x + col_width); } } Term_erase(display.x, display.y + col_height + 1, display.cx); var_clear(&name); var_clear(&info); var_clear(&color); }