comparison gamelib/scenes/bridge.py @ 603:3ce19d33b51f pyntnclick

Rename state to game to not cause confusion with the other state
author Neil Muller <neil@dip.sun.ac.za>
date Sat, 11 Feb 2012 20:09:47 +0200
parents 59f1ee3f5632
children dd12337423ab
comparison
equal deleted inserted replaced
602:1aac5a3b17e1 603:3ce19d33b51f
160 } 160 }
161 161
162 INITIAL = 'chair' 162 INITIAL = 'chair'
163 163
164 def get_description(self): 164 def get_description(self):
165 return self.state.current_scene.things['bridge.massagechair_base'] \ 165 return self.game.current_scene.things['bridge.massagechair_base'] \
166 .get_description() 166 .get_description()
167 167
168 def is_interactive(self, tool=None): 168 def is_interactive(self, tool=None):
169 return False 169 return False
170 170
189 189
190 def get_description(self): 190 def get_description(self):
191 return "A stethoscope hangs from the neck of the skeleton." 191 return "A stethoscope hangs from the neck of the skeleton."
192 192
193 def interact_without(self): 193 def interact_without(self):
194 self.state.add_inventory_item('stethoscope') 194 self.game.add_inventory_item('stethoscope')
195 self.scene.remove_thing(self) 195 self.scene.remove_thing(self)
196 # Fill in the doctor's rect 196 # Fill in the doctor's rect
197 self.scene.doctor.rect.append(self.rect) 197 self.scene.doctor.rect.append(self.rect)
198 return Result("You pick up the stethoscope and verify that the" 198 return Result("You pick up the stethoscope and verify that the"
199 " doctor's heart has stopped. Probably a while ago.") 199 " doctor's heart has stopped. Probably a while ago.")
212 INVENTORY_IMAGE = 'superconductor_fixed.png' 212 INVENTORY_IMAGE = 'superconductor_fixed.png'
213 CURSOR = CursorSprite('superconductor_fixed.png') 213 CURSOR = CursorSprite('superconductor_fixed.png')
214 214
215 def interact_with_duct_tape(self, item): 215 def interact_with_duct_tape(self, item):
216 taped_superconductor = TapedSuperconductor('taped_superconductor') 216 taped_superconductor = TapedSuperconductor('taped_superconductor')
217 self.state.add_item(taped_superconductor) 217 self.game.add_item(taped_superconductor)
218 self.state.replace_inventory_item(self.name, taped_superconductor.name) 218 self.game.replace_inventory_item(self.name, taped_superconductor.name)
219 return Result("You rip off a piece of duct tape and stick it on the" 219 return Result("You rip off a piece of duct tape and stick it on the"
220 " superconductor. It almost sticks to itself, but you" 220 " superconductor. It almost sticks to itself, but you"
221 " successfully avoid disaster.") 221 " successfully avoid disaster.")
222 222
223 223
231 } 231 }
232 232
233 INITIAL = 'superconductor' 233 INITIAL = 'superconductor'
234 234
235 def interact_without(self): 235 def interact_without(self):
236 self.state.add_inventory_item('superconductor') 236 self.game.add_inventory_item('superconductor')
237 self.state.current_scene.things['bridge.massagechair_base'] \ 237 self.game.current_scene.things['bridge.massagechair_base'] \
238 .set_data('contains_superconductor', False) 238 .set_data('contains_superconductor', False)
239 self.scene.remove_thing(self) 239 self.scene.remove_thing(self)
240 return (Result("The superconductor module unclips easily."), 240 return (Result("The superconductor module unclips easily."),
241 make_jim_dialog(("Prisoner %s. That chair you've destroyed" 241 make_jim_dialog(("Prisoner %s. That chair you've destroyed"
242 " was property of the ship's captain. " 242 " was property of the ship's captain. "
243 "You will surely be punished." 243 "You will surely be punished."
244 % PLAYER_ID), self.state)) 244 % PLAYER_ID), self.game))
245 245
246 246
247 class StarField(Thing): 247 class StarField(Thing):
248 248
249 NAME = 'bridge.stars' 249 NAME = 'bridge.stars'
358 def interact_default(self, item): 358 def interact_default(self, item):
359 if self.scene.get_data('ai status') == 'online': 359 if self.scene.get_data('ai status') == 'online':
360 return (Result('You feel a shock from the panel.'), 360 return (Result('You feel a shock from the panel.'),
361 make_jim_dialog("Prisoner %s. Please step away from the" 361 make_jim_dialog("Prisoner %s. Please step away from the"
362 " panel. You are not an authorized" 362 " panel. You are not an authorized"
363 " technician." % PLAYER_ID, self.state)) 363 " technician." % PLAYER_ID, self.game))
364 364
365 365
366 class ChairDetail(Scene): 366 class ChairDetail(Scene):
367 367
368 FOLDER = 'bridge' 368 FOLDER = 'bridge'
386 } 386 }
387 INITIAL = 'log tab' 387 INITIAL = 'log tab'
388 COMPUTER = 'bridge_comp_detail' 388 COMPUTER = 'bridge_comp_detail'
389 389
390 def is_interactive(self, tool=None): 390 def is_interactive(self, tool=None):
391 return self.state.detail_views[self.COMPUTER].get_data('tab') != 'log' 391 return self.game.detail_views[self.COMPUTER].get_data('tab') != 'log'
392 392
393 def interact_without(self): 393 def interact_without(self):
394 self.state.detail_views[self.COMPUTER].set_data('tab', 'log') 394 self.game.detail_views[self.COMPUTER].set_data('tab', 'log')
395 self.state.detail_views[self.COMPUTER].set_background() 395 self.game.detail_views[self.COMPUTER].set_background()
396 return Result(soundfile='beep550.ogg') 396 return Result(soundfile='beep550.ogg')
397 397
398 398
399 class AlertTab(Thing): 399 class AlertTab(Thing):
400 """Tab for alert screen""" 400 """Tab for alert screen"""
406 } 406 }
407 INITIAL = 'alert tab' 407 INITIAL = 'alert tab'
408 COMPUTER = 'bridge_comp_detail' 408 COMPUTER = 'bridge_comp_detail'
409 409
410 def is_interactive(self, tool=None): 410 def is_interactive(self, tool=None):
411 return (self.state.detail_views[self.COMPUTER].get_data('tab') 411 return (self.game.detail_views[self.COMPUTER].get_data('tab')
412 != 'alert') 412 != 'alert')
413 413
414 def interact_without(self): 414 def interact_without(self):
415 self.state.detail_views[self.COMPUTER].set_data('tab', 'alert') 415 self.game.detail_views[self.COMPUTER].set_data('tab', 'alert')
416 self.state.detail_views[self.COMPUTER].set_background() 416 self.game.detail_views[self.COMPUTER].set_background()
417 return Result(soundfile='beep550.ogg') 417 return Result(soundfile='beep550.ogg')
418 418
419 419
420 class NavTab(Thing): 420 class NavTab(Thing):
421 """Tab for the Navigation screen""" 421 """Tab for the Navigation screen"""
427 } 427 }
428 INITIAL = 'nav tab' 428 INITIAL = 'nav tab'
429 COMPUTER = 'bridge_comp_detail' 429 COMPUTER = 'bridge_comp_detail'
430 430
431 def is_interactive(self, tool=None): 431 def is_interactive(self, tool=None):
432 return self.state.detail_views[self.COMPUTER].get_data('tab') != 'nav' 432 return self.game.detail_views[self.COMPUTER].get_data('tab') != 'nav'
433 433
434 def interact_without(self): 434 def interact_without(self):
435 self.state.detail_views[self.COMPUTER].set_data('tab', 'nav') 435 self.game.detail_views[self.COMPUTER].set_data('tab', 'nav')
436 self.state.detail_views[self.COMPUTER].set_background() 436 self.game.detail_views[self.COMPUTER].set_background()
437 return Result(soundfile='beep550.ogg') 437 return Result(soundfile='beep550.ogg')
438 438
439 439
440 class DestNavPageLine(Thing): 440 class DestNavPageLine(Thing):
441 """The destination navigation lines.""" 441 """The destination navigation lines."""
454 # Whether JIM blocks this 454 # Whether JIM blocks this
455 self.ai_blocked = ai_blocked 455 self.ai_blocked = ai_blocked
456 self.set_interact('line') 456 self.set_interact('line')
457 457
458 def is_interactive(self, tool=None): 458 def is_interactive(self, tool=None):
459 return self.state.detail_views[self.COMPUTER].get_data('tab') == 'nav' 459 return self.game.detail_views[self.COMPUTER].get_data('tab') == 'nav'
460 460
461 def interact_without(self): 461 def interact_without(self):
462 if self.state.scenes['bridge'].get_data('ai status') == 'online': 462 if self.game.scenes['bridge'].get_data('ai status') == 'online':
463 return make_jim_dialog("You are not authorized to change the" 463 return make_jim_dialog("You are not authorized to change the"
464 " destination.", self.state) 464 " destination.", self.game)
465 if not self.ai_blocked: 465 if not self.ai_blocked:
466 return Result("There's no good reason to choose to go to the" 466 return Result("There's no good reason to choose to go to the"
467 " penal colony.") 467 " penal colony.")
468 if self.state.scenes['bridge'].get_data('ai status') == 'looping': 468 if self.game.scenes['bridge'].get_data('ai status') == 'looping':
469 return Result("You could change the destination, but when JIM" 469 return Result("You could change the destination, but when JIM"
470 " recovers, it'll just get reset.") 470 " recovers, it'll just get reset.")
471 if self.state.scenes['bridge'].get_data('ai status') == 'dead': 471 if self.game.scenes['bridge'].get_data('ai status') == 'dead':
472 return Result("You change the destination.", 472 return Result("You change the destination.",
473 soundfile="beep550.ogg", end_game=True) 473 soundfile="beep550.ogg", end_game=True)
474 474
475 475
476 class CompUpButton(Thing): 476 class CompUpButton(Thing):
483 } 483 }
484 INITIAL = 'up' 484 INITIAL = 'up'
485 COMPUTER = 'bridge_comp_detail' 485 COMPUTER = 'bridge_comp_detail'
486 486
487 def is_interactive(self, tool=None): 487 def is_interactive(self, tool=None):
488 tab = self.state.detail_views[self.COMPUTER].get_data('tab') 488 tab = self.game.detail_views[self.COMPUTER].get_data('tab')
489 page = self.state.detail_views[self.COMPUTER].get_data('log page') 489 page = self.game.detail_views[self.COMPUTER].get_data('log page')
490 return tab == 'log' and page > 0 490 return tab == 'log' and page > 0
491 491
492 def interact_without(self): 492 def interact_without(self):
493 page = self.state.detail_views[self.COMPUTER].get_data('log page') 493 page = self.game.detail_views[self.COMPUTER].get_data('log page')
494 self.state.detail_views[self.COMPUTER].set_data('log page', page - 1) 494 self.game.detail_views[self.COMPUTER].set_data('log page', page - 1)
495 self.state.detail_views[self.COMPUTER].set_background() 495 self.game.detail_views[self.COMPUTER].set_background()
496 return Result(soundfile='beep550.ogg') 496 return Result(soundfile='beep550.ogg')
497 497
498 498
499 class CompDownButton(Thing): 499 class CompDownButton(Thing):
500 """Down button on log screen""" 500 """Down button on log screen"""
506 } 506 }
507 INITIAL = 'down' 507 INITIAL = 'down'
508 COMPUTER = 'bridge_comp_detail' 508 COMPUTER = 'bridge_comp_detail'
509 509
510 def is_interactive(self, tool=None): 510 def is_interactive(self, tool=None):
511 tab = self.state.detail_views[self.COMPUTER].get_data('tab') 511 tab = self.game.detail_views[self.COMPUTER].get_data('tab')
512 page = self.state.detail_views[self.COMPUTER].get_data('log page') 512 page = self.game.detail_views[self.COMPUTER].get_data('log page')
513 max_page = self.state.detail_views[self.COMPUTER].get_data('max page') 513 max_page = self.game.detail_views[self.COMPUTER].get_data('max page')
514 return tab == 'log' and (page + 1) < max_page 514 return tab == 'log' and (page + 1) < max_page
515 515
516 def interact_without(self): 516 def interact_without(self):
517 page = self.state.detail_views[self.COMPUTER].get_data('log page') 517 page = self.game.detail_views[self.COMPUTER].get_data('log page')
518 self.state.detail_views[self.COMPUTER].set_data('log page', page + 1) 518 self.game.detail_views[self.COMPUTER].set_data('log page', page + 1)
519 self.state.detail_views[self.COMPUTER].set_background() 519 self.game.detail_views[self.COMPUTER].set_background()
520 return Result(soundfile='beep550.ogg') 520 return Result(soundfile='beep550.ogg')
521 521
522 522
523 class MonitorCamera(BaseCamera): 523 class MonitorCamera(BaseCamera):
524 "A camera on the bridge" 524 "A camera on the bridge"
616 # Much fiddling to do the right thing when we reinsert it 616 # Much fiddling to do the right thing when we reinsert it
617 del self.things[thing.name] 617 del self.things[thing.name]
618 thing.scene = None 618 thing.scene = None
619 619
620 def _get_nav_page(self): 620 def _get_nav_page(self):
621 if not self.state.scenes['engine'].get_data('engine online'): 621 if not self.game.scenes['engine'].get_data('engine online'):
622 return self._nav_messages['engine offline'] 622 return self._nav_messages['engine offline']
623 elif (not self.state.scenes['mess'].get_data('life support status') 623 elif (not self.game.scenes['mess'].get_data('life support status')
624 == 'fixed'): 624 == 'fixed'):
625 return self._nav_messages['life support'] 625 return self._nav_messages['life support']
626 else: 626 else:
627 for thing in self._nav_lines: 627 for thing in self._nav_lines:
628 if thing.name not in self.things: 628 if thing.name not in self.things:
629 self.add_thing(thing) 629 self.add_thing(thing)
630 return self._nav_messages['final'] 630 return self._nav_messages['final']
631 631
632 def _draw_alerts(self, surface): 632 def _draw_alerts(self, surface):
633 xpos, ypos = self.ALERT_OFFSET 633 xpos, ypos = self.ALERT_OFFSET
634 if self.state.scenes['bridge'].get_data('ai status') == 'looping': 634 if self.game.scenes['bridge'].get_data('ai status') == 'looping':
635 surface.blit(self._alert_messages['ai looping'], (xpos, ypos)) 635 surface.blit(self._alert_messages['ai looping'], (xpos, ypos))
636 ypos += (self._alert_messages['ai looping'].get_size()[1] 636 ypos += (self._alert_messages['ai looping'].get_size()[1]
637 + self.ALERT_SPACING) 637 + self.ALERT_SPACING)
638 if self.state.scenes['bridge'].get_data('ai status') == 'dead': 638 if self.game.scenes['bridge'].get_data('ai status') == 'dead':
639 surface.blit(self._alert_messages['ai offline'], (xpos, ypos)) 639 surface.blit(self._alert_messages['ai offline'], (xpos, ypos))
640 ypos += (self._alert_messages['ai offline'].get_size()[1] 640 ypos += (self._alert_messages['ai offline'].get_size()[1]
641 + self.ALERT_SPACING) 641 + self.ALERT_SPACING)
642 if not self.state.scenes['engine'].get_data('engine online'): 642 if not self.game.scenes['engine'].get_data('engine online'):
643 surface.blit(self._alert_messages['engine offline'], (xpos, ypos)) 643 surface.blit(self._alert_messages['engine offline'], (xpos, ypos))
644 ypos += (self._alert_messages['engine offline'].get_size()[1] 644 ypos += (self._alert_messages['engine offline'].get_size()[1]
645 + self.ALERT_SPACING) 645 + self.ALERT_SPACING)
646 if (self.state.scenes['mess'].get_data('life support status') 646 if (self.game.scenes['mess'].get_data('life support status')
647 == 'broken'): 647 == 'broken'):
648 surface.blit(self._alert_messages['life support'], (xpos, ypos)) 648 surface.blit(self._alert_messages['life support'], (xpos, ypos))
649 ypos += (self._alert_messages['life support'].get_size()[1] 649 ypos += (self._alert_messages['life support'].get_size()[1]
650 + self.ALERT_SPACING) 650 + self.ALERT_SPACING)
651 if (self.state.scenes['mess'].get_data('life support status') 651 if (self.game.scenes['mess'].get_data('life support status')
652 == 'replaced'): 652 == 'replaced'):
653 surface.blit(self._alert_messages['life support partial'], 653 surface.blit(self._alert_messages['life support partial'],
654 (xpos, ypos)) 654 (xpos, ypos))
655 ypos += (self._alert_messages['life support partial'].get_size()[1] 655 ypos += (self._alert_messages['life support partial'].get_size()[1]
656 + self.ALERT_SPACING) 656 + self.ALERT_SPACING)