Skip to content
Daniel Aquino edited this page Sep 15, 2016 · 9 revisions

Dev Tooling

  • Ability to reload textures from disk using hot key (for Dactil)
  • Cleanup command line options. #98
    • Ability to specify level name on the command line. #136
  • Crash detection and submission system #104
    • breakpad again?
  • Clean up forsaken source #105
astyle --style=allman --indent=force-tab --indent-classes --indent-switches --indent-namespaces --indent-labels --indent-preprocessor --indent-col1-comments --break-blocks --pad-oper --unpad-paren --align-pointer=name *.c *.h

Bot

  • Have game beacon include player scores?
  • In game network test button instead of having to join chat to ask FsknBot. #63

Documentation

  • Use source code documentation format?
    • doxygen?
    • markdown?
  • Document exactly how Forsaken 3d math / movement works?
  • Write up detailed documentation on the engine?

Compiling

Cleanup Engine

  • versioning and bot file cleanup? https://github.com/ForsakenX/forsaken/issues/190
  • make lua c-table-api support in config system generic for any use cases #156
  • Much better logging system that allows for log levels and categories like syslog? #155
  • Rewrite stats.c in lua ? #113
  • Use lua for pilot configs #157
  • Move hard coded info about characters/bosses/levels/missions into files?
  • remove proprietary trademarks #222
  • Get rid of battle files and just enumerate level directory for list ? #138
  • Delete all scrolling-messages support ? #124
    • Seems to have been used for credits at end of game. But was never finished. And we probably don't care for it at this point.
  • Clean out old un-used menu's #122
    • MENU_Start is some old menu system that was replaced follow the path adn delete it all

Platforms

Testing

Bot Mode

  • Build forsaken as a shared library and headers so anyone could FFI bind to it?

Wiki

Installer

  • Proper Linux installation support. #55
  • OSX Bundles #56
  • Auto updating Forsaken installation. #114

Rendering

Networking

  • Secure any messages received in EvaluateMessage() that haven't been added strict checks yet. #241
  • Random start position seeds could be improved for better randomness. #179
  • Validate that messages are sent at correct times ? #177
Such as team messages being sent in a non team game.. That doen't make much sense and can cause the game to crash very hard when you being to play with structures that aren't initialized as expected.
  • validate player is host before accepting MSG_INIT #174
  • Someone could exhaust all player id's by sending HEREIAM repeatedly. #176
    • The host will simply keep giving them the next id until we run out of all 16.
  • only host is allowed to send you host related messages #172
  • player has a valid GameStatus[] before doing anything else #171 ????
  • Send certain packets at the host only. #166 <--- SEE
  • Get rid of SHIP_IsHost flag. #164 <--- SEE
  • Upgrade to latest Enet. #58
  • Ability for host to proxy players who can't get into the game. #14
  • Only send certain information when state changes instead of always sending it. #182
For instance.

Packet:

Status = MyGameStatus
Flags = BuildShipFlags(WhoIAm)
GroupImIn
Pos
Quat / Angle (which one is rotation velocity?)
Most of that information could be sent only when needed.
  • position update contains Bank information #183
Can't we add it to the final quat instead ?

#define SHORTBANKMODIFIER (32767.0F / MAXBANKANGLE )

pkt.Bank            = (int16) (Ships[WhoIAm].Object.Bank    * SHORTBANKMODIFIER );
  • forsaken could use net.h id's instead of negotiating it's own #185
    • this would save some time / complexity during initialization
  • Expose host player pointer in net.h ? #186
    • Since we want to use this feature so much in game for security checks it might be best to just make it part of the public api..
    • Or at least add a routine that can return the host pointer for a given p2p session instead of using a global.
  • reduce player positions to smaller types ? #187 <-- SEE
  • compress the normalized vector into a single int16 ? #184 <-- SEE
  • Replace NetworkOldBikeNum ? #181
  • At various times this is set to -1 at which point another location in the game loop will detect this and send a BIKENUM message to request a player id from the host.
    • I can't really see a reason for this round about way of doing things.
    • We should simply set BIKENUM message whenever we need it.
  • RandomStartPosModify should just be done locally #180
  • replace LastPacketTime with peer->lastReceiveTime #178
  • short level name uses 32 in many places instead of using a define for size #175
    • Something like MAXSHORTLEVELNAME would be better to use.
    • 32 is fine because max name in battle.dat is 12 bytes
  • net.h already tracks players to their peer connection so we don't need to send player id in every packet #165
    • We should instead build up a list in memory so we know which player id is talking to us.
    • See WhoIAm in every packet and MSG_BIKENUM.
  • TEXT MSG should only be sent to players that need the message. #160
  • net_bool_t is an int but could be a char or just bit flag. #161
  • TEXT MSG is overloaded to act as other message types see: #162
  • TEXT MSG packets should be null terminated. #159 instead of sending 255 bytes every time
  • Remember player stats when someone leaves and add them back when they rejoin #147
  • Authenticate players in game to validate they are who host says they are? #121
    • generate keys and challenge each other?
  • Protect player names from being used by others in multiplayer games ? #120
    • create keys that lock down known player names?
  • Allow blocked ip/name list ? #119
    • for host?
    • kick / ban?
  • Lan game publishing ? #118
  • Keep developing smasher.c to find new issues. #242
  • Send forsaken p2p related events to the server for debugging syncing issues?
  • Nat
    • Wait for ipv6?
    • Fix nat punch through implementation?
    • Support UPNP (lion has some code for this)
    • PWNAT
