Phoenix

This software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See Appendix A. Copyright notices



Phoenix is an unofficial patch for/a remake of the space TBS Emperor of the Fading Suns (EFS). A six minute video of Phoenix 0.50.0 is on youtube (or click on the embedded video below.)

Phoenix is best summed by the first sentences from the first public post on Wed Dec 19, 2012 at the EFS forum: "I am interested in trying to make an exe replacement using java. Exe replacement meaning i would try to recreate efs.exe functionality using existing datafiles, minus the bugs, plus some modern wargame features."

The creators of the Nova mod stated: "Since we do not have access to the game's source code, we cannot possibly fix ALL of the flaws." Phoenix is an attempt to fix the flaws that remain after all avenues short of fully fixing the executable have been exhausted.

(Notice: having java enabled in a web browser can be a security risk, unless you need to run applets you can ensure Oracle java on browsers is disabled by following the instructions here.)

Software: EFS1.4 installed. Java 8 jdk/jre. (Phoenix save files are incompatible with EFS.EXE save files.)

Hardware: Java 8 capable (Oracle java available for Linux/Mac/Solaris/Windows). 640x480 mode runs well enough on an Asus X54C/K54C laptop with Celeron B815 1.6Ghz dual core and 4GB DDR3 ram.

People who just want to try Phoenix should get the latest release distribution package named Phoenix_X.Y.Z.zip, where X.Y.Z are version numbers, downloadable at Phoenix releases on GitHub. This zip file contains a precompiled jar and also buildable release sources for those who are suspicious of running random binaries found on the Internet.

Unzip the contents of the ` Phoenix_X.Y.Z.zip ` release package to your EFS directory where ` EFS.EXE ` resides. Execution: doubleclick on ` Phoenix.bat ` (on MSWindows) or ` phoenix.sh ` (on BSD/Linux/OSX) or if you use commandline for a 640x480 window type ` java -Xss32m -jar Phoenix.jar `. For a 1280x1024 window type ` java -jar -Xss32m Phoenix.jar -d ` or double click on ` Phoenix1280x1024.bat `.

If you get an error saying java not found then likely java is not in the path and you need either to put java into the path or use absolute path name. Eg. on windows if your java jdk is installed into ` C:\Program Files\Java\jdk1.8.0 ` you would type ` "C:\Program Files\Java\jdk1.8.0\bin\java.exe" -jar -Xss32m Phoenix.jar `

How do mods work with Phoenix ? (back to top)

The intent is that all mods which work with EFS1.4 EFS.EXE should work straight out of the box with Phoenix. However, the exact formatting of datafiles which work with EFS.EXE appear broader than what would be expected from studying the EFS1.4 data files. This may result in some surprises as can be seen in the Hyperion 1.4g case below.

Nova 2.3 starts up normally

starts up normally Emperor Wars 3.4e starts up normally, extensive automated java Robot class testing implemented. Certain units (eg. terminators) have more than four (4) attack types, while the standard EFS Gui is capable of showing only four.

starts up normally, extensive automated java Robot class testing implemented. Certain units (eg. terminators) have more than four (4) attack types, while the standard EFS Gui is capable of showing only four. Hyperion 1.4g does not start without modification of UNITSPOT.DAT: In UNITSPOT.DAT line 67 reads ` "desert" "2.0 1.0 2.2.0.0 1.0 0.5 2.0 0.5 1.0 1.0"` when it should be ` "desert" "2.0 1.0 2.0 2.0 1.0 0.5 2.0 0.5 1.0 1.0"` ie there is a dot between the Trd and Air columns which makes Phoenix fail. Correct this and Hyperion should start.



Also in relevant Hyperion versions, remember to replace UNIT.DAT with UNIT3.DAT to enable building of advanced units. This must be done before a game is started since Phoenix loads datafiles only once during program start.

How does Phoenix differ from standard EFS.EXE (back to top)

The aim is to reproduce 100% of desirable EFS1.4 features and add modern game features such as build queues, ultimately replacing EFS.EXE in EFS games.

Functionally, a limitation is the exposure of feature details through available materials. Some things, such as the exact way the plague spreads or the exact way rebellions occur, are hard coded deep in EFS.EXE and can only be approximated by running the orginal game multiple times and inspecting the empirical distribution of results.

