/* * Descent 3 * Copyright (C) 2024 Parallax Software * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . --- HISTORICAL COMMENTS FOLLOW --- * $Logfile: /DescentIII/Main/editor/d3edit.h $ * $Revision: 1.1.1.1 $ * $Date: 2003-08-26 03:57:37 $ * $Author: kevinb $ * * * * $Log: not supported by cvs2svn $ * * 45 3/30/99 6:24p Matt * Added new error system, where instead of putting up an error message, a * function returns a failure code & returns an error message that the * caller can display if it wants. * * 44 1/29/99 12:48p Matt * Rewrote the doorway system * * 43 12/01/98 11:17p Matt * Added menu option to disable drawing objects in the wireframe view * * 42 10/14/98 4:34p Matt * Added a macro to make EditorMessageBox() do OutrageMessageBox() if * EDITOR is defined. * * 41 9/04/98 3:16p Samir * control whether to allow joystick slewing. * * 40 9/04/98 12:29p Matt * Added marked edge & vertex in the editor * * 39 8/27/98 6:42p Chris * Added the goal keypad and the start of the matcen keypad * * 38 6/17/98 12:30p Samir * don't draw wireframe when moving an object. * * 37 6/15/98 4:00p Jason * replaced monochromatic polymodel lighting with rgb lighting * * 36 6/10/98 12:18p Matt * Added hack to fix bug until Samir can fix it for real. * * 35 2/10/98 1:58p Chris * Improved the path system * * 34 1/28/98 5:07p Samir * Object modeless settings added. * * 33 1/26/98 4:33p Samir * Added ability to copy object ids. * * 32 1/21/98 12:32p Matt * Revamped viewer system * * 31 1/02/98 6:35p Matt * Got rid of Render_viewport * * 30 12/29/97 5:44p Samir * Took out references to grViewport and old 2d library. * * 29 12/19/97 11:25a Samir * g3_StartFrame and g3_EndFrame replaced by EditorStartFrame and * EditorEndFrame * * 28 12/02/97 5:30p Samir * New file dialog interface implemented. * * 27 12/01/97 6:06p Samir * Implemented new FileDialog tracker system. * * 26 10/28/97 3:41p Jason * added "use hemicubes" option * * 25 9/29/97 12:09p Jason * added functionality to doorway system * * 24 9/17/97 12:58p Samir * Got rid of Curve Keypad. * * 23 9/17/97 11:40a Matt * Ripped out segment code * * 22 9/17/97 11:16a Matt * Ripped out segment code * * 21 9/11/97 5:46p Jason * first pass at getting doors to work with room engine * * 20 9/08/97 4:05p Samir * Fixed some warnings and took out extranneous includes to windows.h in * important headers. * * 19 9/06/97 3:15p Matt * Ripped out current trigger, added current portal * * 18 9/04/97 4:44p Matt * Declare room, group, & segment types here so we don't need to include * those header files, reducing compile times when one of them changes. * * 17 8/29/97 5:25p Matt * Added Placed_group * * 16 8/29/97 3:31p Samir * Fixed problem with room keypad not showing up. had to remove segment * tab constant. * * 15 8/29/97 1:50p Samir * Added object_move_axis to d3editstate. * * 14 8/18/97 6:59p Matt * Implemented Place Room/Attach room system * * 13 8/12/97 4:09p Matt * Added vars for current building & clutter * * 12 8/01/97 11:59a Samir * Added a preference for debugging in fullscreen. * * 11 7/29/97 12:26p Jason * added gamefile field to d3editstate * * 10 7/24/97 2:56p Matt * Got rid of D3EditState fields that duplicated other variables * * 9 7/22/97 7:07p Matt * Cleaned up D3EditState, moving some vars in and some out, and renaming * and changing a few others * * 8 7/17/97 7:21p Matt * Added var for current level script * * 51 6/30/97 1:29p Jason * added yet more room functions (netherspace stuff) * * 50 6/27/97 3:04p Jason * added cool room stuff * * 49 6/27/97 12:18p Samir * Added RoomKeypadDialog * * 48 6/16/97 2:34p Jason * added 3dfx support * * 47 6/05/97 6:10p Jason * added support for zbuffering and bilinear filtering * * 46 6/05/97 3:38p Samir * Added megacell keypad. * * 45 6/05/97 2:52p Jason * added megacell functions * * 44 5/27/97 5:41p Jason * added toggling of opengl renderer * * 43 5/21/97 3:39p Jason * added terrain editing stuff * * 42 5/21/97 12:29p Jason * added the ability to draw terrain dots in mine view * * 41 4/30/97 5:43p Jason * added ability to toggle whether or not you want to run in 16 bit mode * * 40 4/08/97 10:41a Jason * implemented path following interface * * 39 4/04/97 3:15p Samir * Added paths keypad, removed player keypad since it's joined with object * keypad. * * 38 4/02/97 8:07p Matt * Added variable & button to toggle object move state * * 37 4/02/97 3:24p Jason * got rid of WV_changed and made TV_changed update the textured view and * flag "World_changed" * * 36 3/31/97 5:57p Matt * Revamped mine update flags * * 35 3/31/97 3:47p Matt * Added code to keep track of, render, and display current vertex. * * 34 3/31/97 3:13p Jason * added ship,weapon,and sounds to d3edit and zeroed it out upon startup * * 33 3/26/97 6:32p Samir * Changed order of keypads. * * 32 3/26/97 4:38p Samir * Added SplashMessage function. * * 31 3/25/97 2:50p Jason * added current_robot field * * 30 3/24/97 12:33p Samir * Added current trigger type. * * 29 3/20/97 4:22p Samir * Added Segment Sizing mode and side sizing. * * 28 3/17/97 12:24a Matt * Added warning segs list * * 27 3/12/97 3:27p Matt * Added scrap buffer * * 26 3/11/97 2:54p Samir * Add some vars useful for rotation of segments. * * 25 3/07/97 4:18p Jason * implemented terrain functionality in the editor * * 24 3/05/97 1:01p Samir * Added current doorway global * * 23 3/05/97 11:49a Samir * Added doorway and terrain keypad tabs. * * 22 3/04/97 7:13p Samir * Added current_door and Current_trigger globals. * * 21 2/28/97 6:37p Matt * Added variable & toggle button for box selection mode * * 20 2/28/97 12:11p Matt * Added vars for selected seg list * * 19 2/24/97 5:51p Matt * Added vars for Markedsegp & Markedside * * 18 2/19/97 5:39p Matt * Made EditorStatus() take printf-type args, as the D1/D2 function did. * * 17 2/18/97 6:21p Samir * Added EditorStatus function to print messages on the status bar. * * 16 2/18/97 12:46p Samir * Added current object type editor state. * * 15 2/10/97 5:41p Matt * Added a couple more vars * * 14 2/07/97 6:00p Matt * Added Mine_changed * * 13 2/06/97 11:59a Matt * Added externs for Cursegp,Curside,Curedge * * 12 2/05/97 11:13a Samir * Added D3windowed preference * * 11 2/03/97 5:57p Matt * Added missing include * * 10 1/30/97 7:48p Jason * added support for powerup pages * * 9 1/23/97 4:57p Samir * Added a bunch of window position vars. * * 8 1/21/97 12:52p Samir * Added texture and wireframe screen dims to d3editstate struct. * * 7 1/20/97 3:51p Samir * Took out EDITOR define. This should be put in the MAKEFILE for * INFERNO.INI style implementation. * * $NoKeywords: $ */ /* D3 Editor Globals */ #ifndef _D3EDIT_H #define _D3EDIT_H #include "pstypes.h" #include "descent.h" #include "vecmat.h" #include // For putting up editor messageboxes in the main body (& should be in the editor code too, probably) #ifdef EDITOR #define EditorMessageBox OutrageMessageBox #endif // Define group & room structs so we don't have to include group.h & room.h struct group; struct room; const int TEXSCREEN_WIDTH = 512, // Texture screen base width and height TEXSCREEN_HEIGHT = 384, WIRESCREEN_WIDTH = 640, // Wirefrane screen base width and height WIRESCREEN_HEIGHT = 480; const int EDITOR_RESOLUTION_X = 1024, // Used to try to make editor resolution independent EDITOR_RESOLUTION_Y = 768; int CALC_PIXELS_WITH_ASPECTX(int pixels); int CALC_PIXELS_WITH_ASPECTY(int pixels); // keypad constants enum { TAB_TEXTURE_KEYPAD, TAB_MEGACELL_KEYPAD, TAB_TERRAIN_KEYPAD, TAB_OBJECTS_KEYPAD, TAB_ROOM_KEYPAD, TAB_DOORWAY_KEYPAD, TAB_TRIGGER_KEYPAD, TAB_LIGHTING_KEYPAD, TAB_PATHS_KEYPAD, TAB_LEVEL_KEYPAD, TAB_MATCEN_KEYPAD }; // Constants for d3edit_state variables enum { IN_WINDOW, ACROSS_EDGE }; // values for box_selection_mode enum { REL_OBJECT, REL_VIEWER }; // values for object_move_mode enum { GM_WINDOWED, GM_FULLSCREEN_SW, GM_FULLSCREEN_HW }; // values for game_render_mode class grSurface; class grViewport; // Structure to store various editor state & preference values struct d3edit_state { // Values for current item in the various dialogs int texdlg_texture; // current texture in texdialog int current_obj_type; // current type of object int current_powerup; // current powerup id int current_door; // current door in door page dialog int current_robot; // current robot in robot page dialog int current_ship; // current ship in ship page dialog int current_sound; // current sound in sound page dialog int current_weapon; // current weapon in weapon page dialog int current_path; // currently selected path for a robot to follow int current_node; // currently selected node of preceding path int current_megacell; // currently selected megacell int current_room; // currently selected room int current_gamefile; // currently selected gamefile int current_building; // currently selected building int current_clutter; // currently selected clutter // Values for the different editor windows bool texscr_visible; // is texture mine view up? int texscr_x, texscr_y, texscr_w, texscr_h; // dims of floating texture mine view bool wirescr_visible; // is wireframe model up? int wirescr_x, wirescr_y, wirescr_w, wirescr_h; // dims of floating wireframe model bool keypad_visible; // is keypad visible? int keypad_current; // which keypad tab are we on? bool float_keypad_moved; // has floating keypad moved? int float_keypad_x, float_keypad_y, float_keypad_w, float_keypad_h; // floating keypad width and height, x, y int objmodeless_x, objmodeless_y; // object modeless list x and y. bool objmodeless_on; // is modeless on? bool tile_views; // tile or floating view windows, keypad // Values for terrain renderer bool terrain_dots; // show terrain dots? bool terrain_flat_shade; // flat shade terrain? // Misc preferences int game_render_mode; // what mode to we play the game in? See constants above. bool randomize_megacell; // randomize when placing a megacell? int box_selection_mode; // How editor box selection works. See constants above. int object_move_mode; // How object movements works. See constants above. int object_move_axis; // This is the axis on which objects move with mouse. bool fullscreen_debug_state; // do we allow for fullscreen debugging? bool hemicube_radiosity; float node_movement_inc; int texture_display_flags; // which textures to display on the texture tab float texscale; // the scalar for moving texture UVs bool joy_slewing; // shall we allow joystick slewing? bool objects_in_wireframe; // should we draw objects in the wireframe view? }; // Editor.cpp:: Current state of the editor UI. extern d3edit_state D3EditState; // Editor.cpp:: Surface describing the actual desktop where the editor is running. extern grSurface *Desktop_surf; // flags for the textured views changed extern int TV_changed; // Set this flag if a new world is loaded/created extern int New_mine; // Set this when the mine has changed extern int World_changed; // Set this when the editor state (but not the world itself) has changed extern int State_changed; // Set this when the viewer (i.e., player) has moved extern int Viewer_moved; // Set this when an object has moved extern int Object_moved; // Set this when the editor viewpoint has changed extern int Edview_changed; // Current room & face extern room *Curroomp; extern int Curface, Curedge, Curvert; extern int Curportal; // Current object extern int Cur_object_index; // Marked room & face extern room *Markedroomp; extern int Markedface, Markededge, Markedvert; // Placed room info extern int Placed_room; extern group *Placed_group; extern int Placed_room_face; extern int Placed_door; extern float Placed_room_angle; extern vector Placed_room_origin; extern matrix Placed_room_orient; extern vector Placed_room_attachpoint; extern matrix Placed_room_rotmat; extern room *Placed_baseroomp; extern int Placed_baseface; // Vars for the list of selected rooms extern int N_selected_rooms; extern int Selected_rooms[]; // Flag for if mine has changed (& thus needs to be saved) extern int Mine_changed; // Current trigger in mine displayed in trigger dialog extern int Current_trigger; // The scrap buffer extern group *Scrap; // Pointer to the scripts for this level extern char *Current_level_script; // What mode we're currently in enum { VM_MINE, VM_TERRAIN, VM_ROOM, NUM_VIEW_MODES }; extern int Editor_view_mode; // The ID of the most recent viewer object (not counting room view) extern int Editor_viewer_id; // current directories for file dialogs. extern char Current_files_dir[_MAX_PATH]; extern char Current_bitmap_dir[_MAX_PATH]; extern char Current_scrap_dir[_MAX_PATH]; extern char Current_room_dir[_MAX_PATH]; extern char Current_model_dir[_MAX_PATH]; extern char Current_sounds_dir[_MAX_PATH]; extern char Current_weapon_dir[_MAX_PATH]; // object id clipboard. extern int Copied_object_id; // FUNCTIONS void EditorStatus(const char *format, ...); void SplashMessage(const char *format, ...); void StartEditorFrame(grViewport *vp, vector *view_vec, matrix *id_mat, float zoom); void EndEditorFrame(); // Set the editor error message. A function that's going to return a failure // code should call this with the error message. void SetErrorMessage(const char *fmt, ...); // Get the error message from the last function that returned failure const char *GetErrorMessage(); #endif