Merge pull request #1465 from edmundito/master

Added AGS (Adventure Game Studio) Script
This commit is contained in:
Arfon Smith
2014-08-17 21:04:58 -05:00
6 changed files with 1129 additions and 3 deletions

View File

@@ -28,6 +28,16 @@ ABAP:
extensions:
- .abap
AGS Script:
type: programming
lexer: C++
color: "#B9D9FF"
aliases:
- ags
extensions:
- .asc
- .ash
ANTLR:
type: programming
color: "#9DC3FF"

View File

@@ -3,6 +3,10 @@
"ABAP": [
".abap"
],
"AGS Script": [
".asc",
".ash"
],
"ATS": [
".atxt",
".dats",
@@ -829,8 +833,8 @@
"exception.zep.php"
]
},
"tokens_total": 651675,
"languages_total": 892,
"tokens_total": 654392,
"languages_total": 896,
"tokens": {
"ABAP": {
"*/**": 1,
@@ -1091,6 +1095,362 @@
"pos": 2,
"endclass.": 1
},
"AGS Script": {
"function": 54,
"initialize_control_panel": 2,
"(": 281,
")": 282,
"{": 106,
"gPanel.Centre": 1,
";": 235,
"gRestartYN.Centre": 1,
"if": 96,
"IsSpeechVoxAvailable": 3,
"lblVoice.Visible": 1,
"false": 26,
"btnVoice.Visible": 1,
"sldVoice.Visible": 1,
"}": 107,
"else": 44,
"SetVoiceMode": 6,
"eSpeechVoiceAndText": 4,
"btnVoice.Text": 9,
"System.SupportsGammaControl": 3,
"sldGamma.Visible": 1,
"lblGamma.Visible": 1,
"//And": 1,
"now": 1,
"set": 7,
"all": 2,
"the": 15,
"defaults": 1,
"System.Volume": 5,
"sldAudio.Value": 3,
"SetGameSpeed": 3,
"sldSpeed.Value": 3,
"sldVoice.Value": 3,
"SetSpeechVolume": 3,
"System.Gamma": 3,
"sldGamma.Value": 3,
"game_start": 1,
"KeyboardMovement.SetMode": 1,
"eKeyboardMovement_Tapping": 3,
"repeatedly_execute": 2,
"IsGamePaused": 4,
"return": 8,
"repeatedly_execute_always": 1,
"show_inventory_window": 3,
"gInventory.Visible": 2,
"true": 18,
"mouse.Mode": 13,
"eModeInteract": 3,
"mouse.UseModeGraphic": 8,
"eModePointer": 8,
"show_save_game_dialog": 3,
"gSaveGame.Visible": 3,
"lstSaveGamesList.FillSaveGameList": 2,
"lstSaveGamesList.ItemCount": 3,
"txtNewSaveName.Text": 5,
"lstSaveGamesList.Items": 3,
"[": 6,
"]": 6,
"gIconbar.Visible": 15,
"show_restore_game_dialog": 3,
"gRestoreGame.Visible": 3,
"lstRestoreGamesList.FillSaveGameList": 1,
"close_save_game_dialog": 4,
"mouse.UseDefaultGraphic": 9,
"close_restore_game_dialog": 4,
"on_key_press": 2,
"eKeyCode": 1,
"keycode": 27,
"eKeyEscape": 5,
"&&": 8,
"gRestartYN.Visible": 6,
"//Use": 1,
"ESC": 1,
"to": 14,
"cancel": 1,
"restart.": 1,
"gPanel.Visible": 11,
"eKeyReturn": 1,
"RestartGame": 2,
"||": 12,
"IsInterfaceEnabled": 3,
"eKeyCtrlQ": 1,
"QuitGame": 3,
"//": 66,
"Ctrl": 1,
"-": 217,
"Q": 1,
"eKeyF5": 1,
"F5": 1,
"eKeyF7": 1,
"F7": 1,
"eKeyF9": 1,
"eKeyF12": 1,
"SaveScreenShot": 1,
"F12": 1,
"eKeyTab": 1,
"Tab": 1,
"show": 1,
"inventory": 2,
"eModeWalkto": 2,
"//Notice": 1,
"this": 1,
"alternate": 1,
"way": 1,
"indicate": 1,
"keycodes.": 1,
"eModeLookat": 1,
"//Note": 1,
"that": 1,
"we": 1,
"do": 1,
"here": 1,
"is": 10,
"modes.": 1,
"//If": 1,
"you": 1,
"want": 1,
"something": 1,
"happen": 1,
"such": 1,
"as": 2,
"GUI": 3,
"buttons": 1,
"highlighting": 1,
"eModeTalkto": 2,
"//you": 1,
"I": 1,
"P": 1,
"G": 1,
"t": 1,
"allow": 1,
"mouse": 2,
"click": 1,
"button": 33,
"eMouseLeft": 4,
"ProcessClick": 2,
"mouse.x": 2,
"mouse.y": 2,
"eMouseRight": 1,
"eMouseWheelSouth": 1,
"mouse.SelectNextMode": 1,
"eMouseMiddle": 1,
"eMouseWheelNorth": 1,
"player.ActiveInventory": 2,
"null": 2,
"//...and": 1,
"player": 13,
"has": 1,
"a": 1,
"selected": 1,
"item": 1,
"mode": 10,
"UseInv.": 1,
"eModeUseinv": 2,
"interface_click": 1,
"int": 18,
"interface": 3,
"btnInvUp_Click": 1,
"GUIControl": 31,
"*control": 31,
"MouseButton": 26,
"invCustomInv.ScrollUp": 1,
"btnInvDown_Click": 1,
"invCustomInv.ScrollDown": 1,
"btnInvOK_Click": 1,
"They": 2,
"pressed": 4,
"OK": 1,
"close": 1,
"btnInvSelect_Click": 1,
"SELECT": 1,
"so": 1,
"switch": 1,
"Get": 1,
"cursor": 1,
"But": 1,
"override": 1,
"appearance": 1,
"look": 1,
"like": 1,
"arrow": 9,
"btnIconInv_Click": 1,
"btnIconCurInv_Click": 1,
"btnIconSave_Click": 2,
"btnIconLoad_Click": 2,
"btnIconExit_Click": 1,
"btnIconAbout_Click": 1,
"cEgo_Look": 1,
"Display": 4,
"cEgo_Interact": 1,
"cEgo_Talk": 1,
"//START": 1,
"OF": 2,
"CONTROL": 2,
"PANEL": 2,
"FUNCTIONS": 2,
"btnSave_OnClick": 1,
"Wait": 3,
"btnIconSave": 1,
"gControl_OnClick": 1,
"*theGui": 1,
"btnAbout_OnClick": 1,
"btnQuit_OnClick": 1,
"btnLoad_OnClick": 1,
"btnIconLoad": 1,
"btnResume_OnClick": 1,
"sldAudio_OnChange": 1,
"sldVoice_OnChange": 1,
"btnVoice_OnClick": 1,
"eSpeechVoiceOnly": 1,
"eSpeechTextOnly": 1,
"sldGamma_OnChange": 1,
"btnDefault_OnClick": 1,
"//END": 1,
"dialog_request": 1,
"param": 1,
"sldSpeed_OnChange": 1,
"btnRestart_OnClick": 1,
"btnRestartYes_OnClick": 1,
"btnRestartNo_OnClick": 1,
"btnCancelSave_OnClick": 1,
"btnSaveGame_OnClick": 2,
"gameSlotToSaveInto": 3,
"+": 7,
"i": 5,
"while": 1,
"<": 1,
"lstSaveGamesList.SaveGameSlots": 2,
"SaveGameSlot": 1,
"btnCancelRestore_OnClick": 1,
"btnRestoreGame_OnClick": 1,
"lstRestoreGamesList.SelectedIndex": 2,
"RestoreGameSlot": 1,
"lstRestoreGamesList.SaveGameSlots": 1,
"lstSaveGamesList_OnSelectionCh": 1,
"lstSaveGamesList.SelectedIndex": 3,
"txtNewSaveName_OnActivate": 1,
"control": 2,
"btnDeleteSave_OnClick": 1,
"DeleteSaveSlot": 1,
"//****************************************************************************************************": 8,
"#define": 2,
"DISTANCE": 25,
"distance": 1,
"walks": 1,
"in": 1,
"Tapping": 2,
"before": 1,
"he": 1,
"stops": 1,
"enum": 2,
"KeyboardMovement_Directions": 4,
"eKeyboardMovement_Stop": 9,
"eKeyboardMovement_DownLeft": 5,
"eKeyboardMovement_Down": 5,
"eKeyboardMovement_DownRight": 5,
"eKeyboardMovement_Left": 5,
"eKeyboardMovement_Right": 5,
"eKeyboardMovement_UpLeft": 5,
"eKeyboardMovement_Up": 5,
"eKeyboardMovement_UpRight": 5,
"KeyboardMovement_KeyDown": 5,
"down": 9,
"KeyboardMovement_KeyLeft": 5,
"left": 4,
"KeyboardMovement_KeyRight": 5,
"right": 5,
"KeyboardMovement_KeyUp": 5,
"up": 4,
"KeyboardMovement_KeyDownRight": 3,
"PgDn": 2,
"numpad": 8,
"KeyboardMovement_KeyUpRight": 3,
"PgUp": 2,
"KeyboardMovement_KeyDownLeft": 3,
"End": 2,
"KeyboardMovement_KeyUpLeft": 3,
"Home": 2,
"KeyboardMovement_KeyStop": 3,
"KeyboardMovement_Modes": 4,
"KeyboardMovement_Mode": 4,
"eKeyboardMovement_None": 2,
"stores": 2,
"current": 8,
"keyboard": 1,
"disabled": 5,
"by": 1,
"default": 1,
"KeyboardMovement_CurrentDirection": 7,
"walking": 1,
"direction": 22,
"of": 6,
"character": 11,
"static": 2,
"KeyboardMovement": 2,
"SetMode": 2,
"Pressing": 1,
"eKeyboardMovement_Pressing": 2,
"player.on": 2,
"game": 2,
"paused": 2,
"module": 2,
"or": 8,
"hidden": 2,
"quit": 2,
"newdirection": 43,
"declare": 4,
"variable": 2,
"storing": 4,
"new": 19,
"get": 2,
"IsKeyPressed": 17,
"&": 4,
"arrows": 4,
"numeric": 2,
"pad": 2,
"held": 4,
"Down": 2,
"Right": 2,
"none": 1,
"above": 2,
"it": 1,
"stop": 7,
"regardless": 1,
"whether": 1,
"some": 1,
"are": 1,
"different": 2,
"from": 2,
"player.StopMoving": 3,
"Stop": 4,
"command": 4,
"movement": 2,
"NOT": 2,
"dx": 20,
"dy": 20,
"variables": 2,
"walk": 4,
"coordinates": 4,
"player.WalkStraight": 2,
"player.x": 2,
"player.y": 2,
"eNoBlock": 2,
"update": 3,
"key": 2,
"same": 1,
"on_event": 1,
"EventType": 1,
"event": 2,
"data": 1,
"eEventLeaveRoom": 1,
"KeyboardMovement_VERSION": 1,
"struct": 1,
"import": 1
},
"ATS": {
"//": 211,
"#include": 16,
@@ -72103,6 +72463,7 @@
},
"language_tokens": {
"ABAP": 1500,
"AGS Script": 2717,
"ATS": 4558,
"Agda": 376,
"Alloy": 1143,
@@ -72311,6 +72672,7 @@
},
"languages": {
"ABAP": 1,
"AGS Script": 4,
"ATS": 10,
"Agda": 1,
"Alloy": 3,
@@ -72517,5 +72879,5 @@
"fish": 3,
"wisp": 1
},
"md5": "6ad93b92805b6680a539a188d7c820fa"
"md5": "bfcc1394a867e7d464859dd597eba7ad"
}