Graphically, every detail is in plain sight and the open question is how well can they be reproduced with java. So far, recreating original EFS look and feel has been a success. Font fine tuning seems currently the last obstacle in achieving near 100 % likeness with the original EFS GUI.

A side by side comparison of Phoenix 0.50.0 and EFS1.4 EFS.EXE views of Kish palace in the historical galaxy can be seen by clicking on the thumbnail image below. The vertical alignment difference of 0.5 hexes is due to the EFS.EXE centering the view so that visible hexes above/below are 5.5/3.5 whereas in Phoenix this has been set to 5/4.

Phoenix was not started in a vacuum. It is being built on the knowledge contained in the existing faqs, mods, tools and forum posts. In fall 2012 the only essential information unknown to the public community regarding the GALAXY.GAL file format was the planet map terrain data.

Reasons for trying to "just" patch existing EFS vs. doing a full remake

I am not a proven game designer, and trying to create a new game concept from scratch as you go probably would fail, all previous EFS remake attempts seem to have suffered from this to a degree.

You can use existing EFS1.4 resources: graphics, dat files, galaxy.

You can use existing community resources: most mods should work straight out of the box

EFS must be a good game concept because after twenty years it is still played and even modded actively, even with all the bugs and lack of modern wargame features.

The existing manuals and web tutorials could be used

The existing playerbase could perhaps seriously consider using it, if it fixes the worst bugs, like the crashes, and adds the most needed missing features, like build queues, and removes the annoying features, like the omnipresent "are you sure" queries and the clickfest of events and completed builds at the start of every turn.

Reasons for using java

It is the language I know best.

It has automatic memory management, null-pointer/array index checking, these alone make some serious and subtle bugs hard to introduce.

Minor compatibility problems across Linux, Windows etc.

Things to avoid (or lessons learned from previous game remake attempts)

Talking the project to death. The first EFS remake attempts from early 2000 suffered most from this. Going for the best space TBS game ever. Code slowly becoming too unstable to run.

1 and 2 are simply avoided by going for "EFS1.5 patch" instead of "EFS2.0", the existing EFS1.4 is the blueprint which must be implementented, only one must do a less buggy and more modern implementation. Not much to talk or design, just do.

Using java helps avoid 3, but lack of testing was a bit of a problem until last summer when automated high level testing using java Robot class was implemented. Basically, you play a game, testing features, the mouse and keyboard input and game state are recorded as you play, and the recorded game can be replayed (and features tested) automatically. Currently, there is almost an hours worth of tests in over twenty recorded games. Prior to implementing this testing, I have not been too confident to announce Phoenix outside of forums or threads dedicated to EFS.

The Phoenix project is hosted on github.

Release downloads on github.

Source javadoc on google drive.

A six minute video of Phoenix 0.50.0 is on youtube. Almost all EFS.EXE features implemented in Phoenix 0.50.0 are exhibited, with the notable exception of buy/sell resources from/to League agoras.

joulupunikki has done most of the work, with first proof of concept GUI code produced in early spring 2010 and major parts done between fall 2012 and present (mid 2016).

Richard Wein (co-creator of the Nova mod) has done almost all of the hard work regarding resource harvesting and production, and the special cargo pod related data structures in early 2014.

Charles Keil (www.charleskeil.com) has provided the fix for static ocean shore, river and soft tile edge graphics in mid 2016.

In the pipeline for the next release (version 0.52-alpha)

Planned

If symbiot AI = useful => release single player mission/demo with players starting as Al-Malik regent, with fleet and garrison offices, and tasked with the conquest of Absolution, Chernobog and Daishan.

Under construction

Symbiot, Rebel, Church and League AIs

Completed

Static ocean shore, river and soft tile edge graphics by Charles Keil

Archives: City info (with access to build queues)

Fix #84, UIW selection hotspot conformance

Customize mouse input to conform more with EFS1.4

New in version 0.51.0-alpha

Self-contained Win 7 version made with Inno Setup 5. No need to install java separately. Single download, click to install.

Auto purchase resources from league when building units.

Fix the bottom planetary hexes which are unseen in EFS1.4.

Tax, pay change effects on loyalty; resulting rebellions

Orders: Build road, Raze city, Sentry, Wait

Combat: unspotted agility bonus, assassin special targeting, experience, assault/feint

