diff --git a/.gitignore b/.gitignore
index b66269d0..89aa5abe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
downloaded-artifacts
*/artifacts
+archive_*/*/artifacts
.tmpfunc
*.log
_work
diff --git a/archive_later/ecwolf/component_functions.sh b/archive_later/ecwolf/component_functions.sh
index 3c0c309d..b44f947f 100755
--- a/archive_later/ecwolf/component_functions.sh
+++ b/archive_later/ecwolf/component_functions.sh
@@ -10,5 +10,30 @@ ecwolf_config_path="$XDG_CONFIG_HOME/ecwolf"
ecwolf_saves_path="$XDG_DATA_HOME/ecwolf/saves"
ecwolf_roms_path="$roms_path/wolf"
+_prepare_component::ecwolf() {
+ # Setting component name and path based on the directory name
+ component_name="$(basename "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")"
+ component_config="/app/retrodeck/components/$component_name/rd_config"
+ ecwolf_rd_cfg="$XDG_CONFIG_HOME/$component_name/ecwolf_rd.cfg"
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ log i "----------------------"
+ log i "Preparing $component_name"
+ log i "----------------------"
+
+ dir_prep "$saves_path/ecwolf" "$ecwolf_saves_path"
+ rm -vrf "$ecwolf_rd_cfg"
+ cp -v "$component_config/ecwolf_rd.cfg" "$ecwolf_rd_cfg"
+
+ fi
+
+ if [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves
+ log i "----------------------"
+ log i "Post-moving $component_name"
+ log i "----------------------"
+
+ dir_prep "$saves_path/ecwolf" "$ecwolf_saves_path"
+
+ fi
+}
diff --git a/archive_later/ecwolf/component_manifest.json b/archive_later/ecwolf/component_manifest.json
index 5a0d73e4..451038ee 100644
--- a/archive_later/ecwolf/component_manifest.json
+++ b/archive_later/ecwolf/component_manifest.json
@@ -8,6 +8,115 @@
"description": "ECWolf is a Wolfenstein 3D engine based of Wolf4SDL",
"component_type": "Engine",
"system": "wolf",
- "system_friendly_name": "ECWolf"
+ "system_friendly_name": "ECWolf",
+ "es_de_config": {
+ "es_find_rules": {
+ "emulators": [
+ {
+ "name": "ECWOLF",
+ "description": "ECWolf is a Wolfenstein 3D engine based of Wolf4SDL",
+ "rules": [
+ {
+ "type": "staticpath",
+ "entries": [
+ "%COMPONENT_PATH%/component_launcher.sh"
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "es_systems": [
+ {
+ "name": "wolf",
+ "fullname": "Wolfenstein 3D",
+ "path": "%ROMPATH%/wolf",
+ "extension": ".wolf",
+ "commands": [
+ {
+ "label": "ECWolf (Standalone)",
+ "command": "%EMULATOR_ECWOLF% %ROM%",
+ "priority": 50
+ }
+ ],
+ "platform": "wolf",
+ "theme": "wolf"
+ }
+ ]
+ },
+ "bios": [
+ {
+ "filename": "AUDIOHED.WL6",
+ "md5": "a41af25a2f193e7d4afbcc4301b3d1ce",
+ "system": "wolf3d",
+ "description": "Audio header file that indexes sound data",
+ "required": "required",
+ "paths": "$roms_path/wolf/*.wolf"
+ },
+ {
+ "filename": "AUDIOT.WL6",
+ "md5": "2385b488b18f8721633e5b2bdf054853",
+ "system": "wolf3d",
+ "description": "Contains digitized sound effects and AdLib audio data",
+ "required": "required",
+ "paths": "$roms_path/wolf/*.wolf"
+ },
+ {
+ "filename": "CONFIG.WL6",
+ "md5": "aa75133df873b660d2058425ca8539b3",
+ "system": "wolf3d",
+ "description": "Stores game configuration settings",
+ "required": "required",
+ "paths": "$roms_path/wolf/*.wolf"
+ },
+ {
+ "filename": "GAMEMAPS.WL6",
+ "md5": "a4e73706e100dc0cadfb02d23de46481",
+ "system": "wolf3d",
+ "description": "Contains all level map data",
+ "required": "required",
+ "paths": "$roms_path/wolf/*.wolf"
+ },
+ {
+ "filename": "MAPHEAD.WL6",
+ "md5": "b8d2a78bc7c50da7ec9ab1d94f7975e1",
+ "system": "wolf3d",
+ "description": "Map header information for level lookup",
+ "required": "required",
+ "paths": "$roms_path/wolf/*.wolf"
+ },
+ {
+ "filename": "VGADICT.WL6",
+ "md5": "dec8939cff5a4ec27ae7b43e8f52ec28",
+ "system": "wolf3d",
+ "description": "VGA graphics dictionary for decompression",
+ "required": "required",
+ "paths": "$roms_path/wolf/*.wolf"
+ },
+ {
+ "filename": "VGAGRAPH.WL6",
+ "md5": "8b40b5b785f898e229bf1c2f2e3ee003",
+ "system": "wolf3d",
+ "description": "Compressed graphics data (sprites, UI, textures)",
+ "required": "required",
+ "paths": "$roms_path/wolf/*.wolf"
+ },
+ {
+ "filename": "VGAHEAD.WL6",
+ "md5": "8e75e3ffb842ed3d08abe6ffea97b231",
+ "system": "wolf3d",
+ "description": "Header for VGA graphics data",
+ "required": "required",
+ "paths": "$roms_path/wolf/*.wolf"
+ },
+ {
+ "filename": "VSAP.WL6",
+ "md5": [ "b8ff4997461bafa5ef2a94c11f9de001", "a6d901dfb455dfac96db5e4705837cdb" ],
+ "system": "wolf3d",
+ "description": "Main asset container (sprites, walls, sounds)",
+ "required": "required",
+ "paths": "$roms_path/wolf/*.wolf"
+ }
+ ]
}
}
\ No newline at end of file
diff --git a/archive_later/ecwolf/component_prepare.sh b/archive_later/ecwolf/component_prepare.sh
deleted file mode 100755
index 27463f0a..00000000
--- a/archive_later/ecwolf/component_prepare.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-
-# Setting component name and path based on the directory name
-component_name="$(basename "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")"
-component_config="/app/retrodeck/components/$component_name/rd_config"
-ecwolf_rd_cfg="$XDG_CONFIG_HOME/$component_name/ecwolf_rd.cfg"
-
-if [[ "$action" == "reset" ]]; then # Run reset-only commands
- log i "----------------------"
- log i "Preparing $component_name"
- log i "----------------------"
-
- dir_prep "$saves_path/ecwolf" "$ecwolf_saves_path"
- rm -vrf "$ecwolf_rd_cfg"
- cp -v "$component_config/ecwolf_rd.cfg" "$ecwolf_rd_cfg"
-
-fi
-
-if [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves
- log i "----------------------"
- log i "Post-moving $component_name"
- log i "----------------------"
-
- dir_prep "$saves_path/ecwolf" "$ecwolf_saves_path"
-
-fi
diff --git a/archive_later/raze/component_functions.sh b/archive_later/raze/component_functions.sh
index cc1f786e..980f4fb6 100755
--- a/archive_later/raze/component_functions.sh
+++ b/archive_later/raze/component_functions.sh
@@ -1 +1,23 @@
-#!/bin/bash
\ No newline at end of file
+#!/bin/bash
+
+_prepare_component::raze() {
+ # Setting component name and path based on the directory name
+ component_name="$(basename "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")"
+ component_config="/app/retrodeck/components/$component_name/rd_config"
+
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ log i "----------------------"
+ log i "Preparing $component_name"
+ log i "----------------------"
+
+ create_dir "$XDG_CONFIG_HOME/raze"
+ create_dir "$XDG_DATA_HOME/raze/audio/soundfonts"
+ create_dir "$bios_path/raze"
+
+ cp -fvr "$component_config/raze.ini" "$XDG_CONFIG_HOME/raze"
+
+ sed -i "s#RETRODECKHOMEDIR#${rd_home_path}#g" "$XDG_CONFIG_HOME/raze/raze.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
+ sed -i "s#RETRODECKROMSDIR#${roms_path}#g" "$XDG_CONFIG_HOME/raze/raze.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
+ sed -i "s#RETRODECKSAVESDIR#${saves_path}#g" "$XDG_CONFIG_HOME/raze/raze.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
+ fi
+}
\ No newline at end of file
diff --git a/archive_later/raze/component_launcher.sh b/archive_later/raze/component_launcher.sh
index ecefbd06..35b91ee8 100755
--- a/archive_later/raze/component_launcher.sh
+++ b/archive_later/raze/component_launcher.sh
@@ -5,7 +5,7 @@ component_name="$(basename "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")"
component_path="$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd)"
# Set LD_LIBRARY_PATH
-export LD_LIBRARY_PATH="$component_path/lib:$ffmpeg_path/25.08:$rd_shared_libs:$rd_shared_libs/org.kde.Platform/6.10/:$rd_shared_libs/org.gnome.Platform/49/:$rd_shared_libs/org.freedesktop.Platform/25.08/:${DEFAULT_LD_LIBRARY_PATH}"
+export LD_LIBRARY_PATH="$component_path/lib:$ffmpeg_path/25.08:$rd_shared_libs:$rd_shared_libs/org.kde.Platform/6.10/:$rd_shared_libs/org.gnome.Platform/49/:$rd_shared_libs/org.freedesktop.Platform/25.08/:$rd_shared_libs/org.freedesktop.Platform/24.08/:${DEFAULT_LD_LIBRARY_PATH}"
export QT_PLUGIN_PATH="$rd_shared_libs/org.kde.Platform/6.10/plugins/:${QT_PLUGIN_PATH}"
export QT_QPA_PLATFORM_PLUGIN_PATH="$rd_shared_libs/org.kde.Platform/6.10/plugins/platforms/:${QT_QPA_PLATFORM_PLUGIN_PATH}"
@@ -15,4 +15,4 @@ log d "QT plugin path is: $QT_PLUGIN_PATH"
log d "QT QPA PLATFORM plugin path is: $QT_QPA_PLATFORM_PLUGIN_PATH"
# Launch
-exec "$component_path/bin/raze" "$@"
+exec "$component_path/bin/raze" +fluid_patchset "$component_path/raze/soundfonts/raze.sf2" "$@"
diff --git a/archive_later/raze/component_prepare.sh b/archive_later/raze/component_prepare.sh
deleted file mode 100755
index c19fa260..00000000
--- a/archive_later/raze/component_prepare.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-
-# Setting component name and path based on the directory name
-component_name="$(basename "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")"
-component_config="/app/retrodeck/components/$component_name/rd_config"
-
-if [[ "$action" == "reset" ]]; then # Run reset-only commands
- log i "----------------------"
- log i "Preparing $component_name"
- log i "----------------------"
-
- create_dir "$XDG_CONFIG_HOME/raze"
- create_dir "$XDG_DATA_HOME/raze/audio/soundfonts"
- create_dir "$bios_path/raze"
-
- cp -fvr "$component_config/raze.ini" "$XDG_CONFIG_HOME/raze"
-
- sed -i "s#RETRODECKHOMEDIR#${rd_home_path}#g" "$XDG_CONFIG_HOME/raze/raze.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
- sed -i "s#RETRODECKROMSDIR#${roms_path}#g" "$XDG_CONFIG_HOME/raze/raze.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
- sed -i "s#RETRODECKSAVESDIR#${saves_path}#g" "$XDG_CONFIG_HOME/raze/raze.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
-fi
diff --git a/archive_later/raze/component_recipe.json b/archive_later/raze/component_recipe.json
index 659cc954..f01a3526 100755
--- a/archive_later/raze/component_recipe.json
+++ b/archive_later/raze/component_recipe.json
@@ -52,11 +52,6 @@
"source": "$REPO_ROOT/$COMPONENT_NAME/component_recipe.json",
"dest": "$COMPONENT_ARTIFACT_ROOT"
},
- {
- "type": "file",
- "source": "$REPO_ROOT/$COMPONENT_NAME/component_prepare.sh",
- "dest": "$COMPONENT_ARTIFACT_ROOT"
- },
{
"type": "file",
"source": "$REPO_ROOT/$COMPONENT_NAME/component_update.sh",
diff --git a/archive_later/raze/rd_config/raze.ini b/archive_later/raze/rd_config/raze.ini
new file mode 100644
index 00000000..deceb2ed
--- /dev/null
+++ b/archive_later/raze/rd_config/raze.ini
@@ -0,0 +1,473 @@
+# This file was generated by Raze 1.11.0
+# These are the directories to automatically search for game data.
+# Each directory should be on a separate line, preceded by Path=
+[GameSearch.Directories]
+Path=$roms_path/raze
+Path=$XDG_CONFIG_HOME/raze
+Path=$PROGDIR
+Path=/app/retrodeck/components/raze
+
+# These are the directories to search for add-ons added with the -file
+# command line parameter, if they cannot be found with the path
+# as-is. Layout is the same as for GameSearch.Directories
+[FileSearch.Directories]
+Path=$roms_path/raze
+Path=$XDG_CONFIG_HOME/raze
+Path=$PROGDIR
+
+# These are the directories to search for soundfonts that let listed in the menu.
+# Layout is the same as for GameSearch.Directories
+[SoundfontSearch.Directories]
+Path=$roms_path/raze/soundfonts
+Path=$XDG_CONFIG_HOME/raze/soundfonts
+Path=$PROGDIR/soundfonts
+Path=/app/retrodeck/components/raze/soundfonts
+
+[GlobalSettings]
+I_FriendlyWindowTitle=1
+adl_chips_count=6
+adl_emulator_id=0
+adl_fullpan=true
+adl_run_at_pcm_rate=false
+adl_volume_model=0
+autoloadbrightmaps=true
+autoloadlights=true
+autoloadwidescreen=true
+autosavecount=4
+autosavenum=0
+cl_capfps=false
+cl_defaultconfiguration=0
+cl_gender=0
+cl_hudinterpolation=true
+cl_interpolate=true
+cl_loadingscreens=true
+cl_noexitscreens=false
+cl_nostartscreens=false
+cl_noturnscaling=false
+cl_showweapon=1
+cl_slopetilting=false
+cl_syncinput=false
+cl_viewtilting=0
+cl_viewtiltscale=1
+cl_weaponsway=true
+con_4bitansi=false
+con_buffersize=-1
+con_ctrl_d=
+con_notifylines=4
+con_printansi=true
+defaultiwad=
+developer=0
+disableautoload=false
+disableautosave=0
+duke_menufont=-1
+fluid_chorus=false
+fluid_chorus_depth=8
+fluid_chorus_level=1.2
+fluid_chorus_speed=0.3
+fluid_chorus_type=0
+fluid_chorus_voices=3
+fluid_gain=0.5
+fluid_interp=1
+fluid_lib=
+fluid_patchset=raze
+fluid_reverb=false
+fluid_reverb_damping=0.23
+fluid_reverb_level=0.57
+fluid_reverb_roomsize=0.61
+fluid_reverb_width=0.76
+fluid_samplerate=0
+fluid_threads=1
+fluid_voices=128
+gl_debug=false
+gl_debug_breakpoint=false
+gl_debug_level=0
+gl_dither_bpc=0
+gl_es=false
+gl_finishbeforeswap=false
+gl_fxaa=0
+gl_lens=false
+gl_lens_chromatic=1.12
+gl_lens_k=-0.12
+gl_lens_kcube=0.1
+gl_light_shadowmap=false
+gl_mask_sprite_threshold=0.5
+gl_mask_threshold=0.5
+gl_mirror_envmap=true
+gl_multisample=1
+gl_no_skyclear=false
+gl_pipeline_depth=0
+gl_plane_reflection=true
+gl_satformula=1
+gl_seamless=false
+gl_shadowmap_filter=1
+gl_shadowmap_quality=512
+gl_ssao=0
+gl_ssao_portals=1
+gl_ssao_strength=0.7
+gl_texture_filter=4
+gl_texture_filter_anisotropic=8
+gl_texture_hqresize_maxinputsize=512
+gl_texture_hqresize_mt_height=4
+gl_texture_hqresize_mt_width=16
+gl_texture_hqresize_multithread=true
+gl_texture_hqresize_targets=15
+gl_texture_hqresizemode=0
+gl_texture_hqresizemult=1
+gme_stereodepth=0
+gus_memsize=0
+gus_patchdir=
+hud_stats=0
+hw_hightile=true
+hw_models=false
+hw_shadeinterpolate=true
+hw_useindexedcolortextures=false
+i_discordrpc=false
+i_pauseinbackground=true
+i_soundinbackground=false
+in_mousemode=true
+inter_subtitles=false
+invertmouse=false
+invertmousex=false
+language=auto
+longsavemessages=false
+m_blockcontrollers=false
+m_cleanscale=false
+m_forward=1
+m_pitch=1
+m_sensitivity_x=2
+m_sensitivity_y=2
+m_show_backbutton=0
+m_showinputgrid=0
+m_side=1
+m_use_mouse=2
+m_yaw=1
+map_point_coordinates=true
+midi_config=
+midi_dmxgus=false
+midi_voices=32
+mod_autochip=false
+mod_autochip_scan_threshold=12
+mod_autochip_size_force=100
+mod_autochip_size_scan=500
+mod_dumb_mastervolume=1
+mod_interp=2
+mod_preferred_player=0
+mod_samplerate=0
+mod_volramp=2
+mouse_capturemode=1
+mus_calcgain=true
+mus_enabled=true
+mus_extendedlookup=false
+mus_usereplaygain=false
+opl_core=0
+opl_fullpan=true
+opl_numchips=2
+opn_chips_count=8
+opn_emulator_id=0
+opn_fullpan=true
+opn_run_at_pcm_rate=false
+os_isanyof=true
+png_gamma=0
+png_level=5
+queryiwad=true
+quicksavecount=4
+quicksavenum=0
+r_ambientlight=1
+r_drawweapon=1
+r_fov=90
+r_mirror_recursions=4
+r_multithreaded=1
+r_precache=true
+r_shadows=true
+r_skipmats=false
+r_spriteadjust=2
+r_ticstability=true
+save_dir=
+save_sort_order=0
+saveloadconfirmation=true
+savestatistics=0
+secret_notify=false
+showendoom=1
+silentmouseaimtoggle=false
+snd_aldevice=Default
+snd_alresampler=Default
+snd_ambience=true
+snd_backend=openal
+snd_buffersize=0
+snd_channels=128
+snd_efx=true
+snd_enabled=true
+snd_extendedlookup=false
+snd_hrtf=-1
+snd_mastervolume=1
+snd_mididevice=-5
+snd_midiprecache=false
+snd_musicvolume=0.5
+snd_reverb=true
+snd_samplerate=0
+snd_sfxvolume=1
+snd_streambuffersize=64
+snd_tryformats=true
+snd_waterreverb=true
+statfile=razestat.txt
+strictdecorate=false
+timidity_channel_pressure=false
+timidity_chorus=0
+timidity_config=raze
+timidity_drum_effect=false
+timidity_drum_power=1
+timidity_key_adjust=0
+timidity_lpf_def=1
+timidity_min_sustain_time=5000
+timidity_modulation_envelope=true
+timidity_modulation_wheel=true
+timidity_overlap_voice_allow=true
+timidity_pan_delay=false
+timidity_portamento=true
+timidity_reverb=0
+timidity_reverb_level=0
+timidity_surround_chorus=false
+timidity_temper_control=true
+timidity_tempo_adjust=1
+use_joystick=false
+use_mouse=true
+vid_activeinbackground=false
+vid_adapter=0
+vid_aspect=0
+vid_brightness=0
+vid_contrast=1
+vid_cropaspect=false
+vid_defheight=480
+vid_defwidth=640
+vid_dontdowait=false
+vid_fullscreen=true
+vid_gamma=1
+vid_hdr=false
+vid_maxfps=500
+vid_preferbackend=1
+vid_saturation=1
+vid_scale_customheight=400
+vid_scale_custompixelaspect=1
+vid_scale_customwidth=640
+vid_scale_linear=false
+vid_scalefactor=1
+vid_scalemode=0
+vid_sdl_render_driver=
+vid_vsync=false
+vk_debug=false
+vk_debug_callstack=true
+vk_device=0
+vk_exclusivefullscreen=false
+vk_hdr=false
+vk_raytrace=false
+vr_hunits_per_meter=41
+vr_ipd=0.062
+vr_mode=0
+vr_screendist=0.8
+vr_swap_eyes=false
+warningstoerrors=false
+wildmidi_config=
+wildmidi_enhanced_resampling=true
+wildmidi_reverb=false
+win_h=-1
+win_maximized=false
+win_w=-1
+win_x=-1
+win_y=-1
+wt_commentary=false
+wt_forcemidi=false
+wt_forcevoc=false
+xbrz_centerdirectionbias=4
+xbrz_colorformat=0
+xbrz_dominantdirectionthreshold=3.6
+xbrz_equalcolortolerance=30
+xbrz_luminanceweight=1
+xbrz_steepdirectionthreshold=2.2
+
+[GlobalSettings.Unknown]
+
+[.Player]
+cl_autoaim=1
+cl_weaponswitch=3
+combatmacro0=
+combatmacro1=
+combatmacro2=
+combatmacro3=
+combatmacro4=
+combatmacro5=
+combatmacro6=
+combatmacro7=
+combatmacro8=
+combatmacro9=
+playercolor=0
+playergender=0
+playername=RetroDECK
+rtsname=
+
+[.ConsoleVariables]
+adl_bank=14
+adl_custom_bank=
+adl_use_custom_bank=false
+adult_lockout=false
+althud_flashing=true
+am_followplayer=true
+am_linealpha=1
+am_linethickness=1
+am_nameontop=false
+am_onesidedcolor=aa aa aa
+am_ovonesidedcolor=aa aa aa
+am_ovplayercolor=aa aa aa
+am_ovtwosidedcolor=aa aa aa
+am_playercolor=aa aa aa
+am_rotate=true
+am_showlabel=false
+am_showtime=0
+am_showtotaltime=0
+am_textfont=false
+am_twosidedcolor=aa aa aa
+chat_substitution=false
+cl_automsg=false
+cl_autorun=true
+cl_autosave=true
+cl_autosavedeletion=true
+cl_bloodoldweapbalance=false
+cl_bloodqavinterp=true
+cl_bloodvanillabobbing=true
+cl_bloodvanillaenemies=false
+cl_bloodvanillaexplosions=false
+cl_bloodvanillarun=true
+cl_bloodweapinterp=false
+cl_clampedpitch=true
+cl_crosshair=true
+cl_dukepitchmode=7
+cl_exjumprebound=false
+cl_exvertpanscale=8
+cl_exviewbobheight=5
+cl_exviewbobspeed=4
+cl_idplayers=true
+cl_maxautosaves=8
+cl_maxdecalamount=1024
+cl_nomeleeblur=false
+cl_obituaries=true
+cl_resumesavegame=true
+cl_rrvehicletilting=false
+cl_runmode=false
+cl_showmagamt=false
+cl_sointerpolation=true
+cl_swsmoothsway=true
+cl_viewbob=1
+cl_viewhbob=true
+cl_viewvbob=true
+classic_scaling_factor=1
+classic_scaling_pixelaspect=1.2
+con_alpha=0.75
+con_centernotify=false
+con_notablist=false
+con_notify_advanced=false
+con_notifyscale=1
+con_notifytime=3
+con_pulsetext=false
+con_scale=0
+crosshair=0
+crosshaircolor=ff 00 00
+crosshairgrow=false
+crosshairhealth=2
+crosshairscale=0.5
+gl_aalines=false
+gl_bloom=false
+gl_bloom_amount=1.4
+gl_exposure_base=0.35
+gl_exposure_min=0.35
+gl_exposure_scale=1.3
+gl_exposure_speed=0.05
+gl_fogmode=2
+gl_menu_blur=-1
+gl_paltonemap_powtable=2
+gl_paltonemap_reverselookup=true
+gl_precache=false
+gl_scale_viewport=true
+gl_tonemap=0
+hud_althudscale=0
+hud_ammo_order=0
+hud_ammo_red=25
+hud_ammo_yellow=50
+hud_armor_green=100
+hud_armor_red=25
+hud_armor_yellow=50
+hud_aspectscale=true
+hud_berserk_health=true
+hud_bgstretch=false
+hud_ctf_vanilla=false
+hud_health_green=100
+hud_health_red=25
+hud_health_yellow=50
+hud_messages=true
+hud_position=false
+hud_powerupduration=true
+hud_scalefactor=1
+hud_showammo=2
+hud_showangles=false
+hud_showkills=true
+hud_showmapname=true
+hud_showscore=false
+hud_showsecrets=true
+hud_showstats=false
+hud_showtime=0
+hud_showtimestat=0
+hud_showweapons=true
+hud_size=5
+hud_statscale=0.5
+hud_textfont=false
+hud_timecolor=5
+hudcolor_ltim=8
+hudcolor_statnames=6
+hudcolor_stats=3
+hudcolor_time=6
+hudcolor_titl=10
+hudcolor_ttim=5
+hudcolor_xyco=3
+hw_2dmip=true
+hw_lightmode=0
+hw_weaponlight=8
+m_quickexit=false
+menu_sounds=true
+msg=0
+msg0color=11
+msg1color=5
+msg2color=2
+msg3color=3
+msg4color=3
+msgmidcolor=11
+msgmidcolor2=4
+mus_redbook=true
+nocheats=false
+opn_custom_bank=
+opn_use_custom_bank=false
+r_drawfuzz=1
+r_voxels=true
+safe_spritelist=false
+screenshot_dir=
+screenshotname=
+snd_menuvolume=0.6
+snd_pitched=false
+snd_speech=1
+sw_darts=false
+sw_ninjahack=false
+sw_nocenterview=false
+transsouls=0.75
+ui_screenborder_classic_scaling=true
+uiscale=0
+usermapfolder=
+vid_allowtrueultrawide=1
+
+[.VideoSettings]
+
+[.UnknownConsoleVariables]
+
+[.ConsoleAliases]
+
+[.Bindings]
+
+[.DoubleBindings]
+
+[.AutomapBindings]
diff --git a/archive_later/uzdoom/component_launcher.sh b/archive_later/uzdoom/component_launcher.sh
index b673b499..5c79e7a5 100755
--- a/archive_later/uzdoom/component_launcher.sh
+++ b/archive_later/uzdoom/component_launcher.sh
@@ -7,7 +7,7 @@ component_path="$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd)"
export LD_LIBRARY_PATH="$rd_shared_libs:${DEFAULT_LD_LIBRARY_PATH}"
export QT_PLUGIN_PATH="${QT_PLUGIN_PATH}"
export QT_QPA_PLATFORM_PLUGIN_PATH="${QT_QPA_PLATFORM_PLUGIN_PATH}"
-export DOOMWADDIR="$component_path/share/games/doom"
+export DOOMWADDIR="$component_path/share/games/uzdoom"
log i "RetroDECK is now launching $component_name"
log d "Library path is: $LD_LIBRARY_PATH"
diff --git a/archive_later/uzdoom/component_recipe.json b/archive_later/uzdoom/component_recipe.json
index 82acb1f1..2f61de5f 100644
--- a/archive_later/uzdoom/component_recipe.json
+++ b/archive_later/uzdoom/component_recipe.json
@@ -1,24 +1,25 @@
{
"uzdoom": [
{
- "source_url": "https://github.com/UZDoom/UZDoom/releases/download/{VERSION}/Linux-UZDoom-*.AppImage",
- "source_type": "github_release",
+ "source_url": "org.zdoom.UZDoom",
+ "source_type": "flatpak_id",
"version": "$UZDOOM_DESIRED_VERSION",
- "extraction_type": "appimage",
+ "dest": "user",
+ "extraction_type": "flatpak",
"assets": [
{
"type": "dir",
- "source": "usr/bin",
+ "source": "bin",
"dest": "bin"
},
{
"type": "dir",
- "source": "usr/share/doc/uzdoom/licenses",
+ "source": "share/licenses",
"dest": "doc"
},
{
"type": "dir",
- "source": "usr/share/games/uzdoom/",
+ "source": "share/games/uzdoom/",
"dest": "share/games/uzdoom/"
},
{
@@ -70,7 +71,7 @@
"libs": [
{
"library": "libzmusic.so.1",
- "source": "usr/lib/x86_64-linux-gnu/",
+ "source": "lib",
"dest": "shared-libs"
}
]
diff --git a/archive_later/uzdoom/component_update.sh b/archive_later/uzdoom/component_update.sh
index ddb42abd..333a50ca 100755
--- a/archive_later/uzdoom/component_update.sh
+++ b/archive_later/uzdoom/component_update.sh
@@ -5,8 +5,8 @@
#########################################################################
if [[ $(check_version_is_older_than "$version_being_updated" "0.10.1b") == "true" ]]; then
- if [ -d "$storage_path/uzdoom"]; then
- move "$storage_path/uzdoom" "$storage_path/doom/uzdoom"
+ if [ -d "$storage_path/gzdoom"]; then
+ move "$storage_path/gzdoom" "$storage_path/doom/uzdoom"
fi
if [ -d "$storage_path/gzdoom"]; then
move "$storage_path/gzdoom" "$storage_path/doom/uzdoom"
diff --git a/archive_later/uzdoom/rd_assets/uzdoom.sh b/archive_later/uzdoom/rd_assets/uzdoom.sh
index e3aaab4c..7ea67035 100755
--- a/archive_later/uzdoom/rd_assets/uzdoom.sh
+++ b/archive_later/uzdoom/rd_assets/uzdoom.sh
@@ -1,16 +1,42 @@
#!/bin/bash
+log d "RetroDECK Doom Parser booting..."
+
# Source the global.sh script if not already sourced
if [ -z "${GLOBAL_SOURCED+x}" ]; then
source /app/libexec/global.sh
fi
# Define the IWAD files list
-IWAD_FILES=("DOOM1.WAD" "DOOM.WAD" "DOOM2.WAD" "DOOM2F.WAD" "DOOM64.WAD" "TNT.WAD"
- "PLUTONIA.WAD" "HERETIC1.WAD" "HERETIC.WAD" "HEXEN.WAD" "HEXDD.WAD"
- "STRIFE0.WAD" "STRIFE1.WAD" "VOICES.WAD" "CHEX.WAD"
- "CHEX3.WAD" "HACX.WAD" "freedoom1.wad" "freedoom2.wad" "freedm.wad"
- "doom_complete.pk3"
+IWAD_FILES=(
+ "ACTION2.WAD" # Action Doom 2: Urban Brawl
+ "BLASPHEM.WAD" # Blasphemer
+ "CHEX.WAD" # Chex Quest
+ "CHEX3.WAD" # Chex Quest 3
+ "DELAWEARE.WAD" # Delaweare
+ "DOOM.WAD" # Doom shareware
+ "DOOM1.WAD" # Doom
+ "DOOM2.WAD" # Doom II: Hell on Earth
+ "DOOM2F.WAD" # Doom II French
+ "DOOM64.WAD" # Doom 64
+ "DOOM_COMPLETE.PK3" # WadSmoosh merged Doom
+ "FREEDOOM1.WAD" # Freedoom Phase 1
+ "FREEDOOM2.WAD" # Freedoom Phase 2
+ "FREEDM.WAD" # Freedoom Deathmatch
+ "HEXDD.WAD" # Hexen: Deathkings of the Dark Citadel
+ "HEXEN.WAD" # Hexen: Beyond Heretic
+ "HACX.WAD" # HACX
+ "HARM1.WAD" # Harmony
+ "HERETIC.WAD" # Heretic: Shadow of the Serpent Riders
+ "HERETIC1.WAD" # Heretic shareware
+ "PLUTONIA.WAD" # Plutonia Experiment
+ "ROTWB.WAD" # Rise Of The Wool Ball
+ "SQUARE1.PK3" # The Adventures of Square
+ "STRIFE0.WAD" # Strife shareware
+ "STRIFE1.WAD" # Strife
+ "TNT.WAD" # TNT: Evilution
+ "VOICES.WAD" # Strife Voices
+ "WADSMOOSH+.IPK3" # WadSmoosh+ merged Doom
)
# Get the directory where this script is located
@@ -23,7 +49,7 @@ uzdoom="$SCRIPT_DIR/uzdoom"
is_iwad() {
local file="$1"
local lowercase_file="$(basename "${file,,}")"
-
+
# Loop through the list of IWAD files
for iwad in "${IWAD_FILES[@]}"; do
# Check if the lowercase version of the IWAD file matches the input file
@@ -40,56 +66,125 @@ search_file_recursive() {
local file="$1"
local directory="$2"
local found_file=""
-
- # Check if the file exists in the current directory
+
+ # We'll try several places so this works when the DOOM folder is symlinked
+ # 1) $directory/$file
+ # 2) recursive find under $directory
+ # 3) script-level doom dir (relative to assets) recursive
+
+ # 0. normalize file name for case-insensitive search
+ local lowercase_file="$(echo "$file" | tr '[:upper:]' '[:lower:]')"
+
+ # Resolve directory symlinks (if the DOOM folder itself was symlinked)
+ if [[ -L "$directory" ]]; then
+ directory=$(readlink -f "$directory")
+ fi
+
+ # Try direct path first
if [[ -e "$directory/$file" ]]; then
# Resolve symlinks if the file is a symlink
found_file=$(readlink -f "$directory/$file")
- else
- # Search recursively
- local lowercase_file="$(echo "$file" | tr '[:upper:]' '[:lower:]')"
- found_file=$(find "$directory" -type f -iname "$lowercase_file" | head -n 1)
- if [[ -n "$found_file" ]]; then
- # Resolve symlinks if the file is a symlink
- found_file=$(readlink -f "$found_file")
+ echo "$found_file"
+ return
+ fi
+
+ # Try recursive find under provided directory (case-insensitive)
+ # Use the basename for recursive search, so entries listed as "subdir/name.wad"
+ # will still match files located below the given directory.
+ local base="$(basename "$file")"
+ # Collect all case-insensitive matches, prefer one whose basename equals requested basename exactly
+ mapfile -t matches < <(find "$directory" -type f -iname "$base" 2>/dev/null || true)
+ if [[ ${#matches[@]} -gt 0 ]]; then
+ # First try to find a case-sensitive basename match
+ found_file=""
+ for m in "${matches[@]}"; do
+ if [[ "$(basename "$m")" == "$base" ]]; then
+ found_file="$m"
+ break
+ fi
+ done
+ # Fallback to the first match if no exact-case match found
+ if [[ -z "$found_file" ]]; then
+ found_file="${matches[0]}"
fi
+ found_file=$(readlink -f "$found_file")
+ echo "$found_file"
+ return
fi
echo "$found_file"
}
# Main script
-log d "RetroDECK uzdoom wrapper init"
+log d "RetroDECK UZDOOM wrapper init"
-# Check if the filename contains a single quote
-if [[ "$1" == *"'"* ]]; then
- log e "Invalid filename: \"$1\" contains a single quote.\nPlease rename the file in a proper way before continuing."
- rd_zenity --error --no-wrap \
+# Check non-option arguments for a filename containing a single quote
+for a in "$@"; do
+ case "$a" in
+ +*|-) continue ;;
+ esac
+ if [[ "$a" == *"'"* ]]; then
+ log e "DOOM Invalid filename: \"$a\" contains a single quote.\nPlease rename the file in a proper way before continuing."
+ rd_zenity --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \
--text="Invalid filename\n\n\"$1\" contains a single quote.\nPlease rename the file properly before continuing."
exit 1
+ fi
+done
+
+# Determine if one of the arguments is a .doom file (we might be launched with +options first)
+doom_file=""
+for a in "$@"; do
+ # ignore option entries that start with '+' or '-'
+ case "$a" in
+ +*|-) continue ;;
+ esac
+ if [[ "${a##*.}" == "doom" ]]; then
+ doom_file="$a"
+ break
+ fi
+done
+
+# If a .doom file wasn't found yet, try to detect any provided candidate file arg (first non-option)
+target_arg=""
+for a in "$@"; do
+ case "$a" in
+ +*|-) continue ;;
+ esac
+ target_arg="$a"
+done
+
+# If no target was found, fall back to $1 to preserve legacy behavior
+if [[ -z "$target_arg" ]]; then
+ target_arg="$1"
fi
-# Check if $1 is not a .doom file
-if [[ "${1##*.}" != "doom" ]]; then
+# If the chosen target arg doesn't have the .doom extension, we take the non-doom path
+log d "Selected target: '$target_arg' (doom_file='$doom_file')"
+
+if [[ "${doom_file}" == "" && "${target_arg##*.}" != "doom" ]]; then
# Check if the file is in the IWAD list
- if [[ $(is_iwad "$1") == "true" ]]; then
- command="$uzdoom -config /var/config/uzdoom/uzdoom.ini -iwad \"$1\""
+ if [[ $(is_iwad "$target_arg") == "true" ]]; then
+ log d "iWAD found"
+ command="$uzdoom -config /var/config/uzdoom/uzdoom.ini -iwad \"$target_arg\""
else
- command="$uzdoom -config /var/config/uzdoom/uzdoom.ini -file \"$1\""
+ log d "WAD, IPK3 or PK3 file found"
+ command="$uzdoom -config /var/config/uzdoom/uzdoom.ini -file \"$target_arg\""
fi
# Log the command
- log i "Loading: \"$1\""
+ log i "Loading: \"$target_arg\""
log i "Executing command \"$command\""
# Execute the command with double quotes
eval "$command"
-# Check if $1 is a .doom file
-else
- doom_file="$1"
- log i "Found a doom file: \"$1\""
+# Check if a .doom file was found in arguments
+elif [[ -n "$doom_file" || "${target_arg##*.}" == "doom" ]]; then
+ if [[ -z "$doom_file" ]]; then
+ doom_file="$target_arg"
+ fi
+ log i "Found a doom file: \"$doom_file\""
# Check if the .doom file exists
if [[ ! -e "$doom_file" ]]; then
@@ -105,13 +200,26 @@ else
command="$uzdoom -config /var/config/uzdoom/uzdoom.ini"
while IFS= read -r line; do
+ # Trim leading/trailing whitespace
+ line="$(echo "$line" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
+
+ # Ignore empty lines and comment lines
+ if [[ -z "$line" || "${line:0:1}" == "#" ]]; then
+ continue
+ fi
+
+ # Remove surrounding quotes if present
+ if [[ "$line" =~ ^\".*\"$ ]]; then
+ line="${line:1:${#line}-2}"
+ fi
+
# Check if the line contains a single quote
if [[ "$line" == *"'"* ]]; then
- log e "Invalid filename: A file contained in \"$1\" contains a single quote"
+ log e "Invalid filename: A file contained in \"$doom_file\" contains a single quote"
rd_zenity --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK" \
- --text="Invalid filename\n\n\"$1\" contains a single quote.\nPlease rename the file properly before continuing in the .doom file."
+ --title "RetroDECK: DOOM - Warning: .doom file error" \
+ --text="Invalid filename\n\n\"$1\" contains a single quote.\nPlease rename the file properly in the .doom file before continuing."
exit 1
fi
@@ -120,22 +228,36 @@ else
# If the file is not found, exit with an error
if [[ -z "$found_file" ]]; then
- log "[ERROR] File not found: $line"
+ log "[ERROR] File not found in \"$line\""
rd_zenity --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK" \
- --text="File \"$line\" not found. Quitting."
+ --title "RetroDECK: DOOM - Warning: Not found" \
+ --text="File \"$line\" not found. Quitting."
exit 1
fi
- # Check if the file is an IWAD
- if [[ $(is_iwad "$found_file") == "true" ]]; then
- command+=" -iwad \"$found_file\""
- log i "Appending the param \"-iwad $found_file\""
- else
- command+=" -file \"$found_file\""
- log i "Appending the param \"-file $found_file\""
- fi
+ # Add param depending on file extension (.ini -> -cfg, iwads -> -iwad, others -> -file)
+ ext="${found_file##*.}"
+ ext_lc="${ext,,}"
+ case "$ext_lc" in
+ ini)
+ command+=" -cfg \"$found_file\""
+ log i "Appending the param \"-cfg $found_file\""
+ ;;
+ wad|pk3|ipk3)
+ if [[ $(is_iwad "$found_file") == "true" ]]; then
+ command+=" -iwad \"$found_file\""
+ log i "Appending the param \"-iwad $found_file\""
+ else
+ command+=" -file \"$found_file\""
+ log i "Appending the param \"-file $found_file\""
+ fi
+ ;;
+ *)
+ command+=" -file \"$found_file\""
+ log i "Appending the param \"-file $found_file\""
+ ;;
+ esac
done < "$doom_file"
# Log the command
diff --git a/automation-tools/alchemist/desired_versions.sh b/automation-tools/alchemist/desired_versions.sh
index 913d8a9a..a75610c5 100644
--- a/automation-tools/alchemist/desired_versions.sh
+++ b/automation-tools/alchemist/desired_versions.sh
@@ -108,8 +108,8 @@ export DESIRED_QT5_RUNTIME_VERSION="5.15-25.08"
# Link: https://flathub.org/en/apps/org.mamedev.MAME
# ------------------------------------------------------------------------------
# MAIN (Stable)
-# Version: 0.286
- export MAME_DESIRED_VERSION="a5f7ddbc14ffd38bd9bc09f60c73204cf9e64dd361666f0e59b3247eb2c23395"
+# Version: 0.287
+ export MAME_DESIRED_VERSION="3dbe7b7f802da3b0c1628d604bee9925d67174a5efb7e4ae2235266ce2946739"
# COOKER (Override)
# export MAME_DESIRED_VERSION="latest"
@@ -147,8 +147,8 @@ export DESIRED_QT5_RUNTIME_VERSION="5.15-25.08"
# Link: https://flathub.org/en/apps/net.rpcs3.RPCS3
# ------------------------------------------------------------------------------
# MAIN (Stable)
-# Version: 0.0.40-190
- export RPCS3_DESIRED_VERSION="bbfc8350f2e6e6e2eda3157f264486717ee68fe6f9d238d6ab46901d00c2d958"
+# Version: 0.0.40-191
+ export RPCS3_DESIRED_VERSION="0713512d383febae08dae58b6cc10eeb974d993e80765d94cabe9ee3e83416ca"
# COOKER (Override)
# export RPCS3_DESIRED_VERSION="latest"
@@ -160,8 +160,8 @@ export DESIRED_QT5_RUNTIME_VERSION="5.15-25.08"
# Link: https://flathub.org/en/apps/rs.ruffle.Ruffle
# ------------------------------------------------------------------------------
# MAIN (Stable)
-# Version: 0.2.0-nightly.2026.3.12
- export RUFFLE_DESIRED_VERSION="48a57600d24643d7267fe391177882376130654b588abafe1d31437f896b1488"
+# Version: 0.2.0-nightly.2026.4.9
+ export RUFFLE_DESIRED_VERSION="2b9a6e77082e1f8c97d0d39f71a2a2443ea08cc198139b068ec9c765d820378e"
# COOKER (Override)
# export RUFFLE_DESIRED_VERSION="latest"
@@ -244,7 +244,7 @@ export DESIRED_QT5_RUNTIME_VERSION="5.15-25.08"
# Link: https://gitlab.com/solarus-games/solarus/-/releases/
# ------------------------------------------------------------------------------
# MAIN (Stable)
- export SOLARUS_DESIRED_VERSION="v2.0.3"
+ export SOLARUS_DESIRED_VERSION="v2.0.4"
# COOKER (Override)
# export SOLARUS_DESIRED_VERSION="latest"
@@ -344,7 +344,7 @@ export DESIRED_QT5_RUNTIME_VERSION="5.15-25.08"
# Link: https://github.com/RetroDECK/Vita3K-bin/releases
# ------------------------------------------------------------------------------
# MAIN (Stable)
- export VITA3K_DESIRED_VERSION="3936"
+ export VITA3K_DESIRED_VERSION="3949"
# COOKER (Override)
# export VITA3K_DESIRED_VERSION="latest"
diff --git a/automation-tools/alchemist/lib/libs.sh b/automation-tools/alchemist/lib/libs.sh
index f39e988a..f6c80a58 100644
--- a/automation-tools/alchemist/lib/libs.sh
+++ b/automation-tools/alchemist/lib/libs.sh
@@ -99,6 +99,11 @@ gather_lib() {
fi
if [[ ! -e "$EXTRACTED_PATH/$source/$name" ]]; then
log error "Library $name not found at defined source $EXTRACTED_PATH/$source/$name"
+ local library_basename="${name%%.*}"
+ if [[ $(find "$EXTRACTED_PATH/$source" -iname "$library_basename"* ) ]]; then
+ log info "However, a file with a matching name was found. The source may need to be adjusted in the recipe file."
+ log info $(find "$EXTRACTED_PATH/$source" -iname "$library_basename"*)
+ fi
return 1
fi
final_source="$EXTRACTED_PATH/$source/$lib_basename"
diff --git a/retroarch/component_manifest.json b/retroarch/component_manifest.json
index 1de26783..ee32ae6b 100644
--- a/retroarch/component_manifest.json
+++ b/retroarch/component_manifest.json
@@ -3819,14 +3819,14 @@
},
{
"filename": "scummvm.zip",
- "md5": "a17e0e0150155400d8cced329563d9c8",
+ "md5": "368bdb1816a02640f873310faa9dedf7",
"system": "scummvm",
"description": "SCUMMVM Assets",
"required": "Yes, for RetroArch ScummVM Core"
},
{
"filename": "cpc464.rom",
- "md5": "a17e0e0150155400d8cced329563d9c8",
+ "md5": "a993f85b88ac4350cf4d41554e87fe4f",
"system": "amstradcpc",
"description": "Amstrad CPC 464 BIOS"
},
diff --git a/rpcs3/component_functions.sh b/rpcs3/component_functions.sh
index 8b55734f..f65eb7e9 100755
--- a/rpcs3/component_functions.sh
+++ b/rpcs3/component_functions.sh
@@ -8,7 +8,7 @@ rpcs3_gui_current_settings="$XDG_CONFIG_HOME/rpcs3/GuiConfigs/CurrentSettings.in
rpcs3_input_active_profiles="$XDG_CONFIG_HOME/rpcs3/input_configs/active_profiles.yml"
rpcs3_input_Default="$XDG_CONFIG_HOME/rpcs3/input_configs/global/Default.yml"
rpcs3_component_dir="$rd_components/rpcs3"
-rpcs3_firmware="http://dus01.ps3.update.playstation.net/update/ps3/image/us/2025_0305_c179ad173bbc08b55431d30947725a4b/PS3UPDAT.PUP"
+rpcs3_firmware="http://dus01.ps3.update.playstation.net/update/ps3/image/us/2026_0318_a2b60b6ac1d2e49e230144345616927c/PS3UPDAT.PUP"
update_rpcs3_firmware() {
if [[ $(check_network_connectivity) == "true" ]]; then
diff --git a/solarus/component_recipe.json b/solarus/component_recipe.json
index e9af471b..409d9b93 100755
--- a/solarus/component_recipe.json
+++ b/solarus/component_recipe.json
@@ -83,7 +83,7 @@
"dest": "shared-libs"
},
{
- "library": "libsolarus.so.2.0.3",
+ "library": "libsolarus.so.2.0.4",
"source": "usr/lib",
"dest": "shared-libs"
},