(via (,) or i, or by the new quivering command). Ammo that just happens to come next in the fire order is not quivered anymore even if you continue firing. Add a new quiver command on Q, and while I was at it, restrict the items offered when firing (fi) or quivering to actual throwables. (This was a long outstanding FR.) I think that's it…
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6112 c06c8d41-db1a-0410-9941-cceddc491573
FEKRY3DYIDLWVBLAZN7W2WFNEKZPCAHABXOSM6K5RLTH5WY2NODQC P4PEPGY7ATSFJK44EEU5GXRNYTE3T67FYIBR6S2CJRKFQYQWZGGQC SBJWTFK2LCN7IIFREIZWTWV3U3LSZA2IPEOVXTN2ZZYHVEOHWBWQC RTB6BWX5OPHNXFSRXCQ34G5THZO4F6QZCW4GQBAL6JHVEMEMSPOAC NCHTJYDWTFLBWRQ3NS47O4ZAPT6RN7P2GNUT7G2PPVNURCLCWW6AC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC KPU2SA6G7UECM5N6PNXOT5CCQAYFBN47K5JYBQMFBD25HL2A5GIAC COLMJH3UIQFF4R5AV642OJK4HHGUIIPLNP5WGKLWWYNJV7ZGPI7AC ENI6P5WUO7DS4Y7EUDCYB4PSNT7CXH2L5JIB5BLZHNMWN4QDXMWQC U6OTXM3JN7SGPVIGQ5F6NR2I7J5V7KOWFQ7AVNNRQQDNLBEDMYFQC 4GYZYBY7FFORRNPIEFTV4ZM2C7Z6D2KTQOM537ZCC2YBXT2TNSHAC LDBTCT5WIPLJPZWXS2RUQ26QKISCUUTLO77M464WOE6VSYSNPKYAC QEEJFAETO6B2J4IWDIDCJ5UNIFNNHHG22IWF2CUJRTJJBNE47CWQC 3VWSZUGYL36SO5AOZRASGK3VHFCFZUGGCGRT3R7BZB36IZPN7OSQC M63RVTL4D35UNHPGHV2Z5G7I3DW6VQSCWUTTLWBPHYNHB4CJ5LXQC Q3DNEB5OOJ34P5ML4CMK3L6SCP7RLW7DDOZEG24KZBX3C7BJRQDAC DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC T7CUIVICB74342RA32BR37T36FOX4RBSQIB5PNOHTGTGUYGDKSTQC TZ2SH2SPO5TFSFL2OCV5A32P2X4CRHEKEK7ENUFCBVF3RKUWAD4AC CE6FLTWU5PYFBSGVTIJXQXRMHOIHQ3VJCKHQVIMUUAIFHQ73X7NAC HSRRNAU5UAYC6B6IQWGJPFROMZBTJICPCH6DJVZDHDTAGOQ6IOYAC 3GLHLYH34NUBL2C5HSECKNVAO4ZFAAYXCW3Q5VZ2PXDDZ4SDD7LQC ACDPN464TK2LKLHSDN3YVRHAPF7WLSLLU3UHIYEXKFDEZPEU3XSQC L57WEZMVIHTFRLWVIPWOIOWHCF2I53TVUVYJ2V6IZ64R56FVTZZAC 7GJR755MBM55KIOP3DGSZIIAEQ5E2PRBHLEXZOU2ZMXHHZ5JI3GQC ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC 7V6TZHBSKK7AKY3SCYSP27QR2HP5N7HI3FI7V2QL7Y44OKKNI6IAC KNCEMOC5TMWHTKCWF7CMYNHLGCXOLGMTXLEIHMEFBGM5FR26GRXAC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC KZIHM6RUX43HHKXG6HGJHVEEYUPVVNBFIWMT4SKPD2GAH5ZMA3KAC MDAJYB6STTZPNHRQ2X66MMMSONMKXTESLHJSFPGN7H3D3TOVBAVAC TFNFP2YQA4EOVE4VIXBEQSGACZSXHWIQ2T4TIPQ46R2MJW2C4B5AC XS4OT3JJKMXJIOMIGSSHIE4IOV2EXKFFELHEU7J2C2B7PKAP4V4QC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC ENOQQ6DEA6ECRNTBGYYNK7G3DFEILMKQBNKP4SUQIZW2L6HWVR7QC QGVAXJZXG2HUCLELWAN6LJJOBSP2BS6TIZMPJTDOAGI2E2SUCOCQC P2YNOE2TUTZFAOBTHJOIVD6TCV7J7D2UKUX67LHZUL6QY44ZMENQC UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC TJRYL3NXPW5IUGEV3YOC7JYWEXCZDBFPLT4AUG4P227WVKVB72ZAC TPPJRQ2NTCV3GI2VRHEXQJREDERPJODCJWUG5WCOQGN4REPPPAMAC YHSVOROKPYS33Y4RYZRVZTE3G5LXOFX52HEDNLV6HIXOJYNOKH3QC BNTPYSO6ECZ76CHHLDP3ASSPDSEUH4Y3E3LETKNXVWAWJRFL3YEQC void on_item_fired(const item_def&);void on_item_fired_fi(const item_def&);
void set_quiver(const item_def &item, ammo_t ammo_type);void on_item_fired(const item_def &item, bool explicitly_chosen = false);void on_item_fired_fi(const item_def &item);
}void player_quiver::set_quiver(const item_def &item, ammo_t ammo_type){m_last_used_of_type[ammo_type] = item;m_last_used_of_type[ammo_type].quantity = 1;m_last_used_type = ammo_type;you.redraw_quiver = true;}void choose_item_for_quiver(){int slot = prompt_invent_item( "Quiver which item? (* to show all)",MT_INVLIST,OSEL_THROWABLE, true, true, true, 0, NULL,OPER_FIRE );if (slot == PROMPT_ABORT){canned_msg(MSG_OK);return;}else if (slot == PROMPT_NOTHING)return;const item_def item = you.inv[slot];if (!is_valid_item(item))return;ammo_t t = AMMO_THROW;const item_def *weapon = you.weapon();if (weapon && item.launched_by(*weapon))t = _get_weapon_ammo_type(weapon);you.m_quiver->set_quiver(you.inv[slot], t);mprf("Quivering %s %s.", you.inv[slot].name(DESC_INVENTORY).c_str(),t == AMMO_THROW ? "as throwing weapon" :t == AMMO_BLOWGUN ? "for blowguns" :t == AMMO_SLING ? "for slings" :t == AMMO_BOW ? "for bows" :t == AMMO_CROSSBOW ? "for crossbows": "for hand crossbows");
/*const item_def* item;you.m_quiver->get_desired_item(&item, &q);if (item != NULL && is_valid_item(*item)){textcolor(item->colour);cprintf("-) %s", item->name(DESC_PLAIN, true).substr(0, crawl_view.hudsz.x - 15).c_str());textcolor(RED);cprintf(" (empty)");}else{textcolor(LIGHTGREY);cprintf("Nothing quivered");}*/
case '(':case CONTROL('N'):case ')':case CONTROL('P'):{const int direction = (key == CONTROL('P') || key == ')') ? -1 : +1;const int next = get_next_fire_item(m_slot, direction);if (next != m_slot && next != -1){m_slot = next;selected_from_inventory = false;}// Do this stuff unconditionally to make the prompt redraw.message_ammo_prompt();need_prompt = true;break;}case 'i':{std::string err;const int selected = _fire_prompt_for_item(err);if (selected >= 0 && _fire_validate_item(selected, err)){m_slot = selected;selected_from_inventory = true;}message_ammo_prompt( err.length() ? &err : NULL );need_prompt = true;return (CMD_NO_CMD);}case '?':show_targeting_help();redraw_screen();message_ammo_prompt();need_prompt = true;return (CMD_NO_CMD);
case '(':case CONTROL('N'):case ')':case CONTROL('P'):{const int direction = (key == CONTROL('P') || key == ')') ? -1 : +1;const int next = get_next_fire_item(m_slot, direction);if (next != m_slot && next != -1){m_slot = next;selected_from_inventory = false;chosen_ammo = true;}// Do this stuff unconditionally to make the prompt redraw.message_ammo_prompt();need_prompt = true;break;}case 'i':{std::string err;const int selected = _fire_prompt_for_item(err);if (selected >= 0 && _fire_validate_item(selected, err)){m_slot = selected;selected_from_inventory = true;chosen_ammo = true;}message_ammo_prompt( err.length() ? &err : NULL );need_prompt = true;return (CMD_NO_CMD);
OSEL_ANY = -1,OSEL_WIELD = -2,OSEL_UNIDENT = -3,OSEL_EQUIP = -4,OSEL_MEMORISE = -5,OSEL_RECHARGE = -6,OSEL_ENCH_ARM = -7,OSEL_VAMP_EAT = -8,OSEL_DRAW_DECK = -9
OSEL_ANY = -1,OSEL_WIELD = -2,OSEL_UNIDENT = -3,OSEL_EQUIP = -4,OSEL_MEMORISE = -5,OSEL_RECHARGE = -6,OSEL_ENCH_ARM = -7,OSEL_VAMP_EAT = -8,OSEL_DRAW_DECK = -9,OSEL_THROWABLE = -10