5
|
1 # -*- coding: utf-8 -*-
|
|
2 # vim:fileencoding=utf-8 ai ts=4 sts=4 et sw=4
|
|
3
|
|
4 from product import DoomsdayVirus, MachineGun, TeslaGun
|
|
5
|
|
6
|
|
7 class Mission(object):
|
|
8 """Base class for the mission objects.
|
|
9 Missions have a name, short description (for list displays) and
|
|
10 long description (which may contain clues about approaches)"""
|
|
11
|
|
12 NAME = "Generic Mission"
|
|
13 SHORT_DESCRIPTION = None
|
|
14 LONG_DESCRIPTION = None
|
|
15
|
|
16 def attempt(self, equipment):
|
|
17 """Attempt the mission with the given equipment list.
|
|
18
|
|
19 Returns a tuple (success, money, message)"""
|
|
20 return False, 0, "You can't succceed at this mission"
|
|
21
|
|
22
|
|
23 class RansomChina(Mission):
|
|
24
|
|
25 NAME = "Hold China to ransom"
|
|
26 SHORT_DESCRIPTION = "Surely a path to riches and fame"
|
|
27 LONG_DESCRIPTION = "Holding China to ransom. The rewards for" \
|
|
28 " successfully threatening the largest country in the world" \
|
|
29 " are great, but the risks are significant. Without " \
|
|
30 "some serious firepower, the chances of success are small."
|
|
31
|
|
32 def __init__(self):
|
|
33 # Track prior approaches to this mission
|
|
34 self._prior_attempts = []
|
|
35
|
|
36 def attempt(self, equipment):
|
|
37 failures = []
|
|
38 for item in equipment:
|
|
39 if isinstance(item, DoomsdayVirus) and \
|
|
40 item not in self._prior_attempts:
|
|
41 self._prior_attempts.add(item)
|
|
42 return True, 1000000, "Trembling at the threat of your " \
|
|
43 " doomsday virus, the chinese government pays the ransom"
|
|
44 elif isinstance(item, DoomsdayVirus):
|
|
45 failures.append("'Hah, we've developed an antidote to your"
|
|
46 " virus, doctor'. You cannot threaten us with that"
|
|
47 " again'")
|
|
48 else:
|
|
49 failures.append("You fail to inspire fear with your %s"
|
|
50 % item.name)
|
|
51 return False, 0, "\n".join(failures)
|
|
52
|
|
53
|
|
54 class RobBank(Mission):
|
|
55
|
|
56 NAME = "Rob the local bank"
|
|
57 SHORT_DESCRIPTION = "A trivial challenge, but easy money"
|
|
58 LONG_DESCRIPTION = "The security guards and local police are of minor" \
|
|
59 " concern. Walk in, clean out the vault, walk out. Couldn't be" \
|
|
60 " simpler."
|
|
61
|
|
62 def attempt(self, equipment):
|
|
63 failures = []
|
|
64 for item in equipment:
|
|
65 if isinstance(item, DoomsdayVirus):
|
|
66 failures.append("The clerk doesn't realise the threat of the"
|
|
67 " vial you hold, and, although watching him die in"
|
|
68 " agony would be statisfying, you decide it's not"
|
|
69 " worth wasting this on something so trivial")
|
|
70 elif isinstance(item, MachineGun) or isinstance(item, TeslaGun):
|
|
71 return True, 1000, "The threat of your weapons is enough to" \
|
|
72 " inspire an impressive level of cooperation"
|
|
73 else:
|
|
74 failures.append("You fail to inspire fear with your %s"
|
|
75 % item.name)
|
|
76 return False, 0, "\n".join(failures)
|