Bombard: city damage, shield effect

Keyboard shortcuts: sentry, wait, build city, Build Road

Archives: Group Finder (with type filter)

Add promise votes, ministry to contracts

Grand planetary map

Grand galactic map

New in version 0.50.1+

Certain problems reading non-vanilla (modded) EFS1.4 files keep surfacing from time to time when new mods or new versions of existing mods are tested with Phoenix. Normally, a bugfix would be released, but with the new automated testing introduced in 0.50.0 currently being not backwards compatible the fix will be pushed to 0.51.0 (the automated testing procedures themselves requiring a fix also to allow for easy testing of previous releases.) So 0.50.0 will be the last (and only) released version in the 0.50 series.

New in version 0.50.0

(Notice: previous published release version was numbered 0.10.2. Published version numbers between 0.10.2 and 0.50.0 do not exist, they were skipped.)

Faction relations partially implemented. May be at war or peace. If your action would result in attacking non-hostiles, a confirmation will be required. At game start, all relations are peaceful except: the rebels are permanently at war with the five great houses; the symbiots are permanently at war with everybody.

Orbital bombardment and PTS defence fire with Ranged Space capable units implemented. Currently, all PTS units within 5 hexes will fire on hostiles landing or bombarding.

House window partially implemented. Tax, tithe skim and unit pay may be set. Taxes are collected, units are paid and ending your turn is not allowed if your firebirds would go to negative.

Diplomacy window partially implemented. Currently, you may conduct diplomacy only between the five great houses. Currently, only peace and firebirds may be selected as contract terms. Sent contracts and replies are viewable in Messages.

Byzantium II window functionally complete. Regent elections are held and resolved, regents are appointed, regent must ensure all ministeries are occupied and newly elected regents may shuffle offices. Regent may declare emperor, and if they win two emperorship elections they are crowned emperor. To vote, click on vote button in Byzantium II window, click on house banner to vote for that house, click on abstain button to abstain. To assign ministries, click on ministry banner.

Agora trade partially implemented. When selected, League agoras display trade button, press this to buy resources. Move cargo pods to League agoras to sell resources. May not trade if at war with League.

New in version 0.11.0

Note: this is a meta release with no new game functionality.

Convert project from native NetBeans to Apache Maven. Define contributable tasks as issues. Change contribution policy to "Yes for predefined tasks." Not released officially.

New in version 0.10.3

Bugfix portability problems. Automate release building. Not released officially, integrated into 0.11.0.

New in version 0.10.2

A bit of rewording in documentation. See version 0.10.1 below for details of documentation/packaging fixes.

New in version 0.10.1

Notice: this is a quick bugfix release. To browse the new features in the 0.10 series please see New in version 0.10.0 below.

Documentation changes: Change "Usage" heading to "Installing and running". Add "Getting Phoenix" heading.

Documentation and packaging Bugfix: README.md did not have a "Getting Phoenix" heading. Also, the git database does not contain the explicit files necessary to build the sources as instructed in "Installing and running, Source distribution". As a result, users who cloned or otherwise got copy of the GitHub git database and read README.md or README.txt had mismatching package contents and documentation. On Windows especially, it was not possible to build a runnable `Phoenix.jar` following the instructions in the provided documentation unless one knew some details about building.

New in version 0.10.0

City capture with planetside units implemented.

City building by engineers implemented. Road building not yet possible.

PBEM with mandatory security implemented. Includes passwords and datafile integrity checking. Password revocation feature also included. If at least three factions are human controlled then at the start of a players turn, instead of entering the password, password revocation sequence of the current player may be initiated by pressing the "password revocation" button. Dialog will be then displayed querying the revocation action which may be either password zeroing or setting faction to computer control. After that the revocation sequence is initiated by saving the game. The revocation sequence is like a full year of pbem game except that instead of playing their turn each human player other than the one who is the target of the revocation will be asked for their password to confirm the revocation. When the last player gives their consent by giving their password the sequence completes and the password of the target player will be zeroed and thus when the target player's turn comes he will be asked for a new password. Or if computer control was selected as revocation action the target player's faction will be permanently set to computer control. PBEM game resumes normally from this point onwards.

