mirror of
https://github.com/thecatontheceiling/buckshotroulette-decomp.git
synced 2025-02-05 07:28:30 +00:00
6f47bf7fb4
Fixed a possible softlock where item grabbing started when all alive players have full inventories, while dead players had room in their inventory for more items When entering multiplayer without a connection to Steam, the player will get a message prompt which will return them to the menu once closed Fixed final score showing up incorrectly in singleplayer Fixed the magnifying glass sometimes showing the wrong shell in multiplayer
255 lines
8.4 KiB
GDScript
255 lines
8.4 KiB
GDScript
class_name EndingManager extends Node
|
|
|
|
@export var save : SaveFileManager
|
|
@export var roundManager : RoundManager
|
|
@export var pp : WorldEnvironment
|
|
@export var animator_cam : AnimationPlayer
|
|
@export var animator_backdrop : AnimationPlayer
|
|
@export var cam : CameraManager
|
|
@export var blockout : Array[Node3D]
|
|
@export var viewblocker : ColorRect
|
|
@export var animator_viewblocker : AnimationPlayer
|
|
@export var animator_streetlights : AnimationPlayer
|
|
@export var music_ending : AudioStreamPlayer2D
|
|
@export var dia : DialogueEnding
|
|
@export var label_congrats : Label
|
|
@export var label_array : Array[Label]
|
|
@export var uiparent : Control
|
|
@export var animator_congrats : AnimationPlayer
|
|
@export var animator_cash : AnimationPlayer
|
|
@export var fireArray : Array[TextFire]
|
|
@export var speaker_load : AudioStreamPlayer2D
|
|
@export var speaker_ambience : AudioStreamPlayer2D
|
|
@export var cntrl_ambience : SpeakerController
|
|
@export var cntrl_endingmusic : SpeakerController
|
|
@export var animator_anykey : AnimationPlayer
|
|
@export var animator_pan : AnimationPlayer
|
|
@export var exitm : ExitManager
|
|
@export var ach : Achievement
|
|
@export var unlocker : Unlocker
|
|
@export var board : Board
|
|
var waitingForInput = false
|
|
|
|
#func _input(event):
|
|
# if event is InputEventKey and event.pressed:
|
|
# if (waitingForInput):
|
|
# ExitGame()
|
|
# waitingForInput = false
|
|
|
|
func _unhandled_input(event):
|
|
if (event.is_pressed()):
|
|
if (waitingForInput):
|
|
ExitGame()
|
|
waitingForInput = false
|
|
|
|
func BeginEnding():
|
|
exitm.exitAllowed = false
|
|
cam.moving = false
|
|
animator_pan.play("pan to brief")
|
|
music_ending.play()
|
|
AmbienceFade()
|
|
await get_tree().create_timer(10.67, false).timeout
|
|
viewblocker.visible = true
|
|
animator_viewblocker.play("snap")
|
|
animator_pan.stop()
|
|
SetupEnding()
|
|
FinalScore()
|
|
for l in label_array: l.visible = false
|
|
label_congrats.visible = false
|
|
await get_tree().create_timer(1.2, false).timeout
|
|
animator_viewblocker.play("fade out")
|
|
await get_tree().create_timer(3, false).timeout
|
|
ach.UnlockAchievement("ach1")
|
|
if (roundManager.endless):
|
|
if (!roundManager.doubled): ach.UnlockAchievement("ach5")
|
|
if (roundManager.doubled): ach.UnlockAchievement("ach6")
|
|
if (roundManager.endscore > 1000000): ach.UnlockAchievement("ach7")
|
|
await get_tree().create_timer(3, false).timeout
|
|
#SHOW UI
|
|
label_congrats.visible = true
|
|
animator_congrats.play("wobble it")
|
|
animator_cash.play("wobble it")
|
|
dia.ShowText_Forever(glob_text_congratulations)
|
|
await get_tree().create_timer(2, false).timeout
|
|
for i in fireArray:
|
|
speaker_load.pitch_scale = randf_range(.95, 1)
|
|
speaker_load.play()
|
|
await get_tree().create_timer(.15, false).timeout
|
|
await get_tree().create_timer(.5, false).timeout
|
|
for i in range(fireArray.size()):
|
|
if (i == 5):
|
|
await get_tree().create_timer(.4, false).timeout
|
|
fireArray[i].changed = true
|
|
fireArray[i].speaker.pitch_scale = .15
|
|
fireArray[i].Fire()
|
|
await get_tree().create_timer(.33, false).timeout
|
|
await get_tree().create_timer(3, false).timeout
|
|
GetInput()
|
|
|
|
func GetInput():
|
|
animator_anykey.play("flicker")
|
|
await get_tree().create_timer(.8, false).timeout
|
|
waitingForInput = true
|
|
|
|
func ExitGame():
|
|
animator_viewblocker.play("fade in")
|
|
cntrl_endingmusic.FadeOut()
|
|
cntrl_ambience.fadeDuration = 3
|
|
cntrl_ambience.FadeOut()
|
|
isActive = false
|
|
await get_tree().create_timer(4, false).timeout
|
|
var unlocked = FileAccess.file_exists(unlocker.savepath)
|
|
if (unlocked):
|
|
print("changing scene to: menu")
|
|
get_tree().change_scene_to_file("res://scenes/menu.tscn")
|
|
return
|
|
else:
|
|
unlocker.UnlockRoutine()
|
|
|
|
var isActive = true
|
|
func AmbienceFade():
|
|
await get_tree().create_timer(55, false).timeout
|
|
if (isActive):
|
|
cntrl_ambience.SnapVolume(false)
|
|
speaker_ambience.play()
|
|
cntrl_ambience.FadeIn()
|
|
|
|
func SetupEnding():
|
|
await get_tree().create_timer(.1, false).timeout
|
|
uiparent.visible = true
|
|
for b in blockout: b.visible = true
|
|
pp.environment.adjustment_brightness = 5.68
|
|
pp.environment.adjustment_contrast = 1.3
|
|
pp.environment.adjustment_saturation = .26
|
|
cam.moving = false
|
|
cam.cam.fov = 60
|
|
animator_streetlights.play("looping")
|
|
animator_backdrop.play("loop exterior")
|
|
animator_cam.play("camera loop car")
|
|
|
|
var endless_overwriting = false
|
|
var endless_roundsbeat = 0
|
|
var endless_score = 0
|
|
var glob_text_congratulations
|
|
var cash_gl = 0
|
|
func FinalScore():
|
|
var playername = roundManager.playerData.playername
|
|
var shots_fired = roundManager.playerData.stat_shotsFired
|
|
var shells_ejected = roundManager.playerData.stat_shellsEjected
|
|
var doors_kicked = roundManager.playerData.stat_doorsKicked
|
|
var cigarettes_smoked = roundManager.playerData.stat_cigSmoked
|
|
var ml_of_beer_drank = roundManager.playerData.stat_beerDrank
|
|
var max_cash = 70000
|
|
|
|
var cancer_bills = cigarettes_smoked * 220
|
|
var new_leg_bones_price = doors_kicked * 1000
|
|
var DUI_fine = ml_of_beer_drank * 1.5
|
|
var total_cash = max_cash - cancer_bills - DUI_fine
|
|
if (doors_kicked > 2): total_cash -= new_leg_bones_price
|
|
if (total_cash < 0): total_cash = 0
|
|
|
|
if (endless_overwriting): total_cash = endless_score
|
|
cash_gl = total_cash
|
|
|
|
var dots = "................................................................"
|
|
var text_congratulations = tr("CONGRATULATIONS") % [playername]
|
|
var text_shotsFired = tr("SHOTS FIRED") + " " + dots; label_array[0].get_child(2).text = str(shots_fired)
|
|
if (endless_overwriting): text_shotsFired = tr("ROUNDS BEAT") + " " + dots; label_array[0].get_child(2).text = str(endless_roundsbeat)
|
|
var text_shellsEjected = tr("SHELLS EJECTED") + " " + dots; label_array[1].get_child(2).text = str(shells_ejected)
|
|
var text_doorsKicked = tr("DOORS KICKED") + " " + dots; label_array[2].get_child(2).text = str(doors_kicked)
|
|
var text_cigSmoked = tr("CIGS SMOKED") + " " + dots; label_array[3].get_child(2).text = str(cigarettes_smoked)
|
|
var text_beerDrank = tr("ML DRANK") + " " + dots; label_array[4].get_child(2).text = str(ml_of_beer_drank)
|
|
var text_totalcash = tr("TOTAL CASH") + " " + str(total_cash) + " $"
|
|
|
|
#if (endless_overwriting): text_shotsFired = "rounds beat ........ " + str(endless_roundsbeat)
|
|
|
|
glob_text_congratulations = text_congratulations
|
|
|
|
label_array[0].text = text_shotsFired
|
|
label_array[1].text = text_shellsEjected
|
|
label_array[2].text = text_doorsKicked
|
|
label_array[3].text = text_cigSmoked
|
|
label_array[4].text = text_beerDrank
|
|
label_array[5].text = text_totalcash
|
|
IncrementGlobalStats()
|
|
if endless_overwriting && GlobalVariables.using_steam: board.UploadScore(roundManager.double_or_nothing_rounds_beat, roundManager.double_or_nothing_score, roundManager.double_or_nothing_initial_score)
|
|
|
|
var playerdata = {}
|
|
|
|
var statPREV_shots_fired = 0
|
|
var statPREV_shells_ejected = 0
|
|
var statPREV_doors_kicked = 0
|
|
var statPREV_cigs_smoked = 0
|
|
var statPREV_rounds_beat = 0
|
|
var statPREV_ml_drank = 0
|
|
var statPREV_total_cash = 0
|
|
|
|
var statSAVE_shots_fired
|
|
var statSAVE_shells_ejected
|
|
var statSAVE_doors_kicked
|
|
var statSAVE_cigs_smoked
|
|
var statSAVE_rounds_beat
|
|
var statSAVE_ml_drank
|
|
var statSAVE_total_cash
|
|
func IncrementGlobalStats():
|
|
LoadPlayerData()
|
|
statSAVE_shots_fired = statPREV_shots_fired + roundManager.playerData.stat_shotsFired
|
|
statSAVE_shells_ejected = statPREV_shells_ejected + roundManager.playerData.stat_shellsEjected
|
|
statSAVE_doors_kicked = statPREV_doors_kicked + roundManager.playerData.stat_doorsKicked
|
|
statSAVE_cigs_smoked = statPREV_doors_kicked + roundManager.playerData.stat_cigSmoked
|
|
statSAVE_rounds_beat = statPREV_rounds_beat + endless_roundsbeat
|
|
statSAVE_ml_drank = statPREV_ml_drank + roundManager.playerData.stat_beerDrank
|
|
statSAVE_total_cash = statPREV_total_cash + cash_gl
|
|
SavePlayerData()
|
|
|
|
func SavePlayerData():
|
|
playerdata = {
|
|
"shots_fired": statSAVE_shots_fired,
|
|
"shells_ejected": statSAVE_shells_ejected,
|
|
"doors_kicked": statSAVE_doors_kicked,
|
|
"cigs_smoked": statSAVE_cigs_smoked,
|
|
"rounds_beat": statSAVE_rounds_beat,
|
|
"ml_drank": statSAVE_ml_drank,
|
|
"total_cash": statSAVE_total_cash
|
|
}
|
|
var file = FileAccess.open(save.savePath_stats, FileAccess.WRITE)
|
|
file.store_var(playerdata)
|
|
file.close()
|
|
|
|
var temp_data
|
|
func LoadPlayerData():
|
|
if (FileAccess.file_exists(save.savePath_stats)):
|
|
var file = FileAccess.open(save.savePath_stats, FileAccess.READ)
|
|
temp_data = file.get_var()
|
|
statPREV_shots_fired = temp_data.shots_fired
|
|
statPREV_shells_ejected = temp_data.shells_ejected
|
|
statPREV_doors_kicked = temp_data.doors_kicked
|
|
statPREV_cigs_smoked = temp_data.cigs_smoked
|
|
statPREV_rounds_beat = temp_data.rounds_beat
|
|
statPREV_total_cash = temp_data.total_cash
|
|
statPREV_ml_drank = temp_data.ml_drank
|
|
file.close()
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|