aboutsummaryrefslogtreecommitdiff
path: root/sword2/mouse.cpp
diff options
context:
space:
mode:
authorTorbjörn Andersson2003-09-19 16:08:54 +0000
committerTorbjörn Andersson2003-09-19 16:08:54 +0000
commita1735e55023d76294aaa5cb01a385388f2e47ae5 (patch)
tree8e1ceee43dc9c6aa72dfc7b29459cd4d50e46b98 /sword2/mouse.cpp
parent600d4c60d49a258bff159bf8b74449dac2b842d5 (diff)
downloadscummvm-rg350-a1735e55023d76294aaa5cb01a385388f2e47ae5.tar.gz
scummvm-rg350-a1735e55023d76294aaa5cb01a385388f2e47ae5.tar.bz2
scummvm-rg350-a1735e55023d76294aaa5cb01a385388f2e47ae5.zip
cleanup
svn-id: r10314
Diffstat (limited to 'sword2/mouse.cpp')
-rw-r--r--sword2/mouse.cpp1935
1 files changed, 956 insertions, 979 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++;
+ }
+}