mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			522 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			522 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // main global script file
 | |
| 
 | |
| // A function that initializes a bunch of stuff.
 | |
| function initialize_control_panel() { 
 | |
|   // Centre the control panel
 | |
|   gPanel.Centre(); 
 | |
|   // Centre the Restart dialog as well
 | |
|   gRestartYN.Centre(); 
 | |
|   if (!IsSpeechVoxAvailable()) { 
 | |
|     // If there is no speech-vox file, and therefore no speech,
 | |
|     // disable all the controls related with speech.
 | |
|     lblVoice.Visible = false;  
 | |
|     btnVoice.Visible = false;  
 | |
|     sldVoice.Visible = false;
 | |
|   }
 | |
|   else {
 | |
|     // If there *is*, then set it to voice and text. It's best to use
 | |
|     // both whenever possible, for the player's sake.
 | |
|     SetVoiceMode(eSpeechVoiceAndText); 
 | |
|     // And reflect this in the control panel.
 | |
|     btnVoice.Text = "Voice and Text"; 
 | |
|   }
 | |
|   if (!System.SupportsGammaControl) {
 | |
|     // If we can't change the gamma settings, disable the relevant options.
 | |
|     sldGamma.Visible = false; 
 | |
|     lblGamma.Visible = false;
 | |
|   } 
 | |
|   
 | |
|   //And now, set all the defaults
 | |
|   System.Volume = 100;
 | |
|   sldAudio.Value = System.Volume;
 | |
|   SetGameSpeed(40);
 | |
|   sldSpeed.Value = 40;
 | |
|   if (IsSpeechVoxAvailable()) {
 | |
|      SetVoiceMode(eSpeechVoiceAndText);
 | |
|      btnVoice.Text = "Voice and Text";
 | |
|      sldVoice.Value = 255;
 | |
|      SetSpeechVolume(255);
 | |
|   }
 | |
|   if (System.SupportsGammaControl) {
 | |
|     System.Gamma = 100;
 | |
|     sldGamma.Value = 100;
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Called when the game starts, before the first room is loaded
 | |
| function game_start() {   
 | |
|   // Put the code all in a function and then just call the function. 
 | |
|   // It saves cluttering up places like game_start.
 | |
|   initialize_control_panel(); 
 | |
|   // Use the KeyboardMovement module to, per default, replicate the standard
 | |
|   // keyboard movement of most Sierra games. See KeyboardMovement.txt for more info
 | |
|   KeyboardMovement.SetMode(eKeyboardMovement_Tapping); 
 | |
| }
 | |
| 
 | |
| function repeatedly_execute() {
 | |
|   
 | |
|   // Put here anything you want to happen every game cycle, even when
 | |
|   // the game is paused. This will not run when the game is blocked
 | |
|   // inside a command like a blocking Walk()
 | |
|   
 | |
|   if (IsGamePaused() == 1) return;
 | |
| 
 | |
|   // Put here anything you want to happen every game cycle, but not
 | |
|   // when the game is paused.
 | |
| }
 | |
| 
 | |
| function repeatedly_execute_always() {
 | |
|   
 | |
|   // Put anything you want to happen every game cycle, even
 | |
|   // when the game is blocked inside a command like a
 | |
|   // blocking Walk().
 | |
|   // You cannot run blocking commands from this function.
 | |
|   
 | |
| }
 | |
| 
 | |
| function show_inventory_window () 
 | |
| {
 | |
|   gInventory.Visible = true;
 | |
|   // switch to the Use cursor (to select items with)
 | |
|   mouse.Mode = eModeInteract;
 | |
|   // But, override the appearance to look like the arrow
 | |
|   mouse.UseModeGraphic(eModePointer);
 | |
| }
 | |
| 
 | |
| function show_save_game_dialog()
 | |
| {
 | |
|   gSaveGame.Visible = true;
 | |
|   // Get the list of save games
 | |
|   lstSaveGamesList.FillSaveGameList();
 | |
|   if (lstSaveGamesList.ItemCount > 0)
 | |
|   {
 | |
|     // If there is at least one, set the default text
 | |
|     // to be the first game's name
 | |
|     txtNewSaveName.Text = lstSaveGamesList.Items[0];
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     // No save games yet, default empty text.
 | |
|     txtNewSaveName.Text = "";
 | |
|   }
 | |
|   mouse.UseModeGraphic(eModePointer);
 | |
|   gIconbar.Visible = false;
 | |
| }
 | |
| 
 | |
| function show_restore_game_dialog()
 | |
| {
 | |
|   gRestoreGame.Visible = true;
 | |
|   lstRestoreGamesList.FillSaveGameList();
 | |
|   mouse.UseModeGraphic(eModePointer);
 | |
|   gIconbar.Visible = false;
 | |
| }
 | |
| 
 | |
| function close_save_game_dialog()
 | |
| {
 | |
|   gSaveGame.Visible = false;
 | |
|   mouse.UseDefaultGraphic();
 | |
|   gIconbar.Visible = true;
 | |
| }
 | |
| 
 | |
| function close_restore_game_dialog()
 | |
| {
 | |
|   gRestoreGame.Visible = false;
 | |
|   mouse.UseDefaultGraphic();
 | |
|   gIconbar.Visible = true;
 | |
| }
 | |
| 
 | |
| // Called when a key is pressed. keycode holds the key's ASCII code
 | |
| function on_key_press(eKeyCode keycode) {
 | |
|   // The following is called before "if game is paused keycode=0", so
 | |
|   // it'll happen even when the game is paused.
 | |
|   
 | |
|   if ((keycode == eKeyEscape) && gRestartYN.Visible) {
 | |
|     //Use ESC to cancel restart.
 | |
|     gRestartYN.Visible = false; 
 | |
|     gIconbar.Visible = true;
 | |
|     // If the panel's not ON, then the player must have gotten here by tapping F9,
 | |
|     // therefore his cursor needs restoring. If the panel IS on, then it doesn't,
 | |
|     // because it's already a pointer. Get used to thinking like this!!
 | |
|     if (!gPanel.Visible) mouse.UseDefaultGraphic(); 
 | |
|     return;
 | |
|   }
 | |
|   if ((keycode == eKeyEscape) && gPanel.Visible) {
 | |
|     // Use ESC to turn the panel off.
 | |
|     gPanel.Visible = false; 
 | |
|     mouse.UseDefaultGraphic();
 | |
|     gIconbar.Visible = true;
 | |
|     return;
 | |
|   }
 | |
|   if ((keycode == eKeyEscape) && (gSaveGame.Visible))
 | |
|   {
 | |
|     // Use ESC to close the save game dialog
 | |
|     close_save_game_dialog();
 | |
|     return;
 | |
|   }
 | |
|   if ((keycode == eKeyEscape) && (gRestoreGame.Visible))
 | |
|   {
 | |
|     // Use ESC to close the restore game dialog
 | |
|     close_restore_game_dialog();
 | |
|     return;
 | |
|   }
 | |
|   
 | |
|   if (keycode == eKeyReturn) { 
 | |
|     // ENTER, in this case merely confirms restart
 | |
|     if (gRestartYN.Visible) RestartGame();
 | |
|   }
 | |
| 
 | |
|   if (IsGamePaused() || (IsInterfaceEnabled() == 0))
 | |
|   {
 | |
|     // If the game is paused with a modal GUI on the
 | |
|     // screen, or the player interface is disabled in
 | |
|     // a cut scene, ignore any keypresses.
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   // FUNCTION KEYS AND SYSTEM SHORTCUTS
 | |
|   if (keycode == eKeyEscape) {
 | |
|     // ESC
 | |
|     gPanel.Visible = true; 
 | |
|     gIconbar.Visible = false;
 | |
|     mouse.UseModeGraphic(eModePointer);
 | |
|   }
 | |
|   if (keycode == eKeyCtrlQ)  QuitGame(1);   // Ctrl-Q
 | |
|   if (keycode == eKeyF5) show_save_game_dialog();   // F5
 | |
|   if (keycode == eKeyF7) show_restore_game_dialog();  // F7
 | |
|   if (keycode == eKeyF9) {
 | |
|     // F9, asks the player to confirm restarting (so much better to always confirm first)
 | |
|     gRestartYN.Visible = true;  
 | |
|     gIconbar.Visible = false;
 | |
|     mouse.UseModeGraphic(eModePointer);
 | |
|   }
 | |
|   if (keycode == eKeyF12) SaveScreenShot("scrnshot.bmp");  // F12
 | |
|   if (keycode == eKeyTab)   show_inventory_window();  // Tab, show inventory
 | |
| 
 | |
|   // GAME COMMAND SHORTCUTS
 | |
|   if (keycode == 'W') mouse.Mode=eModeWalkto; //Notice this alternate way to indicate keycodes.
 | |
|   if (keycode == 'L') mouse.Mode=eModeLookat; //Note that all we do here is set modes.
 | |
|   if (keycode == 'U') mouse.Mode=eModeInteract; //If you want something else to happen, such as GUI buttons highlighting,
 | |
|   if (keycode == 'T') mouse.Mode=eModeTalkto; //you'll need some more scripting done.
 | |
|   if (keycode == 'I') mouse.Mode=eModeUseinv; //But this will, as-is, give you some standard keyboard shortcuts your players will very much appreciate.
 | |
| 
 | |
|   // For extra cursor modes, such as pick up, feel free to add as you will.
 | |
|   // Uncomment the line below if you use the "Pick Up" mode.
 | |
|   //if (keycode == 'P' || keycode == 'G') mouse.Mode=eModePickup; 
 | |
| 
 | |
|   // DEBUG FUNCTIONS
 | |
|   if (keycode == eKeyCtrlS)  Debug(0,0);  // Ctrl-S, give all inventory
 | |
|   if (keycode == eKeyCtrlV)  Debug(1,0);  // Ctrl-V, version
 | |
|   if (keycode == eKeyCtrlA)  Debug(2,0);  // Ctrl-A, show walkable areas
 | |
|   if (keycode == eKeyCtrlX)  Debug(3,0);  // Ctrl-X, teleport to room
 | |
|   if (keycode == eKeyCtrlW && game.debug_mode) 
 | |
|     player.PlaceOnWalkableArea(); //Ctrl-W, move to walkable area 
 | |
| }
 | |
| 
 | |
| 
 | |
| function on_mouse_click(MouseButton button) {
 | |
|   // called when a mouse button is clicked. button is either LEFT or RIGHT
 | |
|   if (IsGamePaused() == 1) {
 | |
|     // Game is paused, so do nothing (ie. don't allow mouse click)
 | |
|   }
 | |
|   else if (button == eMouseLeft) {
 | |
|     ProcessClick(mouse.x, mouse.y, mouse.Mode );
 | |
|   }
 | |
|   else if (button == eMouseRight || button == eMouseWheelSouth){
 | |
|     // right-click our mouse-wheel down, so cycle cursor
 | |
|     mouse.SelectNextMode();
 | |
|   }
 | |
|   else if (button == eMouseMiddle) { 
 | |
|     // Middle-button-click, default make character walk to clicked area (a little shortcut)
 | |
|     // Could have been just "player.Walk(mouse.x,mouse.y)", but it's best to
 | |
|     // leave our options open - what if you have a special script triggered
 | |
|     // on "walking" mode?
 | |
|     ProcessClick(mouse.x, mouse.y, eModeWalkto); 
 | |
|   }
 | |
|   else if (button == eMouseWheelNorth) { 
 | |
|     // Mouse-wheel up, cycle cursors 
 | |
|     // If mode isn't WALK, set the previous mode (notice usage of numbers instead
 | |
|     // of eNums, when it suits us)...
 | |
|     if (mouse.Mode>0) mouse.Mode=mouse.Mode-1; 
 | |
|     else 
 | |
|     { 
 | |
|       // ...but if it is WALK mode...
 | |
|       if (player.ActiveInventory!=null) 
 | |
|       {
 | |
|         //...and the player has a selected inventory item, set mouse mode to UseInv. 
 | |
|         mouse.Mode=eModeUseinv; 
 | |
|       }
 | |
|       else 
 | |
|       {
 | |
|         // If they don't, however, just set it to mode TALK (change this line if you add more cursor modes)
 | |
|         mouse.Mode=eModeTalkto; 
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| function interface_click(int interface, int button) {
 | |
|   // This function is obsolete, from 2.62 and earlier versions.
 | |
| }
 | |
| 
 | |
| function btnInvUp_Click(GUIControl *control, MouseButton button) {
 | |
|   invCustomInv.ScrollUp();
 | |
| }
 | |
| 
 | |
| function btnInvDown_Click(GUIControl *control, MouseButton button) {
 | |
|   invCustomInv.ScrollDown();
 | |
| }
 | |
| 
 | |
| function btnInvOK_Click(GUIControl *control, MouseButton button) {
 | |
| 	// They pressed the OK button, close the GUI
 | |
| 	gInventory.Visible = false;
 | |
| 	mouse.UseDefaultGraphic();
 | |
| }
 | |
| 
 | |
| function btnInvSelect_Click(GUIControl *control, MouseButton button) {
 | |
|   
 | |
| 	// They pressed SELECT, so switch to the Get cursor
 | |
| 	mouse.Mode = eModeInteract;
 | |
| 	// But, override the appearance to look like the arrow
 | |
| 	mouse.UseModeGraphic(eModePointer);
 | |
| }
 | |
| 
 | |
| function btnIconInv_Click(GUIControl *control, MouseButton button) {
 | |
|   
 | |
|   show_inventory_window();
 | |
| }
 | |
| 
 | |
| function btnIconCurInv_Click(GUIControl *control, MouseButton button) {
 | |
|   
 | |
|   if (player.ActiveInventory != null)
 | |
|     mouse.Mode = eModeUseinv;
 | |
| }
 | |
| 
 | |
| function btnIconSave_Click(GUIControl *control, MouseButton button) 
 | |
| {
 | |
|   show_save_game_dialog();
 | |
| }
 | |
| 
 | |
| function btnIconLoad_Click(GUIControl *control, MouseButton button) 
 | |
| {
 | |
|   show_restore_game_dialog();
 | |
| }
 | |
| 
 | |
| function btnIconExit_Click(GUIControl *control, MouseButton button) {
 | |
|   
 | |
|   QuitGame(1);
 | |
| }
 | |
| 
 | |
| function btnIconAbout_Click(GUIControl *control, MouseButton button) {
 | |
|   
 | |
|   gPanel.Visible=true;
 | |
|   gIconbar.Visible=false;
 | |
|   mouse.UseModeGraphic(eModePointer);
 | |
| }
 | |
| 
 | |
| function cEgo_Look()
 | |
| {
 | |
|   Display("Damn, I'm looking good!");
 | |
| }
 | |
| 
 | |
| function cEgo_Interact()
 | |
| {
 | |
|   Display("You rub your hands up and down your clothes.");
 | |
| }
 | |
| 
 | |
| function cEgo_Talk()
 | |
| {
 | |
|   Display("Talking to yourself is a sign of madness!");
 | |
| }
 | |
| 
 | |
| //START OF CONTROL PANEL FUNCTIONS
 | |
| function btnSave_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   gPanel.Visible = false;
 | |
|   mouse.UseDefaultGraphic();
 | |
|   gIconbar.Visible = true;
 | |
|   Wait(1);
 | |
|   btnIconSave_Click(btnIconSave, eMouseLeft);
 | |
| }
 | |
| 
 | |
| function gControl_OnClick(GUI *theGui, MouseButton button)
 | |
| {
 | |
| 
 | |
| }
 | |
| 
 | |
| function btnAbout_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
| Display("Adventure Game Studio run-time engine default game.");
 | |
| }
 | |
| 
 | |
| function btnQuit_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   gPanel.Visible = false;
 | |
|   Wait(1);
 | |
|   QuitGame(1);
 | |
|   gPanel.Visible = true;
 | |
|   gIconbar.Visible = false;
 | |
|   mouse.UseModeGraphic(eModePointer);
 | |
| }
 | |
| 
 | |
| function btnLoad_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   gPanel.Visible = false;
 | |
|   mouse.UseDefaultGraphic();
 | |
|   gIconbar.Visible = true;
 | |
|   Wait(1);
 | |
|   btnIconLoad_Click(btnIconLoad, eMouseLeft);
 | |
| }
 | |
| 
 | |
| function btnResume_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   gPanel.Visible = false;
 | |
|   mouse.UseDefaultGraphic();
 | |
|   gIconbar.Visible = true;
 | |
| }
 | |
| 
 | |
| function sldAudio_OnChange(GUIControl *control)
 | |
| {
 | |
|   System.Volume = sldAudio.Value;
 | |
| }
 | |
| 
 | |
| function sldVoice_OnChange(GUIControl *control)
 | |
| {
 | |
|   // Sets voice volume. Note that we don't check for the existence of speech.vox - 
 | |
|   // we did that in game_start, so if it's not there the slider won't even be available.
 | |
|   SetSpeechVolume(sldVoice.Value); 
 | |
| }
 | |
| 
 | |
| function btnVoice_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   // Note that we don't check for the existence of speech.vox - we did that in game_start,
 | |
|   // so if it's not there the button won't even be available.
 | |
|   if (btnVoice.Text == "Voice and Text") { 
 | |
|     SetVoiceMode(eSpeechVoiceOnly); 
 | |
|     btnVoice.Text = "Voice only";
 | |
|   }
 | |
|   else if (btnVoice.Text == "Voice only") {
 | |
|     SetVoiceMode(eSpeechTextOnly);
 | |
|     btnVoice.Text = "Text only";
 | |
|   }
 | |
|   else if (btnVoice.Text == "Text only") {
 | |
|     SetVoiceMode(eSpeechVoiceAndText);
 | |
|     btnVoice.Text = "Voice and Text";
 | |
|   }
 | |
| }
 | |
| 
 | |
| function sldGamma_OnChange(GUIControl *control)
 | |
| {
 | |
|   // Set the gamma. Note there's no need to check for anything else, as we ensured,
 | |
|   // in game_start, that the slider won't even appear if it's not possible to do this.
 | |
|   System.Gamma = sldGamma.Value; 
 | |
| }
 | |
| 
 | |
| function btnDefault_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   // Reset everything to default. You'll have to edit these as well as the sliders
 | |
|   // if you'd rather have different default parameters.
 | |
|   System.Volume = 100;
 | |
|   sldAudio.Value = System.Volume;
 | |
|   sldSpeed.Value = 40;
 | |
|   SetGameSpeed(40);
 | |
|   if (IsSpeechVoxAvailable()) {
 | |
|      SetVoiceMode(eSpeechVoiceAndText);
 | |
|      btnVoice.Text = "Voice and Text";
 | |
|      sldVoice.Value = 255;
 | |
|      SetSpeechVolume(255);
 | |
|   }
 | |
|   if (System.SupportsGammaControl) {
 | |
|     System.Gamma = 100;
 | |
|     sldGamma.Value = 100;
 | |
|   }
 | |
| }
 | |
