home *** CD-ROM | disk | FTP | other *** search
- Immortal
- Script Languange
- Version 1.70
- Home: The Outer LiMiTS BBS
- SySop: Kenneth Bledsoe
- (713) 344-0526
- FIDO@ 1:106/50
-
- What is a Script File?
- Well the easy way to describe it is a text file that tells
- iMMortal to do something.
-
- What can you do with it?
- You can create Encounters, mazes, change players stats, and
- just about anything else you want. Let your imagination be your
- guide! You should be able to do just about anything you want with
- it.
-
- How do I write a script?
- Read On!
-
- Before Diving head first. Scan through the commands listed here
- to familiarize yourself with them. Once you have done that then
- to make a script get into your favorite word processor and open a
- new ASCii text file. {or load the demo script "Random.TXT" that
- came with the original iMMortal package} The commands or pretty
- straight foreward and they all come with examples so if you have
- a problem go back and look for an example of the command. Once
- you have completed a script save it as an ASCii file. Then you
- will need to convert it to a format iMMortal can understand.To do
- this all you need to do is run the program "Makescr.exe" with the
- name of your text file as a parameter. Ex. Makescr.exe demo.txt
- would create the file <demo.scr> if the compiler did not detect
- any errors. If an error is encountered it will stop processing
- the script file and tell you what line the error occured on.
-
- You have 50 variables to use at your convience. These variables
- can be any combination of characters up 255 in length. You can
- assign a value to them with the ASSIGN command or compare values
- with the IF command. You can also ASSIGN numberic values to them
- and INCREMENT or DECREMENT their value with these commands,
- respectfully. You can now modify the player variables with by
- using the text control variables list below!
-
- Once script files are written they can be implemented into
- iMMortal one of 3 ways. Automatically, Once per Call, By Choice.
- This is accomplished when installing the script on the map with
- iMMedit.
- Auto : When a players cordinates match those of an associated
- script file the script file will begin iMMediatly! This
- Will happen EVERY TIME the player is in this location!
- EX: The Random Generator Tool uses this method!
- Once : Will work the same as AUTO but the script file will
- activate only the FIRST time the user is here! Once per
- Call!
- EX: This would be usefull for a script file that returns all
- the players HitPoints, but will prevent it from being
- abbused!
- Choice : This will display a description to the user, entered in
- iMMedit, and the user will have the choice to start the
- script or not!
- EX: This will display something similiar to the Arena!
- {Which by the way, was originally a script file.}
-
-
- Well the easy way to learn this script language is to just get
- into it. I hope you enjoy it as much as I have. And once again,
- if you have any questions feel free to leave me a message on my
- BBS. Comments and suggestions are also always welcome.
-
-
-
- Available Text Control Codes That can be implemented in the
- writeln - write commands of the script file to display user
- stats! or imbedded in The ANSi screens displayed by iMMortal!
- They can also be imbedded in The Menu screens if you choose to
- change any of these!
-
- Embedded Control <K> codes used to display System Stats or
- change color..
-
- ^K[f;b = Change colors
- NOTE : f = foregound; b = background
- The semi-colon MUST exist and be followed by a
- background color.. Valid color codes are listed
- under the Change Color Option...
- Ex.. ^K[15;0 would be white on black.
- ^K[31;0 would be blinking white on black..
-
- ^KD = Dungeon Name of Current Town
- ^KT = Town Name of Current Town
- ^KV = iMMortal version Number
-
-
-
- {Special} ^KT^ = Clear the current Line and place the Town Name in
- the center of the Line. This is ONLY available for
- the Town Name!
-
- These could be used to create custom Town Screens!
-
-
-
-
- Embedded Control <F> codes used to display and Modify User Stats..
-
- ^FA = Alias {You can NOT modify this variable}
- ^FB = Bludgeoning Weapon Skill Percentage
- ^FC = Piercing " " "
- ^FD = Slashing " " "
- ^FE = Experience Points not Spent
- ^FF = Healing Salves
- ^FG = Gold on Hand
- ^FH = Hit Points
- ^FI = Maximum Hit Points
- ^FJ = Challenges Left for today
- ^FK = Weapon Description (In Hand) (Can NOT be modified)
- ^FL = Armor Description (Wearing) ( " " " " )
- ^FM = Movement Points
- ^FN = Find and Remove Traps Percentage
- ^FO = Open Locks
- ^FP = Pick Pockets
- ^FQ = Move Silently
- ^FR = Read Language
- ^FS = Hide in Shadows
- ^FT = Strength
- ^FU = Intelligence
- ^FV = Wisdom
- ^FW = Dexterity
- ^FX = Constitution
- ^FY = Charisma
-
- Embedded Control <X> codes used to display and Modify User Magic Stats..
-
- ^XA = Magic Dart Percentage
- ^XB = Flame Finger "
- ^XC = Invisibility
- ^XD = Magic Darts
- ^XE = Identify
- ^XF = Fireball
- ^XG = Web
- ^XH = Haste
- ^XI = Life Steal
- ^XJ = Death Strike
- ^XK = Base Magic Percentage
- ^XL = Users Magic Points Remaining
- ^XM = Cure Light wounds
- ^XN = Bless
- ^XO = Spiritual Fist
- ^XP = Blind
- ^XQ = Spiritual Armor
- ^XR = Cure Serious Wounds
- ^XS = Spiritual Weapon
- ^XT = Flame Strike
- ^XU = Heal
- ^XV = Disinegrate
- ^XW = base Prayer Percentage
- ^XX = Users Prayer Points Remaining
-
-
- Ask
- ────────────────────────────────────────────────────────────
- Syntax: Ask <len> <var num>
-
- Description: Waits for the user to enter a string of up to
- <len> characters and stores the string in the
- variable <var num>. Valid values for <len>
- are 1 to 255 and <var num> may be any number
- between 1 and 50.
-
- Example: Ask 30 5
-
- Waits for the user to enter a string of up to
- 30 characters in length. The user's input is
- stored in variable number 5.
-
-
- Assign
- ────────────────────────────────────────────────────────────
- Syntax: Assign <var num> <"literal">
-
- Description: Assigns the text specified in <"literal"> to
- variable number <var num>. The literal
- portion of the assignment must be enclosed in
- quotation marks.
-
- Note: All text control codes are valid if used in the
- "literal" statement except for the ^K codes
-
- Example : assign 1 "A"
- This assign the players name to variable one.
-
-
- Example: Assign 1 "Hi There!"
- Write "Var 1 is: ^1"
-
- Would assign "Hi There!" to variable number
- one and output "Var 1 is: Hi There!" to the
- display.
-
- Attack
- ────────────────────────────────────────────────────────────
- Syntax: Attack <Options> <Options>
-
- Description: Player will be Attacked by a Random Monster.
-
- Example: Attack
-
- This command will grab a random enemy out of
- enemy file and the player will be able to
- fight the enemy or runaway.
-
-
- Options MAP
-
- If this option is included on the command-Line
- the Fight routine will be a split screen fight
- like is displayed in the random encounters on the
- map. The lower half of the screen is cleared first.
-
- Options EASY MED HARD RUN
-
- Any one of these choices will be valid if placed
- after attack. The enemy grabbed out of the database
- will be in the range of the passed option. If NO
- options are passed then the enemy will be totaly
- random..
-
- Options #??? Where ??? is the number of the monster in
- the database you wish to throw at the player!
- You asked for it you got it! The Monster number
- is in the lower right corner of the enemy
- editor.
-
- Example: Attack Easy {Will get a fairly easy monster}
- Attack Run {Will get one of the hardest
- enemies out of the database}
- Attack #100 {Would grab monster 100 out of the
- database, which just so happens
- to be a Wyvern}
-
- Note 0:{well} If you use the # option, there is a fail safe
- {did} so if the number is larger than the database
- {not} that it will just select a random monster, so I
- {want} would suggest using one of the original 300 or
- {to} if you add one of your own and release the script
- {start}send the stats in a text file with script and
- {over} explain how to get this monster working in that
- {sigh} script!
-
- Note 1: If the player dies the program will jump to
- a label in the script named ":Dead". If this
- Label is not found iMMortal will cease
- processing the script file and return to the
- game (where the player will be ushered out of
- the game since he is dead)
-
- Note 2: If the player runs away from the fight the
- program will jump to the label name ":Runaway"
- if this label is not found then the program will
- resume from the previuos command line.
-
- Note 3: If you use this command it would be best to
- set the goto label :Dead just after the quit
- command to prevent iMMortal from running the
- portion of the script following the :Dead label
- if the player is still alive.
-
- Note 4: If I get enough input I will consider letting
- you input the Enemy Data into the scriptfile
- so you can decide what the enemy is that the
- player will have to deal with.
-
-
- Example clearscreen
- assign 1 0
- :attack
- attack
- writeln "Congratulations You Won"
- increment 1
- goto attack
- quit
- :dead
- writeln "Sorry You have been Defeated after ^1 fights"
- waitforenter
- quit
-
- The following example will cause the player to
- continiously fight a random enemy until he is
- killed then display how many fights he won.
-
-
- ChangeColor
- ────────────────────────────────────────────────────────────
- Syntax: ChangeColor <foreground> <background>
-
- Description: Changes the color of the text if the user has
- ANSI graphics enabled. The color selected
- remains the default color for all subsequent
- text displayed, until the end of the
- questionnaire script or until the next
- ChangeColor command is encountered.
-
- Example: ChangeColor 1 0
-
- Changes the text color to a blue foreground on
- a black background until the end of the script
- is reached or until another ChangeColor
- command is encountered.
-
-
-
- Foreground Colors Background Colors
-
- 0 - Black 0 - Black
- 1 - Blue 1 - Blue
- 2 - Green 2 - Green
- 3 - Cyan 3 - Cyan
- 4 - Red 4 - Red
- 5 - Magneta 5 - Magneta
- 6 - Brown 6 - Brown
- 7 - LightGray 7 - LightGray
- 8 - DarkGray
- 9 - LightBlue
- 10 - LightGreen
- 11 - LightCyan
- 12 - LightRed
- 13 - LightMagneta
- 14 - Yellow
- 15 - White
-
- NOTE: Add 16 to the Foreground color to enable Blink.
-
- ClearEOL
- ────────────────────────────────────────────────────────────
- Syntax: ClearEOL
-
- Description: Clears the end of line from the current
- cursor position without moving the cursor!
-
- Example: ClearEOL
-
- ClearScreen
- ────────────────────────────────────────────────────────────
- Syntax: ClearScreen
-
- Description: Clears the user's screen if the user has
- ANSI enabled. Otherwise, this command
- will send a carriage return line feed to
- the screen.
-
- Example: ClearScreen
-
- This would simply clear the user's screen.
-
-
- Decrement
- ────────────────────────────────────────────────────────────
- Syntax: Decrement <varnum> <amount>
-
- Description: Lowers the value of the user variable number by
- amount. If the user variable is not a a valid number
- the command will be ignored. Text Control Codes are
- valid. This will allow you to Modify Player Stats!
- Use with Caution!! Do Not make the game to easy to
- Play!!
-
-
- Example: Assign 1 "3"
- Decrement 1 1
- Write "User variable 1 = ^1"
- quit
-
- The following example would display
- User variable 1 = 2
-
- Example2: Assign 1 "3A"
- Increment 1
- Write "User variable 1 = ^1"
- quit
-
- The following example would display
- User variable 1 = 3A
-
- Note: The Decrement command was ignored because
- the user variable 1 was not a valid number.
-
- Note: Text control codes are allowed as a <varnum>.
- This will allow you to modify certain user
- stats. For a listing of Text Control Codes
- See the begining of this Document.
- Range checking is performed by this operation!
-
- Note: User Variables are also valid if used in the
- amount slot.
-
- Example3: random 1 500
- Decrement ^FG ^1
- ;This would subtract a random amount in the range
- ;of 0 to 499 gold from the users gold in
- ;Hand!
-
-
-
-
- DisplayFile
- ────────────────────────────────────────────────────────────
- Syntax: DisplayFile <1-8 character filename+plus extension>
-
- Description: Causes an ANSi/ASCii text file to be displayed
- The text file must exist in the Script directory.
-
- Example: DisplayFile iMMortal.ANS
-
- Would display the file iMMortal.ANS from the
- SCRIPT files directory. Once the file has been
- displayed the user is returned to the
- script file.
-
-
-
-
- EndIF
- ────────────────────────────────────────────────────────────
- Syntax: EndIF
-
- Description: Used in conjunction with the IF command, this
- signifies the end of an IF. The function of
- IF and EndIF are more fully explained under
- the EndIF command in this section.
-
- Example: See the IF script command.
-
-
-
- GetChoice
- ────────────────────────────────────────────────────────────
- Syntax: GetChoice <valid choices> <var num>
-
- Description: Waits for the user to enter one of the
- characters in <valid choices> and stores the
- response in the variable <var num>. The
- character entered is not case-sensitive.
-
- Example: GetChoice YN 2
-
- This command would wait for the user to press
- either the "Y" or the "N" character, storing
- the response in variable number 2.
-
- GiveArmor
- ────────────────────────────────────────────────────────────
- Syntax: GiveArmor <"Description"> <"UN-Description">
- <Absorbtion> <Bonus> <Identified>
-
- Description: Places this Armor in the players inventory
- if there is room for it. If there is No room
- then the player is warned he has NO room for it.
-
- Note: The Descriptions MUST be enclosed in " " and
- the Abs and Bonus's MUST exist. Also User
- variables are allowed for the description,
- absorbtion, and bonus parameters.
- User Variables are Identified By The ^ symbol.
-
- See GiveWeapon For Example.
-
- GiveWeapon
- ────────────────────────────────────────────────────────────
- Syntax: GiveWeapon <"Description"> <"UN-Description">
- <Damage> <Bonus> <Identified> <SKILL Type>
-
- Description: Places this weapon in the players inventory
- if there is room for it. If there is No room
- then the player is warned he has NO room for it.
-
- <Description> The description given to the user if the weapon is
- identified.
-
- <UN-Desc..> The description given to the user if the weapon is
- not identified.
-
- <Damage>
- <Bonus> Must be in the range of -128..128
-
- <Identified> Must be on of these
- TRUE FALSE
- If true then the player knows what the weapon is
- if flase then he will need to get it Identified
- first...
-
- <Skill Types> Must be ONE of these Three Player Skills
- BLUDGEONING SLASHING PIERCING
-
- Note: The Description MUST be enclosed in " " and
- the damage and Bonus's MUST exist. Also User
- variables are allowed for any of the Description,
- Damage, and Bonus Slots.
- User Variables are Identified By The ^ symbol.
-
-
- Example: GiveWeapon "+1 BroadSword" "BroadSword" ^1 ^2 TRUE Slashing
-
- This would place the value of user variable one in
- the damage slot and user variable 2 in the Bonus slot
-
- GiveWeapon "^1" 10 20
-
-
- Goto
- ────────────────────────────────────────────────────────────
- Syntax: Goto <label>
-
- Description: Causes the script interpreter to jump to the
- label specified as <label>. The label may be
- 1 to 244 characters in length and may contain
- any combination of letters and numbers. Labels
- should be preceded by the colon ":" character.
- Thereis no limit to the amount of labels allowed
- in a scriptfile;
-
- Example: IF 5 = "Y"
- Goto MyLabel
- EndIF
- Quit
-
- :MyLabel
- Display "Here we are!|"
- Quit
-
- In this example, if variable number five is
- equal to "Y", the script interpreter will jump
- to the label MyLabel and continue processing
- from that point.
-
- GotoXY
- ────────────────────────────────────────────────────────────
- Syntax: Goto <X> <Y>
-
- Description: Forces the Cursor to jump to the new Cordinates.
- Ranges...
- X = 1..80
- y = 1..24
-
-
- Example: GotoXY 1 1
- Writeln "The Cursor is Home"
- Quit
-
-
- IF
- ────────────────────────────────────────────────────────────
- Syntax: IF <var num[~]> <operator> <operand>
-
- Description: This command is used to perform comparisons
- within your script file and take actions based
- on the results of the comparisons. The result
- of an IF comparison is considered to be either
- true or false. If the comparison is found to
- be true, then all lines up to the next EndIF
- are processed by the interpreter. In case you
- aren't familiar with logical comparisons,
- refer to the examples listed below and later
- in this chapter. They will help you to better
- understand the purpose and functionality of
- this command.
-
- NOTE: Text Control Codes can be used in place of
- variable Numbers. And all text control codes
- are assumed to ba numeric comparison.
- ie.. You cannot compare Town Names, Player Names etc.
- Only Numeric Stats like Gold, Exp. etc..
-
-
- Specifically, this command compares the
- contents of the variable <var num> with the
- contents of <operand> using the type of
- comparison specified in <operator>.
-
- <Var num> may be any variable number between 1
- and 50 followed by the optional numeric
- identifier "~". When a tilde character "~" is
- specified after <var num> it indicates that a
- numeric comparison is to be made instead of a
- text string comparison.
-
- <Operator> may be any combination of:
-
- = Equal to...
- < Less than...
- > Greater than...
-
- <Operand> values may be:
-
- * Literal text enclosed in quotation marks.
- * A variable number specified as <#var num>.
-
- When comparing the contents of a variable
- specified as <var num> with the contents of
- another variable specified as <operand>, the
- <operand> variable number must be preceded by
- the # character.
-
- NOTE: This command may not be nested. That is to say that
- you cannot use an IF command between other IF and EndIF
- commands.
-
- Examples: IF 1 <> #2
-
- Would return true if the contents of variable
- number one was not equal to the contents of
- variable number 2.
-
- IF 5~ <= 20
-
- Would return true if the value of variable
- number five was less than or equal to the
- amount of 20. Notice that the "~" was used
- to indicate that a numeric comparison was to
- be made.
-
-
- IF 5 = "ROSENBERG"
- Display "Hey, that's where I live!|"
- EndIF
-
- In this example, the interpreter would check
- to see if variable number 5 was equal to the
- string ROSENBERG. If true, the text "Hey,
- that's where I live!" would be displayed. If
- the contents of variable number 5 did not
- match, the statement would have been
- considered to be false and the interpreter
- would jump to the EndIF statement.
-
- IF 1 <> #2
- Display "Variables 1 and 2 are different!|"
- EndIF
-
- In this example, the contents of variable
- numbers one and two would be compared. If
- they were not equal, the text "Variables 1 and
- 2 are different!" would be displayed.
-
-
- IFSKILL
- ────────────────────────────────────────────────────────────
- Syntax: IFSKILL <skill>
-
- {And it works NOW!}
- Description: This command is basically just a skill check.
- It works the same ways as the IF command except
- this will command will return a true value if
- the player is successfull at the skill in
- question or false if he fails. It also can check
- to see if the player has room for a new weapon and
- or armor
-
- <skill> Current Skills supported by this command.
-
- <pp> {Pick Pockets}
- <ol> {Open Locks}
- <frt> {Find and Remove Traps}
- <ms> {Move Silently}
- <hide> {Hide in Shadows}
- <ws> {Players Weapon in Hand Skill}
- <rl> {Read Languages} {Arts And Language Skill}
- <weaponfull>
- {Returns true if all the players Weapon Slots}
- {are Full}
- <armorfull> {Same as weapon}
-
- Example: IFSKILL weaponfull
- MENUCOMMAND DropWeapon
- ENDIF
- GIVEWEAPON "BroadSword" 10 2
-
-
- Example: IFSKILL pickpocket
- WRITELN "You Managed To Pick Someone's Pocket"
- GOTO END
- ENDIF
- WRITELN "What a miserable attempt to Steal."
- END:
- QUIT
-
-
-
- Increment
- ────────────────────────────────────────────────────────────
- Syntax: Increment <varnum> <amount>
-
- Description: Raise the value of the user variable number by
- amount. If the user variable is not a a valid number
- the command will be ignored.
-
-
- Example: Assign 1 "3"
- Increment 1
- Write "User variable 1 = ^1"
- quit
-
- The following example would display
- User variable 1 = 3
-
- Example2: Assign 1 "3A"
- Increment 1
- Write "User variable 1 = ^1"
- quit
-
- The following example would display
- User variable 1 = 3A
-
- Note: The Increment command was ignored because
- the user variable 1 was not a valid number.
-
- Note: Text control codes are allowed as a <varnum>.
- This will allow you to modify certain user
- stats. For a listing of Text Control Codes
- See the begining of this Document.
- Range checking is performed by this operation!
-
- Note: User Variables are allowed if used in the amount
- position
-
- Example3: random 1 500
- Increment ^FG ^1
- ;This would increase the users gold in hand by
- ;a random amount of 0 to 499!
-
- MenuCommand
- ────────────────────────────────────────────────────────────
- Syntax: Menucommand <menu>
-
- Description: Used to execute a standard menu item available from
- the town main menu.
-
- Available menus
-
- <EXCHANGE> Swap Weapons and Armor
- <SKILL> Display users skills
- <INVENTORY> Display backpack
- <STATS> Display User Stats
- <DROPARMOR> Drop Armor Routine
- <DROPWEAPON> Drop Weapon Routine
-
- Example: Menucommand Stats
-
-
- Random
- ────────────────────────────────────────────────────────────
- Syntax: Random <VarNum> <Range>
-
- Description: Used to insert a random value into the specified
- user value in the range of 0 - (range-1).
-
- Example : Random 1 500
- Would assign a random value into user variable number
- 1 within the range of 0 - 499.
-
-
-
-
- Return
- ────────────────────────────────────────────────────────────
- Syntax: Return
-
- Description: Used to return from the Last GOTO statement
- Called!
-
- Example: writeln " What A Wimp!"
- goto pressenter
- quit
-
- :pressenter
- changecolor 2 0
- writeln " "
- write " Press "
- changecolor 13 0
- write "["
- changecolor 15 0
- write "Enter"
- changecolor 13 0
- write "] "
- changecolor 2 0
- write "To Continue "
- waitenter
- return
-
- In this example, if variable number five is
- equal to "Y", the script interpreter will jump
- to the label MyLabel and continue processing
- from that point.
-
-
-
- Quit
- ────────────────────────────────────────────────────────────
- Syntax: Quit
-
- Description: Terminates the script and returns operation to
- the Game.
-
- Example: Quit
-
- This command would simply cause iMMortal
- to stop processing the script and return to
- the game.
-
-
-
- WaitEnter
- ────────────────────────────────────────────────────────────
- Syntax: WaitEnter
-
- Description: Waits for the user to press the <ENTER> key.
- Any other keys the user might press are
- ignored.
-
- Example: Write "Press [Enter] to continue"
- WaitEnter
-
- Displays the text "Press [Enter] to continue"
- and then waits for the user to press <ENTER>.
- Also, the communications driver outbound
- buffer is flushed prior to processing this
- command.
-
- Write / Writeln
- ────────────────────────────────────────────────────────────
- Syntax: Write "<text>" Write "<text ^5>"
- Writeln "<text>" Writeln "<text ^5>"
-
-
- Description: Displays the specified text on the screen. If
- the writeln command is used, a carriage
- return line feed sequence is displayed after
- the text. if the write command is used then
- the cursor remains positioned at the end of
- the text displayed.
-
- You can also display the contents of a user
- variable by preceding the user variable with
- the caret symbol "^" . "^5" Would display the
- contents of user variable number 5.
-
- Note: The User Variable must be located inside in the
- parenthesis.
-
- All text to be displayed MUST be enclosed in
- quotation marks as shown in the example below.
-
- Note: Text Control Codes are Valid!
- For a LIst of text control Codes See the
- begining of this Doc.
-
- Example: Writeln "Welcome aboard!"
- Write "Welcome aboard!"
-
- In the first example, the text Welcome aboard!
- would be displayed to the user and the cursor
- would be positioned at the beginning of the
- next line since the writeln command was specified.
-
- assign 5 "Kenneth"
- Writeln "Hello ^5"
-
- This example would display the Hello Kenneth
- followed by a carriage return and line feed.
-
-
-
- Example Script
- ════════════════════════════════════════════════════════════
- The following examples demonstrate the use of the automatic
- script files that iMMortal supports. While these are not
- extremely elaborate, they will give you an idea of how you
- might apply these to your system. You may wish to read
- through each script, cross-referencing the script commands
- listed in the previous section.
-
- ;Note the use of the Semi-Colon to tell the compiler to ignore this line.
- ;This is the Random Encounter script included with iMMortal
- ;Cause iMMortal To Initiate a random encounter
- attack
- quit
-
- ;DeaD Label iMMortal Jumps here if player is Killed during Attack Command
- :DEAD
- quit
-
- ;RunAway Label iMMortal Jumps here if players is Killed during Attack Command
- :RUNAWAY
- changecolor 12 0
- writeln " What A Wimp!"
- goto pressenter
- quit
-
-
- ;Press Enter Loop
- :pressenter
- changecolor 2 0
- writeln " "
- write " Press "
- changecolor 13 0
- write "["
- changecolor 15 0
- write "Enter"
- changecolor 13 0
- write "] "
- changecolor 2 0
- write "To Continue "
- waitenter
- return
-
-
- Enjoy!
-