RomVerifier.gd 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. class_name ROMVerifier
  2. extends Node
  3. const VALID_HASH := "c9b34443c0414f3b91ef496d8cfee9fdd72405d673985afa11fb56732c96152b"
  4. func _ready() -> void:
  5. Global.get_node("GameHUD").hide()
  6. get_window().files_dropped.connect(on_file_dropped)
  7. await get_tree().physics_frame
  8. DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
  9. DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false)
  10. func on_file_dropped(files: PackedStringArray) -> void:
  11. for i in files:
  12. if is_valid_rom(i):
  13. Global.rom_path = i
  14. verified()
  15. copy_rom(i)
  16. return
  17. error()
  18. func copy_rom(file_path := "") -> void:
  19. DirAccess.copy_absolute(file_path, Global.ROM_PATH)
  20. static func get_hash(file_path := "") -> String:
  21. var file_bytes = FileAccess.open(file_path, FileAccess.READ).get_buffer(40976)
  22. var data = file_bytes.slice(16)
  23. return Marshalls.raw_to_base64(data).sha256_text()
  24. static func is_valid_rom(rom_path := "") -> bool:
  25. return get_hash(rom_path) == VALID_HASH
  26. func error() -> void:
  27. %Error.show()
  28. $ErrorSFX.play()
  29. func verified() -> void:
  30. $BGM.queue_free()
  31. %DefaultText.queue_free()
  32. %SuccessMSG.show()
  33. $SuccessSFX.play()
  34. await get_tree().create_timer(3, false).timeout
  35. if not Global.rom_assets_exist:
  36. Global.transition_to_scene("res://Scenes/Levels/RomResourceGenerator.tscn")
  37. else:
  38. Global.transition_to_scene("res://Scenes/Levels/TitleScreen.tscn")
  39. func _exit_tree() -> void:
  40. Global.get_node("GameHUD").show()
  41. func create_file_pointer(file_path := "") -> void:
  42. var pointer = FileAccess.open(Global.ROM_POINTER_PATH, FileAccess.WRITE)
  43. pointer.store_string(file_path)
  44. pointer.close()