{:intro} {^}The CTW Engine Editor By Internext Software {^}Programmed By John Bintz {^}Hypertext Document By John Bintz {^}================================ {>commands}Script Commands {>constr}Script Constructs {>format}File Formats {>info}Information This puppy is Hypertexted. Just start clicking! {:commands} {/2}============================================= {/3}CTW Engine Scripting Commands {/2}============================================= Remember to end all script lines with pipes (|)! {>PAUSE}Jump Down A Couple {>WAIT}Jump Down Some More {>ITEMSPEC}Jump Down Even More {>CHANGEFRAMEBASE}Jump To The End {>intro}Jump Back To Intro {::} {/7}:Label Set a Label to jump to within a program. {:[} {/7}[ Text Params... Display some text. Parameters are labelled in the text string as %1 on. {:]} {/7}] Text Label Make a text menu mption. Jump to Label if selected. {:SET} {/7}SET Variable Value Set The Variable To Value {:MATH} {/7}MATH Value Op Value Variable {/7}MATH Variable Op Value Perform a mathematical operation. Form one places Result into different Variable, while form two places Result into first Variable. OP is any of the following operators: {/5} + Addition {/5} - Subtraction {/5} * Multiplication {/5} / Division {/5} % Division Remainder {:PAUSE} {/7}PAUSE Seconds Pause the script for Seconds {:GOTO} {/7}GOTO Label Goto the Label in the program {:ONGOTO} {/7}ONGOTO Base Offset Labels... Jump to the Label specified, starting at 1, from the formula Offset-Base. Example: {/6}ONGOTO 4 6 JUMPNOW JUMPLATER JUMPNEVER would send the script to the label JUMPNEVER {:LABELJUMP} {/7}LABELJUMP Character Label Jump a Character's script (identified by their position in the CHARZ block, starting at zero) to Label. {:WALK} {/7}WALK Direction Speed Walk at a given Speed (in pixels) in the following directions: {/5} 0 Up {/5} 1 Down {/5} 2 Left {/5} 3 Right {:WALKTO} {/7}WALKTO X Y Speed There Walk to a specific point (X,Y) on the map at Speed pixels per step. When you reach it, There is true. {:IF} {/7}IF Variable Op Value Label {/7}IF Variable Label The first form uses an Operand to determine trueness, while the second check if Variable is true. In either case, if the result is true, the script jumps to Label. The Operands for form one: {/5} > Greater Than {/5} < Less Than {/5} => >= Greater Than/Equal {/5} <= =< Less Than/Equal {/5} = Equal To {/5} <> Not Equal To {:WAIT} {/7}WAIT Clicks Wait for Clicks/50th of a second {:RND} {/7}RND Variable UpperBound Put a random number into Variable from 0-UpperBound {:TIMER} {/7}TIMER Variable Put into Variable the number of clicks since powerup {:GLOSET} {:GLOGET} {/7}GLOSET GlobalVariable Value {/7}GLOGET GlobalVariable Variable These commands set and get Global Variables, a set of 256 variables that travel between scripts. {:BITSET} {:BITCLR} {:BITCHG} {/7}BITSET Varibale Bit {/7}BITCLR Variable Bit {/7}BITCHG Variable Bit These set, clear, or change a bit in a variable. Variables have 32 bits from 0-31. {:BITGET} {/7}BITGET Variable Bit Result Result is true if Bit in Variable is set. {:ADDITEM} {/7}ADDITEM Name Add the item Name to the player's inventory. {:HAVEITEM} {/7}HAVEITEM Name Result If the player has item Name, Result is true. {:TAKEITEM} {/7}TAKEITEM Name Result If the player has item Name, Result is true and the item is removed from the player's inventory. {:ITEMSPEC} {/7}ITEMSPEC Name Value Result Get the specs for an item: {/5} WP Weapon Power {/5} AP Armor Power {/5} HP Hit Points Restored {/5} COST Item Cost {/5} TYPE Type Of Item {/2} 0 Weapon {/2} 1 Armor {/2} 2 Hat {/2} 3 Gloves {/2} 4 Restores HP {/2} 5+ Custom {:KILL} {/7}KILL Kill a character and end the script {:LOADLEVEL} {/7}LOADLEVEL Levelname Load the level Levelname {:ATTACK} {/7}ATTACK Group Cause the Group to attack the player {:BUY} {/7}BUY Item Result Buy Item for a certain amount of money. If the player has enough money, Result is true and the player gets the item. {:SELL} {/7}SELL Item Result Try to sell the player's Item. If the player has the item, he sells it for its total price and Result is true. {:RATINGSET} {:RATINGGET} {/7}RATINGSET Rating Value {/7}RATINGGET Rating Value Get or set a rating from the player: {/5} HP Hit Points {/5} MHP Max Hit Points {/5} STR Strength {/5} DEX Dexterity {/5} INT Intelligence {/5} CRED Credits {/5} EXP Experience {:CHANGEFRAMEBASE} {/7}CHANGEFRAMEBASE FrameSet Change a character's Frame Set to FrameSet {:COORDS} {/7}COORDS Char X Y Get the coordinates of character Char into X and Y {:MOVETO} {/7}MOVETO X Y Move a character to (X,Y) {:FRAMEANIM} {/7}FRAMEANIM FrameSet Animate the character with FrameSet, then continue {:ITEMREMOVE} {:ITEMISGONE} {:ITEMKILL} {:ITEMPUTBACK} {/7}ITEMREMOVE Which {/7}ITEMISGONE Which Result {/7}ITEMKILL Which {/7}IITEMPUTBACK Which These commands use a bunch of Global Variables to keep track of individual item scripts. When a player takes an item, ITEMREMOVE it. Then, add to the beginning of the item's script an ITEMISGONE request. If the Result is True, KILL the item. ITEMPUTBACK changes the item's state. ITEMKILL combines ITEMREMOVE and KILL. {:MENURESET} {:MENUADD} {:MENUCHOICE} {/7}MENURESET {/7}MENUADD Short Long {/7}MENUCHOICE Result These commands let you use circular menus, such as the player's menu. MENURESET first, then add commands, giving the short (rotated) string, then the long (bottom of screen descriptor) string. MENUCHOICE returns the number of the item, starting from zero. {:TOGGLETOUCH} {/7}TOGGLETOUCH Change the script's ability to jump to :TOUCH when touched. {:KEYDOWN} {/7}KEYDOWN Key Result Check to see if Key is being pressed. If it is, Result is true. {:SOUND} {/7}SOUND File Frequency Voices Play sound File on disk at Frequency through Voices: {/5} %0123 {/5} 0 and 2 are Left Channels {/5} 1 and 3 are Right Channels {:TOGGLEDISPLAY} {/7}TOGGLEDISPLAY Toggle display updating on and off. {:FADEIN} {:FADEOUT} {/7}FADEIN Time {/7}FADEOUT Time Fade in and out the screen for 15*Time/50 Seconds {:LOCKCONTROLS} {:UNLOCKCONTROLS} {/7}LOCKCONTROLS {/7}UNLOCKCONTROLS Prevent or allow the player to move. {:constr} {/2}========================================= {/5}Useful Script Constructions {/2}========================================= {>intro}Jump Back To Introduction {/4}WalkLoops A character will walk around a bunch of different points, all set in the script: {/2}SET @WALKLOOP 0| {/2}:WALKLOOP| {/2}ONGOTO 0 @WALKLOOP POINT1 POINT2 ... {/2}:POINT1| {/2}WALKTO X Y SPEED @THERE| {/2}IF @THERE NEXTPOINT| {/2}GOTO WALKLOOP| {/2}:NEXTPOINT| {/2}MATH @WALKLOOP + 1| {/2}MATH @WALKLOOP % POINTS| {/2}GOTO WALKLOOP| {/4}Text Menus Text Menus are menus put directly upon the text window. They are useful when selecting between Yes/No answers or Buy/Sell options: {/2}[ "Hello There!"| {/2}[ "Do you like it here?"| {/2}] "Yes I Do" YES| {/2}] "No I Don't" NO| {/2}GOTO END| {/2}:YES| {/2}[ "That's good!"| {/2}GOTO END| {/2}:NO| {/2}[ "Well, then I'll have to DESTROY YOU!"| {/2}ATTACK| {/2}GOTO END| {/4}Circluar Menus Circular menus are the menus that rotate around the character, and are very useful when you have more than three choices: {/2}MENURESET| {/2}MENUADD "Buy" "Buy A Weapon"| {/2}MENUADD "Sell" "Sell A Weapon"| {/2}MENUADD "Leave" "Leave The Store"| {/2}MENUCHOICE @RESULT| {/2}ONGOTO 0 @RESULT BUY SELL LEAVE| {/4}Global Variables Global variables create storylines. They travel between levels and are useful for keeping track of what you've done: {/2}GLOGET 0 @CURRPOS| {/2}IF @CURRPOS = 4 STORY4| {/2}IF @CURRPOS = 3 STORY3| {/2}IF @CURRPOS = 2 STORY2| {/2}IF @CURRPOS = 1 STORY1| {:format} {/2}============================================ {/3}CTW File Formats {/2}============================================ {>intro}Jump Back To Introduction {/4}Scripts Scripts are ASCII files with commands separated by pipes (|) COMMAND1 Params| COMMAND2 Params| {/4}Frames.data First the name of the SBOBS file, then the frames in this format... FrameSet Special Frame Frame... {/5} Special Settings Are {/5} 0 No Change {/5} 1 Constant Animation {/5} 2 Horizontal Flip {/5} 3 Vertical Flip {/4}Items.data Items are set up as follows... ItemName WeaponPower ArmorPower HPRestored ItemCost ItemType {/5} ItemTypes Are... {/5} 0 Weapon {/5} 1 Armor {/5} 2 Gloves {/5} 3 Hat {/5} 4 HP Restored {/5} 5+ Custom Items {/4}Level Files Level Files are set up in blocks... |MAPZ| Map File |CHARZ| Character Information, in the format... {/3}Script X Y FrameSet Group |ZONEZ| Zone Information, in the format... {/3}Left Top Right Bottom ZoneType Parameters {/5} ZoneTypes Are As Follows... {/5} STOP {/5} SLOW {/5} ATTACK Group {/5} LEVEL LevelFile X Y {/5} LABELJUMP Character Label |MUSIL| Mod File |EFFECTZ| Effect Params... {/5} Effects Are As Follows... {/5} 1 Rain Drops Speed {/5} 2 Snow Flakes Speed {/5} 3 Dark Strobe {/5} 4 Lightning {/5} 5 Dim View {/5} 99 Custom Picture |COMMENTZ| Comments {:info} {/2}================================================ {/3}CTW Information {/2}================================================ {>intro}Jump Back To Introduction The CTW Engine is based upon the engine that drives Chrono Trigger, my most favorite SquareSoft RPG. I have absolutely no idea when I first started work on it, but I'm sure that was about eight months ago, around January or February of 1997. Its intended purpose is to allow the creation of multi-screened Role Playing Games, with music, sound effects, animated battles (non-animated battles; see Final Fantay, Bards Tale, etc.), full-color graphics not build upon tiles, fully animated characters, a fancy menuing system (in the style of SofM and SofE), the possibilities for a HUGE storyline (with about 190 global variables, it shouldn't be too hard to do...), and to do it all on systems with even limited resources (2 Meg 68000-based Amigas are probably the lowest system you can run it on effectively). Its written entirely in Amos Professional, with use of the following Extensions: {/4}LDos by Niklas Sjöberg {/4}CRAFT and MusiCRAFT (hacked for St Load) {/4}EasyLife Version 1.10 {/4}JD Extension The engine itself (sans required intro animation) is about 160k in size compiled. And its taken SO LONG to get it into this form its not even FUNNY!