GithubHelp home page GithubHelp logo

botf2 / botf2 Goto Github PK

View Code? Open in Web Editor NEW
20.0 20.0 7.0 224.06 MB

License: Other

C# 98.83% JavaScript 0.01% Erlang 0.07% Modula-3 1.09%
4x-strategy-game csharp dotnet game multiplayer wpf xaml xna

botf2's Introduction

BotF2

Stars Licence

"Rise of the UFP - A free open-source Star Trek Fan Game"

Disclaimer:

"Star Trek and all related marks, logos and characters are solely owned by CBS Studios Inc. This fan production is not endorsed by, sponsored by, nor affiliated with CBS, Paramount Pictures, or any other Star Trek franchise, and is a non-commercial fan-made game intended for recreational use. No commercial exhibition or distribution is permitted. No alleged independent rights will be asserted against CBS or Paramount Pictures."

Honoring Birth of the Federation, more commonly abbreviated 'BOTF', was a turn-based empire-building game played within a randomly generated galaxy. This ensured no two games would be exactly alike. Players could select from one of five major empires and compete with the other four for galactic domination. These empires were the United Federation of Planets, the Klingon Empire, the Romulan Star Empire, the Cardassian Union and the Ferengi Alliance. The game was set in the Next Generation era of the Star Trek Universe. The galaxy was laid out in numbered square sectors many of which contained solar systems inhabited by minor races and alien entities. The galaxy also contained other stellar bodies including nebulae and wormholes. Players could take a chance and enter a wormhole that would either jump them to a distant sector of the galaxy or destroy their ship. Empires expanded by the terraforming and colonization of planets combined with diplomatic annexation or military conquest of minor races. Planetary systems could also be forcibly captured from other major empires. Play involved exploration and diplomacy to establish strategic alliances, intelligence operations, technological development and turn based combat with vessels of rival empires. Exploration was aided by player-built outposts and star bases that supported expansion into distant space. Random events, such as Borg invasions, presented additional challenges for players. There was also a multiplayer option. In either single or multi player mode, unclaimed empires and minor races were handled by an artificial intelligence system within the program.

Screenshots

Galaxy Screen

Research Screen

System Summary Screen

System Structures Screen

Setup

This project is in C#. The code is on Github, but many of the graphics are stored separately, due to their size, on a shared dropbox folder. You can email me, sisko52744 at gmail dot com, for access to that folder. You will need to copy the contents of a resources folder there into a resources folder on your local computer.

For the project, we recommend using a good IDE, such as Visual Studio or VSCode for this project. You will need to download an older .NET framework for this project, found here: https://www.microsoft.com/en-us/download/details.aspx?id=6041

You will also need to download an XNA Framework, found here: https://www.microsoft.com/en-gb/download/details.aspx?id=15163

Contributing

There are many ways you can contribute. Since you're on GitHub, we'll assume you're a programmer. BotF2 follows a fairly standard development process - fork, branch, commit, pull request, merge. If you don't know how to do this, here is a guide to the process - https://blog.scottlowe.org/2015/01/27/using-fork-branch-git-workflow/

botf2's People

Contributors

bote-reginald avatar daedalus86 avatar exultantmonkey avatar happygino avatar joshbranda avatar kennethflanagan avatar kennethgf avatar singlecopy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

botf2's Issues

Edit Borg Diplomacy and Structures

Want a build for the Borg that is less like the other Empires and more Borg. Thinking next to now diplomacy, trade and some difference in tech abilities.

Ship explore order

When assigned, the ship explores anything that is unexplored.

Perhaps when it is done, have it automatically return to the home system and have a message saying something like "Our citizens welcome home USS x, after their x turn voyage seeking out new lifeforms and new civilizations"

Update check

Whilst a full on updater is out of the question right now, a simple check for a newer version should make it a lot easier for people to keep up to date

Collection was modified; enumeration operation may not execute.

Randomly came up

Exception has been thrown by the target of an invocation.

