Haven & Hearth Client This client is used to connect to the server for the Haven & Hearth online game and play said game. For details regarding the game itself, please refer to its main website at . This file exists mainly to describe various technical aspects of the source tree. Getting a copy In case you are reading this README outside of a local copy of the source tree and wish to obtain one, the main way of doing so is by using the Git Version Control System. The public (read-only) repository is accessed via the following Git URL: Build process In order to compile the source tree into a useful executable, the Apache Ant build system is needed. Running `ant' reads the `build.xml' file in the root directory of the source tree and performs the actions described by it to produce the executable output. There are two main outputs from the build process: * The `build/hafen.jar' file is the main executable, but executed in that environment, it is not configured to connect to the official server, and by default it does not have the data files necessary to execute properly; rather, it is intended for local development against a local server, with locally supplied data files, and so if you are coming to this project with the intent to connect to the official server, this will not be what you are looking for, rather: * The `bin' directory contains a copy of the above described `hafen.jar', but along with all the data files and configuration needed to connect to the official server. It can be executed with no further configuration (as with `java -jar bin/hafen.jar') and should work just like downloading the client from the main site. In order to remove intermediary compilation artifacts and other dynamic state and return the source tree to a supposedly pristine state, the `ant clean' target can be run. There may exist cases of incompatible changes where doing so may be necessary in order for the source tree to properly recompile. They should be rare, but if you are stuck on some hard-to-explain compilation or run-time issue, please try it before giving up. External dependencies The main external dependencies of the source tree are having a local Java Development Kit (JDK) installed, and (as mentioned above) the Apache Ant build system. On a Debian-based Linux system, these can usually be installed via the `default-jdk' and `ant' packages. For other distributions or operating systems, please use local documentation or your own faculties. Other than that, the client also requires the Java OpenGL implementation (JOGL), and also some data files from the main website. By default, the initial build process will download these dependencies from the main website into the `lib/ext` directory of the source tree. Once downloaded, they will not usually be updated, or even checked for updates, so subsequent runs should not depend on network access. If you want to supply your own local version of JOGL, you can do so by putting its files directly into `lib/ext/jogl' and ensure that the `lib/ext/jogl/has-jogl' file exists. As long as it does, the build system will not try to overwrite any JOGL files. Contrarily, in order to have the build system update JOGL to the latest version from the main website, the `lib/ext/jogl/has-jogl' file can be manually removed. Please note that running `ant clean' will remove the entire `lib/ext' directory, and so will both update JOGL from the main website and remove any local copy of JOGL that you may have supplied. Cursory source tree overview The vast majority of files constituting the source code of the client reside in the `src/haven' directory. Given that standard Java directory structures tend to devolve into a bit of a dumping-ground of files of small and large relevance alike, some points of particular interest may be useful, as follows. * MainFrame.java contains the main() function executed when running the client normally. It constitutes the main window of the client and starts everything running in it. * Config.java loads all runtime configuration and handles any system properties, command-line arguments and the like to modify said configuration. * JOGLPanel.java constitutes the main AWT component for running and rendering the game, and also contains the main-loop and all the event-dispatching machinery. * Session.java handles the fundamentals of the main game protocol and maintaining the connection to the server. * Resource.java is used to load any data not part of the source code itself, such as images, textures, audio clips, 3D models, &c&c. * Widget.java contains the base class of all the UI widgets in the client. Formatting style * Indentation is done in blocks of 4 columns. * The Tab character (ASCII 9) is used in the classical and only correct way: It advances the cursor to the next column ordinal divisible by 8. It does not advance the cursor by 8 columns, and it most certainly does not advance the cursor by 4 or 2 columns. If you use an IDE, you may want to check your settings on that one, because they are often wrong. * Line endings are neither Mac style (CR) nor Windows style (CRLF), but Unix style (LF). * Last but not least, I'm not extremely particular about naming, but if it's one thing that I really dislike, it is camelCase. If you wish me to accept back any modifications you may make, you will certainly increase your chances of acceptance by avoiding it. Thank you! Contributing back If you want me to accept back any changes that you might have made into the public client available from the website, the one main rule that we wish to enforce is that we want you to sign over ownership of the code you wish to contribute to us. That may seem draconian to some, but please keep in mind that it is fairly common, being practiced not least by the FSF, and it is too important for us to not lose ownership of future development to forgo. Generally, we would consider the code as owned by us as long as the copyright notices at the top of each source file mentions our and only our names, and as long as the same copyright notice is copied to any new source files you would create, and as long as you haven't made any changes to the contrary in the COPYING file. Other than that, it's mostly just a matter of technical details and getting in contact. It should be noted that, while there is a repository on GitHub for the client, it is mostly just for backup, and the GitHub account is not commonly used, so if you decide to send a GitHib Pull Request, do not be surprised if it goes unnoticed for an extended period of time. More certain ways of receiving a response include e-mail or private messages on the Haven & Hearth forums.