Mercurial > sypikslang
annotate gamelib/missions.py @ 42:47c7e96cf9c8
Change initial mission creation logic to look for leaf classes
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Mon, 07 May 2012 14:00:18 +0200 |
parents | e285b1e31a08 |
children | 373c57ab4140 |
rev | line source |
---|---|
5 | 1 # -*- coding: utf-8 -*- |
2 # vim:fileencoding=utf-8 ai ts=4 sts=4 et sw=4 | |
3 | |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
4 from random import random |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
5 |
35 | 6 from products import HAND_WEAPON, VEHICLE, PATHOGEN, DOOMSDAY_DEVICE |
5 | 7 |
18
0849ab5304cf
Add more mission result codes
Neil Muller <drnlmuller@gmail.com>
parents:
13
diff
changeset
|
8 MAJOR_SETBACK, FAILURE, SUCCESS, MAJOR_SUCCESS, GAME_WIN = range(5) |
0849ab5304cf
Add more mission result codes
Neil Muller <drnlmuller@gmail.com>
parents:
13
diff
changeset
|
9 |
5 | 10 |
13
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
11 class Result(object): |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
12 """Results of a mission""" |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
13 |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
14 def __init__(self, outcome, money, reputation, msg): |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
15 self.outcome = outcome |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
16 self.money = money |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
17 self.reputation = reputation |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
18 self.message = msg |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
19 self.applied = False |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
20 |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
21 def apply(self, state): |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
22 if not self.applied: |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
23 state.money += self.money |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
24 state.reputation += self.reputation |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
25 self.applied = True |
25 | 26 # FIXME: Hook up to the UI |
27 print self.message | |
13
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
28 else: |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
29 raise RuntimeError('attempted to apply result twice') |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
30 |
c0966997e0c5
Use a results object instead of tuple (will hopefully make changign stuff easier later)
Neil Muller <drnlmuller@gmail.com>
parents:
10
diff
changeset
|
31 |
5 | 32 class Mission(object): |
33 """Base class for the mission objects. | |
34 Missions have a name, short description (for list displays) and | |
35 long description (which may contain clues about approaches)""" | |
36 | |
37 NAME = "Generic Mission" | |
38 SHORT_DESCRIPTION = None | |
39 LONG_DESCRIPTION = None | |
33
12c33aac7684
Gate certain missions by reputation.
Jeremy Thurgood <firxen@gmail.com>
parents:
32
diff
changeset
|
40 MINIMUM_REPUTATION = None |
41
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
41 # Flag for missions that can only be attempted once |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
42 completed = False |
5 | 43 |
22
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
44 def __init__(self, init_data=None): |
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
45 pass |
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
46 |
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
47 def save_data(self): |
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
48 """Serialize the mission state for saving, etc.""" |
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
49 return [] |
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
50 |
41
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
51 def can_attempt(self, state): |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
52 """Can we currently attempt the mission""" |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
53 if self.completed: |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
54 return False |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
55 if (self.MINIMUM_REPUTATION is not None and |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
56 self.MINIMUM_REPUTATION > state.reputation): |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
57 # Don't have the reputation completed |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
58 return False |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
59 return True |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
60 |
10
9f8def7d70d0
Rework mission objects to include reputation
Neil Muller <drnlmuller@gmail.com>
parents:
5
diff
changeset
|
61 def attempt(self, equipment, state): |
5 | 62 """Attempt the mission with the given equipment list. |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
63 Returns a result object with the results of the mission.""" |
5 | 64 |
41
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
65 # Handle error case |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
66 if self.completed: |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
67 raise RuntimeError('Cannot attempt a completed mission') |
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
68 |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
69 # No equipment is usually a special case. |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
70 if not equipment: |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
71 return self.attempt_no_equipment(state) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
72 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
73 # Categorise equipment for easier decision-making. |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
74 categorised = {} |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
75 for item in equipment: |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
76 for category in item.CATEGORIES: |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
77 categorised.setdefault(category, []).append(item) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
78 result = self.attempt_with(categorised, state) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
79 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
80 if result is not None: |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
81 # We have a mission result. |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
82 return result |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
83 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
84 # Generic fallback result. |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
85 return Result(FAILURE, 0, 0, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
86 "You fail to inspire sufficient fear.")) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
87 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
88 def attempt_no_equipment(self, state): |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
89 return Result(FAILURE, 0, 0, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
90 "Really? You're going in completely unequipped?" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
91 " How brave. And foolish. And ultimately unsuccessful.")) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
92 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
93 def attempt_with(self, categorised, state): |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
94 return Result(FAILURE, 0, 0, "You can't succceed at this mission.") |
5 | 95 |
96 | |
19
12085dfd9e69
Add rescue mission for the out of money case
Neil Muller <drnlmuller@gmail.com>
parents:
18
diff
changeset
|
97 class PlaygroundBully(Mission): |
12085dfd9e69
Add rescue mission for the out of money case
Neil Muller <drnlmuller@gmail.com>
parents:
18
diff
changeset
|
98 |
12085dfd9e69
Add rescue mission for the out of money case
Neil Muller <drnlmuller@gmail.com>
parents:
18
diff
changeset
|
99 NAME = "Rob kids in the playground" |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
100 SHORT_DESCRIPTION = "Steal from those significantly weaker than yourself." |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
101 LONG_DESCRIPTION = ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
102 "It's not menancing, or lucrative, but when the bills are due, no one" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
103 " cares how you earn the money.") |
19
12085dfd9e69
Add rescue mission for the out of money case
Neil Muller <drnlmuller@gmail.com>
parents:
18
diff
changeset
|
104 |
32 | 105 def attempt(self, equipment, state): |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
106 haul = 90 + int(random() * 20) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
107 return Result(SUCCESS, haul, -1, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
108 "You devote your resources to robbing kids in a playpark." |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
109 " It's not the finest moment in your reign of terror, but at" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
110 " least you walked away with a surprising amount of small" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
111 " change.")) |
19
12085dfd9e69
Add rescue mission for the out of money case
Neil Muller <drnlmuller@gmail.com>
parents:
18
diff
changeset
|
112 |
12085dfd9e69
Add rescue mission for the out of money case
Neil Muller <drnlmuller@gmail.com>
parents:
18
diff
changeset
|
113 |
5 | 114 class RansomChina(Mission): |
115 | |
116 NAME = "Hold China to ransom" | |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
117 SHORT_DESCRIPTION = "Surely a path to riches and fame." |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
118 LONG_DESCRIPTION = ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
119 "Holding China to ransom. The rewards for successfully threatening" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
120 " the largest country in the world are great, but the risks are" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
121 " significant. Without some serious firepower, the chances of success" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
122 " are small.") |
33
12c33aac7684
Gate certain missions by reputation.
Jeremy Thurgood <firxen@gmail.com>
parents:
32
diff
changeset
|
123 MINIMUM_REPUTATION = 100 |
5 | 124 |
22
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
125 def __init__(self, init_data=None): |
5 | 126 # Track prior approaches to this mission |
34 | 127 self._prior_attempts = set() |
22
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
128 if init_data: |
34 | 129 self._prior_attempts = set(init_data) |
22
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
130 |
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
131 def save_data(self): |
296ce36fa7d9
Serialize and unserialize game state and missions
Neil Muller <drnlmuller@gmail.com>
parents:
19
diff
changeset
|
132 return self._prior_attempts |
5 | 133 |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
134 def attempt_no_equipment(self, state): |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
135 return Result(FAILURE, 0, -10, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
136 "It takes three different interpreters before the Chinese" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
137 " government finally understand that you're trying to hold" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
138 " them ransom with... well... nothing. Nothing at all. This" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
139 " one will probably make a good anecdote at diplomatic" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
140 " cocktail parties. But not for you. No, not for you at all.")) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
141 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
142 def attempt_with(self, categorised, state): |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
143 dooms = categorised.get(DOOMSDAY_DEVICE, []) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
144 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
145 if not dooms: |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
146 return Result(FAILURE, 0, -1, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
147 "You completely fail to inspire the requisite level of" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
148 " terror. Maybe a more impressive threat will fare" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
149 " better.")) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
150 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
151 if len(dooms) > 1: |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
152 return Result(FAILURE, 0, 0, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
153 "Everyone seems confused as to how you actually plan" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
154 " to cause widepsread distruction and mayhem, and" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
155 " negotiations break down. Perhaps it's better to stick" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
156 " to one weapon of mass destruction at a time.")) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
157 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
158 [doom] = dooms |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
159 if doom.NAME in self._prior_attempts: |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
160 return Result(FAILURE, 0, 0, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
161 "'We have devised countermeasures since last time, doctor." |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
162 " You cannot threaten us with that again.'")) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
163 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
164 self._prior_attempts.add(doom.NAME) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
165 return Result(SUCCESS, 1000000, 10, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
166 "Trembling at you threat of certain doom, the Chinese" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
167 " government pays the ransom.")) |
5 | 168 |
169 | |
35 | 170 class ToppleThirdWorldGovernment(Mission): |
171 | |
172 NAME = "Topple a third-world government" | |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
173 SHORT_DESCRIPTION = "We could use a more amenable dictator there." |
35 | 174 LONG_DESCRIPTION = ( |
175 "It's a small and fairly useless country, but it's still an actual" | |
176 " government that can be toppled. A good test bed for some of the" | |
177 " larger toys in the armory.") | |
178 MINIMUM_REPUTATION = 50 | |
179 | |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
180 def attempt_no_equipment(self, state): |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
181 return Result(FAILURE, 0, 0, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
182 "The border post may be poorly guarded, but you need to" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
183 " bring *some* kind of weaponry along. Your troops sulk" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
184 " on the way home.")) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
185 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
186 def attempt_with(self, categorised, state): |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
187 if any(c in categorised for c in (VEHICLE, HAND_WEAPON)): |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
188 return Result(SUCCESS, 5000 + int(random() * 10000), 5, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
189 "The corruption and oppression continue, but at least" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
190 " the proceeds are making their way into *your*" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
191 " pockets. And you don't even have to dirty your own" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
192 " jackboots.")) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
193 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
194 if DOOMSDAY_DEVICE in categorised: |
35 | 195 return Result(FAILURE, 0, 0, ( |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
196 "Nobody seems to quite understand what it is you're" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
197 " threatening them with. Eventually you have to give up" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
198 " and go home.")) |
35 | 199 |
200 | |
5 | 201 class RobBank(Mission): |
202 | |
203 NAME = "Rob the local bank" | |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
204 SHORT_DESCRIPTION = "A trivial challenge, but easy money." |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
205 LONG_DESCRIPTION = ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
206 "The security guards and local police are of minor concern. Walk in," |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
207 " clean out the vault, walk out. Couldn't be simpler.") |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
208 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
209 def attempt_no_equipment(self, state): |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
210 return Result(FAILURE, 0, 0, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
211 "Your attempt to rob the bank barehanded is unsuccessful." |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
212 " Fortunately, everyone is too stunned to impede your" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
213 " escape.")) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
214 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
215 def attempt_with(self, categorised, state): |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
216 loot = 500 + int(random() * 1000) |
5 | 217 |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
218 if VEHICLE in categorised: |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
219 return Result(FAILURE, 0, 0, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
220 "Your vehicles are impressively doom-laden, but not really" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
221 " suitable for city traffic. You intimidate the traffic" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
222 " wardens into letting you off without a fine, but by the" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
223 " time you get to the bank it's already closed.")) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
224 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
225 if HAND_WEAPON in categorised: |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
226 return Result(SUCCESS, loot, 0, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
227 "The threat of your weapons is enough to inspire an" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
228 " impressive level of cooperation. You make off with the" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
229 " loot.")) |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
230 |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
231 if PATHOGEN in categorised: |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
232 if state.reputation < 10: |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
233 return Result(FAILURE, 0, 0, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
234 "The clerk doesn't realise the threat of" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
235 " the vial you hold, and, although watching him" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
236 " die in agony would be statisfying, you decide" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
237 " it's not worth wasting this on something so" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
238 " trivial")) |
5 | 239 else: |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
240 return Result(SUCCESS, loot, 1, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
241 "Holding up a bank with only a small vial of clear" |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
242 " liquid. Now that is power.")) |
10
9f8def7d70d0
Rework mission objects to include reputation
Neil Muller <drnlmuller@gmail.com>
parents:
5
diff
changeset
|
243 |
9f8def7d70d0
Rework mission objects to include reputation
Neil Muller <drnlmuller@gmail.com>
parents:
5
diff
changeset
|
244 |
9f8def7d70d0
Rework mission objects to include reputation
Neil Muller <drnlmuller@gmail.com>
parents:
5
diff
changeset
|
245 class DestroyMountRushmore(Mission): |
9f8def7d70d0
Rework mission objects to include reputation
Neil Muller <drnlmuller@gmail.com>
parents:
5
diff
changeset
|
246 |
9f8def7d70d0
Rework mission objects to include reputation
Neil Muller <drnlmuller@gmail.com>
parents:
5
diff
changeset
|
247 NAME = "Destroy Mount Rushmore" |
9f8def7d70d0
Rework mission objects to include reputation
Neil Muller <drnlmuller@gmail.com>
parents:
5
diff
changeset
|
248 SHORT_DESCRIPTION = "Monuments to other people? Intolerable" |
9f8def7d70d0
Rework mission objects to include reputation
Neil Muller <drnlmuller@gmail.com>
parents:
5
diff
changeset
|
249 LONG_DESCRIPTION = "While potentially expensive, destroying" \ |
9f8def7d70d0
Rework mission objects to include reputation
Neil Muller <drnlmuller@gmail.com>
parents:
5
diff
changeset
|
250 " major monument is a good way to secure your reputation." |
33
12c33aac7684
Gate certain missions by reputation.
Jeremy Thurgood <firxen@gmail.com>
parents:
32
diff
changeset
|
251 MINIMUM_REPUTATION = 20 |
10
9f8def7d70d0
Rework mission objects to include reputation
Neil Muller <drnlmuller@gmail.com>
parents:
5
diff
changeset
|
252 |
9f8def7d70d0
Rework mission objects to include reputation
Neil Muller <drnlmuller@gmail.com>
parents:
5
diff
changeset
|
253 def attempt(self, equipment, state): |
41
e285b1e31a08
Add can_attempt method for future flexibility
Neil Muller <drnlmuller@gmail.com>
parents:
36
diff
changeset
|
254 self.completed = True |
36
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
255 return Result(SUCCESS, 0, 50, ( |
efc4f90cfd63
Mission refactoring and research fix.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
256 "Mount Rushmore is remarkably easy to destroy.")) |