at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 
at System.Delegate.DynamicInvokeImpl(Object[] args) 
at System.Delegate.DynamicInvoke(Object[] args) 
at Supremacy.Utility.AsyncHelper.AsyncInvokeCallback(Object state) in SupremacyCore\Utility\AsyncHelper.cs:line 54 
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
at System.Threading.ThreadPoolWorkQueue.Dispatch() 
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Collection was modified; enumeration operation may not execute.

at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) 
at System.Collections.Generic.List1.Enumerator.MoveNextRare() 
at System.Collections.Generic.List1.Enumerator.MoveNext() 
at System.Linq.Enumerable.CountTSource 
at Supremacy.Combat.CombatEngine.get_IsCombatOver() in SupremacyCore\Combat\CombatEngine.cs:line 88
at Supremacy.WCF.SupremacyService.SendCombatUpdateCallback(CombatEngine engine, CombatUpdate update) in SupremacyService\SupremacyService.cs:line 1137

Combat Window Refactoring

At the moment, with every update, a lot of the contents of the combat window are cleared and then recreated. Maybe take advantage of binding and observable lists somehow?

Combat Window throws lots of binding errors

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'TreeViewItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'TreeViewItem' (Name=''); target property is 'VerticalContentAlignment' (type 'VerticalAlignment')

Auto colony management

Add the ability for the player to set a colony to auto manage, with an optional list of priorities

Federation Non Combat Ships missing

Non combat ships are missing when the game loads and are not in the ship building list. Also Kling are missing Hunting grounds. Items area to be present in HomeSystems.xml Will look further.

"Scripted" Events

The "Scripted" events (really just random events) introduce a lot of code overhead. It would be very easy to implement it in XML and code instead, and a lot more extensible

Problem with colony upon population reducing events

http://star-trek-supremacy.proboards.com/post/6239/thread

A bug I noticed is that when the system population is decimated, the production values are still the same as the turn before and if you don't reallocate your workforce, your planet has the same production output it had before the population was reduced.

Also, one event killed off my entire system population, the planet was still under my control, but I couldn't recolonize it nor did I gain any new population on it, even the system population ifo was missing, it wasn't 0, it was just nonexistent. I was playing as the Dominion.

Language button

We need to add a language button in the main menu, for the localizations!

yeah, just do code it :-) .... in my mind this will take big researching to the code. I could do a external *.bat for: - turn English (files) to French (files) or back.

Processing Production

Have noted some random failures to progress from Processing Production on Processing Turn. Need to get some game logs into system production to see if it can be isolated.

Add some words in the EN text file:

Please add these words in the EN text file:

Military, Economic, Zoom in, Zoom out, Chat

We also need to add these words: CIVILIZATION, STATUS, TURNS, ATTITUDE, OUTGOING, INCOMING, REGARD, TRUST in the EN txt or another diplomacy text file

for DiploScreen DONE

we need the black hole, pulsar, neutron star....etc descriptions to be added in the text file

Please add also the following:
GALAXY SHAPE: Spiral, Ring, Elliptical, Cluster, Irregular
GALAXY SIZE: Tiny, Small, Medium, Large, Huge
PLANET DENSITY: Sparse, Medium, Dense
MINOR RACES: None, Few, Some, Many
TECH LEVEL: Early, Developed, Sophisticated, Advanced, Supreme

pulsar etc. DONE

Missing string about the spy, sabotage & raid ships!

SHIP_CAMOUFLAGE_STRENGTH

Missing string about the cloaked ships!! In the En.txt, suggest to add

[CLOAKED_FLEET] {0} Fleet

{0}=

Image

MULTIPLAYER Missing Strings: COMPUTER, UNASSIGNED, START, CANCEL

MISSING STRING: Played by Player

Image

UPDATE: still missing (others should be done) - request on cloaked text - request on GALAXY SHAPE: Spiral, Ring, Elliptical, Cluster, Irregular and these others - request on MULTIPLAYER Missing Strings: COMPUTER, UNASSIGNED, START, CANCEL - played by removed :-)

Ever longer data transmission from Host PC in multiplayer

Need to look into what the issue really is and possible fixes. Have noted that in prolonged multiplayer games that the time to transmit data from the host PC to each player PC, one after the other, takes progressively longer to the point of time wasted. Wondering if it is re sending data on game state from turn one after each new turn? If so is there a way to increment the data sent to just the last turn to save time? (rather than starting over from turn one each time?)

