diff options
author | Torbjörn Andersson | 2003-09-19 16:08:54 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2003-09-19 16:08:54 +0000 |
commit | a1735e55023d76294aaa5cb01a385388f2e47ae5 (patch) | |
tree | 8e1ceee43dc9c6aa72dfc7b29459cd4d50e46b98 | |
parent | 600d4c60d49a258bff159bf8b74449dac2b842d5 (diff) | |
download | scummvm-rg350-a1735e55023d76294aaa5cb01a385388f2e47ae5.tar.gz scummvm-rg350-a1735e55023d76294aaa5cb01a385388f2e47ae5.tar.bz2 scummvm-rg350-a1735e55023d76294aaa5cb01a385388f2e47ae5.zip |
cleanup
svn-id: r10314
-rw-r--r-- | sword2/mouse.cpp | 1935 | ||||
-rw-r--r-- | sword2/mouse.h | 111 |
2 files changed, 1019 insertions, 1027 deletions
diff --git a/sword2/mouse.cpp b/sword2/mouse.cpp index 18c589211b..5ca8690c53 100644 --- a/sword2/mouse.cpp +++ b/sword2/mouse.cpp @@ -35,7 +35,7 @@ #include "resman.h" #include "sound.h" #include "sword2.h" // for PauseGame() & UnpauseGame() -//------------------------------------------------------------------------------------ + // pointer resource id's #define CROSHAIR 18 @@ -54,124 +54,115 @@ #define PICKUP 3099 #define SCROLL_L 1440 #define SCROLL_R 1441 -#define USE 3100 -//------------------------------------------------------------------------------------ +#define USE 3100 + //the mouse list stuff -uint32 cur_mouse; + +uint32 cur_mouse; Mouse_unit mouse_list[TOTAL_mouse_list]; -uint32 mouse_touching=0; //set by Check_mouse_list -uint32 old_mouse_touching=0; +// set by Check_mouse_list +uint32 mouse_touching = 0; +uint32 old_mouse_touching = 0; + +uint32 menu_selected_pos; +uint8 examining_menu_icon = 0; -uint32 menu_selected_pos; -uint8 examining_menu_icon=0; +// if it's NORMAL_MOUSE_ID (ie. normal pointer) then it's over a floor area +// (or hidden hot-zone) -uint32 mouse_pointer_res=0; // if it's NORMAL_MOUSE_ID (ie. normal pointer) then it's over a floor area (or hidden hot-zone -uint32 mouse_mode=0; //0 normal in game - //1 top menu down (bottom!) - //2 dragging luggage - //3 system menu chooser (top) - //4 speech chooser +uint32 mouse_pointer_res = 0; -//Object_mouse old_mouse_object; //copy structure from list when moving onto a mouse area +// 0 normal in game +// 1 top menu down (bottom!) +// 2 dragging luggage +// 3 system menu chooser (top) +// 4 speech chooser -uint32 menu_status; //0 available - 1 unavailable -uint32 mouse_status; //human 0 on/1 off +uint32 mouse_mode = 0; -uint32 mouse_mode_locked=0; //0 not !0 mode cannot be changed from normal mouse to top menu (i.e. when carrying big objects) -uint32 current_luggage_resource=0; +// copy structure from list when moving onto a mouse area +// Object_mouse old_mouse_object; -uint32 subject_status; //0 off 1 on +uint32 menu_status; // 0 available - 1 unavailable +uint32 mouse_status; // human 0 on/1 off -uint32 old_button=0; //for the re-click stuff - must be same button you see -uint32 button_click=0; +// 0 not !0 mode cannot be changed from normal mouse to top menu (i.e. when +// carrying big objects) -uint32 pointer_text_bloc_no=0; -uint32 pointerTextSelected=0; +uint32 mouse_mode_locked = 0; +uint32 current_luggage_resource = 0; -uint32 player_activity_delay=0; // player activity delay counter +uint32 subject_status; //0 off 1 on -uint32 real_luggage_item=0; //last minute for pause mode +// for the re-click stuff - must be same button you see +uint32 old_button = 0; +uint32 button_click = 0; -//------------------------------------------------------------------------------------ -/* -#define RD_LEFTBUTTONDOWN 0x01 -#define RD_LEFTBUTTONUP 0x02 -#define RD_RIGHTBUTTONDOWN 0x04 -#define RD_RIGHTBUTTONUP 0x08 -*/ -//------------------------------------------------------------------------------------ -// local function prototypes +uint32 pointer_text_bloc_no = 0; +uint32 pointerTextSelected = 0; -//uint8 Check_sprite_pixel( uint32 j ); -void CreatePointerText(uint32 TextId, uint32 pointerRes); // James16jun97 -void Monitor_player_activity(void); // James23july97 +uint32 player_activity_delay = 0; // player activity delay counter -void No_human(void); +uint32 real_luggage_item = 0; // last minute for pause mode -//------------------------------------------------------------------------------------ -void Reset_mouse_list(void) //Tony26Sept96 -{ -//call at beginning of gameloop +void CreatePointerText(uint32 TextId, uint32 pointerRes); +void Monitor_player_activity(void); - cur_mouse=1; +void No_human(void); + +void Reset_mouse_list(void) { // Tony26Sept96 + // call at beginning of gameloop + cur_mouse = 1; } -//------------------------------------------------------------------------------------ -void Mouse_engine(void) //Tony30Sept96 -{ +void Mouse_engine(void) { // Tony30Sept96 Monitor_player_activity(); // James23july97 + ClearPointerText(); // James16jun97 - ClearPointerText(); // James16jun97 - + if (DEAD) { //George is dead ;) + if (mouse_mode != MOUSE_system_menu) { + mouse_mode = MOUSE_system_menu; + if (mouse_touching) { + // we've moved off + old_mouse_touching = 0; - if (DEAD) //George is dead ;) - { - if (mouse_mode!=MOUSE_system_menu) - { - mouse_mode=MOUSE_system_menu; - if (mouse_touching) - { -// get off - old_mouse_touching=0; //we've moved off - mouse_touching=0; //we were on something but not anymore + // we were on something but not anymore + mouse_touching = 0; } Set_mouse(NORMAL_MOUSE_ID); - - Build_system_menu(); //Tony19Mar97 + Build_system_menu(); // Tony19Mar97 } System_menu(); - return; } - - if (mouse_status) //no human + if (mouse_status) { + // no human return; + } - - switch(mouse_mode) - { - case MOUSE_normal: //0 normal in game + switch (mouse_mode) { + case MOUSE_normal: Normal_mouse(); break; - case MOUSE_top: //1 top menu down + case MOUSE_top: Top_menu_mouse(); break; - case MOUSE_drag: //2 dragging luggage + case MOUSE_drag: Drag_mouse(); break; - case MOUSE_system_menu: //3 in game bottom menu - save/restore, etc? + case MOUSE_system_menu: System_menu(); break; - case MOUSE_holding: //4 wait for mouse to move off bottom menu - after speech - if (mousey<400) - { mouse_mode=MOUSE_normal; + case MOUSE_holding: + if (mousey < 400) { + mouse_mode = MOUSE_normal; Zdebug(" releasing"); } break; @@ -179,19 +170,16 @@ void Mouse_engine(void) //Tony30Sept96 default: break; } - } -//------------------------------------------------------------------------------------ -void System_menu(void) //Tony19Mar97 -{ + +void System_menu(void) { // Tony19Mar97 uint32 safe_looping_music_id; - _mouseEvent *me; - int j,hit; - uint8 *icon; - uint32 rv; // for drivers return value - int32 pars[2]; - uint32 icon_list[5] = - { + _mouseEvent *me; + int j, hit; + uint8 *icon; + uint32 rv; // for drivers return value + int32 pars[2]; + uint32 icon_list[5] = { OPTIONS_ICON, QUIT_ICON, SAVE_ICON, @@ -199,1264 +187,1253 @@ void System_menu(void) //Tony19Mar97 RESTART_ICON }; + //can't close when player is dead + if (mousey > 0 && !DEAD) { + // close menu + mouse_mode = MOUSE_normal; + HideMenu(RDMENU_TOP); + return; + } + me = MouseEvent(); + + if (me && (me->buttons & RD_LEFTBUTTONDOWN)) { + // clicked on a top mouse pointer? + + if (mousex >= 24 && mousex < 640 - 24 && mousey < 0) { + // which are we over? + hit = (mousex - 24) / 40; + + // no save when dead + if (icon_list[hit] == SAVE_ICON && DEAD) + return; + + //there are 5 system menu icons + if (hit < ARRAYSIZE(icon_list)) { + // build them all high in full colour - when + // one is clicked on all the rest will grey out + for (j = 0; j < ARRAYSIZE(icon_list); j++) { + // change all others to grey + if (j != hit) { + icon = res_man.Res_open(icon_list[j]) + sizeof(_standardHeader); + SetMenuIcon(RDMENU_TOP, j, icon); + res_man.Res_close( icon_list[j] ); + } + } - if ((mousey>0)&&(!DEAD)) //can't close when player is dead - { mouse_mode=MOUSE_normal; //close menu + rv = g_sound->PauseFx(); + if (rv != RD_OK) + Zdebug("ERROR: PauseFx() returned %.8x in SystemMenu()", rv); -// start the menu coming down - HideMenu(RDMENU_TOP); + // NB. Need to keep a safe copy of + // 'looping_music_id' for savegame & for + // playing when returning from control panels + // because control panel music will overwrite + // it! - return; - } + safe_looping_music_id = looping_music_id; - me = MouseEvent(); //get mouse event + pars[0] = 221; // SystemM234 (M234.wav) + pars[1] = FX_LOOP; + FN_play_music(pars); + // restore proper looping_music_id + looping_music_id = safe_looping_music_id; - if ((me!=NULL)&&(me->buttons&RD_LEFTBUTTONDOWN)) //there's a mouse event to be processed - { + // clear the screen & set up the new palette + // for the menus -// clicked on a top mouse pointer? + EraseBackBuffer(); + ProcessMenu(); + ResetRenderEngine(); - if ((mousex>=24)&&(mousex<640-24)&&(mousey<0)) - { - hit=(mousex-24)/40; //which are we over? + // call the relevent screen + switch (hit) { + case 0: + Option_control(); + break; - if ((hit==2)&&(DEAD)) - return; //no save when dead + case 1: + Quit_control(); + break; - if (hit<5) //there are 5 system menus - { for (j=0;j<5;j++) //build them all high in full colour - when on eis clicked on all the rest will grey out - if (j!=hit) //change all others to grey - { - icon = res_man.Res_open( icon_list[j] ) + sizeof(_standardHeader); - SetMenuIcon(RDMENU_TOP, j, icon); - res_man.Res_close( icon_list[j] ); - } + case 2: + Save_control(); + break; - //------------------------ - rv = g_sound->PauseFx(); - if (rv != RD_OK) - Zdebug("ERROR: PauseFx() returned %.8x in SystemMenu()", rv); - //------------------------ - // NB. Need to keep a safe copy of 'looping_music_id' for savegame - // & for playing when returning from control panels - // because control panel music will overwrite it! - safe_looping_music_id = looping_music_id; - pars[0] = 221; // SystemM234 (M234.wav) - pars[1] = FX_LOOP; - FN_play_music(pars); - looping_music_id = safe_looping_music_id; // restore proper looping_music_id - //------------------------ - //------------------------ - // clear the screen & set up the new palette for the menus - - EraseBackBuffer(); - ProcessMenu(); // drivers to redraw menu over this blank screen! - ResetRenderEngine(); - //------------------------ - - switch(hit) //call the relevent screen - { - case 0: // options - Option_control(); // game options - break; - - case 1: // quit - Quit_control(); // quit to windows - break; - - case 2: // save - Save_control(); // save the game - break; - - case 3: // restore - Restore_control(); // restore a game - break; - - case 4: // restart - Restart_control(); // restart the game - break; + case 3: + Restore_control(); + break; - } - //------------------------ -// start the menu coming down - if (!DEAD) //not death screen - { mouse_mode=MOUSE_normal; //close menu - HideMenu(RDMENU_TOP); //but not when dead - } - else - { Set_mouse(NORMAL_MOUSE_ID); - Build_system_menu(); //reset top menu - } - //------------------------ - // clear the screen & restore the location palette + case 4: + Restart_control(); + break; + } - EraseBackBuffer(); - ProcessMenu(); // drivers to redraw menu over this blank screen! + // Menu stays open on death screen + if (!DEAD) { + mouse_mode = MOUSE_normal; + HideMenu(RDMENU_TOP); + } else { + Set_mouse(NORMAL_MOUSE_ID); + Build_system_menu(); + } - //------------------------ - // reset game palette, but not after a successful restore or restart! + // clear the screen & restore the location + // palette - if (this_screen.new_palette != 99) // see RestoreFromBuffer() in save_rest.cpp - { - SetFullPalette(0); // '0' means put back game screen palette; see Build_display.cpp (James17jun97) - this_screen.new_palette=0; //stop the engine fading in the restored screens palette - } - else - this_screen.new_palette=1; - - //------------------------ - rv = g_sound->UnpauseFx(); - if (rv != RD_OK) - Zdebug("ERROR: UnpauseFx() returned %.8x in SystemMenu()", rv); - //------------------------ - // If there was looping music before coming into the control panels then restart it! - // NB. This will also start music required when a game has been restored - - if (looping_music_id) - { - pars[0] = looping_music_id; - pars[1] = FX_LOOP; - FN_play_music(pars); - // cross-fades into the required music: - // - either a restored game tune - // - or music playing prior to entering control panels - } - else - FN_stop_music(NULL); // stop the control panel music - //------------------------ + EraseBackBuffer(); + ProcessMenu(); + + // reset game palette, but not after a + // successful restore or restart! + + // see RestoreFromBuffer() in save_rest.cpp + if (this_screen.new_palette != 99) { + // '0' means put back game screen + // palette; see Build_display.cpp + // (James17jun97) + + SetFullPalette(0); + + // stop the engine fading in the + // restored screens palette + + this_screen.new_palette = 0; + } else + this_screen.new_palette = 1; + + rv = g_sound->UnpauseFx(); + if (rv != RD_OK) + Zdebug("ERROR: UnpauseFx() returned %.8x in SystemMenu()", rv); + + // If there was looping music before coming + // into the control panels then restart it! + // NB. This will also start music required + // when a game has been restored + + if (looping_music_id) { + pars[0] = looping_music_id; + pars[1] = FX_LOOP; + FN_play_music(pars); + + // cross-fades into the required music: + // - either a restored game tune + // - or music playing prior to + // entering control panels + } else { + // stop the control panel music + FN_stop_music(NULL); } } + } } - } -//------------------------------------------------------------------------------------ -void Drag_mouse(void) //Tony21Nov96 -{ - _mouseEvent *me; - uint32 pos; -// uint32 null_pc=1; //script 1 is combine script +void Drag_mouse(void) { // Tony21Nov96 + _mouseEvent *me; + uint32 pos; +// uint32 null_pc = 1; //script 1 is combine script - if ((mousey<400)&&(!menu_status)) - { mouse_mode=MOUSE_normal; //close menu - -// start the menu coming down + if (mousey < 400 && !menu_status) { + // close menu + mouse_mode = MOUSE_normal; HideMenu(RDMENU_BOTTOM); - return; } + // handles cursors and the luggage on/off according to type + Mouse_on_off(); - Mouse_on_off(); //handles cursors and the luggage on/off according to type + // now do the normal click stuff + me = MouseEvent(); + // we only care about left clicks when the mouse is over an object + // we ignore mouse releases -// now do the normal click stuff + if (me && (me->buttons & RD_LEFTBUTTONDOWN)) { + // there's a mouse event to be processed - me = MouseEvent(); //get mouse event + // could be clicking on an on screen object or on the top + // menu which is currently displayed + if (mouse_touching) { + // mouse is over an on screen object - and we have + // luggage -// we only care about left clicks when the mouse is over an object -// we ignore mouse releases + // depending on type we'll maybe kill the object_held + // - like for exits - if ((me!=NULL)&&(me->buttons&RD_LEFTBUTTONDOWN)) //there's a mouse event to be processed - { + // Set global script variable 'button'. We know that + // it was the left button, not the right one. -// could be clicking on an on screen object or on the top menu which is currently displayed + LEFT_BUTTON = 1; + RIGHT_BUTTON = 0; - if (mouse_touching) //mouse is over an on screen object - and we have luggage - { //depending on type we'll maybe kill the object_held - like for exits - if (me->buttons&RD_LEFTBUTTONDOWN) // set global script variable 'button' - { - LEFT_BUTTON = 1; - RIGHT_BUTTON = 0; - } - else - { - LEFT_BUTTON = 0; - RIGHT_BUTTON = 1; - } + // these might be required by the action script about + // to be run - MOUSE_X=(uint32)mousex+this_screen.scroll_offset_x; - MOUSE_Y=(uint32)mousey+this_screen.scroll_offset_y; //these might be required by the action script about to be run + MOUSE_X = (uint32) mousex + this_screen.scroll_offset_x; + MOUSE_Y = (uint32) mousey + this_screen.scroll_offset_y; - CLICKED_ID = mouse_touching; // for scripts to know what's been clicked (21jan97). First used for 'room_13_turning_script' in object 'biscuits_13' + // for scripts to know what's been clicked (21jan97). + // First used for 'room_13_turning_script' in object + // 'biscuits_13' + CLICKED_ID = mouse_touching; + Set_player_action_event(CUR_PLAYER_ID, mouse_touching); // Tony4Dec96 - Set_player_action_event(CUR_PLAYER_ID, mouse_touching); //Tony4Dec96 - - //-------------------------------------- +#ifdef _SWORD2_DEBUG // Write to walkthrough file (zebug0.txt) - #ifdef _SWORD2_DEBUG - Zdebug(0,"USED \"%s\" ICON ON %s", FetchObjectName(OBJECT_HELD), FetchObjectName(CLICKED_ID)); - #endif - //-------------------------------------- - - - HideMenu(RDMENU_BOTTOM); //hide menu too - mouse_mode=MOUSE_normal; //back to normal menu mode - } - else //better check for combine/cancel cancel puts us back in Top_menu_mouse mode - { - if ((mousex>=24)&&(mousex<640-24)) - { - pos=(mousex-24)/40; //which are we over? - - if (master_menu_list[pos].icon_resource) //clicked on something - what button? - { - mouse_mode=MOUSE_top; //always back into top menu mode - - Set_luggage(0); // remove luggage - - if (pos==menu_selected_pos) // if we've clicked on the same icon as the one we're dragging - { - OBJECT_HELD=0; // reset first icon - menu_selected_pos=0; - } - else // combine the 2 icons - { -// Zdebug("combine"); - COMBINE_BASE=master_menu_list[pos].icon_resource; //what we clicked on, not what we're dragging - + Zdebug(0, "USED \"%s\" ICON ON %s", FetchObjectName(OBJECT_HELD), FetchObjectName(CLICKED_ID)); +#endif + + // Hide menu - back to normal menu mode + + HideMenu(RDMENU_BOTTOM); + mouse_mode=MOUSE_normal; + } else { + // better check for combine/cancel + // cancel puts us back in Top_menu_mouse mode + if (mousex >= 24 && mousex < 640 - 24) { + // which are we over? + pos = (mousex - 24) / 40; + + //clicked on something - what button? + if (master_menu_list[pos].icon_resource) { + // always back into top menu mode + mouse_mode = MOUSE_top; + + // remove luggage + Set_luggage(0); + + // if we've clicked on the same icon + // as the one we're dragging + + if (pos == menu_selected_pos) { + // reset first icon + OBJECT_HELD = 0; + menu_selected_pos = 0; + } else { + // combine the 2 icons + // Zdebug("combine"); + + //what we clicked on, not what + // we're dragging + + COMBINE_BASE = master_menu_list[pos].icon_resource; Set_player_action_event(CUR_PLAYER_ID, MENU_MASTER_OBJECT); //Tony4Dec96 - No_human(); // turn off mouse now, to prevent player trying to click elsewhere BUT leave the bottom menu open - - //-------------------------------------- - // Write to walkthrough file (zebug0.txt) - #ifdef _SWORD2_DEBUG - Zdebug(0,"USED \"%s\" ICON ON \"%s\" ICON", FetchObjectName(OBJECT_HELD), FetchObjectName(COMBINE_BASE)); - #endif - //-------------------------------------- - } + // turn off mouse now, to + // prevent player trying to + // click elsewhere BUT leave + // the bottom menu open - Build_top_menu(); // refresh the menu + No_human(); +#ifdef _SWORD2_DEBUG + // Write to walkthrough file + // (zebug0.txt) + Zdebug(0, "USED \"%s\" ICON ON \"%s\" ICON", FetchObjectName(OBJECT_HELD), FetchObjectName(COMBINE_BASE)); +#endif + } -// Zdebug("switch to top mode"); + // refresh the menu + Build_top_menu(); + // Zdebug("switch to top mode"); } } } } - - } -//------------------------------------------------------------------------------------ -void Top_menu_mouse(void) //Tony3Oct96 -{ -//top menu is down - _mouseEvent *me; - uint32 pos; - if ((mousey<400)&&(!menu_status)) - { mouse_mode=MOUSE_normal; //close menu +void Top_menu_mouse(void) { // Tony3Oct96 + // top menu is down -// start the menu coming down - HideMenu(RDMENU_BOTTOM); + _mouseEvent *me; + uint32 pos; + if (mousey < 400 && !menu_status) { + // close menu + mouse_mode = MOUSE_normal; + HideMenu(RDMENU_BOTTOM); return; } - me=MouseEvent(); //get mouse event + me = MouseEvent(); + + // we only care about left clicks when the mouse is over an object + // we ignore mouse releases + if (me) { + // there's a mouse event to be processed + // now check if we've clicked on an actual icon + if (mousex >= 24 && mousex < 640 - 24) { + // which are we over? + pos = (mousex - 24) / 40; -// we only care about left clicks when the mouse is over an object -// we ignore mouse releases + // clicked on something - what button? + if (master_menu_list[pos].icon_resource) { + if (me->buttons & RD_RIGHTBUTTONDOWN) { + // right button look + examining_menu_icon = 1; - if (me!=NULL) //there's a mouse event to be processed - { -// now check if we've clicked on an actual icon + // id the object via its graphic + OBJECT_HELD = master_menu_list[pos].icon_resource; - if ((mousex>=24)&&(mousex<640-24)) - { - pos=(mousex-24)/40; //which are we over? + // (JEL09oct97) must clear this so + // next click on exit becomes 1st + // click again - if (master_menu_list[pos].icon_resource) //clicked on something - what button? - { + EXIT_CLICK_ID = 0; - if (me->buttons&RD_RIGHTBUTTONDOWN) //right button look - { - examining_menu_icon=1; - OBJECT_HELD = master_menu_list[pos].icon_resource; //id the object via its graphic - EXIT_CLICK_ID=0; // (JEL09oct97) must clear this so next click on exit becomes 1st click again +#ifdef _SWORD2_DEBUG + // Write to walkthrough file + // (zebug0.txt) + Zdebug(0, "RIGHT-CLICKED ON \"%s\" ICON", FetchObjectName(OBJECT_HELD)); +#endif - //-------------------------------------- - // Write to walkthrough file (zebug0.txt) - #ifdef _SWORD2_DEBUG - Zdebug(0,"RIGHT-CLICKED ON \"%s\" ICON", FetchObjectName(OBJECT_HELD)); - #endif - //-------------------------------------- + Set_player_action_event(CUR_PLAYER_ID, MENU_MASTER_OBJECT); // Tony4Dec96 - Set_player_action_event(CUR_PLAYER_ID, MENU_MASTER_OBJECT); //Tony4Dec96 + // refresh the menu + Build_top_menu(); - Build_top_menu(); // refresh the menu - No_human(); // turn off mouse now, to prevent player trying to click elsewhere BUT leave the bottom menu open - } - else if (me->buttons&RD_LEFTBUTTONDOWN) //left button - highlight the object and bung us into drag luggage mode - { - menu_selected_pos=pos; //menu slot we clicked on - derive luggage resource from this in mouse_on_off() - current_luggage_resource=master_menu_list[pos].luggage_resource; + // turn off mouse now, to prevent + // player trying to click elsewhere + // BUT leave the bottom menu open - mouse_mode=MOUSE_drag; -// Zdebug("setting OH in top menu"); - OBJECT_HELD = master_menu_list[pos].icon_resource; //id the object via its graphic - EXIT_CLICK_ID=0; // (JEL09oct97) must clear this so next click on exit becomes 1st click again + No_human(); + } else if (me->buttons&RD_LEFTBUTTONDOWN) { + // left button - highlight the object + // and bung us into drag luggage mode - Build_top_menu(); // refresh the menu + // menu slot we clicked on - derive + // luggage resource from this in + // mouse_on_off() - Set_luggage(master_menu_list[pos].luggage_resource); + menu_selected_pos = pos; + current_luggage_resource = master_menu_list[pos].luggage_resource; + + mouse_mode = MOUSE_drag; + // Zdebug("setting OH in top menu"); + + // id the object via its graphic + OBJECT_HELD = master_menu_list[pos].icon_resource; + + // (JEL09oct97) must clear this so + // next click on exit becomes 1st + // click again + + EXIT_CLICK_ID = 0; -// Zdebug("switch to drag mode"); + // refresh the menu + Build_top_menu(); + + Set_luggage(master_menu_list[pos].luggage_resource); + // Zdebug("switch to drag mode"); } } } } } -//------------------------------------------------------------------------------------ -//------------------------------------------------------------------------------------ -void Normal_mouse(void) //Tony30Sept96 -{ -//the gane is playing and none of the menus are activated - but, we need to check if the top menu is to start -//note, wont have luggage - - _mouseEvent *me; - +void Normal_mouse(void) { // Tony30Sept96 + // The gane is playing and none of the menus are activated - but, we + // need to check if the top menu is to start. Note, wont have luggage + _mouseEvent *me; - if ((mousey<0)&&(!menu_status)&&(!mouse_mode_locked)&&(!OBJECT_HELD)) //no save in big-object menu lock situation - { - mouse_mode=MOUSE_system_menu; - - if (mouse_touching) - { -// get off - old_mouse_touching=0; //we've moved off - mouse_touching=0; //we were on something but not anymore + //no save in big-object menu lock situation + if (mousey < 0 && !menu_status && !mouse_mode_locked && !OBJECT_HELD) { + mouse_mode = MOUSE_system_menu; + if (mouse_touching) { + // We were on something, but not anymore + old_mouse_touching = 0; + mouse_touching = 0; } -// reset mouse cursor - in case we're between mice + // reset mouse cursor - in case we're between mice Set_mouse(NORMAL_MOUSE_ID); Build_system_menu(); //Tony19Mar97 } - - - - - if ((mousey>399)&&(!menu_status)&&(!mouse_mode_locked)) - { - - - if (!OBJECT_HELD) //why are we testing for this? - { - mouse_mode=MOUSE_top; //bring down top menu - } - else - { - mouse_mode=MOUSE_drag; + if (mousey > 399 && !menu_status && !mouse_mode_locked) { + // why are we testing for this? + if (!OBJECT_HELD) { + // bring down top menu + mouse_mode = MOUSE_top; + } else { + mouse_mode = MOUSE_drag; } -// if mouse is moving off an object and onto the top menu then do a standard get-off - if (mouse_touching) - { -// get off + // if mouse is moving off an object and onto the top menu + // then do a standard get-off - old_mouse_touching=0; //we've moved off - mouse_touching=0; //we were on something but not anymore + if (mouse_touching) { + // We were on something, but not anymore + old_mouse_touching = 0; + mouse_touching = 0; } -// reset mouse cursor + // reset mouse cursor Set_mouse(NORMAL_MOUSE_ID); -// build menu and start the menu coming down - + // build menu and start the menu coming down Build_top_menu(); return; } + // check also for bringing the bottom menu up + Mouse_on_off(); -//check also for bringing the bottom menu up + // now do the normal click stuff + me = MouseEvent(); - - - Mouse_on_off(); //handles - - - -// now do the normal click stuff - - me = MouseEvent(); //get mouse event - - //----------------------------------------------------- #ifdef _SWORD2_DEBUG - if (definingRectangles) - { - if (draggingRectangle==0) // not yet dragging a rectangle, so need click to start - { - if ( (me!=NULL) && ((me->buttons&RD_LEFTBUTTONDOWN)||(me->buttons&RD_RIGHTBUTTONDOWN)) ) - { - rect_x1 = rect_x2 = (uint32)mousex+this_screen.scroll_offset_x; // set both (x1,y1) - rect_y1 = rect_y2 = (uint32)mousey+this_screen.scroll_offset_y; // & (x2,y2) to this point - draggingRectangle=1; + if (definingRectangles) { + if (draggingRectangle == 0) { + // not yet dragging a rectangle, so need click to start + + if (me && (me->buttons & (RD_LEFTBUTTONDOWN | RD_RIGHTBUTTONDOWN))) { + // set both (x1,y1) and (x2,y2) to this point + rect_x1 = rect_x2 = (uint32) mousex + this_screen.scroll_offset_x; + rect_y1 = rect_y2 = (uint32) mousey + this_screen.scroll_offset_y; + draggingRectangle = 1; } - } - else if (draggingRectangle==1) // currently dragging a rectangle - { - if ( (me!=NULL) && ((me->buttons&RD_LEFTBUTTONDOWN)||(me->buttons&RD_RIGHTBUTTONDOWN)) ) // click means reset - { - draggingRectangle=2; // lock rectangle, so you can let go of mouse to type in the coords - } - else // drag rectangle - { - rect_x2 = (uint32)mousex+this_screen.scroll_offset_x; - rect_y2 = (uint32)mousey+this_screen.scroll_offset_y; + } else if (draggingRectangle == 1) { + // currently dragging a rectangle - click means reset + + if (me && (me->buttons & (RD_LEFTBUTTONDOWN | RD_RIGHTBUTTONDOWN))) { + // lock rectangle, so you can let go of mouse + // to type in the coords + draggingRectangle = 2; + } else { + // drag rectangle + rect_x2 = (uint32) mousex + this_screen.scroll_offset_x; + rect_y2 = (uint32) mousey + this_screen.scroll_offset_y; } - } - else // currently locked to avoid knocking out of place while reading off the coords - { - if ( (me!=NULL) && ((me->buttons&RD_LEFTBUTTONDOWN)||(me->buttons&RD_RIGHTBUTTONDOWN)) ) // click means reset - { - draggingRectangle=0; // back to start again + } else { + // currently locked to avoid knocking out of place + // while reading off the coords + + if (me && (me->buttons & (RD_LEFTBUTTONDOWN | RD_RIGHTBUTTONDOWN))) { + // click means reset - back to start again + draggingRectangle = 0; } } - } - else -#endif // _SWORD2_DEBUG - //----------------------------------------------------- - { + } else { +#endif - // we only care about down clicks when the mouse is over an object - // we ignore mouse releases + // we only care about down clicks when the mouse is over an object + // we ignore mouse releases - if ((me!=NULL)&&((me->buttons&RD_LEFTBUTTONDOWN)||(me->buttons&RD_RIGHTBUTTONDOWN))&&(mouse_touching)) //there's a mouse event to be processed and the mouse is on something - { -// ok, there are no menus about so its nice and simple -// this is as close to the old advisor_188 script as we get I'm sorry to say. + if (me && (me->buttons & (RD_LEFTBUTTONDOWN | RD_RIGHTBUTTONDOWN)) && mouse_touching) { + // there's a mouse event to be processed and the mouse is on + // something + // ok, there are no menus about so its nice and simple + // this is as close to the old advisor_188 script as we get + // I'm sorry to say. -// if player is walking or relaxing then those need to terminate correctly + // if player is walking or relaxing then those need to + // terminate correctly + // otherwise set player run the targets action script + // or, do a special walk if clicking on the scroll-more icon -// otherwise set player run the targets action script -// or, do a special walk if clicking on the scroll-more icon + // PLAYER_ACTION script variable - whatever catches this must + // reset to 0 again + // PLAYER_ACTION = mouse_touching; -// PLAYER_ACTION = mouse_touching; //PLAYER_ACTION script variable - whatever catches this must reset to 0 again - //idle or router-anim will catch it + // idle or router-anim will catch it + // set global script variable 'button' - if (me->buttons&RD_LEFTBUTTONDOWN) // set global script variable 'button' - { - LEFT_BUTTON = 1; - RIGHT_BUTTON = 0; - button_click=0; //for re-click - } - else - { - LEFT_BUTTON = 0; - RIGHT_BUTTON = 1; - button_click=1; //for re-click - } + if (me->buttons & RD_LEFTBUTTONDOWN) { + LEFT_BUTTON = 1; + RIGHT_BUTTON = 0; + button_click = 0; //for re-click + } else { + LEFT_BUTTON = 0; + RIGHT_BUTTON = 1; + button_click = 1; //for re-click + } - MOUSE_X=(uint32)mousex+this_screen.scroll_offset_x; - MOUSE_Y=(uint32)mousey+this_screen.scroll_offset_y; //these might be required by the action script about to be run + // these might be required by the action script about to be run + MOUSE_X = (uint32) mousex + this_screen.scroll_offset_x; + MOUSE_Y = (uint32) mousey + this_screen.scroll_offset_y; + // only left button + if (mouse_touching == EXIT_CLICK_ID && me->buttons & RD_LEFTBUTTONDOWN) { + // its the exit double click situation + // let the existing interaction continue and start + // fading down - switch the human off too - if ((mouse_touching==EXIT_CLICK_ID)&&(me->buttons&RD_LEFTBUTTONDOWN)) //only left button - { -// its the exit double click situation -// let the existing interaction continue and start fading down - switch the human off too + FN_no_human(NULL); + FN_fade_down(NULL); + EXIT_FADING = 1; //tell the walker + } else if (old_button == button_click && mouse_touching == CLICKED_ID && mouse_pointer_res != NORMAL_MOUSE_ID) { + //re-click - do nothing - except on floors + } else { + // allow the click + old_button = button_click; //for re-click - FN_no_human(NULL); - FN_fade_down(NULL); - EXIT_FADING=1; //tell the walker + // for scripts to know what's been clicked (21jan97). + // First used for 'room_13_turning_script' in object + // 'biscuits_13' - } - else if ((old_button==button_click)&&(mouse_touching==CLICKED_ID)&&(mouse_pointer_res!=NORMAL_MOUSE_ID)) - { //re-click - do nothing - except on floors - } - else //allow the click - { - old_button=button_click; //for re-click - - CLICKED_ID = mouse_touching; // for scripts to know what's been clicked (21jan97). First used for 'room_13_turning_script' in object 'biscuits_13' - EXIT_CLICK_ID=0; //must clear these two double-click control flags - do it here so reclicks after exit clicks are cleared up - EXIT_FADING=0; - Set_player_action_event(CUR_PLAYER_ID, mouse_touching); //Tony4Dec96 - - //-------------------------------------- - // Write to walkthrough file (zebug0.txt) - #ifdef _SWORD2_DEBUG - if (OBJECT_HELD) - Zdebug(0,"USED \"%s\" ICON ON %s", FetchObjectName(OBJECT_HELD), FetchObjectName(CLICKED_ID)); - else if (LEFT_BUTTON) - Zdebug(0,"LEFT-CLICKED ON %s", FetchObjectName(CLICKED_ID)); - else // RIGHT BUTTON - Zdebug(0,"RIGHT-CLICKED ON %s", FetchObjectName(CLICKED_ID)); - #endif - //-------------------------------------- - } + CLICKED_ID = mouse_touching; + + // must clear these two double-click control flags - + // do it here so reclicks after exit clicks are + // cleared up + + EXIT_CLICK_ID = 0; + EXIT_FADING = 0; + + Set_player_action_event(CUR_PLAYER_ID, mouse_touching); //Tony4Dec96 + +#ifdef _SWORD2_DEBUG + // Write to walkthrough file (zebug0.txt) + if (OBJECT_HELD) + Zdebug(0, "USED \"%s\" ICON ON %s", FetchObjectName(OBJECT_HELD), FetchObjectName(CLICKED_ID)); + else if (LEFT_BUTTON) + Zdebug(0, "LEFT-CLICKED ON %s", FetchObjectName(CLICKED_ID)); + else // RIGHT BUTTON + Zdebug(0, "RIGHT-CLICKED ON %s", FetchObjectName(CLICKED_ID)); +#endif } } + +#ifdef _SWORD2_DEBUG + } +#endif } -//------------------------------------------------------------------------------------ -void Mouse_on_off(void) //Tony30Sept96 -{ - //this handles the cursor graphic when moving on and off mouse areas - //it also handles the luggage thingy - uint32 pointer_type; - static uint8 mouse_flicked_off=0; +void Mouse_on_off(void) { // Tony30Sept96 + // this handles the cursor graphic when moving on and off mouse areas + // it also handles the luggage thingy + uint32 pointer_type; + static uint8 mouse_flicked_off = 0; - old_mouse_touching=mouse_touching; + old_mouse_touching = mouse_touching; + // don't detect objects that are hidden behind the menu bars (ie. in + // the scrolled-off areas of the screen) - if ((mousey<0)||(mousey>399)) // don't detect objects that are hidden behind the menu bars (ie. in the scrolled-off areas of the screen) - { - pointer_type=0; - mouse_touching=0; + if (mousey < 0 || mousey > 399) { + pointer_type = 0; + mouse_touching = 0; + } else { + // set 'mouse_touching' & return pointer_type + pointer_type = Check_mouse_list(); } - else - pointer_type = Check_mouse_list(); // set 'mouse_touching' & return pointer_type + // same as previous cycle? + if (!mouse_flicked_off && old_mouse_touching == mouse_touching) { + // yes, so nothing to do + // BUT CARRY ON IF MOUSE WAS FLICKED OFF! + return; + } + // can reset this now + mouse_flicked_off = 0; + //the cursor has moved onto something + if (!old_mouse_touching && mouse_touching) { + // make a copy of the object we've moved onto because one day + // we'll move back off again! (but the list positioning could + // theoretically have changed) - if ((!mouse_flicked_off)&&(old_mouse_touching==mouse_touching)) //same as previous cycle? - return; //yes, so nothing to do BUT CARRY ON IF MOUSE WAS FLICKED OFF! + // we can only move onto something from being on nothing - we + // stop the system going from one to another when objects + // overlap - mouse_flicked_off=0; // can reset this now + // memcpy(&old_mouse_object, &mouse_list[mouse_touching], sizeof(Object_mouse)); + old_mouse_touching = mouse_touching; - if ((!old_mouse_touching)&&(mouse_touching)) //the cursor has moved onto something - { + // run get on -// make a copy of the object we've moved onto -// because one day we'll move back off again! (but the list positioning could theoretically have changed) -// we can only move onto something from being on nothing - we stop the system going from one to another when objects overlap + if (pointer_type) { + // 'pointer_type' holds the resource id of the + // pointer anim -// memcpy( &old_mouse_object, &mouse_list[mouse_touching], sizeof(Object_mouse)); + Set_mouse(pointer_type); - old_mouse_touching=mouse_touching; // + // setup luggage icon + if (OBJECT_HELD) { + // Set_luggage(master_menu_list[menu_selected_pos].luggage_resource); + Set_luggage(current_luggage_resource); + } + } else + Con_fatal_error("ERROR: mouse.pointer==0 for object %d (%s) - update logic script!", mouse_touching, FetchObjectName(mouse_touching)); + } else if (old_mouse_touching && !mouse_touching) { + // the cursor has moved off something - reset cursor to + // normal pointer -// run get on + old_mouse_touching = 0; + Set_mouse(NORMAL_MOUSE_ID); - if (pointer_type) - { - Set_mouse(pointer_type); // 'pointer_type' holds the resource id of the pointer anim + // reset luggage only when necessary + } else if (old_mouse_touching && mouse_touching) { + // The cursor has moved off something and onto something + // else. Flip to a blank cursor for a cycle. - if (OBJECT_HELD) // setup luggage icon -// Set_luggage(master_menu_list[menu_selected_pos].luggage_resource); - Set_luggage(current_luggage_resource); + // ignore the new id this cycle - should hit next cycle + mouse_touching = 0; + old_mouse_touching = 0; + Set_mouse(0); - } - else - Con_fatal_error("ERROR: mouse.pointer==0 for object %d (%s) - update logic script!", mouse_touching, FetchObjectName(mouse_touching)); - } - else if ((old_mouse_touching)&&(!mouse_touching)) // the cursor has moved off something - { - old_mouse_touching=0; // we've moved off - Set_mouse(NORMAL_MOUSE_ID); // reset cursor to normal pointer - // reset luggage only when necessary - } - else if ((old_mouse_touching)&&(mouse_touching)) // the cursor has moved off something and onto something else - { // flip to a blank cursor for a cycle - mouse_touching=0; // ignore the new id this cycle - should hit next cycle - old_mouse_touching=0; // we've moved off - Set_mouse(0); // blank cursor - mouse_flicked_off=1; // so we know to set the mouse pointer back to normal if 2nd hot-spot doesn't register because mouse pulled away quickly (onto nothing) + // so we know to set the mouse pointer back to normal if 2nd + // hot-spot doesn't register because mouse pulled away + // quickly (onto nothing) + + mouse_flicked_off = 1; // reset luggage only when necessary - } - else // for when mouse was flicked off for one cycle, but then moved onot nothing before 2nd hot-spot registered - { + } else { + // Mouse was flicked off for one cycle, but then moved onto + // nothing before 2nd hot-spot registered + // both 'old_mouse_touching' & 'mouse_touching' will be zero - Set_mouse(NORMAL_MOUSE_ID); // reset cursor to normal pointer - } + // reset cursor to normal pointer - // possible check for edge of screen more-to-scroll here on large screens + Set_mouse(NORMAL_MOUSE_ID); + } + // possible check for edge of screen more-to-scroll here on large + // screens } -//------------------------------------------------------------------------------------ -void Set_mouse(uint32 res) // (4dec96 JEL) -{ - uint8 *icon; - uint32 len; - mouse_pointer_res=res; //high level - whats the mouse - for the engine +void Set_mouse(uint32 res) { // (4dec96 JEL) + uint8 *icon; + uint32 len; + + //high level - whats the mouse - for the engine + mouse_pointer_res = res; - if (res) // if it's not NULL - { - icon = res_man.Res_open( res ) + sizeof(_standardHeader); + if (res) { + icon = res_man.Res_open(res) + sizeof(_standardHeader); len = res_man.resList[res]->size - sizeof(_standardHeader); - if (res == NORMAL_MOUSE_ID) // don't pulse the normal pointer - SetMouseAnim(icon, len, RDMOUSE_NOFLASH); // 0 means don't pulse this pointer, just do the regular anim loop - else - SetMouseAnim(icon, len, RDMOUSE_FLASH); // 1 mean pulse before starting regular anim loop + // don't pulse the normal pointer - just do the regular anim + // loop - res_man.Res_close( res ); + if (res == NORMAL_MOUSE_ID) + SetMouseAnim(icon, len, RDMOUSE_NOFLASH); + else + SetMouseAnim(icon, len, RDMOUSE_FLASH); + + res_man.Res_close(res); + } else { + // blank cursor + SetMouseAnim(NULL, 0, 0); } - else - SetMouseAnim(NULL,0,0); // blank cursor } -//------------------------------------------------------------------------------------ -void Set_luggage(uint32 res) //Tony26Nov96 -{ - uint8 *icon; - uint32 len; - if (res) // if not NULL - { - real_luggage_item=res; +void Set_luggage(uint32 res) { //Tony26Nov96 + uint8 *icon; + uint32 len; - icon = res_man.Res_open( res ) + sizeof(_standardHeader); + real_luggage_item = res; + + if (res) { + icon = res_man.Res_open(res) + sizeof(_standardHeader); len = res_man.resList[res]->size - sizeof(_standardHeader); - SetLuggageAnim(icon, len); + SetLuggageAnim(icon, len); - res_man.Res_close( res ); - } - else - { real_luggage_item=0; + res_man.Res_close(res); + } else SetLuggageAnim(NULL, 0); - } } -//------------------------------------------------------------------------------------ -uint32 Check_mouse_list(void) //Tony30Sept96 -{ - int32 priority=0; - uint32 j=1; - - - if (cur_mouse>1) - { - while(priority<10) //number of priorities subject to implementation needs - { - if ((mouse_list[j].priority==priority) && // if the mouse pointer is over this mouse-detection-box - (mousex+this_screen.scroll_offset_x >= mouse_list[j].x1) && - (mousex+this_screen.scroll_offset_x <= mouse_list[j].x2) && - (mousey+this_screen.scroll_offset_y >= mouse_list[j].y1) && - (mousey+this_screen.scroll_offset_y <= mouse_list[j].y2)) - { - -/* - if (mouse_list[j].anim_resource) // want to use sprite as a mouse mask, for better accuracy of detection (25oct96 JEL) - { - // only works for uncompressed sprite data!! - // THIS IS NEVER USED IN SWORD2 - - if (Check_sprite_pixel(j)) // if the mouse is touching a non-zero pixel of the sprite - { - mouse_touching=mouse_list[j].id; // record id - CreatePointerText(mouse_list[j].pointer_text); // James16jun97 - return(mouse_list[j].pointer); //return pointer type - } - } - else // ok, we're touching the detection-box -*/ - { - mouse_touching=mouse_list[j].id; // record id - - // change all COGS pointers to CROSHAIR - if (mouse_list[j].pointer == USE) - mouse_list[j].pointer = CROSHAIR; - CreatePointerText(mouse_list[j].pointer_text, mouse_list[j].pointer); // James16jun97 - return(mouse_list[j].pointer); //return pointer type - } + +uint32 Check_mouse_list(void) { // Tony30Sept96 + int32 priority = 0; + uint32 j = 1; + + if (cur_mouse > 1) { + //number of priorities subject to implementation needs + while (priority < 10) { + // if the mouse pointer is over this + // mouse-detection-box + + if (mouse_list[j].priority == priority && + mousex + this_screen.scroll_offset_x >= mouse_list[j].x1 && + mousex + this_screen.scroll_offset_x <= mouse_list[j].x2 && + mousey + this_screen.scroll_offset_y >= mouse_list[j].y1 && + mousey + this_screen.scroll_offset_y <= mouse_list[j].y2) { + // record id + mouse_touching = mouse_list[j].id; + + // change all COGS pointers to CROSHAIR + if (mouse_list[j].pointer == USE) + mouse_list[j].pointer = CROSHAIR; + + CreatePointerText(mouse_list[j].pointer_text, mouse_list[j].pointer); // James16jun97 + + // return pointer type + return(mouse_list[j].pointer); } - j++; //next - if (j==cur_mouse) - { - j=0; - priority++; //next priority - 0 being the highest, 9 the lowest + j++; + if (j == cur_mouse) { + j = 0; + // next priority - 0 being the highest, 9 the + // lowest + priority++; } } } - mouse_touching=0; // touching nothing - return(0); // no pointer to return + mouse_touching = 0; // touching nothing + return 0; // no pointer to return } -//------------------------------------------------------------------------------------ - -void CreatePointerText(uint32 textId, uint32 pointerRes) // James16jun97 -{ - uint32 local_text; - uint32 text_res; - uint8 *text; - int16 xOffset, yOffset; // offsets for pointer text sprite from pointer position - uint8 justification; - - #define POINTER_TEXT_WIDTH 640 // just in case! - #define POINTER_TEXT_PEN 184 // white - - if (pointerTextSelected) - { - if (textId) - { - //------------------------------------------- - // check what the pointer is, to set offsets correctly for text position - - switch(pointerRes) - { + +#define POINTER_TEXT_WIDTH 640 // just in case! +#define POINTER_TEXT_PEN 184 // white + +void CreatePointerText(uint32 textId, uint32 pointerRes) { // James16jun97 + uint32 local_text; + uint32 text_res; + uint8 *text; + // offsets for pointer text sprite from pointer position + int16 xOffset, yOffset; + uint8 justification; + + if (pointerTextSelected) { + if (textId) { + // check what the pointer is, to set offsets + // correctly for text position + + switch (pointerRes) { case CROSHAIR: - yOffset = -7; // above (above & to the right of the pointer coordinate) - xOffset = +10; // right + yOffset = -7; + xOffset = +10; break; case EXIT0: - yOffset = +15; // below - xOffset = +20; // right + yOffset = +15; + xOffset = +20; break; case EXIT1: - yOffset = +16; // below - xOffset = -10; // left + yOffset = +16; + xOffset = -10; break; case EXIT2: - yOffset = +10; // below - xOffset = -22; // left + yOffset = +10; + xOffset = -22; break; case EXIT3: - yOffset = -16; // above - xOffset = -10; // left + yOffset = -16; + xOffset = -10; break; case EXIT4: - yOffset = -15; // above - xOffset = +15; // right + yOffset = -15; + xOffset = +15; break; case EXIT5: - yOffset = -12; // above - xOffset = +10; // right + yOffset = -12; + xOffset = +10; break; case EXIT6: - yOffset = +10; // below - xOffset = +25; // right + yOffset = +10; + xOffset = +25; break; case EXIT7: - yOffset = +16; // below - xOffset = +20; // right + yOffset = +16; + xOffset = +20; break; case EXITDOWN: - yOffset = -20; // above - xOffset = -10; // left + yOffset = -20; + xOffset = -10; break; case EXITUP: - yOffset = +20; // below - xOffset = +20; // right + yOffset = +20; + xOffset = +20; break; case MOUTH: - yOffset = -10; // above - xOffset = +15; // right + yOffset = -10; + xOffset = +15; break; case NORMAL: - yOffset = -10; // above - xOffset = +15; // right + yOffset = -10; + xOffset = +15; break; case PICKUP: - yOffset = -40; // above - xOffset = +10; // right + yOffset = -40; + xOffset = +10; break; case SCROLL_L: - yOffset = -20; // above - xOffset = +20; // right + yOffset = -20; + xOffset = +20; break; case SCROLL_R: - yOffset = -20; // above - xOffset = -20; // left + yOffset = -20; + xOffset = -20; break; case USE: - yOffset = -8; // above - xOffset = +20; // right + yOffset = -8; + xOffset = +20; break; - default: // shouldn't happen if we cover all the different mouse pointers above - yOffset = -10; // above - xOffset = +10; // right + default: + // shouldn't happen if we cover all + // the different mouse pointers above + yOffset = -10; + xOffset = +10; } - //------------------------------------------- - // set up justification for text sprite, - // based on it's offsets from the pointer position - - // from maketext.h - //#define NO_JUSTIFICATION 0 // only for debug text, since it doesn't keep text inside the screen margin! - //#define POSITION_AT_CENTRE_OF_BASE 1 // these all force text inside the screen edge margin when necessary - //#define POSITION_AT_CENTRE_OF_TOP 2 - //#define POSITION_AT_LEFT_OF_TOP 3 - //#define POSITION_AT_RIGHT_OF_TOP 4 - //#define POSITION_AT_LEFT_OF_BASE 5 - //#define POSITION_AT_RIGHT_OF_BASE 6 - //#define POSITION_AT_LEFT_OF_CENTRE 7 - //#define POSITION_AT_RIGHT_OF_CENTRE 8 - - //----------------------------------------- - if (yOffset < 0) // if above pointer - { - if (xOffset < 0) // above left - { + // set up justification for text sprite, based on its + // offsets from the pointer position + + if (yOffset < 0) { + // above pointer + if (xOffset < 0) { + // above left justification = POSITION_AT_RIGHT_OF_BASE; - } - else if (xOffset > 0) // above right - { - justification = POSITION_AT_LEFT_OF_BASE; // text sprite is justified from it's bottom-left corner - } - else // (xOffset==0) // above centre - { + } else if (xOffset > 0) { + // above right + justification = POSITION_AT_LEFT_OF_BASE; + } else { + // above centre justification = POSITION_AT_CENTRE_OF_BASE; } - } - //----------------------------------------- - else if (yOffset > 0) // if below pointer - { - if (xOffset < 0) // below left - { + } else if (yOffset > 0) { + // below pointer + if (xOffset < 0) { + // below left justification = POSITION_AT_RIGHT_OF_TOP; - } - else if (xOffset > 0) // below right - { + } else if (xOffset > 0) { + // below right justification = POSITION_AT_LEFT_OF_TOP; - } - else // (xOffset==0) // below centre - { + } else { + // below centre justification = POSITION_AT_CENTRE_OF_TOP; } - } - //----------------------------------------- - else // if at same y-coord as pointer - { - if (xOffset < 0) // centre left - { + } else { + // same y-coord as pointer + if (xOffset < 0) { + // centre left justification = POSITION_AT_RIGHT_OF_CENTRE; - } - else if (xOffset > 0) // centre right - { + } else if (xOffset > 0) { + // centre right + justification = POSITION_AT_LEFT_OF_CENTRE; + } else { + // centre centre - shouldn't happen + // anyway! justification = POSITION_AT_LEFT_OF_CENTRE; - } - else // (xOffset==0) // centre centre - { - justification = POSITION_AT_LEFT_OF_CENTRE; // shouldn't happen anyway! } } - //------------------------------------------- - text_res = textId/SIZE; // text resource number - local_text = textId&0xffff; // text line number within the resource + // text resource number, and line number within the + // resource - text = FetchTextLine( res_man.Res_open(text_res), local_text ); // open text file & get the line + text_res = textId / SIZE; + local_text = textId & 0xffff; - // 'text+2' to skip the first 2 bytes which form the line reference number - pointer_text_bloc_no = Build_new_block(text+2, mousex+xOffset, mousey+yOffset, POINTER_TEXT_WIDTH, POINTER_TEXT_PEN, RDSPR_TRANS+RDSPR_DISPLAYALIGN, speech_font_id, justification); + // open text file & get the line + text = FetchTextLine(res_man.Res_open(text_res), local_text); - res_man.Res_close(text_res); // now ok to close the text file + // 'text+2' to skip the first 2 bytes which form the + // line reference number + + pointer_text_bloc_no = Build_new_block( + text + 2, mousex + xOffset, mousey + yOffset, + POINTER_TEXT_WIDTH, POINTER_TEXT_PEN, + RDSPR_TRANS | RDSPR_DISPLAYALIGN, + speech_font_id, justification); + + // now ok to close the text file + res_man.Res_close(text_res); } } } -//------------------------------------------------------------------------------------ -void ClearPointerText(void) // James16jun97 -{ - if (pointer_text_bloc_no) - { + +void ClearPointerText(void) { // James16jun97 + if (pointer_text_bloc_no) { Kill_text_bloc(pointer_text_bloc_no); - pointer_text_bloc_no=0; + pointer_text_bloc_no = 0; } } -//------------------------------------------------------------------------------------ -/* NOT USED IN SWORD2 -uint8 Check_sprite_pixel( uint32 j ) // (25oct96 JEL) -{ - // only works for uncompressed sprite data!! - uint8 *file; - uint8 hit; - _frameHeader *frame_head; - int16 sprite_x, sprite_y; - int16 in_sprite_x, in_sprite_y; - uint8 *sprite_data; +int32 FN_no_human(int32 *params) { // Tony30Sept96 + // param none + // for logic scripts (James21may97) + MOUSE_AVAILABLE = 0; - sprite_x = mouse_list[j].x1; // sprite coords have been copied to mouse area coords by FN_register_X_frame (X = sort, back or fore) - sprite_y = mouse_list[j].y1; // so easier to get them from there than from the anim file again + ClearPointerText(); + //human/mouse off + mouse_status = 1; - file = res_man.Res_open(mouse_list[j].anim_resource); // open the anim file & point to start of it - frame_head = FetchFrameHeader(file,mouse_list[j].anim_pc); // point to frame header of current frame - sprite_data = (uint8 *)(frame_head + 1); // point to start of frame data + Set_mouse(0); + Set_luggage(0); - in_sprite_x = mousex + this_screen.scroll_offset_x - sprite_x; // x-coord of mouse from origin at top-left of sprite - in_sprite_y = mousey + this_screen.scroll_offset_y - sprite_y; // y-coord of mouse from origin at top-left of sprite + // must be normal mouse situation or a largely neutral situation - + // special menus use No_human - hit = sprite_data[in_sprite_y * frame_head->width + in_sprite_x]; // hit = value of pixel to which the mouse is pointing + //dont hide menu in conversations + if (TALK_FLAG == 0) + HideMenu(RDMENU_BOTTOM); - res_man.Res_close(mouse_list[j].anim_resource); // close anim file + if (mouse_mode == MOUSE_system_menu) { + // close menu + mouse_mode = MOUSE_normal; + HideMenu(RDMENU_TOP); + } - return (hit); // we are touching the sprite if 'hit' is non-zero + // script continue + return IR_CONT; } -*/ -//------------------------------------------------------------------------------------ -int32 FN_no_human(int32 *params) //Tony30Sept96 -{ -//param none - - MOUSE_AVAILABLE = 0; // for logic scripts (James21may97) - ClearPointerText(); +void No_human(void) { // Tony4June97 + // leaves the menus open + // used by the system when clicking right on a menu item to examine + // it and when combining objects - mouse_status=1; //human/mouse off + // for logic scripts (James21may97) + MOUSE_AVAILABLE = 0; - Set_mouse(0); // blank cursor - Set_luggage(0); // blank cursor + // human/mouse off + mouse_status = 1; + Set_mouse(0); + Set_luggage(0); +} -//must be normal mouse situation or a largely neutral situation - special menus use No_human - if (TALK_FLAG==0) //dont hide menu in conversations - HideMenu(RDMENU_BOTTOM); +int32 FN_add_human(int32 *params) { // Tony30Sept96 + // param none + // for logic scripts (James21may97) + MOUSE_AVAILABLE = 1; - if (mouse_mode==MOUSE_system_menu) - { - mouse_mode=MOUSE_normal; //close menu - HideMenu(RDMENU_TOP); // start the menu coming down + //off + if (mouse_status) { + mouse_status = 0; // on + mouse_touching = 1; // forces engine to choose a cursor } + //clear this to reset no-second-click system + CLICKED_ID = 0; - if (params); - + // this is now done outside the OBJECT_HELD check in case it's set to + // zero before now! (James 10july97) - return(1); //script continue -} -//------------------------------------------------------------------------------------ -void No_human(void) //Tony4June97 -{ -//leaves the menus open -//used by the system when clicking right on a menu item to examine it and -//when combining objects - - MOUSE_AVAILABLE = 0; // for logic scripts (James21may97) + // unlock the mouse from possible large object lock situtations - see + // syphon in rm 3 - mouse_status=1; //human/mouse off + mouse_mode_locked = 0; - Set_mouse(0); // blank cursor - Set_luggage(0); // blank cursor -} -//------------------------------------------------------------------------------------ -int32 FN_add_human(int32 *params) //Tony30Sept96 -{ - //param none -#ifdef _SWORD2_DEBUG - uint8 black[4] = {0,0,0,0}; - uint8 white[4] = {255,255,255,0}; -#endif // ('0' means don't print to console, but console isn't up anyway) + if (OBJECT_HELD) { + // was dragging something around + // need to clear this again + OBJECT_HELD = 0; + // and these may also need clearing, just in case + examining_menu_icon = 0; + COMBINE_BASE = 0; + Set_luggage(0); + } - MOUSE_AVAILABLE = 1; // for logic scripts (James21may97) - - - if (mouse_status) //off - { - mouse_status=0; //on - mouse_touching=1; //forces engine to choose a cursor + // if mouse is over menu area + if (mousey > 399) { + if (mouse_mode != MOUSE_holding) { + // VITAL - reset things & rebuild the menu + mouse_mode = MOUSE_normal; + Set_mouse(NORMAL_MOUSE_ID); + } else + Set_mouse(NORMAL_MOUSE_ID); } - CLICKED_ID=0; //clear this to reset no-second-click system + // enabled/disabled from console; status printed with on-screen debug + // info - // this is now done outside the OBJECT_HELD check in case it's set to zero before now! (James 10july97) - mouse_mode_locked=0; //unlock the mouse from possible large object lock situtations - see syphon in rm 3 +#ifdef _SWORD2_DEBUG + uint8 black[4] = { 0, 0, 0, 0 }; + uint8 white[4] = { 255, 255, 255, 0 }; - if (OBJECT_HELD) //was dragging something around - { - OBJECT_HELD=0; // need to clear this again + if (testingSnR) { + // testing logic scripts by simulating an instant Save & + // Restore - examining_menu_icon=0; // and these may also need clearing - COMBINE_BASE=0; // - just in case + BS2_SetPalette(0, 1, white, RDPAL_INSTANT); + // stops all fx & clears the queue - eg. when leaving a + // location - Set_luggage(0); // blank cursor - } + Clear_fx_queue(); + // Trash all object resources so they load in fresh & restart + // their logic scripts + res_man.Kill_all_objects(0); - if ((mousey>399)&&(mouse_mode!=MOUSE_holding)) // if mouse is over menu area - { - mouse_mode=MOUSE_normal; // VITAL - reset things & rebuild the menu - Set_mouse(NORMAL_MOUSE_ID); + BS2_SetPalette(0, 1, black, RDPAL_INSTANT); } - else if (mousey>399) - Set_mouse(NORMAL_MOUSE_ID); - +#endif - //---------------------------------------------------------------------------------------------- - // enabled/disabled from console; status printed with on-screen debug info -#ifdef _SWORD2_DEBUG - if (testingSnR) // testing logic scripts by simulating an instant Save & Restore - { - BS2_SetPalette(0, 1, white, RDPAL_INSTANT); + return IR_CONT; +} - Clear_fx_queue(); // stops all fx & clears the queue - eg. when leaving a location - res_man.Kill_all_objects(0); // ie. trashing all object resources so they load in fresh & restart their logic scripts +int32 FN_register_mouse(int32 *params) { // Tony29Oct96 + // this call would be made from an objects service script 0 + // the object would be one with no graphic but with a mouse - i.e. a + // floor or one whose mouse area is manually defined rather than + // intended to fit sprite shape - BS2_SetPalette(0, 1, black, RDPAL_INSTANT); - } -#endif // ('0' means don't print to console, but console isn't up anyway) - //---------------------------------------------------------------------------------------------- - if (params); + // param 0 pointer to Object_mouse or 0 for no write to mouse + // list - return(1); //script continue -} -//------------------------------------------------------------------------------------ -int32 FN_register_mouse(int32 *params) //Tony29Oct96 -{ -//this call would be made from an objects service script 0 -//the object would be one with no graphic but with a mouse - i.e. a floor -// or one whose mouse area is manually defined rather than intended to fit sprite shape + // Zdebug(1, "cur_mouse = %d", cur_mouse); -//param 0 pointer to Object_mouse or 0 for no write to mouse list + Object_mouse *ob_mouse = (Object_mouse *) params[0]; -// Zdebug(1,"cur_mouse = %d", cur_mouse); + // only if 'pointer' isn't NULL + if (ob_mouse->pointer) { +#ifdef _SWORD2_DEBUG + if (cur_mouse == TOTAL_mouse_list) + Con_fatal_error("ERROR: mouse_list full [%s line %u]", __FILE__, __LINE__); +#endif + mouse_list[cur_mouse].x1 = ob_mouse->x1; + mouse_list[cur_mouse].y1 = ob_mouse->y1; + mouse_list[cur_mouse].x2 = ob_mouse->x2; + mouse_list[cur_mouse].y2 = ob_mouse->y2; - Object_mouse *ob_mouse; + mouse_list[cur_mouse].priority = ob_mouse->priority; + mouse_list[cur_mouse].pointer = ob_mouse->pointer; - ob_mouse = (Object_mouse *) params[0]; // param 1 is pointer to mouse structure + // (James17jun97) check if pointer text field is set due to + // previous object using this slot (ie. not correct for this + // one) - if (ob_mouse->pointer) // only if 'pointer' isn't NULL - { - #ifdef _SWORD2_DEBUG - if (cur_mouse==TOTAL_mouse_list) - Con_fatal_error("ERROR: mouse_list full [%s line %u]",__FILE__,__LINE__); - #endif + // if 'pointer_text' field is set, but the 'id' field isn't + // same is current id, then we don't want this "left over" + // pointer text - mouse_list[cur_mouse].x1 = ob_mouse->x1; - mouse_list[cur_mouse].y1 = ob_mouse->y1; - mouse_list[cur_mouse].x2 = ob_mouse->x2; - mouse_list[cur_mouse].y2 = ob_mouse->y2; + if (mouse_list[cur_mouse].pointer_text && mouse_list[cur_mouse].id != (int32) ID) + mouse_list[cur_mouse].pointer_text = 0; - mouse_list[cur_mouse].priority = ob_mouse->priority; - mouse_list[cur_mouse].pointer = ob_mouse->pointer; + // get id from system variable 'id' which is correct for + // current object - //----------------------------------------------- - // (James17jun97) - // check if pointer text field is set due to previous object using this slot (ie. not correct for this one) - if ((mouse_list[cur_mouse].pointer_text) && (mouse_list[cur_mouse].id != (int32)ID)) // if 'pointer_text' field is set, but the 'id' field isn't same is current id - mouse_list[cur_mouse].pointer_text=0; // then we don't want this "left over" pointer text - //----------------------------------------------- + mouse_list[cur_mouse].id = ID; - mouse_list[cur_mouse].id = ID; // get id from system variable 'id' which is correct for current object + // not using sprite as mask - this is only done from + // FN_register_frame() - mouse_list[cur_mouse].anim_resource = 0; // not using sprite as mask - this is only done from FN_register_frame() - mouse_list[cur_mouse].anim_pc = 0; + mouse_list[cur_mouse].anim_resource = 0; + mouse_list[cur_mouse].anim_pc = 0; - //Zdebug("mouse id %d", mouse_list[cur_mouse].id); + // Zdebug("mouse id %d", mouse_list[cur_mouse].id); cur_mouse++; } - return(IR_CONT); // continue script + return IR_CONT; } -//------------------------------------------------------------------------------------ + // use this in the object's service script prior to registering the mouse area // ie. before FN_register_mouse or FN_register_frame // - best if kept at very top of service script -int32 FN_register_pointer_text(int32 *params) // James16jun97 -{ -// param 0 local id of text line to use as pointer text +int32 FN_register_pointer_text(int32 *params) { // James16jun97 + // param 0 local id of text line to use as pointer text - #ifdef _SWORD2_DEBUG - if (cur_mouse==TOTAL_mouse_list) - Con_fatal_error("ERROR: mouse_list full [%s line %u]",__FILE__,__LINE__); - #endif +#ifdef _SWORD2_DEBUG + if (cur_mouse == TOTAL_mouse_list) + Con_fatal_error("ERROR: mouse_list full [%s line %u]", __FILE__, __LINE__); +#endif - mouse_list[cur_mouse].id = ID; // current object id - used for checking pointer_text when mouse area registered (in FN_register_mouse & FN_register_frame) - mouse_list[cur_mouse].pointer_text = params[0]; + // current object id - used for checking pointer_text when mouse area + // registered (in FN_register_mouse & FN_register_frame) - return(IR_CONT); // continue script + mouse_list[cur_mouse].id = ID; + mouse_list[cur_mouse].pointer_text = params[0]; + return IR_CONT; } -//------------------------------------------------------------------------------------ -int32 FN_blank_mouse(int32 *params) //Tony29Oct96 -{ -//set mouse to normal pointer - used in speech - -//no params +int32 FN_blank_mouse(int32 *params) { //Tony29Oct96 + //set mouse to normal pointer - used in speech + //no params Set_mouse(0); - - if (params); - - return(1); //cont + return IR_CONT; } -//------------------------------------------------------------------------------------ -int32 FN_init_floor_mouse(int32 *params) // James29nov96 -{ + +int32 FN_init_floor_mouse(int32 *params) { // James29nov96 // params 0 pointer to object's mouse structure - Object_mouse *ob_mouse = (Object_mouse *) params[0]; + Object_mouse *ob_mouse = (Object_mouse *) params[0]; - ob_mouse->x1 = 0; - ob_mouse->y1 = 0; - ob_mouse->x2 = this_screen.screen_wide-1; - ob_mouse->y2 = this_screen.screen_deep-1; - ob_mouse->priority = 9; // floor is always lowest priority - ob_mouse->pointer = NORMAL_MOUSE_ID; // normal pointer + // floor is always lowest priority + ob_mouse->x1 = 0; + ob_mouse->y1 = 0; + ob_mouse->x2 = this_screen.screen_wide - 1; + ob_mouse->y2 = this_screen.screen_deep - 1; + ob_mouse->priority = 9; + ob_mouse->pointer = NORMAL_MOUSE_ID; - return(IR_CONT); // continue script + return IR_CONT; } -//--------------------------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------------------------- -#define SCROLL_MOUSE_WIDTH 20 // James13feb97 (updated by James 25mar97) -//--------------------------------------------------------------------------------------------------------------------- -int32 FN_set_scroll_left_mouse(int32 *params) // James13feb97 -{ + +// James13feb97 (updated by James 25mar97) +#define SCROLL_MOUSE_WIDTH 20 + +int32 FN_set_scroll_left_mouse(int32 *params) { // James13feb97 // params 0 pointer to object's mouse structure Object_mouse *ob_mouse = (Object_mouse *) params[0]; + // Highest priority - ob_mouse->x1 = 0; - ob_mouse->y1 = 0; - ob_mouse->x2 = this_screen.scroll_offset_x + SCROLL_MOUSE_WIDTH; - ob_mouse->y2 = this_screen.screen_deep-1; - ob_mouse->priority = 0; // highest priority + ob_mouse->x1 = 0; + ob_mouse->y1 = 0; + ob_mouse->x2 = this_screen.scroll_offset_x + SCROLL_MOUSE_WIDTH; + ob_mouse->y2 = this_screen.screen_deep - 1; + ob_mouse->priority = 0; - if (this_screen.scroll_offset_x > 0) // if not fully scrolled to the left + if (this_screen.scroll_offset_x > 0) { + // not fully scrolled to the left ob_mouse->pointer = SCROLL_LEFT_MOUSE_ID; - else - ob_mouse->pointer = 0; // so the mouse area doesn't get registered - + } else { + // so the mouse area doesn't get registered + ob_mouse->pointer = 0; + } - return(IR_CONT); // continue script + return IR_CONT; } -//--------------------------------------------------------------------------------------------------------------------- -int32 FN_set_scroll_right_mouse(int32 *params) // James13feb97 -{ + +int32 FN_set_scroll_right_mouse(int32 *params) { // James13feb97 // params 0 pointer to object's mouse structure Object_mouse *ob_mouse = (Object_mouse *) params[0]; + // Highest priority - ob_mouse->x1 = this_screen.scroll_offset_x + screenWide - SCROLL_MOUSE_WIDTH; - ob_mouse->y1 = 0; - ob_mouse->x2 = this_screen.screen_wide-1; - ob_mouse->y2 = this_screen.screen_deep-1; - ob_mouse->priority = 0; // highest priority + ob_mouse->x1 = this_screen.scroll_offset_x + screenWide - SCROLL_MOUSE_WIDTH; + ob_mouse->y1 = 0; + ob_mouse->x2 = this_screen.screen_wide - 1; + ob_mouse->y2 = this_screen.screen_deep - 1; + ob_mouse->priority = 0; - if (this_screen.scroll_offset_x < this_screen.max_scroll_offset_x) // if not fully scrolled to the right + if (this_screen.scroll_offset_x < this_screen.max_scroll_offset_x) { + // not fully scrolled to the right ob_mouse->pointer = SCROLL_RIGHT_MOUSE_ID; - else - ob_mouse->pointer = 0; // so the mouse area doesn't get registered - + } else { + // so the mouse area doesn't get registered + ob_mouse->pointer = 0; + } - return(IR_CONT); // continue script + return IR_CONT; } -//--------------------------------------------------------------------------------------------------------------------- -int32 FN_set_object_held(int32 *params) //tony19May97 -{ -//params 0 luggage icon to set + +int32 FN_set_object_held(int32 *params) { //tony19May97 + // params 0 luggage icon to set Set_luggage(params[0]); - OBJECT_HELD=params[0]; - current_luggage_resource=params[0]; + OBJECT_HELD = params[0]; + current_luggage_resource = params[0]; - mouse_mode_locked=1; //mode locked - no top menu available + // mode locked - no top menu available + mouse_mode_locked = 1; + return IR_CONT; +} +// called from speech scripts to remove the chooser bar when it's not +// appropriate to keep it displayed - return(IR_CONT); // continue script -} -//--------------------------------------------------------------------------------------------------------------------- -// called from speech scripts to remove the chooser bar when it's not appropriate to keep it displayed -int32 FN_remove_chooser(int32 *params) // James13aug97 -{ +int32 FN_remove_chooser(int32 *params) { // James13aug97 HideMenu(RDMENU_BOTTOM); - - return(IR_CONT); // continue script + return(IR_CONT); } -//--------------------------------------------------------------------------------------------------------------------- -int32 FN_disable_menu(int32 *params) //Tony1Oct96 -{ - mouse_mode_locked=1; //mode locked - no top menu available - mouse_mode=MOUSE_normal; + +int32 FN_disable_menu(int32 *params) { // Tony1Oct96 + // mode locked - no top menu available + mouse_mode_locked = 1; + mouse_mode = MOUSE_normal; HideMenu(RDMENU_TOP); HideMenu(RDMENU_BOTTOM); - return(IR_CONT); // continue script + return IR_CONT; } -//--------------------------------------------------------------------------------------------------------------------- -int32 FN_enable_menu(int32 *params) //tony4June97 -{ +int32 FN_enable_menu(int32 *params) { // tony4June97 + //mode locked - no top menu available + mouse_mode_locked = 0; + return IR_CONT; +} - mouse_mode_locked=0; //mode locked - no top menu available +int32 FN_check_player_activity(int32 *params) { // James23july97 + // Used to decide when to trigger music cues described as "no player + // activity for a while" - return(IR_CONT); // continue script -} -//--------------------------------------------------------------------------------------------------------------------- -int32 FN_check_player_activity(int32 *params) // James23july97 -{ -// Used to decide when to trigger music cues described as "no player activity for a while" + // params 0 threshold delay in seconds, ie. what we want to + // check the actual delay against -// params 0 threshold delay in seconds, ie. what we want to check the actual delay against + uint32 threshold = params[0] * 12; // in game cycles - uint32 threshold = params[0]*12; // in game cycles + // if the actual delay is at or above the given threshold + if (player_activity_delay >= threshold) { + // reset activity delay counter, now that we've got a + // positive check - if (player_activity_delay >= threshold) // if the actual delay is at or above the given threshold - { - player_activity_delay=0; // reset activity delay counter, now that we've got a positive check - RESULT=1; - } - else - RESULT=0; + player_activity_delay = 0; + RESULT = 1; + } else + RESULT = 0; - return(IR_CONT); // continue script + return IR_CONT; } -//--------------------------------------------------------------------------------------------------------------------- -int32 FN_reset_player_activity_delay(int32 *params) // James23july97 -{ -// Use if you want to deliberately reset the "no player activity" counter for any reason - -// no params - player_activity_delay=0; // reset activity delay counter +int32 FN_reset_player_activity_delay(int32 *params) { // James23july97 + // Use if you want to deliberately reset the "no player activity" + // counter for any reason + // no params - return(IR_CONT); // continue script + player_activity_delay = 0; + return IR_CONT; } -//--------------------------------------------------------------------------------------------------------------------- -void Monitor_player_activity(void) // James23july97 -{ - if (CheckForMouseEvents()) // if there is at least one mouse event outstanding - player_activity_delay=0; // reset activity delay counter - else - player_activity_delay++; // no. of game cycles since mouse event queue last empty -} -//--------------------------------------------------------------------------------------------------------------------- +void Monitor_player_activity(void) { // James23july97 + // if there is at least one mouse event outstanding + if (CheckForMouseEvents()) { + // reset activity delay counter + player_activity_delay = 0; + } else { + // no. of game cycles since mouse event queue last empty + player_activity_delay++; + } +} diff --git a/sword2/mouse.h b/sword2/mouse.h index 3845818875..1f455417d7 100644 --- a/sword2/mouse.h +++ b/sword2/mouse.h @@ -22,68 +22,83 @@ #ifndef MOUSE_H #define MOUSE_H -//#include "src\driver96.h" -#include "object.h" +#include "object.h" -//--------------------------------------------------------------------------------- #define TOTAL_mouse_list 50 #define MOUSE_normal 0 -#define MOUSE_top 1 -#define MOUSE_drag 2 +#define MOUSE_top 1 +#define MOUSE_drag 2 #define MOUSE_system_menu 3 #define MOUSE_holding 4 -//--------------------------------------------------------------------------------- -// mouse unit - like Object_mouse, but with anim resource & pc (needed if sprite is to act as mouse detection mask) -typedef struct -{ - int32 x1; // top-left of mouse area is (x1,y1) - int32 y1; - int32 x2; // bottom-right of area is (x2,y2) (these coords are inclusive) - int32 y2; - int32 priority; - int32 pointer; // type (or resource id?) of pointer used over this area - // up to here, this is basically a copy of the Object_mouse structure, but then we have... - int32 id; // object id, used when checking mouse list - int32 anim_resource; // resource id of animation file (if sprite to be used as mask) - otherwise 0 - int32 anim_pc; // current frame number of animation - int32 pointer_text; // local id of text line to print when pointer highlights an object + +// mouse unit - like Object_mouse, but with anim resource & pc (needed if +// sprite is to act as mouse detection mask) + +typedef struct { + // Top-left and bottom-right of mouse area. These coords are inclusive + int32 x1; + int32 y1; + int32 x2; + int32 y2; + + int32 priority; + + // type (or resource id?) of pointer used over this area + int32 pointer; + + // up to here, this is basically a copy of the Object_mouse + // structure, but then we have... + + // object id, used when checking mouse list + int32 id; + + // resource id of animation file (if sprite to be used as mask) - + // otherwise 0 + int32 anim_resource; + + // current frame number of animation + int32 anim_pc; + + // local id of text line to print when pointer highlights an object + int32 pointer_text; } Mouse_unit; -//--------------------------------------------------------------------------------- -extern uint32 cur_mouse; -extern Mouse_unit mouse_list[TOTAL_mouse_list]; -extern uint32 mouse_touching; -extern uint32 mouse_mode; -extern uint8 examining_menu_icon; -extern uint32 mouse_status; //human 0 on/1 off -extern uint32 mouse_mode_locked; //0 not !0 mode cannot be changed from normal mouse to top menu (i.e. when carrying big objects) +extern uint32 cur_mouse; +extern Mouse_unit mouse_list[TOTAL_mouse_list]; +extern uint32 mouse_touching; +extern uint32 mouse_mode; +extern uint8 examining_menu_icon; + +// human 0 on/1 off +extern uint32 mouse_status; + +// 0 not !0 mode cannot be changed from normal mouse to top menu (i.e. when +// carrying big objects) +extern uint32 mouse_mode_locked; + +//last minute for pause mode +extern uint32 real_luggage_item; -extern uint32 real_luggage_item; //last minute for pause mode +extern uint32 pointerTextSelected; -extern uint32 pointerTextSelected; +void Reset_mouse_list(void); -//--------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------- -void Reset_mouse_list(void); //Tony26Sept96 +void Normal_mouse(void); +void Top_menu_mouse(void); +void Drag_mouse(void); +void System_menu(void); -void Normal_mouse(void); //Tony30Sept96 -void Top_menu_mouse(void); //Tony3Oct96 -void Drag_mouse(void); //Tony21Nov96 -void System_menu(void); //Tony19Mar97 +void Mouse_on_off(void); +uint32 Check_mouse_list(void); +void Mouse_engine(void); -void Mouse_on_off(void); //Tony30Sept96 -uint32 Check_mouse_list(void); //Tony30Sept96 -void Mouse_engine(void); //Tony30Sept96 +void Set_mouse(uint32 res); +void Set_luggage(uint32 res); -void Set_mouse(uint32 res); -void Set_luggage(uint32 res); //Tony26Nov96 +int32 FN_no_human(int32 *params); +int32 FN_add_human(int32 *params); -int32 FN_no_human(int32 *params); //Tony30Sept96 -int32 FN_add_human(int32 *params); //Tony30Sept96 +void ClearPointerText(void); -void ClearPointerText(void); // James16jun97 -//--------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------- #endif |