Messages partially implemented. Selecting "messages"->"read messages" from menubar will bring up messages window. Messages accumulated since the end of your previous turn will be listed in a table. Double click on the "message" column to show message details. Read messages are displayed in light gray color. Currently only combat reports are viewable. The "location" column will show the planet (and possibly coordinates on planet) where the message originates. Click on the "location" column to goto the message origin.

When units are at shoreline, loading and unloading of cargo at ocean shores works more or less as in original EFS. You can currently load air units as normal cargo.

Cargo transfer dialog implemented. In stack window/unit info window drag and drop cargo pods onto each other to join them and to empty slots to split them.

Galaxy name parameter for command line must be either GALAXY.GAL or GAL\"galaxyname" so you can have a GAL directory containing galaxy files.

New in version 0.9.1

Notice: this is a quick bugfix release. To browse the new features in the 0.9 series please see New in version 0.9.0 below.

There is a bug(*) in Hyperion 1.4g which prevents Phoenix from loading DAT/UNITSPOT.DAT. In UNITSPOT.DAT line 67 reads ` "desert" "2.0 1.0 2.2.0.0 1.0 0.5 2.0 0.5 1.0 1.0"` when it should be ` "desert" "2.0 1.0 2.0 2.0 1.0 0.5 2.0 0.5 1.0 1.0"` ie there is a dot between the Trd and Air columns which makes Phoenix choke. Correct this and Hyperion should start.

Also in Hyperion 1.4g remember to replace UNIT.DAT with UNIT3.DAT to enable building of advanced units. This must be done before a game is started since Phoenix loads datafiles only once during program start.

(*) Technically, this is a feature, not a bug, since it works with EFS1.4 "EFS.EXE".

New in version 0.9.0

Resources implemented. Primary resource harvesting and secondary resource production implemented by RSW. Resource icons and resource amount display added to planet window and build panel. Click on a resource icon in planet window to see resource production and consumption statistics. Resource amount on planet window shown in red if planetary (galactic if universal warehouse on) resource consumption exceeds production. Note that since messages are not fully implemented yet you won't be notified if you lack the necessary resources for secondary production.

Food consumption implemented by RSW.

Unit building implemented. To build select "orders"->"build units" form menubar or use standard EFS methods. Differs from standard EFS in that on the lower left of the build window you have a list of planets where you have cities. Select planet by clicking and then on the lower right a list of cities on the planet will be displayed. Select a city by clicking and you will have EFS style selection of buildable units on the upper left and on the upper right you have a build queue. Only units for which you have required technologies will be buildable. If you click on the build button in planet window or city window the planet and city will be pre-selected so that the current city will be used. Double click on units to add to the build queue. Double click on units in the build queue to remove units from the build queue. If resources necessary to build unit are missing the unit will be shown red in the selection of buildable units. If the input unit is missing the unit will be shown in white. It is possible to queue units for which you don't have enough resources or input units. In such a case the city build queue will be put on hold and the first unit in the queue will be shown in gray color. Units will be built on city hex or immediately surrounding hexes if city hex is full. If all hexes are full production will be delayed by one turn. Note that since messages are not fully implemented yet you won't be notified when building is completed.

Research and technologies implemented. To research select "orders"->"research" form menubar. Research works more or less as in standard EFS except that all labs are assigned as one. Doubleclick on technologies to assign labs. Note that since messages are not fully implemented yet you won't be notified at beginning of your turn if research is completed.

Manowitz archives implemented. Manowitz works as in standard EFS except for the previous button which takes you to the beginning of the previous chapter.

PHOENIX/PHOENIX.INI file introduced to contain configurable game parameters beyond those in EFS.INI.

Currently Phoenix has a Wizard mode menu to aid in testing. You can get all techs, 999 of all resources on current planet or randomize the RNG.

Currently the double red triangle button in planet and space windows goes through cargo pods instead of all faction units.

New in version 0.8.3

Added space button to planet window.

Changed hex grid color to darker gray.

See also New in version 0.8.2

New in version 0.8.2

Bugfix: java cmd line options: use -Xss32m instead of -Xss99m to prevent out of memory errors especially during saving and loading. Thanks to RSW.

See also New in version 0.8.1

New in version 0.8.1

Bugfix: Nova mod datafiles are supported.

Bugfix: loading of datafiles will log failures to read files.