View File

@@ -0,0 +1,521 @@
// 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();
}
}

View File

@@ -0,0 +1,4 @@
// Main header script - this will be included into every script in
// the game (local and global). Do not place functions here; rather,
// place import definitions and #define names here to be used by all
// scripts.

View File

@@ -0,0 +1,216 @@
// Main script for module 'KeyboardMovement'
//****************************************************************************************************
// DEFINITIONS
//****************************************************************************************************
#define DISTANCE 10000// distance player walks in Tapping mode before he stops
enum KeyboardMovement_Directions {
eKeyboardMovement_Stop,
eKeyboardMovement_DownLeft,
eKeyboardMovement_Down,
eKeyboardMovement_DownRight,
eKeyboardMovement_Left,
eKeyboardMovement_Right,
eKeyboardMovement_UpLeft,
eKeyboardMovement_Up,
eKeyboardMovement_UpRight
};
//****************************************************************************************************
// VARIABLES
//****************************************************************************************************
// keycodes as variables for future key customization functions (static variables?):
int KeyboardMovement_KeyDown = 380; // down arrow
int KeyboardMovement_KeyLeft = 375; // left arrow
int KeyboardMovement_KeyRight = 377; // right arrow
int KeyboardMovement_KeyUp = 372; // up arrow
int KeyboardMovement_KeyDownRight = 381; // PgDn (numpad)
int KeyboardMovement_KeyUpRight = 373; // PgUp (numpad)
int KeyboardMovement_KeyDownLeft = 379; // End (numpad)
int KeyboardMovement_KeyUpLeft = 371; // Home (numpad)
int KeyboardMovement_KeyStop = 376; // 5 (numpad)
KeyboardMovement_Modes KeyboardMovement_Mode = eKeyboardMovement_None; // stores current keyboard control mode (disabled by default)
KeyboardMovement_Directions KeyboardMovement_CurrentDirection = eKeyboardMovement_Stop; // stores current walking direction of player character
//****************************************************************************************************
// USER FUNCTIONS
//****************************************************************************************************
//====================================================================================================
static function KeyboardMovement::SetMode(KeyboardMovement_Modes mode) {
KeyboardMovement_Mode = mode;
}
//====================================================================================================
// key customization functions here
//====================================================================================================
//****************************************************************************************************
// EVENT HANDLER FUNCTIONS
//****************************************************************************************************
//====================================================================================================
function repeatedly_execute() {
//--------------------------------------------------
// Pressing mode
//--------------------------------------------------
if ((IsGamePaused() == true) || (KeyboardMovement_Mode != eKeyboardMovement_Pressing) || (IsInterfaceEnabled() == false) || (player.on == false)) return 0;
// if game is paused, module or mode disabled, interface disabled or player character hidden, quit function
KeyboardMovement_Directions newdirection; // declare variable storing new direction
// get new direction:
if ( ((IsKeyPressed(KeyboardMovement_KeyDown)) && (IsKeyPressed(KeyboardMovement_KeyRight))) || (IsKeyPressed(KeyboardMovement_KeyDownRight)) ) newdirection = eKeyboardMovement_DownRight; // if down&right arrows or PgDn (numeric pad) held down, set new direction to Down-Right
else if ( ((IsKeyPressed(KeyboardMovement_KeyUp)) && (IsKeyPressed(KeyboardMovement_KeyRight))) || (IsKeyPressed(KeyboardMovement_KeyUpRight)) ) newdirection = eKeyboardMovement_UpRight; // up&right arrows or PgUp (numpad)
else if ( ((IsKeyPressed(KeyboardMovement_KeyDown)) && (IsKeyPressed(KeyboardMovement_KeyLeft))) || (IsKeyPressed(KeyboardMovement_KeyDownLeft)) ) newdirection = eKeyboardMovement_DownLeft; // down&left arrows or End (numpad)
else if ( ((IsKeyPressed(KeyboardMovement_KeyUp)) && (IsKeyPressed(KeyboardMovement_KeyLeft))) || (IsKeyPressed(KeyboardMovement_KeyUpLeft)) ) newdirection = eKeyboardMovement_UpLeft; // up&left arrows or Home (numpad)
else if (IsKeyPressed(KeyboardMovement_KeyDown)) newdirection = eKeyboardMovement_Down; // down arrow
else if (IsKeyPressed(KeyboardMovement_KeyLeft)) newdirection = eKeyboardMovement_Left; // left arrow
else if (IsKeyPressed(KeyboardMovement_KeyRight)) newdirection = eKeyboardMovement_Right; // right arrow
else if (IsKeyPressed(KeyboardMovement_KeyUp)) newdirection = eKeyboardMovement_Up; // up arrow
else newdirection = eKeyboardMovement_Stop; // if none of the above held down, set it to stop player character
if (IsKeyPressed(KeyboardMovement_KeyStop)) newdirection = eKeyboardMovement_Stop; // if 5 (numeric pad) held down, stop player character, regardless of whether some of the above are held down
if (newdirection != KeyboardMovement_CurrentDirection) { // if new direction is different from current direction
if (newdirection == eKeyboardMovement_Stop) player.StopMoving(); // if new direction is the Stop command, stop movement of player character
else { // if new direction is NOT the Stop command
int dx, dy; // declare variables storing new walk coordinates
if (newdirection == eKeyboardMovement_DownRight) {
dx = DISTANCE;
dy = DISTANCE;
}
else if (newdirection == eKeyboardMovement_UpRight) {
dx = DISTANCE;
dy = -DISTANCE;
}
else if (newdirection == eKeyboardMovement_DownLeft) {
dx = -DISTANCE;
dy = DISTANCE;
}
else if (newdirection == eKeyboardMovement_UpLeft) {
dx = -DISTANCE;
dy = -DISTANCE;
}
else if (newdirection == eKeyboardMovement_Down) {
dx = 0;
dy = DISTANCE;
}
else if (newdirection == eKeyboardMovement_Left) {
dx = -DISTANCE;
dy = 0;
}
else if (newdirection == eKeyboardMovement_Right) {
dx = DISTANCE;
dy = 0;
}
else if (newdirection == eKeyboardMovement_Up) {
dx = 0;
dy = -DISTANCE;
}
player.WalkStraight(player.x + dx, player.y + dy, eNoBlock); // walk player character to the new coordinates
}
KeyboardMovement_CurrentDirection = newdirection; // update current direction to new direction
}
}
//====================================================================================================
function on_key_press(int keycode) {
//--------------------------------------------------
// Tapping mode
//--------------------------------------------------
if ((IsGamePaused() == true) || (KeyboardMovement_Mode != eKeyboardMovement_Tapping) || (IsInterfaceEnabled() == false) || (player.on == false)) return 0;
// if game is paused, module or mode disabled, interface disabled or player character hidden, quit function
KeyboardMovement_Directions newdirection; // declare variable storing new direction
// get new direction:
if (keycode == KeyboardMovement_KeyDownRight) newdirection = eKeyboardMovement_DownRight; // if down-right key pressed, set new direction to Down-Right
else if (keycode == KeyboardMovement_KeyUpRight) newdirection = eKeyboardMovement_UpRight;
else if (keycode == KeyboardMovement_KeyDownLeft) newdirection = eKeyboardMovement_DownLeft;
else if (keycode == KeyboardMovement_KeyUpLeft) newdirection = eKeyboardMovement_UpLeft;
else if (keycode == KeyboardMovement_KeyDown) newdirection = eKeyboardMovement_Down;
else if (keycode == KeyboardMovement_KeyLeft) newdirection = eKeyboardMovement_Left;
else if (keycode == KeyboardMovement_KeyRight) newdirection = eKeyboardMovement_Right;
else if (keycode == KeyboardMovement_KeyUp) newdirection = eKeyboardMovement_Up;
else if (keycode == KeyboardMovement_KeyStop) newdirection = eKeyboardMovement_Stop; // if stop key pressed, set to stop player character
if (newdirection != KeyboardMovement_CurrentDirection) { // if new direction is different from current direction
if (newdirection == eKeyboardMovement_Stop) player.StopMoving(); // if new direction is the Stop command, stop movement of player character
else { // if new direction is NOT the Stop command
int dx, dy; // declare variables storing new walk coordinates
if (newdirection == eKeyboardMovement_DownRight) {
dx = DISTANCE;
dy = DISTANCE;
}
else if (newdirection == eKeyboardMovement_UpRight) {
dx = DISTANCE;
dy = -DISTANCE;
}
else if (newdirection == eKeyboardMovement_DownLeft) {
dx = -DISTANCE;
dy = DISTANCE;
}
else if (newdirection == eKeyboardMovement_UpLeft) {
dx = -DISTANCE;
dy = -DISTANCE;
}
else if (newdirection == eKeyboardMovement_Down) {
dx = 0;
dy = DISTANCE;
}
else if (newdirection == eKeyboardMovement_Left) {
dx = -DISTANCE;
dy = 0;
}
else if (newdirection == eKeyboardMovement_Right) {
dx = DISTANCE;
dy = 0;
}
else if (newdirection == eKeyboardMovement_Up) {
dx = 0;
dy = -DISTANCE;
}
player.WalkStraight(player.x + dx, player.y + dy, eNoBlock); // walk player character to the new coordinates
}
KeyboardMovement_CurrentDirection = newdirection; // update current direction to new direction
}
else { // if new direction is same as current direction
player.StopMoving(); // stop player character
KeyboardMovement_CurrentDirection = eKeyboardMovement_Stop; // update current direction
}
}
//====================================================================================================
function on_event(EventType event, int data) {
if (event == eEventLeaveRoom) KeyboardMovement_CurrentDirection = eKeyboardMovement_Stop;
}
//====================================================================================================

View File

@@ -0,0 +1,13 @@
// Script header for module 'KeyboardMovement'
#define KeyboardMovement_VERSION 101
enum KeyboardMovement_Modes {
eKeyboardMovement_None,
eKeyboardMovement_Tapping,
eKeyboardMovement_Pressing
};
struct KeyboardMovement {
import static function SetMode(KeyboardMovement_Modes mode);
};