| //END OF CONTROL PANEL FUNCTIONS
 | |
| 
 | |
| function dialog_request(int param) 
 | |
| {
 | |
|   // This is used by the dialog text parser if you need to process
 | |
|   // text that the player types in to the parser.
 | |
|   // It is not used by default.
 | |
| }
 | |
| 
 | |
| function sldSpeed_OnChange(GUIControl *control)
 | |
| {
 | |
|   SetGameSpeed(sldSpeed.Value);
 | |
| }
 | |
| 
 | |
| function btnRestart_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   gRestartYN.Visible=true;
 | |
|   gIconbar.Visible=false;
 | |
| }
 | |
| 
 | |
| function btnRestartYes_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   RestartGame();
 | |
| }
 | |
| 
 | |
| function btnRestartNo_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   gRestartYN.Visible = false;
 | |
|   gIconbar.Visible = true;
 | |
|   // If the panel's not ON, then the player must have gotten here by tapping F9,
 | |
|   // therefore his cursor needs restoring. If the panel IS on, then it doesn't,
 | |
|   // because it's already a pointer. Get used to thinking like this!!
 | |
|   if (!gPanel.Visible) mouse.UseDefaultGraphic(); 
 | |
| }
 | |
| 
 | |
| function btnCancelSave_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   close_save_game_dialog();
 | |
