========================================== Mistmare Developer's Kit v1.0 (March 2004) ========================================== INSTALLATION ================================================================================ Simply unzip all the files in this archive to your Mistmare folder. It will create a subfolder "Developer" and create a user called "Developer" (in Users/Developer). DEVELOPMENT ================================================================================ Notes: - this is by no means a comprehensive tutorial or reference - post questions to forum: "http://mistmare.arxeltribe.com/ib-cgi/ikonboard.cgi" - "help/objects/_index.html" explains database objects in more detail - there's also a file called "Game Mechanics - RPG standards.rtf" in the /help. First, some basics - let's run the demo project: ================================================ - optionally, open the "Mistmare/Users/Developer/server.hxm" file to set the location you want to start on (you can leave it at its default, and there are only two locations in the demo project) - compile the logical databases - run "Mistmare/Developer/compile.cmd" (this creates the mistmare.hxv/.hxs files in the Developer/Database directory) * those files contain all the game logic (mistmare.hxv) and the language strings (mistmare.hxs) and are compiled from the files in the Object folder (we call this the *logical* database, and this is where 99% of game programming is) - run the game as a developer by "Run Mistmare (Developer's Edition).bat" * when a game is ran, it will create two additional files (server.hxv and client.hxv) in the database directory - this is the second - or *visual* - database, which contains all visual objects (the "visual/aural/... descriptions" of logical objects) and is compiled from files in the Database/Server and Database/Client folders The distinction between the logical database (the Object folder) and the visual database (the) can be best illustrated with an example: - a location (interior or outdoors) in the game has two separate objects: a logical object and a visual object - let's say our location is LOC_PlaceWhereAllBegins - the logical object for LOC_PlaceWhereAllBegins is stored inside the Object/Logic/locations.hxm file, and it contains all the logical properties of the location, such as the exits to other logical locations, the available props on the location, the events that trigger when you enter a location, etc. - the visual object for LOC_PlaceWhereAllBegins stored in the Database/Server/Location/LOC_PlaceWhereAllBegins.hxm file, it contains the visual description of the location - which world file to load, where the SPOTS (coordinates) for the present exits/props/characters are, and all the SCRIPTS which the location is using - it is important to know that SCRIPTS are used ONLY when something cannot be implemented using logical object only; we do not disclose SCRIPT details in this release, as 99% of stuff in the Mistmare engine can be programmed ONLY USING LOGICAL OBJECTS! Programming Mistmare is basically an interaction-driven approach. You will create logical objects for locations, exits, characters, items, props, etc. Each of those may be interactive (fight, use, enter, or any custom interaction), and each interaction with the environment might start EVENTS, which may set some TRIGGERS (boolean variables), perhaps based on some CONDITION. Programming-wise, the EVENTS, TRIGGERS and CONDITIONS are also logical objects (therefore contained in the Database/Object folder), just like an item or a location is, and can be used and reused to generate the game logic. In most cases, there is no classic "procedural programming" in Mistmare. It is simply a collection of (possibly interactive) objects, which influence other objects thru the logic and state of events, conditions, and triggers. It is really simpler than it sounds - just look at the game logic of the demo project. So, to build a game from scratch: - first, visualize the situation, write it down on a paper or something (list the logical objects that you will need) - then, go to the logical database - "Mistmare/Developer/Objects/Logic" and open the files that you will need - open the reference (help) file: "Mistmare/Developer/Help/objects.html" to see the templates on which the logical objects are based, and therefore all the properties of object - start coding the logical stuff - who is present where, which props have interactions, which events get triggeded by interactions, what are the conditions... - it is best to start with (logical) locations and connect them with (logical) exits - populate the (logical) locations with (logical) friends, neutrals and enemies - give them (logical) dialogues according to the storyline you imagined - attach (logical) conditions and events to the (logical) dialogues, props and NPCs - for a quick reference, just open the Tutorial episode and see how it's done - after the logic work is done, you have to create visual counterparts of logical objects if you want them to appear on the screen - these are contained in files in "Mistmare/Developer/Database/Server" folder - there is one file for each visual object; the file name must match the name of its logical counterpart - (for example, look in your props.hxm to find the logical PRP_Keybox - then look for the file PRP_Keybox.hxm inside "Mistmare/Developer/Database/Server" and edit its visual properties (icon, 3D model,...)) - after all your logical objects that need visual counterparts (like characters, props, locations) do have their visual counterparts, you put them into the world onto certain SPOTS (coordinates, which are a property of the location VISUAL object) - how this is done, see below in the "HOW TO SET SPOTS FOR OBJECTS INSIDE A LOCATION" section - compile the logical databases (compile.cmd) - run the game - this will automatically re-compile the visual databases HOW TO SET SPOTS FOR OBJECTS INSIDE A LOCATION ============================================== (i.e. the "visual database editor") - we have a simple, and very crude editor to place objects in locations (and it was actually used to populate all locations in Mistmare :) - when you enter a location, press "v", this puts you in "wizard" mode - you can now freely move the camera in the game level using the cursor keys - inside wizard mode, you can bring up the editor commands by pressing "e" (and turn it off by pressing "e" again) - if you want to change something in the visual location object, bring up the editor commands and select *edit* at the bottom of the editor commands - if you want to edit an existing spot for an object - select *spots* from the bottom menu - select the object and its spot name (usually "default"), the object will become yellow which means it is selected - if you want to add a new spot for an object - toggle the editor command pane off by pressing "e" - create a spot/placeholder anywhere in the world geometry by simply left-clicking - toggle the editor command pane on by pressing "e" - click on prop/character/... on the bottom and select the new object you'd like to place there - press "e" to exit the editor commands pane - if you want to move an existing spot/object around, you first select it (from the spots) and then move it around with "num5" - switch to move mode "num9" - switch to rotate mode "num1" - move down / rotate x "num7" - move up / rotate x "num4" - move left / rotate z "num6" - move right / rotate z "num8" - move front / rotate y "num2" - move back / rotate y (or something like it...) "num-" - decrease step "num+" - increase step "~" - console mode (use the "showcolliders 1" command to see colliders in the visual editor) - when you are done, don't forget to click on "save" in the editor commands pane ("e") - the game will now generate a file in the "Mistmare/Users/Developer/Work/Server" work/temp directory - this file contains the updated location visual object for this edited location - after you finish all the editing, you must move all the files from this folder to the main "Mistmare/Developer/Database/Server/Location" folder (or a subfolder) ================================================================================ NOTES: - in the game, some strings in the user interface will show like DSCITM_... or LOC_... that's because logical objects should have a description inside strings.hxm just open the strings.hxm file and add appropriate strings