Make hot reloading ROMs actually work on the web build with battle_sprites

This commit is contained in:
Luke Hubmayer-Werner 2024-07-08 16:55:53 +09:30
parent 80d65d2a76
commit 9dfa0b1ec7
6 changed files with 40 additions and 13 deletions

View File

@ -69,7 +69,9 @@ func _on_loader_loading_stage_updated(stage: String, loader: String) -> void:
#print(Time.get_time_string_from_system() + ' ' + output)
print('@%dms - %s' % [Time.get_ticks_msec() - load_start_tick, output])
emit_signal('loading_stage_updated', output)
yield(get_tree(), 'idle_frame')
var scenetree := get_tree()
if scenetree:
yield(scenetree, 'idle_frame')
func _load_snes_audio(data_and_buffer: Array):
yield(_on_loader_loading_stage_updated('Loading sound samples and music data', 'SoundLoader'), 'completed')
@ -91,8 +93,10 @@ func load_snes_rom_from_bytes(bytes: PoolByteArray) -> void:
else:
yield(self._load_snes_audio([self.snes_data, self.snes_buffer]), 'completed')
yield(_on_loader_loading_stage_updated('Loading strings', 'StringLoader'), 'completed')
StringLoader.connect('loading_stage_updated', self, '_on_loader_loading_stage_updated', ['StringLoader'])
yield(StringLoader.load_snes_rom(self.snes_buffer, true), 'completed')
SpriteLoader.reset()
yield(_on_loader_loading_stage_updated('Loading sprites', 'SpriteLoader'), 'completed')
SpriteLoader.load_from_structs(self.snes_data)
yield(_on_loader_loading_stage_updated('Loading enemy battle sprites', 'SpriteLoader'), 'completed')
@ -141,6 +145,7 @@ func _ready():
STRUCT.parse_struct_definitions_from_tsv_filename('res://data/5/structs/SNES_save.tsv', structdefs)
STRUCT.parse_struct_definitions_from_tsv_filename('res://data/5/structs/SNES.tsv', structdefs)
var _error := psx_productcode_regex.compile('(S[A-Z]{3}_\\d{3}\\.\\d{2});(\\d)')
StringLoader.connect('loading_stage_updated', self, '_on_loader_loading_stage_updated', ['StringLoader'])
# Debugging breakpoint
pass

View File

@ -44,6 +44,11 @@ var font_atlas_image: Image
var font_atlas_texture: ImageTexture
var font: BitmapFont
var strip_images = []
var strip_textures = []
var battle_backgrounds := []
var character_status_palette_replacements = {
'poison': {4: '$7EDB = #DEB5FF', 8: '$4DD3 = #9C739C'}, # Also kneel
'zombie': {3: '$7FFF = #FFFFFF', 4: '$3AF5 = #ADBD73', 8: '$3210 = #848463'}, # Also kneel in menu
@ -318,7 +323,6 @@ class BattleBackground:
var tile_atlas_images: Array
var tile_atlas_texs: Array
var battle_backgrounds := []
func load_battle_bgs(data: Dictionary, buffer: StreamPeerBuffer):
var bg_palettes = data.battle_background_palettes
for map in snes_battle_bgs.get_all_battle_background_tilemaps(buffer, data):
@ -516,7 +520,18 @@ func load_gba_rom(filename: String):
# character_battle_sprite_palette_stone_texture = texture_from_image(generate_palette(rom, offset_Character_Battle_Sprite_Stone_Palette))
var strip_images = []
var strip_textures = []
# func _ready():
#pass
func reset() -> void:
# Clean out old arrays in case we are loading another ROM
worldmap_palette_imgs.clear()
worldmap_palette_textures.clear()
worldmap_tile_individual_imgs.clear()
worldmap_tile_atlas_textures.clear()
worldmap_block_tile_ids.clear()
worldmap_block_individual_imgs.clear()
worldmap_block_individual_textures.clear()
worldmap_block_atlas_imgs.clear()
worldmap_block_atlas_textures.clear()
battle_backgrounds.clear()
character_battle_sprite_palette_textures.clear()
strip_images.clear()
strip_textures.clear()

View File

@ -102,7 +102,9 @@ func load_snes_rom(buffer: StreamPeerBuffer, is_RPGe: bool = false) -> void:
emit_signal('loading_stage_updated', 'load_snes_rom called')
for block_name in SNES_block_addresses:
emit_signal('loading_stage_updated', 'Loading string block "%s"'%block_name)
yield(get_tree(), 'idle_frame')
var scenetree := get_tree()
if scenetree:
yield(scenetree, 'idle_frame')
self._load_block(block_name, buffer, is_RPGe)
func get_ability_name(id: int) -> String:

View File

@ -9,7 +9,8 @@ func initialize() -> void:
# Clean up any existing
for scn in PCs:
remove_child(scn)
PCs = []
PCs.clear()
print('Initializing battle sprites debug scene')
# Make new sprites
var strips = len(SpriteLoader.strip_textures) # * 4 / 5

View File

@ -118,10 +118,12 @@ func load_file(filename: String, full_path: bool = false):
var ext := full_filename.rsplit('/', true, 1)[1].rsplit('.', true, 1)[1].to_lower()
match ext:
'sfc', 'smc':
if current_mode == SELECT_ROM:
if true: # current_mode == SELECT_ROM:
splash_filter.visible = true
splash_label.text = 'Loading ROM: %s'%full_filename
yield(get_tree(), 'idle_frame')
var scenetree := get_tree()
if scenetree:
yield(scenetree, 'idle_frame')
RomLoader.load_snes_rom(full_filename)
'srm':
if current_mode == SELECT_ROM:

View File

@ -75,10 +75,12 @@ func load_file(entry: String):
var ext = entry.rsplit('.', true, 1)[1].to_lower()
match ext:
'sfc', 'smc':
if current_mode == SELECT_ROM:
if true: # current_mode == SELECT_ROM:
splash_filter.visible = true
splash_label.text = 'Loading ROM: %s'%filename
yield(get_tree(), 'idle_frame')
var scenetree := get_tree()
if scenetree:
yield(scenetree, 'idle_frame')
RomLoader.load_snes_rom_from_bytes(uploaded_files[entry])
'srm':
if current_mode != SELECT_ROM: