Mercurial > sypikslang
view gamelib/schematics.py @ 84:9d0ad8aeb598
Add some gameplay fluff text in readme
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 09 May 2012 18:12:01 +0200 |
parents | 52913ba12988 |
children | 182fce9f70b6 |
line wrap: on
line source
# -*- test-case-name: gamelib.tests.test_schematics -*- from gamelib import research from gamelib.game_base import Science # Kinds of schematic. HAND_WEAPON = 'hand weapon' VEHICLE = 'vehicle' DOOMSDAY_DEVICE = 'doomsday device' PATHOGEN = 'pathogen' class Schematic(Science): # For all Schematics SCIENCE_TYPE = 'schematic' # Acquisition STARTING_PRODUCT = False ACQUISITION_CHANCE = 0.8 CATEGORIES = () # Costs UPGRADE_REQUIREMENT = 1 COST = None # Power and reliability PROTOTYPE_RELIABILITY = 0.4 PRODUCTION_RELIABILITY = 0.8 BASE_POWER = None POWER_INCREMENT = None def can_spend(self, lab, spend): extra = self.UPGRADE_REQUIREMENT * self.points + spend return lab.meet_requirements(self, extra) def is_a(self, category): return category in self.CATEGORIES def reliability(self): if self.points: exp = 1 + 0.5 * (self.points - 1) return 1.0 - ((1.0 - self.PRODUCTION_RELIABILITY) ** exp) return self.PROTOTYPE_RELIABILITY def power(self): power = self.BASE_POWER if None not in (power, self.POWER_INCREMENT): power += self.POWER_INCREMENT * self.points return power class MachineGun(Schematic): NAME = "Machine gun" COST = 100 CATEGORIES = (HAND_WEAPON,) STARTING_PRODUCT = True def __init__(self, points=0): self.points = 1 def spend_point(self): raise NotImplementedError() def can_spend(self, lab, spend): return False class LightningGun(Schematic): NAME = "Lightning gun" COST = 300 CATEGORIES = (HAND_WEAPON,) PREREQUISITES = ( (research.Tesla, 1), ) class TeslaTank(Schematic): NAME = "Tesla tank" COST = 1000 CATEGORIES = (VEHICLE,) PREREQUISITES = ( (research.Tesla, 3), ) class DoomsdayVirus(Schematic): NAME = "Doomsday virus" COST = 100000 CATEGORIES = (DOOMSDAY_DEVICE, PATHOGEN) PREREQUISITES = ( (research.Biogenetics, 5), )