This commit is contained in:
Frank DeMarco 2018-01-02 22:56:53 -05:00
parent ce51eb0845
commit 970484e64f
2 changed files with 71 additions and 2 deletions

63
NS.py
View File

@ -20,7 +20,8 @@ from lib.pgfw.pgfw.Game import Game
from lib.pgfw.pgfw.GameChild import GameChild
from lib.pgfw.pgfw.Sprite import Sprite, RainbowSprite
from lib.pgfw.pgfw.Animation import Animation
from lib.pgfw.pgfw.extension import get_step, get_step_relative, get_delta, reflect_angle
from lib.pgfw.pgfw.extension import (get_step, get_step_relative, get_delta, reflect_angle,
render_box)
from lib.pgfw.pgfw.gfx_extension import aa_filled_polygon
class SoundEffect(GameChild, Sound):
@ -77,7 +78,10 @@ class NS(Game, Animation):
self.chemtrails = Chemtrails(self)
self.boss = Boss(self)
self.last_press = get_ticks()
self.register(self.blink_score, interval=500)
self.play(self.blink_score)
self.reset()
self.most_recent_time = None
clear()
def load_sfx(self):
@ -86,6 +90,7 @@ class NS(Game, Animation):
sfx[basename(path.split(".")[0])] = SoundEffect(self, path)
def reset(self, leave_wipe_running=False):
self.score_hidden = False
self.idle_elapsed = 0
self.suppressing_input = False
self.title.reset()
@ -98,6 +103,12 @@ class NS(Game, Animation):
self.platform.reset()
self.dialogue.reset()
def set_most_recent_time(self, score):
self.most_recent_time = score
def blink_score(self):
self.score_hidden = not self.score_hidden
def suppress_input(self):
self.suppressing_input = True
# self.platform.unpress()
@ -182,6 +193,38 @@ class Title(GameChild):
def activate_introduction(self):
self.deactivate()
self.get_game().introduction.activate()
self.get_game().set_most_recent_time(None)
def draw_scores(self):
step = 75
ds = self.get_display_surface()
lines = map(int, file(self.get_resource("scores")).readlines())
entries = ["BEST"] + sorted(lines)[:9]
for ii, entry in enumerate(entries):
if ii == 0 or ii == 5:
y = 30
font = Font(self.get_resource(Dialogue.FONT_PATH), 18)
if ii > 0:
text = self.get_formatted_time(entry)
else:
text = entry
message = render_box(font, text, True, Color(255, 255, 255),
Color(128, 128, 128), Color(0, 0, 0), padding=2)
message.set_alpha(200)
rect = message.get_rect()
rect.top = y
if ii < 5:
rect.left = -1
else:
rect.right = ds.get_width() + 1
if not entry == self.get_game().most_recent_time or not self.get_game().score_hidden:
ds.blit(message, rect)
y += step
def get_formatted_time(self, entry):
minutes, milliseconds = divmod(int(entry), 60000)
seconds, fraction = divmod(milliseconds, 1000)
return "%i:%02i.%i" % (minutes, seconds, fraction / 100)
def update(self):
if self.active:
@ -222,6 +265,7 @@ class Title(GameChild):
self.text.set_frameset("full")
self.border.update()
self.text.update()
self.draw_scores()
class Dialogue(Animation):
@ -398,7 +442,7 @@ class Introduction(Animation):
def activate_boss(self):
self.deactivate()
self.get_game().boss.start_level(2)
self.get_game().boss.start_level(0)
def start_wipe(self):
self.get_game().wipe.start(self.activate_boss)
@ -1057,6 +1101,7 @@ class Boss(Animation):
def reset(self):
self.level_index = 0
self.kills = 0
self.time_elapsed = 0
self.deactivate()
self.cancel_flash()
self.halt(self.cancel_flash)
@ -1263,10 +1308,15 @@ class Boss(Animation):
self.visitor.set_frameset(0)
elif self.level_index == 2:
self.spoopy.set_frameset(0)
self.add_score()
self.player_defeated = not win
self.kills += not win
self.play(self.show_end_dialogue, delay=3000, play_once=True)
def add_score(self):
self.get_game().set_most_recent_time(self.time_elapsed)
file(self.get_resource("scores"), "a").write(str(self.time_elapsed) + "\n")
def show_end_dialogue(self):
dialogue = self.get_game().dialogue
dialogue.activate()
@ -1326,6 +1376,8 @@ class Boss(Animation):
else:
self.get_game().wipe.start(self.transition_to_battle)
self.advance_prompt.cancel_first_press()
else:
self.time_elapsed += self.get_game().time_filter.get_last_frame_duration()
Animation.update(self)
if self.level_index == 0:
self.kool_man.update()
@ -1532,6 +1584,13 @@ class Ending(Animation):
self.advance_prompt.cancel_first_press()
self.get_display_surface().blit(self.tony, (0, 0))
self.slime_bag.update()
font = Font(self.get_resource("rounded-mplus-1m-bold.ttf"), 36)
text = font.render(self.get_game().title.get_formatted_time(self.get_game().most_recent_time),
True, Color("black"))
rect = text.get_rect()
ds = self.get_display_surface()
rect.midtop = ds.get_rect().centerx, 320
ds.blit(text, rect)
self.get_game().dialogue.update()
if not wipe.is_playing() and not self.is_playing(self.start):
self.advance_prompt.update()

10
resource/scores Normal file
View File

@ -0,0 +1,10 @@
5999999
5999999
5999999
5999999
5999999
5999999
5999999
5999999
5999999
5999999