git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10765 c06c8d41-db1a-0410-9941-cceddc491573
XKL3ATYU6YNHKOGQCVJVQR7YG2I6KPYGWUNICZ7NSDKLNM4UGK3AC
J46B22ZKYJ7RVYCJZOWBBQKJQ24R7MYTHN5B3RQGFMZBFSRFCEBQC
C7WZ2EB2RK7JH5UG34EHFFOLHG5UVJU7BDRJ5J5GCB2ZRIVQGLGAC
HG54HNDIBBRTBEXZZXDQJNSL3TDMCCLGL2VUQMN2C2ZR4OV7E42QC
4OKEEU32EGHIDAJ75GH3USSQHQPZBDZVC7TOP7ALMHZRUFPE5WEQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
LU56733MPKSGXIYBH4DUPLMRBHL4ZPWTVQMJ4PM4ILWRTSZWIFKAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
EH4VJW3I5Y4V6DT3YMLNDA3NW2DEAV4LRE4T5IEXAVB4WB3JJMGAC
ZBFNQZV6XCH4NUTHJU4K7RN4KLUMWNCWWO6UP7TIRASCWD5J5OMQC
IIVX5MXLMKSQOCHTQYPEL4R3GRZWPTQNONPNAZMBHG74M6VLYKZQC
AP62FIMTAYB6TLR7EHW3MFH4I6JWPYMFP3RT3GLD5P3SOCNCZKAAC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
34C4U6EQWERY75GZJKUCM5KVGU2OUICETS5LGZF6RMKMZT4R5SQAC
DHK4J2ZAMNKLRDX3V3LPBV2REQXY5BV6LX6TLX6ZWHWGPRXWHNZQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
CCRQESB4ADT4WA7FGLNZZXAJ6G5QMCTYCZIWORBN45P6ZPILC34AC
KQNIGKATHT4YSPJFPJGIGPD6VNR5B753SE2JN2LCXZZJNHCGY3DQC
52XHD5LKS6UVLXBYUXMPTMVMTXQ6FBUFXJ2TAW6R7CSJY7OXWVJAC
YKTMDZB5HVAP2IJGCOJQMIBH6CAD47O62SGRP4XNOAQ55EA3OSJQC
BSI5DB3LVY42ZHOS46X2CAPPVOSOTTQWFGLTMAKRFTROI5BQWFDQC
4FQAKUKUO6PCAZ3N4HUR5XL6E4VA5UQUZ3AEDGRBLVY7W2LMWI7QC
B7DNCNY7SXL5WAW5B3XZP5KIQSBWOJ3N2YW46WOUQKTRBRRZ7YOQC
OFH2B2UZBK43QLFQBZ54FOCFLFNE54BZVDNCEUGDTBCUGNVZULIQC
2O3C3MTT2ZBYIFGPJ4MF5R4AXBYUHOEN62KAUWFWF6JWHIIVLRNQC
RNJX2RDBDA62DSAUIWVVPFS7YNIU3GEOXDWJUABDS5DS5QGS3LAQC
YDWBT7CZGY33CNDPF7S4LK7YULFMDUJAKIODKMGB2IYIWHF4SJWQC
JJVROJMJVKS7VN5HJNB4ZNCG7Y6EMHJQZR3MDN2VZCFTZC73HOZQC
EFWEYIB2R3DPD3JWIPU6LS6SFLPMYN7J7X4GBZR7DJWKHJ3UELSAC
HHHZGZT7QAERYSE26QGJPFAV6TQQXXECP6RTCLF6SZQ5L6GTXPWAC
74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
L2HDKXXUL27V7CTKPRAJMUVZNV6ZVSWVEYEOWZZ6NO6O7Y2THDZQC
DCZMEKDHQWSQCQYQD6ZXB3XOMWLVLPSPVSBVVMPXMSZF7GO3BVCAC
SWT4O2TCOAQOVFA6WRA7MCU3KMTMJWFEMIHO64N4PWL5FNHDPADAC
NPN2F6GGWW56R5GGXPZQWGJSHNQNAZVUHCG6PAZUJKNW4BN3A3VAC
JDM27QE4HR52AYFSQE763BFF57ANOTF5MXKMO377PP5EXMN7SAOAC
U7BN4TQ36FIOAGBVWQ4A6VXFZN2GETLGCLD4E3MCBA7OQ3TXYUXQC
NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC
BPPMLLPJLP6W2LZSPAMOMYA7YWCIFJTNNL3XBWU2MRHAQBZ5M4XAC
R6XS2HO5QX2FJUGL5UQQRNETKCMYWTUFPHPPS5SYWK3OQA4UDUQQC
int item_list::parse_acquirement_source(const std::string &source)
{
const std::string god_name(replace_all_of(source, "_", " "));
const god_type god(string_to_god(god_name.c_str(), true));
if (god == GOD_NO_GOD)
error = make_stringf("unknown god name: '%s'", god_name.c_str());
return (god);
}
const std::string acquirement_source = strip_tag_prefix(s, "acquire:");
if (!acquirement_source.empty() || strip_tag(s, "acquire"))
{
if (!acquirement_source.empty())
result.acquirement_source =
parse_acquirement_source(acquirement_source);
// If requesting acquirement, must specify item base type or
// "any".
result.level = ISPEC_ACQUIREMENT;
if (s == "any")
result.base_type = OBJ_RANDOM;
else
parse_random_by_class(s, result);
return (result);
}
ASSERT(!crawl_state.arena);
int thing_created = NON_ITEM;
if (item_index == NULL)
item_index = &thing_created;
*item_index = NON_ITEM;
while (class_wanted == OBJ_RANDOM)
{
ASSERT(!quiet);
mesclr();
mpr("[a] Weapon [b] Armour [c] Jewellery [d] Book");
mpr("[e] Staff [f] Wand [g] Miscellaneous [h] Food [i] Gold");
mpr("What kind of item would you like to acquire? ", MSGCH_PROMPT);
const int keyin = tolower( get_ch() );
switch (keyin)
{
case 'a': case ')': class_wanted = OBJ_WEAPONS; break;
case 'b': case '[': case ']': class_wanted = OBJ_ARMOUR; break;
case 'c': case '=': case '"': class_wanted = OBJ_JEWELLERY; break;
case 'd': case '+': case ':': class_wanted = OBJ_BOOKS; break;
case 'e': case '\\': case '|': class_wanted = OBJ_STAVES; break;
case 'f': case '/': class_wanted = OBJ_WANDS; break;
case 'g': case '}': case '{': class_wanted = OBJ_MISCELLANY; break;
case 'h': case '%': class_wanted = OBJ_FOOD; break;
case 'i': case '$': class_wanted = OBJ_GOLD; break;
default:
// Lets wizards escape out of accidently choosing acquirement.
if (agent == AQ_WIZMODE)
{
canned_msg(MSG_OK);
return (false);
}
#if defined(USE_UNIX_SIGNALS) && defined(SIGHUP_SAVE) && defined(USE_CURSES)
// If we've gotten a HUP signal then the player will be unable
// to make a selection.
if (crawl_state.seen_hups)
{
mpr("Acquirement interrupted by HUP signal.", MSGCH_ERROR);
you.turn_is_over = false;
return (false);
}
#endif
break;
}
}
if (grid_destroys_items(grd(you.pos())))
{
// How sad (and stupid).
if (!silenced(you.pos()) && !quiet)
mprf(MSGCH_SOUND, grid_item_destruction_message(grd(you.pos())));
if (agent > GOD_NO_GOD && agent < NUM_GODS)
{
if (agent == GOD_XOM)
simple_god_message(" snickers.", GOD_XOM);
else
{
ASSERT(!"God gave gift item while player was on grid which "
"destroys items.");
mprf(MSGCH_ERROR, "%s gave a god gift while you were on "
"terrain which destroys items.",
god_name((god_type) agent).c_str());
}
}
*item_index = NON_ITEM;
if (!quiet)
mpr("The demon of the infinite void smiles upon you.");
return (NON_ITEM);
}
// Well, the item may have fallen in the drink, but the intent is
// that acquirement happened. -- bwr
return (true);
}
int acquirement_create_item(object_class_type class_wanted,
int agent,
bool quiet,
const coord_def &pos)
{
ASSERT(class_wanted != OBJ_RANDOM);
if (thing_created != NON_ITEM)
if (thing_created != NON_ITEM && !quiet)
canned_msg(MSG_SOMETHING_APPEARS);
return (thing_created);
}
bool acquirement(object_class_type class_wanted, int agent,
bool quiet, int* item_index)
{
ASSERT(!crawl_state.arena);
int thing_created = NON_ITEM;
if (item_index == NULL)
item_index = &thing_created;
*item_index = NON_ITEM;
while (class_wanted == OBJ_RANDOM)
{
ASSERT(!quiet);
mesclr();
mpr("[a] Weapon [b] Armour [c] Jewellery [d] Book");
mpr("[e] Staff [f] Wand [g] Miscellaneous [h] Food [i] Gold");
mpr("What kind of item would you like to acquire? ", MSGCH_PROMPT);
const int keyin = tolower( get_ch() );
switch (keyin)
{
case 'a': case ')': class_wanted = OBJ_WEAPONS; break;
case 'b': case '[': case ']': class_wanted = OBJ_ARMOUR; break;
case 'c': case '=': case '"': class_wanted = OBJ_JEWELLERY; break;
case 'd': case '+': case ':': class_wanted = OBJ_BOOKS; break;
case 'e': case '\\': case '|': class_wanted = OBJ_STAVES; break;
case 'f': case '/': class_wanted = OBJ_WANDS; break;
case 'g': case '}': case '{': class_wanted = OBJ_MISCELLANY; break;
case 'h': case '%': class_wanted = OBJ_FOOD; break;
case 'i': case '$': class_wanted = OBJ_GOLD; break;
default:
// Lets wizards escape out of accidently choosing acquirement.
if (agent == AQ_WIZMODE)
{
canned_msg(MSG_OK);
return (false);
}
#if defined(USE_UNIX_SIGNALS) && defined(SIGHUP_SAVE) && defined(USE_CURSES)
// If we've gotten a HUP signal then the player will be unable
// to make a selection.
if (crawl_state.seen_hups)
{
mpr("Acquirement interrupted by HUP signal.", MSGCH_ERROR);
you.turn_is_over = false;
return (false);
}
#endif
break;
}
}
if (grid_destroys_items(grd(you.pos())))
if (!quiet)
canned_msg(MSG_SOMETHING_APPEARS);
// How sad (and stupid).
if (!silenced(you.pos()) && !quiet)
mprf(MSGCH_SOUND, grid_item_destruction_message(grd(you.pos())));
if (agent > GOD_NO_GOD && agent < NUM_GODS)
{
if (agent == GOD_XOM)
simple_god_message(" snickers.", GOD_XOM);
else
{
ASSERT(!"God gave gift item while player was on grid which "
"destroys items.");
mprf(MSGCH_ERROR, "%s gave a god gift while you were on "
"terrain which destroys items.",
god_name((god_type) agent).c_str());
}
}
*item_index = NON_ITEM;
// Well, the item may have fallen in the drink, but the intent is
// that acquirement happened. -- bwr
return (true);
// Well, the item may have fallen in the drink, but the intent is
// that acquirement happened. -- bwr
return (true);
*item_index =
acquirement_create_item(class_wanted, agent, quiet, you.pos());
return (*item_index != NON_ITEM);
const int item_made = items( spec.allow_uniques, base_type,
spec.sub_type, true, level, spec.race, 0,
spec.ego );
const int item_made =
(acquire ?
acquirement_create_item(base_type, spec.acquirement_source,
true, where)
: items( spec.allow_uniques, base_type,
spec.sub_type, true, level, spec.race, 0,
spec.ego ));
* "acquire" requests the use of the acquirement code itself,
ensuring that the player gets wearable armour, etc. You can
also use acquire:<god> to request that the acquired item be
treated as a god gift. Examples: "acquire any", "acquire armour",
"acquire:sif_muna book", "acquire:trog weapon".