Mercurial > sypikslang
annotate gamelib/schematics.py @ 148:3abb05f7e720
More science juggling.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Fri, 11 May 2012 16:39:17 +0200 |
parents | 2587f8c34f84 |
children | 372d886f9e70 |
rev | line source |
---|---|
54 | 1 # -*- test-case-name: gamelib.tests.test_schematics -*- |
2 | |
3
6ab4f1ab9eab
Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
3 from gamelib import research |
45
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
34
diff
changeset
|
4 from gamelib.game_base import Science |
3
6ab4f1ab9eab
Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
5 |
6ab4f1ab9eab
Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
6 |
85
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
7 class SchematicCategorySet(object): |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
8 def __init__(self, *categories): |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
9 for cat in categories: |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
10 setattr(self, cat, cat.lower().replace('_', ' ')) |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
11 |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
12 cat = SchematicCategorySet( |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
13 'HAND_WEAPON', |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
14 'VEHICLE', |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
15 'DOOMSDAY_DEVICE', |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
16 'PATHOGEN', |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
17 'MIND_CONTROL', |
116 | 18 'BEAST', |
19 'AQUATIC', | |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
20 'INTELLIGENCE', |
132 | 21 'AI', |
85
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
22 ) |
32 | 23 |
148 | 24 K = 1000 |
25 M = 1000 * K | |
26 | |
32 | 27 |
49 | 28 class Schematic(Science): |
54 | 29 # For all Schematics |
30 SCIENCE_TYPE = 'schematic' | |
31 | |
32 # Acquisition | |
33 STARTING_PRODUCT = False | |
6
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
3
diff
changeset
|
34 ACQUISITION_CHANCE = 0.8 |
54 | 35 CATEGORIES = () |
36 | |
37 # Costs | |
17
10d3db1f1e08
Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
15
diff
changeset
|
38 UPGRADE_REQUIREMENT = 1 |
54 | 39 COST = None |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
40 MAX_UPGRADE = 5 |
54 | 41 |
42 # Power and reliability | |
43 PROTOTYPE_RELIABILITY = 0.4 | |
44 PRODUCTION_RELIABILITY = 0.8 | |
45 BASE_POWER = None | |
46 POWER_INCREMENT = None | |
3
6ab4f1ab9eab
Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
47 |
145
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
132
diff
changeset
|
48 # FIXME: Icons for equipment. |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
132
diff
changeset
|
49 IMAGE_NAME = "physics" |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
132
diff
changeset
|
50 |
58
52913ba12988
Check for multiple points in can_spend
Neil Muller <drnlmuller@gmail.com>
parents:
54
diff
changeset
|
51 def can_spend(self, lab, spend): |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
52 if self.points + spend > self.MAX_UPGRADE: |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
53 return False |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
54 extra = self.UPGRADE_REQUIREMENT * (self.points + spend) |
17
10d3db1f1e08
Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
15
diff
changeset
|
55 return lab.meet_requirements(self, extra) |
3
6ab4f1ab9eab
Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
56 |
34 | 57 def is_a(self, category): |
58 return category in self.CATEGORIES | |
59 | |
54 | 60 def reliability(self): |
61 if self.points: | |
62 exp = 1 + 0.5 * (self.points - 1) | |
63 return 1.0 - ((1.0 - self.PRODUCTION_RELIABILITY) ** exp) | |
64 return self.PROTOTYPE_RELIABILITY | |
65 | |
66 def power(self): | |
67 power = self.BASE_POWER | |
68 if None not in (power, self.POWER_INCREMENT): | |
69 power += self.POWER_INCREMENT * self.points | |
70 return power | |
71 | |
94
245ef50de84d
Sanity-check research, schematic and mission classes. (Ironic, no?)
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
72 @classmethod |
245ef50de84d
Sanity-check research, schematic and mission classes. (Ironic, no?)
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
73 def sanity_check(cls): |
245ef50de84d
Sanity-check research, schematic and mission classes. (Ironic, no?)
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
74 for science, points in cls.PREREQUISITES: |
245ef50de84d
Sanity-check research, schematic and mission classes. (Ironic, no?)
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
75 assert issubclass(science, Science) |
245ef50de84d
Sanity-check research, schematic and mission classes. (Ironic, no?)
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
76 assert isinstance(points, int) |
245ef50de84d
Sanity-check research, schematic and mission classes. (Ironic, no?)
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
77 assert isinstance(cls.CATEGORIES, tuple) |
245ef50de84d
Sanity-check research, schematic and mission classes. (Ironic, no?)
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
78 |
3
6ab4f1ab9eab
Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
79 |
49 | 80 class MachineGun(Schematic): |
85
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
81 NAME = "machine gun" |
15 | 82 COST = 100 |
85
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
83 CATEGORIES = (cat.HAND_WEAPON,) |
17
10d3db1f1e08
Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
15
diff
changeset
|
84 STARTING_PRODUCT = True |
10d3db1f1e08
Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
15
diff
changeset
|
85 |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
86 BASE_POWER = 10 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
87 PRODUCTION_RELIABILITY = 1.0 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
88 |
20 | 89 def __init__(self, points=0): |
17
10d3db1f1e08
Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
15
diff
changeset
|
90 self.points = 1 |
10d3db1f1e08
Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
15
diff
changeset
|
91 |
3
6ab4f1ab9eab
Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
92 |
49 | 93 class LightningGun(Schematic): |
85
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
94 NAME = "lightning gun" |
32 | 95 COST = 300 |
85
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
96 CATEGORIES = (cat.HAND_WEAPON,) |
3
6ab4f1ab9eab
Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
97 PREREQUISITES = ( |
115 | 98 (research.Electrickery, 1), |
3
6ab4f1ab9eab
Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
99 ) |
6ab4f1ab9eab
Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
100 |
148 | 101 BASE_POWER = 15 |
102 POWER_INCREMENT = 3 | |
103 PRODUCTION_RELIABILITY = 0.7 | |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
104 |
3
6ab4f1ab9eab
Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
105 |
49 | 106 class TeslaTank(Schematic): |
85
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
107 NAME = "tesla tank" |
148 | 108 COST = 40 * K |
85
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
109 CATEGORIES = (cat.VEHICLE,) |
17
10d3db1f1e08
Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
15
diff
changeset
|
110 PREREQUISITES = ( |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
111 (research.Electrickery, 5), |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
112 (research.Robotics, 1), |
17
10d3db1f1e08
Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
15
diff
changeset
|
113 ) |
10d3db1f1e08
Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
15
diff
changeset
|
114 |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
115 BASE_POWER = 100 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
116 POWER_INCREMENT = 10 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
117 |
17
10d3db1f1e08
Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
15
diff
changeset
|
118 |
85
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
119 class PropagandaMachine(Schematic): |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
120 NAME = "propaganda machine" |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
121 COST = 1000 |
91
c57b5b46d3e0
Better mission data management.
Jeremy Thurgood <firxen@gmail.com>
parents:
85
diff
changeset
|
122 CATEGORIES = (cat.MIND_CONTROL,) |
85
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
123 PREREQUISITES = ( |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
124 (research.Psychology, 2), |
182fce9f70b6
Propaganda! Also, a fix to blueprint breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
125 ) |
116 | 126 |
148 | 127 BASE_POWER = 10 |
128 POWER_INCREMENT = 2 | |
129 | |
116 | 130 |
131 class GiantSquid(Schematic): | |
132 NAME = "giant squid" | |
148 | 133 COST = 50 * K |
116 | 134 CATEGORIES = (cat.BEAST, cat.AQUATIC) |
135 PREREQUISITES = ( | |
136 (research.MarineBiology, 20), | |
137 (research.Biogenetics, 15), | |
138 ) | |
139 | |
148 | 140 BASE_POWER = 200 |
141 POWER_INCREMENT = 20 | |
142 | |
116 | 143 |
144 class SharksWithFrickinLasers(Schematic): | |
145 NAME = "sharks with frickin' lasers" | |
148 | 146 COST = 15 * K |
116 | 147 CATEGORIES = (cat.BEAST, cat.AQUATIC) |
148 PREREQUISITES = ( | |
149 (research.MarineBiology, 10), | |
150 (research.Lasers, 7), | |
151 ) | |
132 | 152 |
148 | 153 BASE_POWER = 75 |
154 POWER_INCREMENT = 10 | |
132 | 155 |
156 | |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
157 class ObservationDrone(Schematic): |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
158 NAME = "observation drone" |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
159 COST = 6000 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
160 CATEGORIES = (cat.INTELLIGENCE,) |
132 | 161 PREREQUISITES = ( |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
162 (research.Robotics, 3), |
132 | 163 ) |
164 | |
148 | 165 BASE_POWER = 25 |
166 POWER_INCREMENT = 5 | |
167 | |
132 | 168 |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
169 class SpySatellite(Schematic): |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
170 NAME = "spy satellite" |
148 | 171 COST = 100 * K |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
172 CATEGORIES = (cat.INTELLIGENCE,) |
132 | 173 PREREQUISITES = ( |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
174 (research.Rocketry, 5), |
132 | 175 (research.Space, 1), |
176 ) | |
177 | |
148 | 178 BASE_POWER = 250 |
179 POWER_INCREMENT = 50 | |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
180 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
181 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
182 class TacticalAI(Schematic): |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
183 NAME = "tactical AI" |
148 | 184 COST = 10 * K |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
185 CATEGORIES = (cat.AI, cat.INTELLIGENCE) |
132 | 186 PREREQUISITES = ( |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
187 (research.ArtificialIntelligence, 3), |
132 | 188 ) |
189 | |
190 | |
191 class LaserGun(Schematic): | |
192 NAME = "Laser Gun" | |
193 COST = 300 | |
194 CATEGORIES = (cat.HAND_WEAPON,) | |
195 PREREQUISITES = ( | |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
145
diff
changeset
|
196 (research.Lasers, 2), |
132 | 197 ) |
148 | 198 |
199 | |
200 class DoomsdayVirus(Schematic): | |
201 NAME = "doomsday virus" | |
202 COST = 100 * K | |
203 CATEGORIES = (cat.DOOMSDAY_DEVICE, cat.PATHOGEN) | |
204 PREREQUISITES = ( | |
205 (research.Biogenetics, 5), | |
206 ) | |
207 | |
208 BASE_POWER = 1000 | |
209 POWER_INCREMENT = 500 | |
210 | |
211 PRODUCTION_RELIABILITY = 0.6 | |
212 | |
213 | |
214 class GiantRobot(Schematic): | |
215 NAME = "giant robot" | |
216 COST = int(1.5 * M) | |
217 CATEGORIES = (cat.DOOMSDAY_DEVICE, cat.AI) | |
218 PREREQUISITES = ( | |
219 (research.Robotics, 15), | |
220 (research.ArtificialIntelligence, 10), | |
221 ) | |
222 | |
223 BASE_POWER = 700 | |
224 POWER_INCREMENT = 300 | |
225 | |
226 PRODUCTION_RELIABILITY = 0.7 | |
227 | |
228 | |
229 class OrbitalLaserPlatform(Schematic): | |
230 NAME = "orbital laser platform" | |
231 COST = 10 * M | |
232 CATEGORIES = (cat.DOOMSDAY_DEVICE,) | |
233 PREREQUISITES = ( | |
234 (SpySatellite, 3), | |
235 (research.Lasers, 15), | |
236 (research.Space, 5), | |
237 ) | |
238 | |
239 BASE_POWER = 1500 | |
240 POWER_INCREMENT = 200 |