From 2f93fd25d3380bca5459267625e1eb208a32f103 Mon Sep 17 00:00:00 2001 From: nkorslund Date: Sun, 6 Jul 2008 15:01:42 +0000 Subject: [PATCH] Worked on the config system git-svn-id: https://openmw.svn.sourceforge.net/svnroot/openmw/trunk@10 ea6a568a-9f4f-0410-981a-c910a81bb256 --- INSTALL.txt => INSTALL-linux.txt | 0 INSTALL-win32.txt | 232 +++++++++++++++++++++++++++++++ Makefile | 5 +- README.txt | 124 +++++++++++++++++ bored.d | 2 +- core/config.d | 139 ++++++++++++------ core/inifile.d | 47 ++++++- dsss.conf | 14 +- morro.ini | 44 ------ nodsss_openmw.bat | 4 +- ogre.cfg | 19 --- ogre/bindings.d | 5 +- ogre/cpp_interface.cpp | 25 ++-- ogre/ogre.d | 4 +- morro.d => openmw.d | 9 +- plugins.cfg | 13 +- 16 files changed, 545 insertions(+), 141 deletions(-) rename INSTALL.txt => INSTALL-linux.txt (100%) create mode 100644 INSTALL-win32.txt create mode 100644 README.txt delete mode 100644 morro.ini delete mode 100644 ogre.cfg rename morro.d => openmw.d (97%) diff --git a/INSTALL.txt b/INSTALL-linux.txt similarity index 100% rename from INSTALL.txt rename to INSTALL-linux.txt diff --git a/INSTALL-win32.txt b/INSTALL-win32.txt new file mode 100644 index 000000000..2ec5974e4 --- /dev/null +++ b/INSTALL-win32.txt @@ -0,0 +1,232 @@ +OpenMW - the completely unofficial reimplementation of Morrowind +================================================================ + +Written by Nicolay Korslund +Email: korslund@gmail.com +WWW: http://openmw.snaptoad.com +License: See GPL3.txt +Current version: 0.2 (second release, very pre-alpha) +Date: 2008 jun. 17 + + + +QUICK NOTE: You must own and install Morrowind before you can use +OpenMW. Let me repeat that: OpenMW will NOT run if you do not have +Morrowind installed on your system! + + + + +New in version 0.2 +================== + +The second release should now work with the GDC compiler (the D +frontend for GCC) and DSSS. Since GDC is the only option for compiling +on other Unixes, on 64 bit and on Mac, this will probably make porting +to these platforms much easier. DSSS (a specialized D build tool) will +hopefully make porting to Windows a lot easier. + +To compile, you no longer use 'make'. Instead you use 'dsss build', +which will run 'make' for you. (More details below.) + +See the changelog at the end. + + + + +Installation from source +======================== + +These instructions are for the brave souls who seek to compile OpenMW +on their own. If you are using the binary version, you can skip to the +next section. + +Supported platforms: +-------------------- + +The only operating system that has been tested and is known to work is +32bit Ubuntu Linux 8.04. Windows and other platforms have not been +tested as of yet. + +Dependencies: +------------- + +Dependencies needed to build OpenMW: + +OGRE 1.4.5 (3d engine) +Audiere 1.9.4 (sound engine) +OIS-1.2.0 (input system) +gcc and g++ (C++ compiler) +GNU make (build tool for C++ files) +DMD 1.030 (D compiler) + or GDC 4.1.3 (alternative D compiler) +Monster 0.8 (scripting language and tools) +DSSS 0.75 (D build tool) +curl (for DSSS) + +The above versions are the ones I have tested recently, but other +versions might work. OGRE and Audiere will require their own set of +dependencies. I recommend using an automated package tool to install +as many of these as possible. On ubuntu, try typing: + +sudo apt-get install libogre-dev libaudiere-dev build-essential g++ curl gdc + +This takes care of OGRE, Audiere, the C and D compilers, make and +curl. The rest have to be installed manually. There is a libois-dev +package in Ubuntu (OIS version 0.99), but this has NOT been tested. + +You can find the other libraries and tools here: + +OIS: http://sourceforge.net/projects/wgois/ +DMD: http://digitalmars.com/d/1.0/dmd-linux.html +DSSS: http://svn.dsource.org/projects/dsss/downloads/ +Monster: http://monster.snaptoad.com/download.html + +If you are using a DSSS binary and not compiling from source (I +recommend the binary), make sure to get one that matches your D +compiler. Ie. get the GDC version if you installed GDC, and the DMD +version for DMD. + +If you want to install Ogre and Audiere manually as well, try: + +OGRE: http://ogre3d.org +Audiere: http://audiere.sourceforge.net/ + +Once everything is set up correctly, you might need to alter a couple +of lines in the Makefile. The Makefile is only used to compile the C++ +parts of OpenMW, that interfaces with Ogre, OIS and Audiere. On the +line: + +OGCC=g++ `pkg-config --cflags OGRE` + +Insert the path to your OIS include directory (or leave it blank if +you installed OIS in /usr). For example, you might add: + +-I/home/me/my/path/to/OIS/include + +You might also need to add other include paths or options for Ogre if +the pkg-config command doesn't work for some reason. Mine outputs + +$ pkg-config --cflags OGRE +-DOGRE_GUI_GLX -DOGRE_CONFIG_LITTLE_ENDIAN -I/usr/include/OGRE + +After you are reasonably satisfied, you can try running make manually +to see if the C++ parts compile. When you are ready to compile the D +parts and link it all together, type: + +dsss build + +If something goes terribly wrong during the build (it probably will), +_and_ you figure out how to solve it, I would appreciate if you told +me about it so I could update these instructions. + + + + +Running the binary +================== + +The binary downloads have been compiled on a 32-bit Ubuntu 8.04 box +with the libraries mentioned below. They might not work on other linux +systems due to differing library setups. If this is the case, then +your only option is to compile from source. + +Dependencies: +------------- + +The binary depends on the following libraries: + +OGRE 1.4 +Audiere 1.9.4 +OIS-1.2.0 + +and Morrowind of course. If you followed the compilation instructions +above, you will have these already. If not, you can find them here: + +OGRE: http://ogre3d.org +Audiere: http://audiere.sourceforge.net/ +OIS: http://sourceforge.net/projects/wgois/ + +Alternatively (on Ubuntu 8.04) you can at least get Ogre and Audiere +with the command: + +sudo apt-get install libogre14 libaudiere-1.9.4 + +Configuration: +-------------- + +Before you can run OpenMW, you have to help it find the Morrowind data +files. The 'morro' program needs the files Morrowind.esm and +Morrowind.bsa, and the directories Sound/ and Music/ from your +Morrowind Data Files directory. By default it expects to find these in +the data/ directory. (Can be changed in morro.ini.) + +I recommend creating a symbolic link to your original Morrowind +install. For example, if you have Morrowind installed in: + +c:\Program Files\Bethesda Softworks\Morrowind\ + +and your windows c: drive is mounted on /media/hda1, then run the +following command: + +ln -s "/media/hda1/Program Files/Bethesda Softworks/Morrowind/Data Files/" data + +Also, if you have OGRE installed in a non-standard directory (ie. NOT +to /usr/lib/OGRE), you have to change the PluginFolder in plugins.cfg. + +Finally, you can change screen resolution and fullscreen mode in +ogre.cfg. (I don't recommend fullscreen mode yet, since it may mess up +your screen and input settings if the program crashes.) + +Running OpenMW: +--------------- + +If Azura is with you and all the stars and planets are aligned in your +favor, you should now be able to run OpenMW using the program called +'morro'. + +Write morro -h to see a list of options. + +Running without parameters should bring you into the cave called Sud, +or the last cell loaded. You are in free float mode. Move around with +WASD (or arrow keys), move up and down with left shift and ctrl, exit +with 'q' or escape. + +To load another cell, specify the cell name on the command line. Use +the 'esmtool' program to get a list of cells (see below.) Note that +you must use quotation marks "" if the cell name contains spaces or +other weird characters. Exterior cells are disabled at the moment. + +Enjoy! ;-) + + + + +Other included tools: +===================== + +esmtool - Used to inspect ES files (ESM, ESP, ESS). Run without + arguments to get a list of options. + +bsatool - Tool for viewing and extracting files from BSA archives. + (Can also be used to test the NIF parser on a BSA.) + +niftool - Decodes one or more NIF files and prints the details. + + + + +Changelog: +========== + +0.3 (work in progress) +- updated Makefile and sources for increased portability (thanks to + Dmitry Marakasov for FreeBSD tips and testing!) + +0.2 (2008 jun. 17) - latest release +- compiles with gdc +- switched to DSSS for building D code +- includes the program esmtool + +0.1 (2008 jun. 03) +- first release diff --git a/Makefile b/Makefile index 8ac2e38aa..effec6648 100644 --- a/Makefile +++ b/Makefile @@ -4,11 +4,8 @@ CXX?= g++ CXXFLAGS?= -# Replace this path with your OIS include path -OIS_PATH=../../../software/include - # Compiler settings for Ogre + OIS. Change as needed. -OGCC=$(CXX) $(CXXFLAGS) `pkg-config --cflags OGRE` -I$(OIS_PATH) +OGCC=$(CXX) $(CXXFLAGS) `pkg-config --cflags OGRE OIS` # Compiler settings for Audiere AGCC=$(CXX) $(CXXFLAGS) `audiere-config --cxxflags` diff --git a/README.txt b/README.txt new file mode 100644 index 000000000..093c5297f --- /dev/null +++ b/README.txt @@ -0,0 +1,124 @@ +OpenMW - the completely unofficial reimplementation of Morrowind +================================================================ + +Written by Nicolay Korslund +Email: korslund@gmail.com +WWW: http://openmw.snaptoad.com +License: See GPL3.txt +Current version: 0.3 (still very pre-alpha) +Date: 2008 jul. 6 + + + + +QUICK NOTE: You must own and install Morrowind before you can use +OpenMW. Let me repeat that: OpenMW will NOT run if you do not have +Morrowind installed on your system! + + + + +Release notes for 0.3 +===================== + +This release adds support for building and running on Windows. As a +result, the installation instructions have been split into the files +INSTALL-win32.txt and INSTALL-linux.txt. These files cover both the +binary packages and installation from source. + +See also the changelog at the end. + +Note: if you are using a localized (non-English) version of Morrowind, +the default starting cell (Sud) might not exist, and the esmtool will +probably fail with UTF errors, since the system currently expects UTF8 +input. This will be fixed in a future release - I have even added +localized support as one of the major goals on the web page. + + + + + +On the immediate TODO list: +=========================== + +- read the input files in the correct code page +- support for Mac +- collision detection +- displaying creatures correcty, animation +- rendering NPCs +- GUI/HUD system +- rendering outdoor scenes (exterior cells) + + + + +Installation +============ + +Currently supported platforms are Windows and Linux. Tested on Windows +XP and Ubuntu 8.04. + +For instructions, see the files INSTALL-win32.txt or +INSTALL-linux.txt. + +FreeBSD has also been tested but is only partially supported, due to +sketchy D compiler support. Linux 64 bit currently does NOT work, for +the same reason. + + + + +Programs included in this package: +================================== + +openmw - The main program. Run openmw -h for a list of options. + +esmtool - Used to inspect ES files (ESM, ESP, ESS). Run without + arguments to get a list of options. + +bsatool - Tool for viewing and extracting files from BSA archives. + (Can also be used to test the NIF parser on a BSA.) + +niftool - Decodes one or more NIF files and prints the details. + + + + +Acknowledgements +================ + +Thanks goes out to: + +- The NifTools group / NIFLA for their great work on decoding the NIF + file format. + +- Dmitry Marakasov for testing and porting to FreeBSD. + +- Nebelmann for continued testing on 64 bit linux. + +- Bethesda Softworks for creating Morrowind! + + + + +Changelog: +========== + +0.3 (work in progress) +- built and tested on Windows XP +- partial support for FreeBSD (exceptions do not work) +- removed some config files, since these are auto-generated when + missing +- made the config system more robust (an Ogre config windows opened + when needed) +- alternatively reads config file from ~/.openmw/ on unix systems. +- updated Makefile and sources for increased portability (thanks to + Dmitry Marakasov.) + +0.2 (2008 jun. 17) - latest release +- compiles with gdc +- switched to DSSS for building D code +- includes the program esmtool + +0.1 (2008 jun. 03) +- first release diff --git a/bored.d b/bored.d index 46f1c466d..fbf8573b8 100644 --- a/bored.d +++ b/bored.d @@ -59,7 +59,7 @@ void main() if(loot) writefln("You have loot."); if(level>1) writefln("You are level ", level); writefln(" - 1) Kill monster + 1) Kill a monster 2) Read a book 3) Read an NPC 4) Sell some loot diff --git a/core/config.d b/core/config.d index 1182b93b7..3bd870042 100644 --- a/core/config.d +++ b/core/config.d @@ -25,6 +25,7 @@ module core.config; import std.string; import std.file; +import std.path; import std.stdio; import monster.util.string; @@ -54,6 +55,7 @@ struct ConfigManager { IniWriter iniWriter; + // Sound setting float musicVolume; float sfxVolume; float mainVolume; @@ -64,6 +66,15 @@ struct ConfigManager float mouseSensY; bool flipMouseY; + // Ogre configuration + bool showOgreConfig; // The configuration setting + // The actual result, overridable by a command line switch, and also + // set to true if firstRun is true. + bool finalOgreConfig; + + // Other settings + bool firstRun; + // Number of current screen shot. Saved upon exit, so that shots // from separate sessions don't overwrite each other. int screenShotNum; @@ -75,6 +86,9 @@ struct ConfigManager char[] musDir; // Explore music char[] musDir2; // Battle music + // Configuration file + char[] confFile = "openmw.ini"; + // Cell to load at startup char[] defaultCell; @@ -133,42 +147,26 @@ struct ConfigManager // Initialize the key binding manager keyBindings.initKeys(); - readIni(); - - if(reset) with(keyBindings) + // On Linux / Unix, if openmw.ini is not found in the current + // directory, use ~/openmw/openmw.ini instead. + version(Posix) { - // Remove all existing key bindings - clear(); - - // Bind some default keys - bind(Keys.MoveLeft, KC.A, KC.LEFT); - bind(Keys.MoveRight, KC.D, KC.RIGHT); - bind(Keys.MoveForward, KC.W, KC.UP); - bind(Keys.MoveBackward, KC.S, KC.DOWN); - bind(Keys.MoveUp, KC.LSHIFT); - bind(Keys.MoveDown, KC.LCONTROL); - - bind(Keys.MainVolUp, KC.ADD); - bind(Keys.MainVolDown, KC.SUBTRACT); - bind(Keys.MusVolDown, KC.N1); - bind(Keys.MusVolUp, KC.N2); - bind(Keys.SfxVolDown, KC.N3); - bind(Keys.SfxVolUp, KC.N4); - bind(Keys.ToggleBattleMusic, KC.SPACE); - - bind(Keys.Pause, KC.PAUSE, KC.P); - bind(Keys.ScreenShot, KC.SYSRQ); - bind(Keys.Exit, KC.Q, KC.ESCAPE); + if(!exists(confFile)) + confFile = expandTilde("~/.openmw/openmw.ini"); } + readIni(reset); + // I think DMD is on the brink of collapsing here. This has been // moved elsewhere, because DMD couldn't handle one more import in // this file. //updateMouseSensitivity(); } - // Read config from morro.ini, if it exists. - void readIni() + // Read config from morro.ini, if it exists. The reset parameter is + // set to true if we should use default key bindings instead of the + // ones from the config file. + void readIni(bool reset) { // Read configuration file, if it exists. IniReader ini; @@ -177,7 +175,7 @@ struct ConfigManager // reading and once for writing. Fix it? Nah. Don't do anything, // this entire configuration scheme is likely to change anyway. - ini.readFile("morro.ini"); + ini.readFile(confFile); screenShotNum = ini.getInt("General", "Screenshots", 0); mainVolume = saneVol(ini.getFloat("Sound", "Main Volume", 0.7)); @@ -189,31 +187,78 @@ struct ConfigManager mouseSensY = ini.getFloat("Controls", "Mouse Sensitivity Y", 0.2); flipMouseY = ini.getBool("Controls", "Flip Mouse Y Axis", false); - defaultCell = ini.getString("General", "Default Cell", ""); + defaultCell = ini.getString("General", "Default Cell", "Sud"); + + firstRun = ini.getBool("General", "First Run", true); + showOgreConfig = ini.getBool("General", "Show Ogre Config", false); + + // This flag determines whether we will actually show the Ogre + // config dialogue. The EITHER of the following are true, the + // config box will be shown: + // - The program is being run for the first time + // - The "Show Ogre Config" option in openmw.ini is set. + // - The -oc option is specified on the command line + // - The file ogre.cfg is missing - // Read key bindings - for(int i; ishowConfigDialog()) - //if(mRoot->restoreConfig()) - return 0; - return 1; + // Show the configuration dialog and initialise the system, if the + // showConfig parameter is specified. The settings are stored in + // ogre.cfg. If the parameter is false, the settings are assumed to + // come from ogre.cfg. + int result; + if(showConfig) + result = mRoot->showConfigDialog(); + else + result = mRoot->restoreConfig(); + + return !result; } // Initialize window. This will create and show the actual window. diff --git a/ogre/ogre.d b/ogre/ogre.d index 7685d75a4..1947e840a 100644 --- a/ogre/ogre.d +++ b/ogre/ogre.d @@ -24,6 +24,7 @@ module ogre.ogre; import core.resource; +import core.config; import ogre.bindings; import util.uniquename; @@ -80,7 +81,8 @@ void setupOgre() { // Later we will send some config info from core.config along with // this function - if(cpp_configure()) OgreException("Configuration abort"); + if(cpp_configure(config.finalOgreConfig)) + OgreException("Configuration abort"); cpp_initWindow(); diff --git a/morro.d b/openmw.d similarity index 97% rename from morro.d rename to openmw.d index 2e96f9340..58af7e96c 100644 --- a/morro.d +++ b/openmw.d @@ -4,7 +4,7 @@ Email: < korslund@gmail.com > WWW: http://openmw.snaptoad.com/ - This file (morro.d) is part of the OpenMW package. + This file (openmw.d) is part of the OpenMW package. OpenMW is distributed as free software: you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -61,6 +61,7 @@ void main(char[][] args) bool render = true; bool help = false; bool resetKeys = false; + bool showOgreFlag = false; // Some examples to try: // @@ -89,6 +90,7 @@ void main(char[][] args) } else if(a == "-h") help=true; else if(a == "-rk") resetKeys = true; + else if(a == "-oc") showOgreFlag = true; else cells ~= a; if(cells.length + eCells.length/2 > 1 ) @@ -101,6 +103,10 @@ void main(char[][] args) config.initialize(resetKeys); scope(exit) config.writeConfig(); + // If the -oc parameter is specified, we override any config + // setting. + if(showOgreFlag) config.finalOgreConfig = true; + if(cells.length == 0 && eCells.length == 0) if(config.defaultCell.length) cells ~= config.defaultCell; @@ -115,6 +121,7 @@ void main(char[][] args) writefln(" -n Only load, do not render"); writefln(" -ex,y Load exterior cell (x,y)"); writefln(" -rk Reset key bindings to default"); + writefln(" -oc Show the Ogre config dialogue"); writefln(" -h Show this help"); writefln(""); writefln("Specifying more than one cell implies -n"); diff --git a/plugins.cfg b/plugins.cfg index 593f51d5e..31deb6ef6 100644 --- a/plugins.cfg +++ b/plugins.cfg @@ -1,14 +1,13 @@ # Defines plugins to load # Define plugin folder -PluginFolder=..\Ogre\bin\debug\ +PluginFolder=/usr/lib/OGRE # Define plugins -Plugin=RenderSystem_Direct3D9_d -Plugin=RenderSystem_GL_d -Plugin=Plugin_ParticleFX_d -Plugin=Plugin_BSPSceneManager_d -Plugin=Plugin_OctreeSceneManager_d -Plugin=Plugin_CgProgramManager_d +Plugin=RenderSystem_GL +Plugin=Plugin_ParticleFX +Plugin=Plugin_BSPSceneManager +Plugin=Plugin_OctreeSceneManager +# Plugin=Plugin_CgProgramManager