ChallengeModeHandler.gd 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. class_name ChallengeModeHandler
  2. extends Node
  3. static var challenge_mode := false
  4. static var red_coins := 0
  5. static var yoshi_egg_found := false
  6. static var yoshi_egg_id := 1
  7. static var current_run_red_coins_collected := 0
  8. enum CoinValues{R_COIN_1 = 0, R_COIN_2 = 1, R_COIN_3 = 2, R_COIN_4 = 3, R_COIN_5 = 4, YOSHI_EGG = 5}
  9. const BIT_VALUES := [1, 2, 4, 8, 16, 32, 64, 128]
  10. static var top_challenge_scores := [
  11. [0, 0, 0, 0],
  12. [0, 0, 0, 0],
  13. [0, 0, 0, 0],
  14. [0, 0, 0, 0],
  15. [0, 0, 0, 0],
  16. [0, 0, 0, 0],
  17. [0, 0, 0, 0],
  18. [0, 0, 0, 0],
  19. ]
  20. const CHALLENGE_TARGETS := {
  21. "SMB1": SMB1_CHALLENGE_SCORE_TARGETS,
  22. "SMBLL": SMBLL_CHALLENGE_SCORE_TARGETS,
  23. "SMBS": SMBS_CHALLENGE_SCORE_TARGETS,
  24. "SMBANN": []
  25. }
  26. const SMB1_CHALLENGE_SCORE_TARGETS := [
  27. [26000, 26000, 19000, 12000],
  28. [40000, 25000, 23000, 14000],
  29. [40000, 45000, 21000, 13000],
  30. [32000, 33000, 24000, 17000],
  31. [80000, 36000, 23000, 13000],
  32. [32000, 30000, 21000, 12000],
  33. [32000, 24000, 28000, 16000],
  34. [40000, 28000, 28000, 18000],
  35. ]
  36. const SMBLL_CHALLENGE_SCORE_TARGETS := [
  37. [26000, 26000, 19000, 12000],
  38. [30000, 60000, 23000, 14000],
  39. [30000, 28000, 21000, 13000],
  40. [25000, 33000, 24000, 17000],
  41. [30000, 36000, 23000, 13000],
  42. [32000, 30000, 21000, 12000],
  43. [32000, 24000, 22000, 16000],
  44. [30000, 28000, 28000, 18000],
  45. ]
  46. const SMBS_CHALLENGE_SCORE_TARGETS := [
  47. [26000, 26000, 19000, 12000],
  48. [40000, 25000, 23000, 14000],
  49. [30000, 35000, 21000, 13000],
  50. [32000, 33000, 24000, 17000],
  51. [55000, 36000, 23000, 13000],
  52. [32000, 30000, 21000, 12000],
  53. [32000, 24000, 28000, 16000],
  54. [30000, 28000, 28000, 18000],
  55. ]
  56. static var red_coins_collected := [
  57. [0, 0, 0, 0],
  58. [0, 0, 0, 0],
  59. [0, 0, 0, 0],
  60. [0, 0, 0, 0],
  61. [0, 0, 0, 0],
  62. [0, 0, 0, 0],
  63. [0, 0, 0, 0],
  64. [0, 0, 0, 0]
  65. ]
  66. static func set_value(coin_id := CoinValues.R_COIN_1, value := false) -> void:
  67. if value:
  68. current_run_red_coins_collected |= (1 << coin_id)
  69. else:
  70. current_run_red_coins_collected &= ~(1 << coin_id)
  71. static func is_coin_collected(coin_id: CoinValues = CoinValues.R_COIN_1, num := current_run_red_coins_collected) -> bool:
  72. return num & (1 << coin_id) != 0
  73. func check_for_achievement() -> void:
  74. for x in red_coins_collected:
  75. for i in x:
  76. if i != 63:
  77. return
  78. var target
  79. match Global.current_campaign:
  80. "SMBLL": target = SMBLL_CHALLENGE_SCORE_TARGETS
  81. "SMBS": target = SMBS_CHALLENGE_SCORE_TARGETS
  82. _: target = SMB1_CHALLENGE_SCORE_TARGETS
  83. var world := 0
  84. for x in top_challenge_scores:
  85. var level := 0
  86. for i in x:
  87. if top_challenge_scores[world][level] < target[world][level]:
  88. return
  89. level += 1
  90. world += 1
  91. match Global.current_campaign:
  92. "SMB1": Global.unlock_achievement(Global.AchievementID.SMB1_CHALLENGE)
  93. "SMBLL": Global.unlock_achievement(Global.AchievementID.SMBLL_CHALLENGE)
  94. "SMBS": Global.unlock_achievement(Global.AchievementID.SMBS_CHALLENGE)