mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-09 22:24:58 +00:00
More FPS agnosticism, fixed pause after finishing an event's repeating move route
This commit is contained in:
@@ -169,7 +169,6 @@ class SlotMachineScene
|
||||
end
|
||||
end
|
||||
@sprites["payout"].score = payout
|
||||
frame = 0
|
||||
if payout > 0 || @replay
|
||||
if bonus > 0
|
||||
pbMEPlay("Slots big win")
|
||||
@@ -177,30 +176,31 @@ class SlotMachineScene
|
||||
pbMEPlay("Slots win")
|
||||
end
|
||||
# Show winning animation
|
||||
timePerFrame = Graphics.frame_rate / 8
|
||||
until frame == Graphics.frame_rate * 3
|
||||
Graphics.update
|
||||
Input.update
|
||||
update
|
||||
timer_start = System.uptime
|
||||
loop do
|
||||
frame = ((System.uptime - timer_start) / 0.125).to_i
|
||||
@sprites["window2"].bitmap&.clear
|
||||
@sprites["window1"].setBitmap("Graphics/UI/Slot Machine/win")
|
||||
@sprites["window1"].src_rect.set(152 * ((frame / timePerFrame) % 4), 0, 152, 208)
|
||||
@sprites["window1"].src_rect.set(152 * (frame % 4), 0, 152, 208)
|
||||
if bonus > 0
|
||||
@sprites["window2"].setBitmap("Graphics/UI/Slot Machine/bonus")
|
||||
@sprites["window2"].src_rect.set(152 * (bonus - 1), 0, 152, 208)
|
||||
end
|
||||
@sprites["light1"].visible = true
|
||||
@sprites["light1"].src_rect.set(0, 26 * ((frame / timePerFrame) % 4), 96, 26)
|
||||
@sprites["light1"].src_rect.set(0, 26 * (frame % 4), 96, 26)
|
||||
@sprites["light2"].visible = true
|
||||
@sprites["light2"].src_rect.set(0, 26 * ((frame / timePerFrame) % 4), 96, 26)
|
||||
@sprites["light2"].src_rect.set(0, 26 * (frame % 4), 96, 26)
|
||||
(1..5).each do |i|
|
||||
if wonRow[i - 1]
|
||||
@sprites["row#{i}"].visible = (frame / timePerFrame).even?
|
||||
@sprites["row#{i}"].visible = frame.even?
|
||||
else
|
||||
@sprites["row#{i}"].visible = false
|
||||
end
|
||||
end
|
||||
frame += 1
|
||||
Graphics.update
|
||||
Input.update
|
||||
update
|
||||
break if System.uptime - timer_start >= 3.0
|
||||
end
|
||||
@sprites["light1"].visible = false
|
||||
@sprites["light2"].visible = false
|
||||
@@ -218,22 +218,25 @@ class SlotMachineScene
|
||||
@sprites["payout"].score = 0
|
||||
end
|
||||
end
|
||||
(Graphics.frame_rate / 2).times do
|
||||
timer_start = System.uptime
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
update
|
||||
break if System.uptime - timer_start >= 0.5
|
||||
end
|
||||
else
|
||||
# Show losing animation
|
||||
timePerFrame = Graphics.frame_rate / 4
|
||||
until frame == Graphics.frame_rate * 2
|
||||
timer_start = System.uptime
|
||||
loop do
|
||||
frame = ((System.uptime - timer_start) / 0.25).to_i
|
||||
@sprites["window2"].bitmap&.clear
|
||||
@sprites["window1"].setBitmap("Graphics/UI/Slot Machine/lose")
|
||||
@sprites["window1"].src_rect.set(152 * (frame % 2), 0, 152, 208)
|
||||
Graphics.update
|
||||
Input.update
|
||||
update
|
||||
@sprites["window2"].bitmap&.clear
|
||||
@sprites["window1"].setBitmap("Graphics/UI/Slot Machine/lose")
|
||||
@sprites["window1"].src_rect.set(152 * ((frame / timePerFrame) % 2), 0, 152, 208)
|
||||
frame += 1
|
||||
break if System.uptime - timer_start >= 2.0
|
||||
end
|
||||
end
|
||||
@wager = 0
|
||||
@@ -278,9 +281,6 @@ class SlotMachineScene
|
||||
end
|
||||
|
||||
def pbMain
|
||||
frame = 0
|
||||
spinFrameTime = Graphics.frame_rate / 4
|
||||
insertFrameTime = Graphics.frame_rate * 4 / 10
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
@@ -295,23 +295,31 @@ class SlotMachineScene
|
||||
break
|
||||
elsif @gameRunning # Reels are spinning
|
||||
@sprites["window1"].setBitmap("Graphics/UI/Slot Machine/stop")
|
||||
@sprites["window1"].src_rect.set(152 * ((frame / spinFrameTime) % 4), 0, 152, 208)
|
||||
if Input.trigger?(Input::USE)
|
||||
pbSEPlay("Slots stop")
|
||||
if @sprites["reel1"].spinning
|
||||
@sprites["reel1"].stopSpinning(@replay)
|
||||
@sprites["button1"].visible = true
|
||||
elsif @sprites["reel2"].spinning
|
||||
@sprites["reel2"].stopSpinning(@replay)
|
||||
@sprites["button2"].visible = true
|
||||
elsif @sprites["reel3"].spinning
|
||||
@sprites["reel3"].stopSpinning(@replay)
|
||||
@sprites["button3"].visible = true
|
||||
timer_start = System.uptime
|
||||
loop do
|
||||
frame = ((System.uptime - timer_start) / 0.25).to_i
|
||||
@sprites["window1"].src_rect.set(152 * (frame % 4), 0, 152, 208)
|
||||
Graphics.update
|
||||
Input.update
|
||||
update
|
||||
if Input.trigger?(Input::USE)
|
||||
pbSEPlay("Slots stop")
|
||||
if @sprites["reel1"].spinning
|
||||
@sprites["reel1"].stopSpinning(@replay)
|
||||
@sprites["button1"].visible = true
|
||||
elsif @sprites["reel2"].spinning
|
||||
@sprites["reel2"].stopSpinning(@replay)
|
||||
@sprites["button2"].visible = true
|
||||
elsif @sprites["reel3"].spinning
|
||||
@sprites["reel3"].stopSpinning(@replay)
|
||||
@sprites["button3"].visible = true
|
||||
end
|
||||
end
|
||||
end
|
||||
if !@sprites["reel3"].spinning
|
||||
@gameEnd = true
|
||||
@gameRunning = false
|
||||
if !@sprites["reel3"].spinning
|
||||
@gameEnd = true
|
||||
@gameRunning = false
|
||||
end
|
||||
break if !@gameRunning
|
||||
end
|
||||
elsif @gameEnd # Reels have been stopped
|
||||
pbPayout
|
||||
@@ -325,42 +333,47 @@ class SlotMachineScene
|
||||
@gameEnd = false
|
||||
else # Awaiting coins for the next spin
|
||||
@sprites["window1"].setBitmap("Graphics/UI/Slot Machine/insert")
|
||||
@sprites["window1"].src_rect.set(152 * ((frame / insertFrameTime) % 2), 0, 152, 208)
|
||||
if @wager > 0
|
||||
@sprites["window2"].setBitmap("Graphics/UI/Slot Machine/press")
|
||||
@sprites["window2"].src_rect.set(152 * ((frame / insertFrameTime) % 2), 0, 152, 208)
|
||||
end
|
||||
if Input.trigger?(Input::DOWN) && @wager < 3 && @sprites["credit"].score > 0
|
||||
pbSEPlay("Slots coin")
|
||||
@wager += 1
|
||||
@sprites["credit"].score -= 1
|
||||
if @wager >= 3
|
||||
@sprites["row5"].visible = true
|
||||
@sprites["row4"].visible = true
|
||||
elsif @wager >= 2
|
||||
@sprites["row3"].visible = true
|
||||
@sprites["row2"].visible = true
|
||||
elsif @wager >= 1
|
||||
@sprites["row1"].visible = true
|
||||
timer_start = System.uptime
|
||||
loop do
|
||||
frame = ((System.uptime - timer_start) / 0.4).to_i
|
||||
@sprites["window1"].src_rect.set(152 * (frame % 2), 0, 152, 208)
|
||||
if @wager > 0
|
||||
@sprites["window2"].setBitmap("Graphics/UI/Slot Machine/press")
|
||||
@sprites["window2"].src_rect.set(152 * (frame % 2), 0, 152, 208)
|
||||
end
|
||||
elsif @wager >= 3 || (@wager > 0 && @sprites["credit"].score == 0) ||
|
||||
(Input.trigger?(Input::USE) && @wager > 0) || @replay
|
||||
if @replay
|
||||
@wager = 3
|
||||
(1..5).each do |i|
|
||||
@sprites["row#{i}"].visible = true
|
||||
Graphics.update
|
||||
Input.update
|
||||
update
|
||||
if Input.trigger?(Input::DOWN) && @wager < 3 && @sprites["credit"].score > 0
|
||||
pbSEPlay("Slots coin")
|
||||
@wager += 1
|
||||
@sprites["credit"].score -= 1
|
||||
if @wager >= 3
|
||||
@sprites["row5"].visible = true
|
||||
@sprites["row4"].visible = true
|
||||
elsif @wager >= 2
|
||||
@sprites["row3"].visible = true
|
||||
@sprites["row2"].visible = true
|
||||
elsif @wager >= 1
|
||||
@sprites["row1"].visible = true
|
||||
end
|
||||
elsif @wager >= 3 || (@wager > 0 && @sprites["credit"].score == 0) ||
|
||||
(Input.trigger?(Input::USE) && @wager > 0) || @replay
|
||||
if @replay
|
||||
@wager = 3
|
||||
(1..5).each { |i| @sprites["row#{i}"].visible = true }
|
||||
end
|
||||
@sprites["reel1"].startSpinning
|
||||
@sprites["reel2"].startSpinning
|
||||
@sprites["reel3"].startSpinning
|
||||
@gameRunning = true
|
||||
elsif Input.trigger?(Input::BACK) && @wager == 0
|
||||
break
|
||||
end
|
||||
@sprites["reel1"].startSpinning
|
||||
@sprites["reel2"].startSpinning
|
||||
@sprites["reel3"].startSpinning
|
||||
frame = 0
|
||||
@gameRunning = true
|
||||
elsif Input.trigger?(Input::BACK) && @wager == 0
|
||||
break
|
||||
break if @gameRunning
|
||||
end
|
||||
break if !@gameRunning
|
||||
end
|
||||
frame = (frame + 1) % (Graphics.frame_rate * 4)
|
||||
end
|
||||
old_coins = $player.coins
|
||||
$player.coins = @sprites["credit"].score
|
||||
|
||||
@@ -94,10 +94,11 @@ class VoltorbFlip
|
||||
pbUpdateCoins
|
||||
# Draw curtain effect
|
||||
if @firstRound
|
||||
angleDiff = 10 * 20 / Graphics.frame_rate
|
||||
curtain_duration = 0.5
|
||||
timer_start = System.uptime
|
||||
loop do
|
||||
@sprites["curtainL"].angle -= angleDiff
|
||||
@sprites["curtainR"].angle += angleDiff
|
||||
@sprites["curtainL"].angle = lerp(-90, -180, curtain_duration, timer_start, System.uptime)
|
||||
@sprites["curtainR"].angle = lerp(0, 90, curtain_duration, timer_start, System.uptime)
|
||||
Graphics.update
|
||||
Input.update
|
||||
update
|
||||
@@ -535,9 +536,9 @@ class VoltorbFlip
|
||||
@sprites["cursor"].bitmap.clear
|
||||
end
|
||||
|
||||
# def pbWaitText(msg,frames)
|
||||
# msgwindow=pbCreateMessageWindow
|
||||
# pbMessageDisplay(msgwindow,msg)
|
||||
# def pbWaitText(msg, frames)
|
||||
# msgwindow = pbCreateMessageWindow
|
||||
# pbMessageDisplay(msgwindow, msg)
|
||||
# pbWait(frames / 20.0)
|
||||
# pbDisposeMessageWindow(msgwindow)
|
||||
# end
|
||||
@@ -548,12 +549,11 @@ class VoltorbFlip
|
||||
# Draw curtain effect
|
||||
@sprites["curtainL"].visible = true
|
||||
@sprites["curtainR"].visible = true
|
||||
angleDiff = 18 * 20 / Graphics.frame_rate
|
||||
curtain_duration = 0.25
|
||||
timer_start = System.uptime
|
||||
loop do
|
||||
@sprites["curtainL"].angle += angleDiff
|
||||
@sprites["curtainR"].angle -= angleDiff
|
||||
# Fixes a minor graphical bug
|
||||
@sprites["curtainL"].y -= 2 if @sprites["curtainL"].angle >= -90
|
||||
@sprites["curtainL"].angle = lerp(-180, -90, curtain_duration, timer_start, System.uptime)
|
||||
@sprites["curtainR"].angle = lerp(90, 0, curtain_duration, timer_start, System.uptime)
|
||||
Graphics.update
|
||||
Input.update
|
||||
update
|
||||
|
||||
@@ -489,23 +489,26 @@ class MiningGameScene
|
||||
def pbFlashItems(revealed)
|
||||
return if revealed.length <= 0
|
||||
revealeditems = BitmapSprite.new(Graphics.width, Graphics.height, @viewport)
|
||||
halfFlashTime = Graphics.frame_rate / 8
|
||||
alphaDiff = (255.0 / halfFlashTime).ceil
|
||||
(1..halfFlashTime * 2).each do |i|
|
||||
revealed.each do |index|
|
||||
burieditem = @items[index]
|
||||
revealeditems.bitmap.blt(32 * burieditem[1], 64 + (32 * burieditem[2]),
|
||||
@itembitmap.bitmap,
|
||||
Rect.new(32 * ITEMS[burieditem[0]][2], 32 * ITEMS[burieditem[0]][3],
|
||||
32 * ITEMS[burieditem[0]][4], 32 * ITEMS[burieditem[0]][5]))
|
||||
if i > halfFlashTime
|
||||
revealeditems.color = Color.new(255, 255, 255, ((halfFlashTime * 2) - i) * alphaDiff)
|
||||
else
|
||||
revealeditems.color = Color.new(255, 255, 255, i * alphaDiff)
|
||||
revealeditems.color = Color.new(255, 255, 255, 0)
|
||||
flash_duration = 0.25
|
||||
2.times do |i|
|
||||
alpha_start = (i == 0) ? 0 : 255
|
||||
alpha_end = (i == 0) ? 255 : 0
|
||||
timer_start = System.uptime
|
||||
loop do
|
||||
revealed.each do |index|
|
||||
burieditem = @items[index]
|
||||
revealeditems.bitmap.blt(32 * burieditem[1], 64 + (32 * burieditem[2]),
|
||||
@itembitmap.bitmap,
|
||||
Rect.new(32 * ITEMS[burieditem[0]][2], 32 * ITEMS[burieditem[0]][3],
|
||||
32 * ITEMS[burieditem[0]][4], 32 * ITEMS[burieditem[0]][5]))
|
||||
end
|
||||
flash_alpha = lerp(alpha_start, alpha_end, flash_duration / 2, timer_start, System.uptime)
|
||||
revealeditems.color.alpha = flash_alpha
|
||||
update
|
||||
Graphics.update
|
||||
break if flash_alpha == alpha_end
|
||||
end
|
||||
update
|
||||
Graphics.update
|
||||
end
|
||||
revealeditems.dispose
|
||||
revealed.each do |index|
|
||||
|
||||
Reference in New Issue
Block a user