/* * 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(); } }
static enum parser_error parse_prefs_b(struct parser *p) { int idx; struct prefs_data *d = parser_priv(p); assert(d != NULL); if (d->bypass) return PARSE_ERROR_NONE; idx = parser_getuint(p, "idx"); if (idx > z_info->k_max) return PARSE_ERROR_OUT_OF_BOUNDS; add_autoinscription(idx, parser_getstr(p, "text")); return PARSE_ERROR_NONE; }
/* * Inscribe an object with a comment */ void do_cmd_inscribe(void) { int item; object_type *o_ptr; char o_name[80]; char tmp[80]; cptr q, s; /* Get an item */ q = "Inscribe which item? "; s = "You have nothing to inscribe."; if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR))) return; /* Get the item (in the pack) */ if (item >= 0) { o_ptr = &inventory[item]; } /* Get the item (on the floor) */ else { o_ptr = &o_list[0 - item]; } /* Describe the activity */ object_desc(o_name, sizeof(o_name), o_ptr, TRUE, 3); /* Message */ msg_format("Inscribing %s.", o_name); message_flush(); /* Start with nothing */ my_strcpy(tmp, "", sizeof(tmp)); /* Use old inscription */ if (o_ptr->obj_note) { /* Start with the old inscription */ strnfmt(tmp, sizeof(tmp), "%s", quark_str(o_ptr->obj_note)); } /* Get a new inscription (possibly empty) */ if (term_get_string("Inscription: ", tmp, sizeof(tmp))) { 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; // if given an empty inscription, then uninscribe instead if (strlen(tmp) == 0) { uninscribe(o_ptr); return; } /* Save the inscription */ o_ptr->obj_note = quark_add(tmp); /* Add an autoinscription? */ // Sil-y: removed restriction to known items (through 'object_aware') if (!(k_info[o_ptr->k_idx].flags3 & (TR3_INSTA_ART))) { /* 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), "Automatically inscribe all %s with '%s'? ", o_name2, tmp); /* Auto-Inscribe if they want that */ if (get_check(tmp_val)) add_autoinscription(o_ptr->k_idx, tmp); } /* Combine the pack */ p_ptr->notice |= (PN_COMBINE); /* Window stuff */ p_ptr->window |= (PW_INVEN | PW_EQUIP); } }
/* * Special key actions for object inscription. */ static void o_xtra_act(struct keypress ch, int oid) { object_kind *k = objkind_byid(oid); /* Toggle squelch */ if (squelch_tval(k->tval) && (ch.code == 's' || ch.code == 'S')) { if (k->aware) { if (kind_is_squelched_aware(k)) kind_squelch_clear(k); else kind_squelch_when_aware(k); } else { if (kind_is_squelched_unaware(k)) kind_squelch_clear(k); else kind_squelch_when_unaware(k); } return; } /* Forget it if we've never seen the thing */ if (k->flavor && !k->aware) return; /* Uninscribe */ if (ch.code == '}') { if (k->note) remove_autoinscription(oid); } else if (ch.code == '{') { /* Inscribe */ char note_text[80] = ""; /* Avoid the prompt getting in the way */ screen_save(); /* Prompt */ prt("Inscribe with: ", 0, 0); /* Default note */ if (k->note) strnfmt(note_text, sizeof(note_text), "%s", get_autoinscription(k)); /* Get an inscription */ if (askfor_aux(note_text, sizeof(note_text), NULL)) { /* Remove old inscription if existent */ if (k->note) 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(); } }