Move MoraleTables in to Civilizations

Colours and labels can stay in the MoraleTables unless we find a better place for them, but everything else applies to a civilization, so move them to Civilizations.xml

Spy ships show twice in summary

When spy ship infiltrates a system it shows to lines. 1 is for failure to infiltrate and second is that it took so many research points out of a total number of points.

SUMMARY: Our spies have tried to infiltrate the Klingons at Qo'noS but they had no success.

SUMMARY: Our spies have infiltrated the Klingons at Qo'noS and gained 63 of 90 research points.

might be already resolved

Save game button not lighting up

Save game button does not seam to highlight all the time. Does seam to save a game if you just select the name and press enter but the save button does not highlight.

Crash with only Federation and Terran as playable

System.ArgumentException occurred
  HResult=0x80070057
  Message=Collection already contains an item with the specified key.
  Source=<Cannot evaluate the exception source>
  StackTrace:
   at Supremacy.Collections.KeyedCollectionBase`2.OnKeyCollision(TKey key, TValue item) in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyCore\Collections\ObservableKeyedCollection.cs:line 330
   at Supremacy.Collections.KeyedCollectionBase`2.AddKey(TKey key, TValue item) in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyCore\Collections\ObservableKeyedCollection.cs:line 310
   at Supremacy.Collections.KeyedCollectionBase`2.InsertItem(Int32 index, TValue item) in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyCore\Collections\ObservableKeyedCollection.cs:line 243
   at Supremacy.Collections.CollectionBase`1.Add(T item) in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyCore\Collections\CollectionBase.cs:line 116
   at Supremacy.Universe.GalaxyGenerator.FinalizaHomeworldPlacement(IList`1 starNames, HomeSystemsDatabase homeSystemDatabase, Civilization civ, MapLocation location) in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyCore\Universe\GalaxyGenerator.cs:line 353
   at Supremacy.Universe.GalaxyGenerator.PlaceEmpireHomeworlds(CollectionBase`1 positions, IList`1 starNames, HomeSystemsDatabase homeSystemDatabase, List`1 empireCivs, CollectionBase`1 empireHomeLocations, List`1 chosenCivs, Boolean mustRespectQuadrants) in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyCore\Universe\GalaxyGenerator.cs:line 522
   at Supremacy.Universe.GalaxyGenerator.PlaceHomeworlds(CollectionBase`1 positions, IList`1 starNames, CollectionBase`1& homeLocations) in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyCore\Universe\GalaxyGenerator.cs:line 721
   at Supremacy.Universe.GalaxyGenerator.GenerateGalaxy(GameContext game) in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyCore\Universe\GalaxyGenerator.cs:line 219
   at Supremacy.Game.GameContext.Initialize() in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyCore\Game\GameContext.cs:line 936
   at Supremacy.Game.GameContext..ctor(GameOptions options, Boolean isMultiplayerGame) in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyCore\Game\GameContext.cs:line 872
   at Supremacy.Game.GameContext.Create(GameOptions options, Boolean isMultiplayerGame) in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyCore\Game\GameContext.cs:line 858
   at Supremacy.WCF.SupremacyService.DoStartGame() in C:\Users\dwrj8\Repositories\supremacydev\Mainline\SupremacyService\SupremacyService.cs:line 255
01:20:37.501 [6] DEBUG General - GalaxyGenerator.PlaceEmpireHomeworlds(): Civilization Intro placed as Empire
01:20:37.506 [6] DEBUG General - GalaxyGenerator.PlaceEmpireHomeworlds(): Civilization Federation placed as Empire
01:20:37.514 [6] WARN  General - Failed to find a suitable home sector for civilization Terran Empire.  Galaxy generation will start over.
01:20:37.989 [6] DEBUG General - GalaxyGenerator.PlaceEmpireHomeworlds(): Civilization Intro placed as Empire
01:20:37.994 [6] DEBUG General - KeyedCollectionBase`2.OnKeyCollision(): ####### KeyCollision: key=0; item=Supremacy.Game.CivilizationManager

Possible infinite loop in DoProduction

I'm not entirely sure how this happened, it shouldn't be possible

while ((industry > 0) && ((!colony.BuildQueue.IsEmpty()) || colony.BuildSlots[0].HasProject))

Galactic Main View String

We can't found the string: Played by Player

Image

eliminated "Played by", re-placed nice brackets. My suggestion for "Player": ( m ) ....m = myself, German: mich, French: moi or ma...,

Other suggestion: image by characters like ( o-o ) OR ( o^o ) OR ( /!-! ) -> in SP the name doesn't have big sense, maybe at SaveGame?, so i prefer o-o within no special characters

I think the name player must be the same name when you host a multiplayer game!! i suggest to add a text box in the new options screen to give a name to the player

Refactor out native code

Every time Windows 10 updates it means we have to either install another SDK or retarget the solution. There is no particular reason that it has to be C++. Easier just to convert it to C#

Crash on Borg Assimilation combat

AssimilatedCombatEngine
// Check for IsAssmilated and in combat with Borg for (int i = 0; i < _combatShips.Count; i++) { CombatAssets ownerBorg = GetAssets(_combatShips[i].First.Owner); if (ownerBorg.Owner.Name.ToString() != "Borg") continue; goto Next; {

CivDatabase is loaded multiple times

  • SupremacyClient\SinglePlayerStartScreen.xaml\SinglePlayerStartScreen.xaml.cs:49
  • SupremacyCore\Game\GameContext.cs:863
  • SupremacyCore\Game\GameInitData.cs:261
  • SupremacyUI\GalaxyGridPanel.cs:234

Ideally we want to load it only once. The load in GalaxyGridPanel.cs was added to me fix a big with races not being in the current GameContext

Assault System target shields

Want to see if shields prevent you from landing troops. If so then want target shields to be an option in system assault.

Look in InvasionArena (SupremacyCore.Combat) to add more detail getting at planet shield source
while([tech level is high enough]) { [Code to execute that lets you get specific in taking out shields...] }

Summary on text of Diplomacy

Post by Starfleet.Command I would like suggest to link the Sitrep Summary text of the Diplomacy Text XAML to the Inbox in the Embassy screen

Wormhole Improvements

  • Possibly require investigation with a science ship before use
  • Have some way to display which wormholes have been explored and are stable/unstable, and where they go
  • Add Barzan wormhole
  • Add possibility of wormhole ends moving about
  • Always have Bajorans in game for the Bajoran Wormhole (#98)
  • Check wormhole name formatting

Merging all the wormhole issues in with this one (#97)

Intel/Diplomacy Map Data

Add the ability to steal map data.
Making alliances etc can reveal map data.
Use map data as a bargaining chip in diplomatic agreements

Endless Processing Ship Production

On first or second turn of a game stopped at an apparent endless loop of Processing Ship Production.
Hit pose and continue in VS and see it in files like GrapihcsDeviceManger..cs, ClientApp.xaml.cs and Dialog.cs. Get it while playing with many minor races and no minor races.
shipprocessing

Station construct orders not cancelled after battle

If you have a fleet in an enemies system, and there is an enemy construction ship there with orders to build a station, engage it in battle, it will retreat to an adjacent sector without a system. The order will stay however, and it will attempt to construct the station in a sector with no system, resulting in a null reference. The construct order needs to be cleared on retreat

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=SupremacyCore
  StackTrace:
   at Supremacy.AI.UnitAI.DoTurn(Civilization civ) in C:\Users\dwrj8\Repositories\BotF2\SupremacyCore\AI\UnitAI.cs:line 110

Trade route raid vs patrol

Have point(s) on the trade routs where an hostile ship could cut trade or a friendly ship could "patrol" protect the route.

ShipLIST (Overview)

In Intel Screen (Colonies Overview) it would be nice to have a list of current ships (a list of lost ships would be much harder due to storing in save game and reloading)

made a DRAFT in Dropbox\ShipName\ShipLIST_DRAFT

\Tables\MoraleTable.txt

if missing an entry especially on table MoraleEventResults (missing value for additional empire) in my mind two things should happen: - if no value is found than use default value (first column) - push a warning to Log.txt (GameLog-function) that the value is missing

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.