Bugfix: java: loading and saving games will catch throwables.

Errors, exceptions and failures to read data files will be logged to `phoenixlog.txt`. Previous log will be saved to `phoenixlog.txt.1`.

New in version 0.8.0

Switched to semantic version numbering .

Stack selection. On planet/space window click center mouse button on stack display to open stack selection pop-up menu.

Spotting, unseen planets and unexplored hexes implemented. Spotting works like in original EFS except space spotting which simply compares spot and camo values and spots if spot >= camo.

New in version 7:

Loading and saving games works, the progress bar displays are a bit off-tune yet.

Important note: Due to the large size of the uncompressed save files (10MB) and the fact that java's saving process (serialization) is a recursive function the game will likely choke up (stack overflow) during loading and saving with the default stack size. The default stack size thus propably needs to be increased. On windows this is done automatically by clicking on `Phoenix.bat` instead of `Phoenix.jar` or from the command line issue eg. `java -Xss99m -jar Phoenix.jar` for 1280x960 window click `Phoenix1280x960.bat`

Basic space combat works with fighters and bombers aboard carriers participating in combat. Marauder legions and psychic cargo units do not yet participate in combat.

Navigable global minimap added to planet window. Click on minimap to navigate.

Navigable galactic minimap added to space window. Click on minimap to navigate.

New in version 6:

Turns and factions implemented. Game begins with a main menu window where you select which factions are human controlled. Since there is no AI, factions which are unselected are simply skipped during game. During game click on the end turn button to end turn and the green arrows to skip to next unmoved units.

Planet to space movement implemented. When only spaceships are selected on planets click on the rocket button to launch into space. Landing spaceships also works. Spaceships can land on dry ocean floor on barren planets.

Loading & Unloading cargo works by drag & drop.

Basic ground combat works; note that combat resolution differs from EFS so that you are first presented with a display of units participating in combat and need to click the "Do combat"-button to initiate battle and that there is no display of intermediate results. Instead the final results are immediately displayed. Routed units do not display health on the combat window.

Capturing routed units works.

New in version 5:

Movement in space works, note its not possible to select a route spanning multiple jump points. PlanetToSpace movement not yet implemented. Right clicking the stack display on the left side of planet and space maps brings up the unit info window, which really doesn't do much yet.

New in version 4:

Structures added to map.

Units and basic movement is partially implemented. In the space and planet windows right click on the stacks in the maps to select them, then left click on the stack display on the left to select units in a stack. On the planet window with unit(s) selected left click on a map hex to select a destination and calculate a path. With path selected left click on the end point of a path to begin moving units along the path. Click again to stop moving.

Note: turns not implemented yet so units have infinite movement points. Factions not implemented so stacks can be mixed. If the movement would result in a stack having more than 20 units the move fails.

Copyright (C) 2013-2016 joulupunikki joulupunikki@gmail.communist.invalid Portions Copyright (C) 2014 Richard Wein Disclaimer of Warranties and Limitation of Liability. The creators and distributors offer this software as-is and as-available, and make no representations or warranties of any kind concerning this software, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. To the extent possible, in no event will the creators or distributors be liable on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of the use of this software, even if the creators or distributors have been advised of the possibility of such losses, costs, expenses, or damages. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.

Phoenix is not associated with, made by, or authorized by Segasoft Inc. or Holistic Design Inc. or the Apache Software Foundation Emperor of the Fading Suns, Fading Suns, and the Fading Suns universe and its distinct characters, logos, and marks are copyright Holistic Design Inc. (c) 1996-2015 Holistic Design, Inc. All rights reserved. SegaSoft and the SegaSoft logo are trademarks of SegaSoft Inc. (c) 1996 SegaSoft Inc. All rights reserved. Apache Commons CLI Copyright 2001-2015 The Apache Software Foundation Apache Commons IO Copyright 2002-2012 The Apache Software Foundation Apache Commons Math Copyright 2001-2015 The Apache Software Foundation Apache Log4j API Copyright 1999-2015 Apache Software Foundation Apache Log4j Core Copyright 1999-2012 Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). ResolverUtil.java Copyright 2005-2006 Tim Fennell This product includes adapted parts from SwingUtils by Darryl Burke (https://tips4java.wordpress.com/2008/11/13/swing-utils/).

(back to top)