set up a command to execute on a specific item next */
| 137 | |
| 138 | /* set up a command to execute on a specific item next */ |
| 139 | staticfn void |
| 140 | itemactions_pushkeys(struct obj *otmp, int act) |
| 141 | { |
| 142 | switch (act) { |
| 143 | default: |
| 144 | impossible("Unknown item action %d", act); |
| 145 | break; |
| 146 | case IA_NONE: |
| 147 | break; |
| 148 | case IA_UNWIELD: |
| 149 | cmdq_add_ec(CQ_CANNED, (otmp == uwep) ? dowield |
| 150 | : (otmp == uswapwep) ? remarm_swapwep |
| 151 | : (otmp == uquiver) ? dowieldquiver |
| 152 | : donull); /* can't happen */ |
| 153 | cmdq_add_key(CQ_CANNED, HANDS_SYM); |
| 154 | break; |
| 155 | case IA_APPLY_OBJ: |
| 156 | cmdq_add_ec(CQ_CANNED, doapply); |
| 157 | cmdq_add_key(CQ_CANNED, otmp->invlet); |
| 158 | break; |
| 159 | case IA_DIP_OBJ: |
| 160 | /* #altdip instead of normal #dip - takes potion to dip into |
| 161 | first (the inventory item instigating this) and item to |
| 162 | be dipped second, also ignores floor features such as |
| 163 | fountain/sink so we don't need to force m-prefix here */ |
| 164 | cmdq_add_ec(CQ_CANNED, dip_into); |
| 165 | cmdq_add_key(CQ_CANNED, otmp->invlet); |
| 166 | break; |
| 167 | case IA_NAME_OBJ: |
| 168 | case IA_NAME_OTYP: |
| 169 | cmdq_add_ec(CQ_CANNED, docallcmd); |
| 170 | cmdq_add_key(CQ_CANNED, (act == IA_NAME_OBJ) ? 'i' : 'o'); |
| 171 | cmdq_add_key(CQ_CANNED, otmp->invlet); |
| 172 | break; |
| 173 | case IA_DROP_OBJ: |
| 174 | cmdq_add_ec(CQ_CANNED, dodrop); |
| 175 | cmdq_add_key(CQ_CANNED, otmp->invlet); |
| 176 | break; |
| 177 | case IA_EAT_OBJ: |
| 178 | /* start with m-prefix; for #eat, it means ignore floor food |
| 179 | if present and eat food from invent */ |
| 180 | cmdq_add_ec(CQ_CANNED, do_reqmenu); |
| 181 | cmdq_add_ec(CQ_CANNED, doeat); |
| 182 | cmdq_add_key(CQ_CANNED, otmp->invlet); |
| 183 | break; |
| 184 | case IA_ENGRAVE_OBJ: |
| 185 | cmdq_add_ec(CQ_CANNED, doengrave); |
| 186 | cmdq_add_key(CQ_CANNED, otmp->invlet); |
| 187 | break; |
| 188 | case IA_FIRE_OBJ: |
| 189 | cmdq_add_ec(CQ_CANNED, dofire); |
| 190 | break; |
| 191 | case IA_ADJUST_OBJ: |
| 192 | cmdq_add_ec(CQ_CANNED, doorganize); /* #adjust */ |
| 193 | cmdq_add_key(CQ_CANNED, otmp->invlet); |
| 194 | break; |
| 195 | case IA_ADJUST_STACK: |
| 196 | cmdq_add_ec(CQ_CANNED, adjust_split); /* #altadjust */ |
no test coverage detected