RetroQUEST/scripts/libretro_loader.gd

60 lines
1.8 KiB
GDScript

extends Node
@onready var sub_viewport = $room/SubViewport
@onready var texture_rect = $room/SubViewport/TextureRect
func start_emulation(core_name: String, rom_path: String) -> bool:
print("[libretro_loader] Starting emulation with core: ", core_name, ", ROM: ", rom_path)
# Load the core
if not RetroHost.load_core(core_name):
push_error("[libretro_loader] Failed to load core: " + core_name)
return false
print("[libretro_loader] Core path: ", core_name)
print("[libretro_loader] Core loaded successfully.")
# Open the ROM file
var file = FileAccess.open(rom_path, FileAccess.READ)
if not file:
push_error("[libretro_loader] Failed to open ROM: " + rom_path)
return false
print("[libretro_loader] ROM path: ", rom_path)
var rom_data = file.get_buffer(file.get_length())
file.close()
print("[libretro_loader] ROM data loaded successfully.")
# Pass ROM data to the core using RetroHost
var game_info = {}
game_info["data"] = rom_data
game_info["size"] = rom_data.size()
if not RetroHost.load_game(game_info):
push_error("[libretro_loader] Failed to load ROM into the core.")
return false
print("[libretro_loader] Core and ROM loaded successfully.")
return true
func _process(delta):
"""
Run the core and update the framebuffer.
"""
RetroHost.run()
var frame_buffer = RetroHost.get_frame_buffer()
if frame_buffer:
var img_tex = ImageTexture.create_from_image(frame_buffer)
texture_rect.texture = img_tex
func _ready():
"""
Initialize and start emulation.
"""
print("[libretro_loader] _ready: Initializing...")
var success = start_emulation("genesis_plus_gx_libretro", "res://roms/megadrive/Sonic the Hedgehog.bin")
if success:
print("[libretro_loader] Emulation started successfully.")
else:
print("[libretro_loader] Failed to start emulation.")