| }
 | |
| 
 | |
| function btnSaveGame_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   int gameSlotToSaveInto = lstSaveGamesList.ItemCount + 1;
 | |
|   int i = 0;
 | |
|   while (i < lstSaveGamesList.ItemCount)
 | |
|   {
 | |
|     if (lstSaveGamesList.Items[i] == txtNewSaveName.Text)
 | |
|     {
 | |
|       gameSlotToSaveInto = lstSaveGamesList.SaveGameSlots[i];
 | |
|     }
 | |
|     i++;
 | |
|   }
 | |
|   SaveGameSlot(gameSlotToSaveInto, txtNewSaveName.Text);
 | |
|   close_save_game_dialog();
 | |
| }
 | |
| 
 | |
| function btnCancelRestore_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   close_restore_game_dialog();
 | |
| }
 | |
| 
 | |
| function btnRestoreGame_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   if (lstRestoreGamesList.SelectedIndex >= 0)
 | |
|   {
 | |
|     RestoreGameSlot(lstRestoreGamesList.SaveGameSlots[lstRestoreGamesList.SelectedIndex]);
 | |
|   }
 | |
|   close_restore_game_dialog();
 | |
| }
 | |
| 
 | |
| function lstSaveGamesList_OnSelectionCh(GUIControl *control)
 | |
| {
 | |
|   txtNewSaveName.Text = lstSaveGamesList.Items[lstSaveGamesList.SelectedIndex];
 | |
| }
 | |
| 
 | |
| function txtNewSaveName_OnActivate(GUIControl *control)
 | |
| {
 | |
|   // Pressing return in the text box simulates clicking the Save button
 | |
|   btnSaveGame_OnClick(control, eMouseLeft);
 | |
| }
 | |
| 
 | |
| function btnDeleteSave_OnClick(GUIControl *control, MouseButton button)
 | |
| {
 | |
|   if (lstSaveGamesList.SelectedIndex >= 0)
 | |
|   {
 | |
|     DeleteSaveSlot(lstSaveGamesList.SaveGameSlots[lstSaveGamesList.SelectedIndex]);
 | |
|     lstSaveGamesList.FillSaveGameList();
 | |
|   }
 | |
| }
 |