DarkOrbit Done Right
An HTML5 clone of the game DarkOrbit WikiPedia entry (here)
- except for the PvP focus
- all aspects of the game available from the gameplay screen
(No "second" window for buying stuff)
- "keep-alive" as long as there's some automated system acting
- being "killed" cancels all automated systems
The game plays as a 2D overhead, with your spaceship in the middle of the game screen. There are multiple maps, with clear boundaries beyond which the ship/player cannot move (enforced as a "radiation hazard" which will kill the ship if the user does not return to the map). "Jump Portals" provide access between maps, as well as a "Jump Drive" which can be purchased with in-game money.
Scattered throught each map are different "prizes" that can be collected:
- Bonus boxes
- Minerals
- Loot (bonus boxes from destroyed ships - loot disappears after a time)
- Booty (permanent loot which requires a key to access - the keys are very difficult to come by, but can be purchased)
There are other ships that can be fought:
- Players
- Aliens
- Pirates
Quests are given as a way to gain extra in-game money or other prizes (like booty keys)
As a PvP game, there are often competitions between players, and many of the quests encourage combat between players (too much so, in my opinion, as players who would rather play the game peacefully are often destroyed by PvP enthusiasts trying to complete a PvP "quest"). The PvP mindset is encouraged from the start by requiring each player to be part of a "company". PvP quests are usually "do something to someone in another company"
Contents |
Notes
Node.js as the server
Reduce use of canvas for rendering - only use canvas for "prepwork" - creating rotations for ships/weapons
- layer divs and css backgrounds for most display elements
Use an array of orientations for each object/object type
Use a manifest to cache as much of the imagry/background scripting as possible
- use "most recent modified date of any file" as the "needs to be reloaded" trigger
Features
Non-MMO capable
Story lines are implemented by way of "plots" - a plot is a collection of missions; rewards can be given for plot completion.
Player-provided automation
- event driven javascript
- Browser-side
- ?Server-side?
- ? missions ?
- Players can "sell" their automations to other players
- keep player automation from
- being used to hack the game
- Overloading the browser
- Overloading the server
State capture to deal with lost connections
- avoid allowing it to be used as a cheat
- only in non-interactive situations?
Team play
- "clans" must have at least one "carrier" class ship
- player-to-player chat
- ad-hoc teams
Equipment
Ships
Different classes of ship provide for different types of equipment
- Base (unequipped) energy
- Base (unequipped) speed
- # of containers of each type
- Many fuel, few ammo for a fast scout
- Many ammo for a warship
- etc
- # offensive systems
- # defensive systems
- # navigation systems
- # Logic/Automation systems
Containers
Ammo
- Energy cells
- Kinetic rounds
Fuel
- Liquid
- Electricity
- Plasma
Cargo
Cargo containers can hold anything:
- "collection overflow" from usable salvage
- Resources (minerals)
- Ships (if the cargo bay is big enough)
Once in Cargo, content cannot be transferred to ship until the ship is "docked"
Landing bays
- Probes
- Drones/Bots
- Ships
Energy Systems
- All systems require energy - the ship provides a base amount of energy
- Electricity is the "common" energy
- Liquid energy creates electricity as (Fuel + electricity) => electricity multiplier
- Plasma energy systems powered by their fuel - simply converting plasma to electricity
- Zero-point energy is never stored, but requires electricity to generate; basically, Zero Point Energy Devices (ZPEDs) are electricity multipliers
Offensive Systems
Beam weapons
Kinetic weapons
Motivated weapons
Defensive Systems
Shields
Cloaking
Information Gathering Systems
Radar
Scanners
- Ship contents
- Cloaking detection
- Mineral location
Logic/Automation Systems
Weapons
Routing
- Straight-line
- Waypoints
- Obstacle avoidance
Targeting
Friend-or-foe
Chat
- Global
- Per-map
- Per "group"
- clan
- outfit
PvP features
Where DarkOrbit has Companies, maybe DODR can have servers? PvP missions can take place on any PvP server other than the "home server". For this, though, players cannot have a non-PvP server as their "home" server (if you play PvP, you have to be available to be attacked).
Maybe it's not such a good idea to have servers marked PvP. Maybe it would be better to have server alliances; players suffer for attacking players in allied servers
Development steps
- Design
- Dictionary
- Equipment
- Rendering
- layering
- scorekeeping
- state management
- UI elements
- Automation
- "aliens"
- "Bots"
Design
Movement
(thrust & weight) determines speed
- ship has base weight
- equipment adds weight
- "fuel" adds weight
- types of fuel
- Solid
- Liquid
- stored energy (batteries)
- zero-point energy (requires "triggering" energy)
- types of fuel
- thrusters convert fuel to thrust, with different levels of performance
- Nope...thrusters draw energy to create thrust - this allows a common energy for everything
- ?fuel-specific thrusters?
Economy
- different value of minerals on different maps
- the farther the map from the mineral, the more value for the mineral
- create a *reason* to move into "PvP territory"
- allow for trade-oriented gameplay
- "Minerals" are actually collected as "Ore"
- Ore is sold at a higher price than minerals
- Ore becomes "minerals" (or materials?) by "Processing"
- Some ships can trade cargo space for Ore Processing space - which costs energy to operate
Rendering
- Background picture
- placement
- movement
- Midground picture
- placement
- movement
- Ships
- animation
- orientation
- collision detection
- Weapon effects
- animation
- orientation
- collision detection
- Objects
- animation
- orientation
- collision detection
- interface elements
Layering
Layers provide the mechanism for "click" resolution, as well as visual overlapping
- background
- midground
- objects
- ships
- weapons
- lasers are non-clickable
- mines are targetable (but hard to hit?)