Nat punch through not working for all possible nat types. #12

Right now we only support 1 type of nat punch through.

There is support for another type which had to be disabled because it caused a bug.

We should investigate why and fix it.

And see if we can support other types.

Presentation

  • New forsaken intro video
    • Mathias Gorf started to build one but we never got mp4 supported added into forsaken.

Inputs

  • New types of mouse sensitivity profiles?
    • exponential curve for slow/fast controls?
      • This way you could move slower for mouse control and then move faster to do a full 360 etc..
  • Weapon selection bug. #117

Community

  • Track active irc users and hosted games to show stats on server?
  • Team based information in stats screen. #132
  • Save single/multi player stats to server? #133
  • Our own wikipedia page?

Services

  • have a clone of github and backed up?

GamePlay Ideas

  • Ability to configure what weapons, shield, hull etc.. a player is spawned with? #134
  • Random level select mode. #137
  • Fix demo support?
  • Portal Gun?
  • Survival Mode? (like tekken survival mode)
  • Racing Mode ? (mario cart)
  • Unlimited Pickup Mode ?
  • Everyone has Golden Mode ?
  • flash grenade that can hurt on impact but mainly makes anyone looking at it blind?
  • Would be nice if titan was smart enough not to back fire on your self...
  • Forces extra players into watch mode instead of not letting them in?
  • Option to make your own bullets/mines hurt you?
  • Unlock enemy/boss weapons for use in multiplayer?
      spider mine
      fireball
      depth charge
      tentacles
      parasite mine
      smoke streamer
      plasma pack
      petro gel
      flares
      assassin missile
      goggles infer red

Sound

Forsaken currently still uses old school panning (left/right speaker) and volume (fake distance) techniques that it does in software to emulate 3d sound.

OpenAL supports passing position information and taking care of all of this for you with effects such as doppler shift. It would also properly support 3d sound systems (and headphones) this way.

Not all the code paths pass down all the required information such as speed and orientation of the object that PlaySfx (and friends) were called for. We need that information to properly support doppler and 3d positioning.

Level Ideas

Level Tools

  • Add offset file editing tools for updating texture atlases (sprites) #144 (dactil)
  • level editor?
    • blender work is already done
  • Write a bsp generator?

UI

  • Weapon stats on how many kills you got with each weapon?
  • Better UI system? (CEGUI?)
  • Show all player info (scores, ping, etc) in team games? #139
  • Ability to change between multiple missile/remote cameras ? #148
  • In game console for running commands #154

Physics

  • Fix broken level collisions / player bounces out of control off walls #254
  • Ability to modify speed of bullets ? #146
  • Use bullets physics engine for level collisions instead of BSP?
    • Once you have the mesh loaded into a BVH bullet tree then you can just do ray tests against it.
    • Forsaken currently does ray tests against BSP so the swap should be rather simple.
  • Physics Cleanup #85
    • Move towards a centralized physics system that works more or less like pxr's and bullet.
    • Would be nice to remove the framelag tweak (multiplying by 71) out of the game.
    • Documenting exactly how physics is done and everywhere it's done.
    • Perhaps later we could even switch to something like Bullet which would give us ability to add things like soft bodies, destructible worlds etc but it would be quiet a bit of work.
    • I think everything should collide with everything including pickups against pickups and players against their own weapons or weapons against weapons etc.. But that's open for debate..

Configs

  • lua configs for everything?
  • standard level formats?

Accessibility

  • Force all players to have different ships ? #96
  • Built in ability to disable certain ships ? #97
Clone this wiki locally