diff --git a/engines/agi/preagi_winnie.cpp b/engines/agi/preagi_winnie.cpp
index c92434c..825159b 100644
a
|
b
|
int Winnie::getObjInRoom(int iRoom) {
|
217 | 217 | return 0; |
218 | 218 | } |
219 | 219 | |
220 | | #define setTakeDrop() {\ |
221 | | if (getObjInRoom(_room))\ |
222 | | fCanSel[IDI_WTP_SEL_TAKE] = true;\ |
223 | | else\ |
224 | | fCanSel[IDI_WTP_SEL_TAKE] = false;\ |
225 | | if (_game.iObjHave)\ |
226 | | fCanSel[IDI_WTP_SEL_DROP] = true;\ |
227 | | else\ |
228 | | fCanSel[IDI_WTP_SEL_DROP] = false;\ |
| 220 | inline void Winnie::setTakeDrop(int fCanSel[]) { |
| 221 | fCanSel[IDI_WTP_SEL_TAKE] = getObjInRoom(_room); |
| 222 | fCanSel[IDI_WTP_SEL_DROP] = _game.iObjHave; |
229 | 223 | } |
230 | 224 | |
231 | 225 | void Winnie::setFlag(int iFlag) { |
… |
… |
int Winnie::parser(int pc, int index, uint8 *buffer) {
|
281 | 275 | fCanSel[IDI_WTP_SEL_EAST] = fCanSel[IDI_WTP_SEL_WEST] = true; |
282 | 276 | |
283 | 277 | // check if object in room or player carrying one |
284 | | setTakeDrop(); |
| 278 | setTakeDrop(fCanSel); |
285 | 279 | |
286 | 280 | // check which rows have a menu option |
287 | 281 | for (iSel = 0; iSel < IDI_WTP_MAX_OPTION; iSel++) { |
… |
… |
int Winnie::parser(int pc, int index, uint8 *buffer) {
|
367 | 361 | break; |
368 | 362 | case IDI_WTP_SEL_TAKE: |
369 | 363 | takeObj(_room); |
370 | | setTakeDrop(); |
| 364 | setTakeDrop(fCanSel); |
371 | 365 | break; |
372 | 366 | case IDI_WTP_SEL_DROP: |
373 | 367 | dropObj(_room); |
374 | | setTakeDrop(); |
| 368 | setTakeDrop(fCanSel); |
375 | 369 | break; |
376 | 370 | } |
377 | 371 | } |
… |
… |
void Winnie::getMenuMouseSel(int *iSel, int fCanSel[], int x, int y) {
|
796 | 790 | } |
797 | 791 | } |
798 | 792 | |
799 | | #define makeSel() {\ |
800 | | if (fCanSel[*iSel]) {\ |
801 | | return;\ |
802 | | } else {\ |
803 | | keyHelp();\ |
804 | | clrMenuSel(iSel, fCanSel);\ |
805 | | }\ |
| 793 | inline void Winnie::makeSel(int *iSel, int fCanSel[]) { |
| 794 | if (fCanSel[*iSel]) { |
| 795 | return; |
| 796 | } else { |
| 797 | keyHelp(); |
| 798 | clrMenuSel(iSel, fCanSel); |
| 799 | } |
806 | 800 | } |
807 | 801 | |
808 | 802 | void Winnie::getMenuSel(char *szMenu, int *iSel, int fCanSel[]) { |
… |
… |
void Winnie::getMenuSel(char *szMenu, int *iSel, int fCanSel[]) {
|
844 | 838 | // Click to move |
845 | 839 | if (fCanSel[IDI_WTP_SEL_NORTH] && hotspotNorth.contains(event.mouse.x, event.mouse.y)) { |
846 | 840 | *iSel = IDI_WTP_SEL_NORTH; |
847 | | makeSel(); |
| 841 | makeSel(iSel, fCanSel); |
848 | 842 | _vm->_gfx->setCursorPalette(false); |
849 | 843 | return; |
850 | 844 | } else if (fCanSel[IDI_WTP_SEL_SOUTH] && hotspotSouth.contains(event.mouse.x, event.mouse.y)) { |
851 | 845 | *iSel = IDI_WTP_SEL_SOUTH; |
852 | | makeSel(); |
| 846 | makeSel(iSel, fCanSel); |
853 | 847 | _vm->_gfx->setCursorPalette(false); |
854 | 848 | return; |
855 | 849 | } else if (fCanSel[IDI_WTP_SEL_WEST] && hotspotWest.contains(event.mouse.x, event.mouse.y)) { |
856 | 850 | *iSel = IDI_WTP_SEL_WEST; |
857 | | makeSel(); |
| 851 | makeSel(iSel, fCanSel); |
858 | 852 | _vm->_gfx->setCursorPalette(false); |
859 | 853 | return; |
860 | 854 | } else if (fCanSel[IDI_WTP_SEL_EAST] && hotspotEast.contains(event.mouse.x, event.mouse.y)) { |
861 | 855 | *iSel = IDI_WTP_SEL_EAST; |
862 | | makeSel(); |
| 856 | makeSel(iSel, fCanSel); |
863 | 857 | _vm->_gfx->setCursorPalette(false); |
864 | 858 | return; |
865 | 859 | } else { |
… |
… |
void Winnie::getMenuSel(char *szMenu, int *iSel, int fCanSel[]) {
|
944 | 938 | break; |
945 | 939 | case Common::KEYCODE_n: |
946 | 940 | *iSel = IDI_WTP_SEL_NORTH; |
947 | | makeSel(); |
| 941 | makeSel(iSel, fCanSel); |
948 | 942 | break; |
949 | 943 | case Common::KEYCODE_s: |
950 | 944 | if (event.kbd.flags & Common::KBD_CTRL) { |
951 | 945 | _vm->flipflag(fSoundOn); |
952 | 946 | } else { |
953 | 947 | *iSel = IDI_WTP_SEL_SOUTH; |
954 | | makeSel(); |
| 948 | makeSel(iSel, fCanSel); |
955 | 949 | } |
956 | 950 | break; |
957 | 951 | case Common::KEYCODE_e: |
958 | 952 | *iSel = IDI_WTP_SEL_EAST; |
959 | | makeSel(); |
| 953 | makeSel(iSel, fCanSel); |
960 | 954 | break; |
961 | 955 | case Common::KEYCODE_w: |
962 | 956 | *iSel = IDI_WTP_SEL_WEST; |
963 | | makeSel(); |
| 957 | makeSel(iSel, fCanSel); |
964 | 958 | break; |
965 | 959 | case Common::KEYCODE_t: |
966 | 960 | *iSel = IDI_WTP_SEL_TAKE; |
967 | | makeSel(); |
| 961 | makeSel(iSel, fCanSel); |
968 | 962 | break; |
969 | 963 | case Common::KEYCODE_d: |
970 | 964 | *iSel = IDI_WTP_SEL_DROP; |
971 | | makeSel(); |
| 965 | makeSel(iSel, fCanSel); |
972 | 966 | break; |
973 | 967 | case Common::KEYCODE_RETURN: |
974 | 968 | switch (*iSel) { |
diff --git a/engines/agi/preagi_winnie.h b/engines/agi/preagi_winnie.h
index 5a5472f..f0b7e56 100644
a
|
b
|
private:
|
342 | 342 | void saveGame(); |
343 | 343 | void loadGame(); |
344 | 344 | void dropObjRnd(); |
| 345 | inline void setTakeDrop(int[]); |
| 346 | inline void makeSel(int*, int[]); |
345 | 347 | |
346 | 348 | void wind(); |
347 | 349 | void mist(); |