Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- init:
- image bg pong field = "mod_assets/pong_field.png"
- python:
- def is_morning():
- return (datetime.datetime.now().time().hour > 6 and datetime.datetime.now().time().hour < 18)
- class PongDisplayable(renpy.Displayable):
- def __init__(self):
- renpy.Displayable.__init__(self)
- self.paddle = Image("mod_assets/pong.png")
- self.ball = Image("mod_assets/pong_ball.png")
- self.player = Text(_("[player]"), size=36)
- self.monika = Text(_("Monika"), size=36)
- self.ctb = Text(_("Click to Begin"), size=36)
- self.PADDLE_WIDTH = 8
- self.PADDLE_HEIGHT = 79
- self.BALL_WIDTH = 15
- self.BALL_HEIGHT = 15
- self.COURT_TOP = 124
- self.COURT_BOTTOM = 654
- self.stuck = True
- self.playery = (self.COURT_BOTTOM - self.COURT_TOP) / 2
- self.computery = self.playery
- self.computerspeed = 1000.0
- self.bx = 110
- self.by = self.playery
- self.bdx = .5
- self.bdy = .5
- self.bspeed = 500.0
- self.oldst = None
- self.winner = None
- def visit(self):
- return [ self.paddle, self.ball, self.player, self.monika, self.ctb ]
- def render(self, width, height, st, at):
- r = renpy.Render(width, height)
- if self.oldst is None:
- self.oldst = st
- dtime = st - self.oldst
- self.oldst = st
- speed = dtime * self.bspeed
- oldbx = self.bx
- if self.stuck:
- self.by = self.playery
- else:
- self.bx += self.bdx * speed
- self.by += self.bdy * speed
- cspeed = self.computerspeed * dtime
- if abs(self.by - self.computery) <= cspeed:
- self.computery = self.by
- else:
- self.computery += cspeed * (self.by - self.computery) / abs(self.by - self.computery)
- ball_top = self.COURT_TOP + self.BALL_HEIGHT / 2
- if self.by < ball_top:
- self.by = ball_top + (ball_top - self.by)
- self.bdy = -self.bdy
- renpy.sound.play("mod_assets/pong_beep.wav", channel=0)
- ball_bot = self.COURT_BOTTOM - self.BALL_HEIGHT / 2
- if self.by > ball_bot:
- self.by = ball_bot - (self.by - ball_bot)
- self.bdy = -self.bdy
- renpy.sound.play("mod_assets/pong_beep.wav", channel=0)
- def paddle(px, py, hotside):
- pi = renpy.render(self.paddle, 1280, 720, st, at)
- r.blit(pi, (int(px), int(py - self.PADDLE_HEIGHT / 2)))
- if py - self.PADDLE_HEIGHT / 2 <= self.by <= py + self.PADDLE_HEIGHT / 2:
- hit = False
- if oldbx >= hotside >= self.bx:
- self.bx = hotside + (hotside - self.bx)
- self.bdx = -self.bdx
- self.bdy = self.bdy + (renpy.random.random()/3.0)#makes y value of ball random
- hit = True
- elif oldbx <= hotside <= self.bx:
- self.bx = hotside - (self.bx - hotside)
- self.bdx = -self.bdx
- self.bdy = self.bdy + (renpy.random.random()/3.0)#makes y value of ball random
- hit = True
- if hit:
- renpy.sound.play("mod_assets/pong_boop.wav", channel=1)
- self.bspeed *= 1.20
- paddle(100, self.playery, 100 + self.PADDLE_WIDTH)
- paddle(1175, self.computery, 1175)
- ball = renpy.render(self.ball, 1280, 720, st, at)
- r.blit(ball, (int(self.bx - self.BALL_WIDTH / 2),
- int(self.by - self.BALL_HEIGHT / 2)))
- player = renpy.render(self.player, 1280, 720, st, at)
- r.blit(player, (100, 25))
- monika = renpy.render(self.monika, 1280, 720, st, at)
- ew, eh = monika.get_size()
- r.blit(monika, (1150 - ew, 25))
- if self.stuck:
- ctb = renpy.render(self.ctb, 1280, 720, st, at)
- cw, ch = ctb.get_size()
- r.blit(ctb, (640 - cw / 2, 30))
- if self.bx < -200:
- self.winner = "monika"
- renpy.timeout(0)
- elif self.bx > 1280:
- self.winner = "player"
- renpy.timeout(0)
- renpy.redraw(self, 0)
- return r
- def event(self, ev, x, y, st):
- import pygame
- if ev.type == pygame.MOUSEBUTTONDOWN and ev.button == 1:
- self.stuck = False
- y = max(y, self.COURT_TOP)
- y = min(y, self.COURT_BOTTOM)
- self.playery = y
- if self.winner:
- return self.winner
- else:
- raise renpy.IgnoreEvent()
- label game_pong:
- hide screen keylistener
- m "You wanna play a game of Pong? Okay!"
- m "I'll beat you for sure this time!"
- call demo_minigame_pong from _call_demo_minigame_pong
- label demo_minigame_pong:
- window hide None
- scene bg pong field
- python:
- ui.add(PongDisplayable())
- winner = ui.interact(suppress_overlay=True, suppress_underlay=True)
- if is_morning():
- show room_mask as rm:
- size (320,180)
- pos (30,200)
- show room_mask2 as rm2:
- size (320,180)
- pos (935,200)
- show monika_transparent_day_bg
- elif not is_morning():
- scene black
- show room_mask as rm:
- size (320,180)
- pos (30,200)
- show room_mask2 as rm2:
- size (320,180)
- pos (935,200)
- show monika_bg
- show monika_bg_highlight
- if winner == "monika":
- m "I win~!"
- else:
- m "You won! Congratulations."
- menu:
- m "Do you want to play again?"
- "Yes.":
- jump demo_minigame_pong
- "No.":
- if winner == "monika":
- m "I can't really get excited for a game this simple..."
- m "At least we can still hang out with each other."
- m "Ahaha!"
- m "Thanks for letting me win, [player]."
- m "Only elementary schoolers seriously lose at Pong, right?"
- m "Ehehe~"
- else:
- m "Wow, I was actually trying that time."
- m "You must have really practiced at Pong to get so good."
- m "Is that something for you to be proud of?"
- m "I guess you wanted to impress me, [player]~"
- jump ch30_loop
- # Decompiled by unrpyc: https://github.com/CensoredUsername/unrpyc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement