Space Mining RPG
From WorkCDN
Contents |
Untitled Space Mining RPG
Design for PyWeek6
This design doc will focus primarily on gameplay elements. Plot line and story details will be added once we have quantified the basic mechanics and scope that the project will entail.
BASIC GAME OVERVIEW
The basic idea is that this is a top-down space RPG. Picture an RPG version of Asteroids. Similar games include Star Control, Escape Velocity, or others. Not everyone sees them this way, but RPGs are basically a collection of mini-games. You travel around, and now and then you have an encounter or go through a dungeon or what-not. Here you will encounter vaious planets, and the core mini-game will be an asteroids type game where you collect various valuble resources.
You start out with a small space craft from your home planet, and you are embarking on an adventure with the wide universe before you. You can land on planets, and buy and sell resources. Planets sell resources at different prices, so you can make a profit if you buy low and sell high. Another way to get resources is by traveling to asteroid fields where shooting asteroids can provide resources to sell. Once you make money, you can buy bigger ship hulls, and buy upgrades for your ship (better armor, weapons, etc).
Eventually you'll upgrade you ship with accessories, such as a hyper-drive, that will alow you to travel to new areas. Additionally, the dialogue you have between planets (especially those on the critical path of progress) will reveal the core plot as you, a robot, seeks to find it's creator and purpose.
OVERVIEW OF GAMEPLAY MODES / ENGINES
Title Screen The title screen simply presents the game title and the gameply options we have time to present.
Space Map Navigation From the main navigation map, players can chart their course and decide which planets or asteroid bels to visit. The navigational map consists of a 2D veiw of the systems around you with icons for where you are as well as the various places you can jump to. Only certain locations can be seen initially on the map, but additional location coordinates can be picked up throughout the game, adding additional hotspots to the map. As the game progresses, the player will get a hyperdrive, allowing them to travel out of the local solar system and into other ones (as coordinates are aquired), and then later - with the help of the space-fold drive - to other galaxies.
Planet Dialogue When a planet is visited, a dialogue / cutscene interface may kick in. This will provide both story to the player, as well as may provide clues about where the player should go next, or specific 'quests' they might need to complete. Specific cutscenes may also kick in on a planet when you arrive with or leave after providing key resources (so after finishing a quest.)
Asteroid Mini-game When a player travels to an asteroid field location, they will find a mini-game similar to the classic asteroids game. The game consits of shooting and dodging large rocks. As the rocks are shot they break into smaller and smaller chunks. The twist in this game is that through this process, various resources will be released from the asteroids which can be picked up by the player.
Planet Trade When a player encouters a planet with a colony, they may be offered a trade menu. This interface allows them to sell the resources in their hold to the planet, or to buy resources from the planet. Resources may having varying values from planet to planet, so the player can attempt to make a profit by buying one type of resource from a planet where it is plentiful, and selling to another where it is not. Additionally, items to enhance the player's ship or map coordinates can also be purchased from specific planets.
CORE GAME CONCEPTS
The Map The main game will consist of several solar systems, each with several possible stopping points. The stopping points will either be planets, which can provide trading and cutscenes, and asteroid fields, which provide resources. More detail on the actual map system can be found below in the 'Space Navigation Maps Interface Details' section. For now, we shoul plan on each solar system having 3 - 7 stopping points, and plan on about 5 solar systems. Additionally, there will be one solar system in another galaxy.
Resources
There are four different types of resources. These are ore, minerals, water, fuel. Technology (items) could also be considered a resource, but we'll discuss it in its own section below. The first three would generally be obtained through "mining", and last one (fuel) would generally be collected from planets through trade. All resources are measured in galactic tuns (GAtuns) and bought and sold in galactic talents or {gt}s.
The three mined resources would come from three different types of asteroid fields - obtained through three slightly different mini-games using the same "asteroids" engine. Resources should be highlighted on the screen in some way so that you know they are safe to picked by simply flying over them.
- Minerals are found in rock based asteroid fields. The resources are hidden inside the asteroids. To get to them would operate like the typical asteroids game, however, as the rocks get down to a certain size (just smaller than your ship) as they break to that size, they would also kick out a "mineral" resource. "Brown" planets will tend to produce this themselves, and thus are generally a cheap place to buy it.
- Water is obtained from ice crystal asteroid fields. The resource is ice crystals at their smallest size. So you simply need to keep shooting the bigger (and dangerous) ice crystals until they split down to their smallest size (about 1/4 or your ship). Once there they should can simply be flown over to pick up. Above that size they do damage to your ship relational to their size. "Blue / Green" planets will tend to produce this themselves, and thus are generally a cheap place to buy it.
- Ore is found in ore based asteroid fields. The resource items are free floating and simply need to be picked up, however they are surrounded by many annoying, sometimes large asteroids. The asteroids around ore may also be too hard to break apart with normal shots, so the collection of ore becomes more of a dodge game then one of shooting everything to smithereens. "Grey" planets will tend to produce this themselves, and thus are generally a cheap place to buy it.
- Fuel is simply a resource that certain planets may offer in exchange for other resources. In turn it can be offered to other planets for items from them. I don't think it will need a visual representation, as it will only ever show up as a quantity either at a port, or in your hold. To keep it even having place in the game, this resource should be kept highly trade-able. That is, certain planets should be selling it cheap, while other planets will tend to buy it high. This allows for money to be acquired through trade as well as mining. "Molten" planets will tend to produce this themselves, and thus are generally a cheap place to buy it.
Items
Items can only be purchased. I think the system for tracking selling them to planets, and balancing each planet's need for them would just be too complex for our scope. There should be a finite number of items in the universe, and their locations will be predetermined. Although random occurrences of items might be fun, I think balancing the play might be too difficult. It will be simpler to just have the items pre-scattered in the fashion we want them to be discovered (or not discovered.)
- Weapons
- More powerful guns (deal more damage to asteroids)
- Longer distance shot (projectile continues futher out into space
- Faster moving shot (gets to asteroids faster)
- Guns that shoot multiple shots (three in front, or one out each side?)
- Grappling hook
- Shields
- Flux shielding (reduces the damage done on contact with an object)
- Bounce fields (one-use, complete damage blocking shield)
- Regular Engines
- Increased thrust (go faster, quicker)
- Increased manuverability (allow you to turn faster)
- Sub-space anti-lock braking (increased braking capacity)
- Jump Engines
- Hyperdrive engine (travel between solar systems in a galaxy)
- Space-folding drive (travel to other galaxies)
- Maps (show new jump-to locations on your map)
- Hold capacity upgrades (increase how many resources you can carry)
For details on the actual class implementation, see Space RPG Equipment.
Enemies
Enemies are one of those features on our 'nice to have' list. They would show up possible in the asteroid fields and attempt to shoot you down and take your cargo.
MODE / ENGINE DETAILS
Title Screen
Space Map Navigation
The Space Map Navigation system will be the core movement and navigation center of the game as it is being visualized now. From this map you will have access to browse all the locations you can travel to. To move your ship to that location simply click the hotspot above the location, and then click the GO! button.
The Navigation menu consists of two panes: an isometric view of the current solar system on the left, and a smaller pane on the right with details about the currently selected location. The planets and asteroid belts would be shown in gray-white line diagram, with a blue grid below them. Red upside-down triangles appear above the locations that you can travel to (ones that you have gained coordinates for). This way the base diagram can be static art, and all that has to change are the triangles, which are added as you get more coordinate locations. As you move your cursor around the screen, the triangle light up. Clicking on one of the triangles will display the location's details on the right hand pane. This will consist of a name, the planet's picture, it's coordinates, possibly a brief description, the amount of fuel required to travel there (for jumps), and the "GO!" button.
Image:SpaceRPGNavigationMap.jpg NOTE: This picture shows the detail pane at the top. I'm fine with wherever it ends up on the screen.
Current In-Progress Layout: Image:Roger-robot-sat-nav-screenshot-4-2-2008.png
kiwee's layout: Image:Nav.png
When the player presses the "GO!" button, the screen simply fades out and fades in at the appropriate mini-game (either asteroids, planet dialogue, or trading interface). When the player leaves the mini-game, they are returned back to the main navigation screen.
Additionally, this map needs the capacity to navigate to other soloar systems within the galaxy, and eventually to another galaxy. The coolest way to do this would be to ave one big piece of art with the whole map on it, and allow zooming in and out, with the solar system being the closest you could zoom in. I'm not sure how well that would work technically. If it's not reasonable, we can stick with just making it a slide deck with each slide being another solar system. Maybe would would not see the slide in the deck until you had coordinates for at least one location in it.
Planet Info:
| Planet Designation | Screen Coordinates | Resource Capacity | Resource Demand (M,O,W,F) | Starting Resources | Description | Atmosphere | Gravity | Length of Year | Primary Export |
|---|---|---|---|---|---|---|---|---|---|
| KV14 | 510, 412 | 10 | .4, .6, .8, .7 | 5, 2, 1, 2 | Mining colony | Sulfur Dioxide | 7.457 | .928 | Minerals |
| KV27 | 321, 354 | 20 | .6, .2, .8, .6 | 4, 17, 3, 12 | Ore Processing Plant | Carbon Monoxide | 10.422 | 4.115 | Ore |
| KV64 | 546, 340 | 30 | .6, .5, .1, .7 | 22, 12, 25, 9 | Ore Processing Plant | Hydrogen / Oxygen | 23.153 | 13.276 | Water |
Asteroid Field Info:
| Field Designation | Screen Coordinates | Resource Type | Avg. Asteroid Speed | Avg. Asteroid Spin | Size Probability (1,2,3,4,5,6,7,8) | Payout Probability |
|---|---|---|---|---|---|---|
| Whitefall | 668, 379 | Mineral | 100 | 30 | 0,7,5,4,2,0,0,0 | 1 |
| Beaumonde | 202, 364 | Ore | 120 | 10 | 5,4,6,2,0,0,0,0 | 1 |
LV426, Beaumonde, Whitefall, Osiris
Planet CutScene / Dialogue
Both the planet based interfaces will show the planet centered on the lower half of the screen in front of a field of stars, with you ship sitting next to it. Above the planet, in bubbles over the stars, the cutscene dialog will play out. The heads of the talking characters will appear on the left or right, while the text will appear in the middle. For now I think we will not have any required user choices involved in the dialogue, however, the player can alway click to progress through the text.
Here's another idea
http://youtube.com/watch?v=kdpfVEAGLVM
Dialogue scenes can occur both as you come to a planet, and/or after you have selected to leave. They can be dependent on whether this is your first time to the planet, or on what resources or items are in your hold. When a dialogue is complete, the engine may need to give you an item or resource, or to take an item or resource from you. While a dialogue runs, we just need to provide the graphic to use for the head, the side to put it on (top-right/bottom-right/top-left/bottom-left) and then the amount of time to wait before displaying the next item in the list.
Here is the list of "cut scene" options I could think of.
- Play this cut scene when
- Entering the planet
- Exiting the planet
- Cut scene triggers (if and which cut scene should play). These following options are order by precedence, so if more than one would trigger on a given encounter, only the first one plays. (An alternative would to just have the cut scenes themselves have a precedence setting, so the one with the lowest precedence number wins.)
- Do not play this cutscene if there is a reason it should not play:
- Do not if this cutscene is set to play once, and it already has.
- Do not when ____ is the player’s hold state (certain amount or type of resources, a specific item, etc).
- Play this cut scene when ____ is the player’s hold state (certain amount or type of resources, a specific item, etc).
- Play this cut scene the first time you arrive.
- Play this cut scene when ____ is the planet’s resource state (certain amount or type of resources, a specific item, etc).
- Play this cut scene with a certain probability.
- Do not play this cutscene if there is a reason it should not play:
- Special things to do after the cut scene is over
- Give the player resources / an item
- Take an item / resources from the player
- Send the player directly to the navigational map
Asteroid Mini-game
Asteroid mini-games are entered from the navigational screen when an asteroid field location is selected. The asteroid games all use the same engine, but they amount and type of asteroids configured for the specific location will cause the play experience to be unique in each location.
The main ship-flying game is done in top-down 2D, similar to Asteroids. Your ship can turn left and right, thrust, brake, and fire. Asteroids fly around the screen, and shooting them breaks them down. As asteroids break apart, they also may kick out resource units. To pick these up - which is the goal of the asteroids mini-game - all the player needs to do is fly over them. Like asteroids, the playing field is wrapped, so going out one side will bring you in the other. I’d like it if the game was set up so your ship was always in the center of the playing area (unlike classic asteroids) but I’m not sure if that’s easy to do or not (Yes, it's easy to do, and support for it is already largely in the code. --ch). A star field should be the only background for this mini-game. Parallax scrolling on the star field would be cool - but not a requirement.
The weight of your cargo will hinder your ship's momentum, while upgrades to your ship might enhance your ship's maneuverability. Your ship’s base mass is 5 GAtuns, with your cargo adding its weight to your total. Each resource weighs 1 GAtun, and your initial hold can carry 5 GAtuns.
Your shots deal a set amount of damage, 10 pts initially, but that can be increased with upgrades to your ship. Bigger asteroids may take several shots, and the type of asteroid that it is may also impact how hard they are to break. When an asteroid breaks, it becomes two half size versions of the original. (To do this properly, asteroids should be shaped to fit roughly in a 1 x 1.4 box.) The larger an asteroid is, the more damage it takes to break it apart.
Asteroids will come in 8 sizes. The largest asteroids size would be the art's native 256x362 pixels. Each subsequent asteroid will simply be a scaling of the original at one have the size. (Remember, scaling by .5 does not result in one half the area - it is 1/4th. To get 1/2 it needs to be scaled by 1/sqrt{2}, or ~.7071) The following list shows asteroid size index, mass, dimensions in pixels, and scaling factor:
| asteroid size index | mass | dimensions in pixels | scaling factor |
|---|---|---|---|
| 1 | 1 GAtun | 22 x 32 | .0884 |
| 2 | 2 GAtuns | 32 x 45 | .1243 |
| 3 | 4 GAtuns | 45 x 64 | .1768 |
| 4 | 8 GAtuns | 64 x 91 | .2514 |
| 5 | 16 GAtuns | 91 x 128 | .3536 |
| 6 | 32 GAtuns | 128 x 181 | .5 |
| 7 | 64 GAtuns | 181 x 256 | .7072 |
| 8 | 128 GAtuns | 256 x 362 | 1 |
Here's a picture of the process of "splitting" an asteroid:
You can see that with a 1x1.414 height to width ratio, when you split the asteroid in half you end up with two smaller rectangles with their area scaled down by a factor of 2 and the exact same dimenstions ratio. I think this will make for a more natural looking break process.
As mentioned above under resource types, there are three main types of asteroids: ore, rock and ice. Different types of asteroids will kick out different resources at different times and have different amounts of damage that they take to break apart. Each asteroid will start the game with a certain amount of hit points it takes to break. Damage will be additive,naturally, so each asteroids weakening state will need to be tracked. Once an asteroid breaks, the two "half sized" asteroids it kicks out will have their hitpoints reset to their starting amout for their size. The amount of damage it takes to break an asteroid apart is directly related to the asteroid’s mass times the asteroid type’s multiplier. (So, Asteroid starting hitpoints = Asteroid damage multiplier * Asteroid mass). Please read the section titled “Resources” above to get a better sense of the gameplay for each type.
- Minerals are found in rock asteroids.
- Damage multiplier: 4 pts (so with your base gun you can break a size 2 asteroid with one shot, but a size 5 would take 7 shots.)
- Sizes available: 8 - 1
- Resource distribution: When the size 2 asteroid is broken. So when a size 2 asteroid breaks, it ejects the normal two chunks of rock, and a mineral resource.
- Water
- Damage multiplier: 3 pts (so with your base gun you can break a size 2 asteroid with one shot, but a size 5 would take 5 shots.)
- Sizes available: 8 - 2
- Resource distribution: When the size 2 asteroid is broken. When a size 2 asteroid breaks, rather than splitting into two smaller pieces, it shoots out two water resource units.
- Ore
- Damage multiplier: 35 pts (so with your base gun you can break a size 2 asteroid with 7 shots, but a size 5 would take 56 shots.)
- Sizes available: 8 - 2
- Resource distribution: When the size 2 asteroid is broken. When a size 2 asteroid breaks, rather than splitting into two smaller pieces, it shoots out two ore resource units. However, due to the difficulty in breaking ore, most resource collection consists of simply collecting the pieces of ore already available.
For ease of traking hit points, let me also present it in a list. The following list shows the the asteroid sizes and their initial hit points (the amount of damage they can sustain before breaking). For each size I've listed the index, the mass, the rock hit points, the ice hit points, and the ore hit points.
| index | mass | rock hit points | ice hit points | ore hit points |
|---|---|---|---|---|
| 1 | 1 GAtun | 4 | 3 | 35 |
| 2 | 2 GAtuns | 8 | 6 | 70 |
| 3 | 4 GAtuns | 16 | 12 | 140 |
| 4 | 8 GAtuns | 32 | 24 | 280 |
| 5 | 16 GAtuns | 64 | 48 | 560 |
| 6 | 32 GAtuns | 128 | 96 | 1120 |
| 7 | 64 GAtuns | 256 | 192 | 2240 |
| 8 | 128 GAtuns | 512 | 384 | 4480 |
Your ship will be damaged by running into asteroids; however the amount of actual damage will be dependent on the velocity at which the asteroid is moving relative to the ship, the speed the asteroid is spinning, the mass of the asteroid, and any shielding effects on the ship. As would be expected, your ship will do an equal amount of damage to the asteroid on contact, and then the ship and the asteroid would bounce off in their proper directions. The damage then is only equal to the amount of the momentum absorbed by the ship on contact. To make the gameplay more interesting, we’ll want to keep the absorption coefficient much lower for asteroid to asteroid collisions than asteroid to ship collisions (something like .001 vs. .1). Damage dealt = (length of the velocity delta + spin rate) * (total collision mass * absorption coefficient * shielding reduction)
The damage multiplier sounds a bit complex. Not sure if I understand how the dimensions will work in-game, but the mass will be a piece of cake. -- Joe
Damage multiplier is just a way of saying that asteroids of different types will take different amounts of shots to break. It's a way of setting the initial damage hit points of the asteroids when the mini-game starts. If you think it's too complex, we could just give you a table that lists the different sizes of asteroids and the different types and has the starting hit-points for each. {Done} - Charlie -
Asteroid Location Parameters:
- Background Graphic (bground stars1)
- Music Track (music gamesong0010)
- Asteroid Velocity (velocity 5)
- Asteroid Spin Speed (spin 5)
- Asteroid Resource Payout (payout 1) - average number of mineral resources given per last break.
- Number of asteroids initially for each size and type
- Rock size 1 (rock1 0)
- Rock size 2 (rock2 3)
- Rock size 3 (rock3 6)
- Rock size 4 (rock4 7)
- Rock size 5 (rock5 2)
- Rock size 6 (rock6 1)
- Rock size 7 (rock7 1)
- Rock size 8 (rock8 0)
- Ice size 1
- Ice size 2
- Ice size 3
- Ice size 4
- Ice size 5
- Ice size 6
- Ice size 7
- Ice size 8
- Ore size 1
- Ore size 2
- Ore size 3
- Ore size 4
- Ore size 5
- Ore size 6
- Ore size 7
- Ore size 8
I'm really not sure how you guys want to handle the generating of asteroids for the levels, so I just listed a bunch of slots where we could put the actual number of initial asteroids of each size and shape. I figured you'd just take all the initial asteroids (20 in this case) and just scatter them around. If the wrapping point is off screen (which I would think we'd want it to be - so there's a little bigger playing field) than we'd probably want to start the asteroids off screen too, so you're always garenteed not to be immidieatly killed by a near asteroid.
I think it would be nice too, to have some way to keep the asteroids coming, or do we just want them to be able to play until there's nothing left? Basically, do we want the level to stay at the same difficult level until they decide to leave, or should it get easiier and easier? Well, I'll see what you guys decide in the tomorrow. G'night (morning)!
Planet Trade
The buy and sell prices for each resource on a planet are set by the planet. This means that the interface should provide the costs always in terms of the planet buying and selling. The prices are set based on three variables:
- Demand: The demand for that resource on that planet (recorded in the planet settings)
- Capacity: The planets resource capacity - the amount of stock room the planet has for each resource. (Also recorded in the planet settings)
- Stock: The amount of stock the planet currently has on hand of the resource.
The price, in galactic talents, can be computed by this simple formula:
Planet Buy Price = Demand * ( 1 - (Stock / Capacity) ) * 1000
Planet Sell Price = Demand * ( 1 - (Stock / Capacity) ) * 1500
After each single unit transaction the price should be re-calculated.
For example, using the planet KV14 from the map information above,
We find:
- The resource Capacity per resource is 10
- The Resource Demand settings are .4, .6, .8, .7
- The Starting capacities are 5, 2, 1, 2
So at these settings the prices are:
Mineral Buy = .4 * (1 - 5/10) * 1000 = 200
Mineral Sell = .4 * (1 - 5/10) * 1500 = 300
Ore Buy = .6 * (1 - 2/10) * 1000 = 480
Ore Sell = .6 * (1 - 2/10) * 1500 = 720
Water Buy = .8 * (1 - 1/10) * 1000 = 720
Water Sell = .8 * (1 - 1/10) * 1500 = 1080
Fuel Buy = .7 * (1 - 2/10) * 1000 = 560
Fuel Sell = .7 * (1 - 2/10) * 1500 = 840
A prototype interface. (It's not what we're going to use, but it gives a sense of all the information to present.)
