https://gitlab.synchro.net/main/sbbs/-/commit/a2047e6cd3c9a069b616b31c
Added Files:
src/doors/syncrpg/.gitignore CMakeLists.txt PROVENANCE.md README.md build.sh deploy.js src/doors/syncrpg/door/CMakeLists.txt audio_term.cpp audio_term.h input_term.cpp input_term.h syncrpg.cpp ui_term.cpp ui_term.h video_term.cpp video_term.h src/doors/syncrpg/easyrpg/.editorconfig .gitattributes .gitignore .gitmodules CMakeLists.txt CMakePresets.json COPYING README.md src/doors/syncrpg/easyrpg/builds/cmake/.git-hash CMakePresets.json.template CMakePresetsBase.json CMakePresetsUser.json LinuxToolchain.cmake src/doors/syncrpg/easyrpg/builds/cmake/Modules/FindFluidLite.cmake FindFluidSynth.cmake FindOpusFile.cmake FindPixman.cmake FindSDL1.cmake FindSDL2.cmake FindSamplerate.cmake FindSndFile.cmake FindTremor.cmake FindVTune.cmake FindVorbis.cmake FindWildMidi.cmake FindXMP.cmake Findfreetype.cmake Findharfbuzz.cmake Findlhasa.cmake Findmpg123.cmake Findspeexdsp.cmake GetGitRevisionDescription.cmake GetGitRevisionDescription.cmake.in PlayerBuildType.cmake PlayerConfigureWindows.cmake PlayerFindPackage.cmake PlayerMisc.cmake src/doors/syncrpg/easyrpg/builds/cmake/gen-cmake-presets.py src/doors/syncrpg/easyrpg/configure src/doors/syncrpg/easyrpg/lib/inih/LICENSE.txt ini.c ini.h src/doors/syncrpg/easyrpg/lib/liblcf/.editorconfig .gitattributes .gitignore AUTHORS.md CMakeLists.txt CMakePresets.json COPYING Makefile.am README.md src/doors/syncrpg/easyrpg/lib/liblcf/builds/cmake/CMakePresets.json.template CMakePresetsBase.json CMakePresetsUser.json LinuxToolchain.cmake src/doors/syncrpg/easyrpg/lib/liblcf/builds/cmake/Modules/ConfigureWindows.cmake Findinih.cmake MiscUtils.cmake src/doors/syncrpg/easyrpg/lib/liblcf/builds/cmake/gen-cmake-presets.py liblcf-config.cmake.in src/doors/syncrpg/easyrpg/lib/liblcf/builds/config.h.in liblcf.pc.in src/doors/syncrpg/easyrpg/lib/liblcf/configure.ac src/doors/syncrpg/easyrpg/lib/liblcf/src/dbarray.cpp dbstring_struct.cpp encoder.cpp src/doors/syncrpg/easyrpg/lib/liblcf/src/generated/fwd_flags_impl.h fwd_flags_instance.h fwd_struct_impl.h src/doors/syncrpg/easyrpg/lib/liblcf/src/generated/lcf/ldb/chunks.h src/doors/syncrpg/easyrpg/lib/liblcf/src/generated/lcf/lmt/chunks.h src/doors/syncrpg/easyrpg/lib/liblcf/src/generated/lcf/lmu/chunks.h src/doors/syncrpg/easyrpg/lib/liblcf/src/generated/lcf/lsd/chunks.h src/doors/syncrpg/easyrpg/lib/liblcf/src/generated/lcf/rpg/actor.h animation.h animationcelldata.h animationframe.h animationtiming.h attribute.h battlecommand.h battlecommands.h battleranimation.h battleranimationitemskill.h battleranimationpose.h battleranimationweapon.h chipset.h class.h commonevent.h database.h encounter.h enemy.h enemyaction.h equipment.h event.h eventcommand.h eventpage.h eventpagecondition.h fwd.h item.h learning.h map.h mapinfo.h movecommand.h moveroute.h music.h parameters.h rect.h save.h saveactor.h savecommonevent.h saveeasyrpgdata.h saveeasyrpgtext.h saveeasyrpgwindow.h saveeventexecframe.h saveeventexecstate.h saveinventory.h savemapevent.h savemapeventbase.h savemapinfo.h savepanorama.h savepartylocation.h savepicture.h savescreen.h savesystem.h savetarget.h savetitle.h savevehiclelocation.h skill.h sound.h start.h state.h stringvariable.h switch.h system.h terms.h terrain.h testbattler.h treemap.h troop.h troopmember.h trooppage.h trooppagecondition.h variable.h src/doors/syncrpg/easyrpg/lib/liblcf/src/generated/ldb_actor.cpp ldb_animation.cpp ldb_animationcelldata.cpp ldb_animationframe.cpp ldb_animationtiming.cpp ldb_attribute.cpp ldb_battlecommand.cpp ldb_battlecommands.cpp ldb_battleranimation.cpp ldb_battleranimationitemskill.cpp ldb_battleranimationpose.cpp ldb_battleranimationweapon.cpp ldb_chipset.cpp ldb_class.cpp ldb_commonevent.cpp ldb_database.cpp ldb_enemy.cpp ldb_enemyaction.cpp ldb_item.cpp ldb_learning.cpp ldb_music.cpp ldb_skill.cpp ldb_sound.cpp ldb_state.cpp ldb_stringvariable.cpp ldb_switch.cpp ldb_system.cpp ldb_terms.cpp ldb_terrain.cpp ldb_terrain_special_flags.h ldb_testbattler.cpp ldb_troop.cpp ldb_troopmember.cpp ldb_trooppage.cpp ldb_trooppagecondition.cpp ldb_trooppagecondition_flags.h ldb_variable.cpp lmt_encounter.cpp lmt_mapinfo.cpp lmt_start.cpp lmu_event.cpp lmu_eventpage.cpp lmu_eventpagecondition.cpp lmu_eventpagecondition_flags.h lmu_map.cpp lmu_moveroute.cpp lsd_save.cpp lsd_saveactor.cpp lsd_savecommonevent.cpp lsd_saveeasyrpgdata.cpp lsd_saveeasyrpgtext.cpp lsd_saveeasyrpgtext_flags.h lsd_saveeasyrpgwindow.cpp lsd_saveeasyrpgwindow_flags.h lsd_saveeventexecframe.cpp lsd_saveeventexecframe_easyrpg_runtime_flags.h lsd_saveeventexecstate.cpp lsd_saveeventexecstate_easyrpg_runtime_flags.h lsd_saveinventory.cpp lsd_savemapevent.cpp lsd_savemapeventbase.cpp lsd_savemapeventbase_easyrpg_runtime_flags.h lsd_savemapinfo.cpp lsd_savepanorama.cpp lsd_savepartylocation.cpp lsd_savepicture.cpp lsd_savepicture_flags.h lsd_savescreen.cpp lsd_savesystem.cpp lsd_savesystem_maniac_message_hook_flags.h lsd_savetarget.cpp lsd_savetitle.cpp lsd_savevehiclelocation.cpp rpg_actor.cpp rpg_animation.cpp rpg_animationcelldata.cpp rpg_animationframe.cpp rpg_animationtiming.cpp rpg_attribute.cpp rpg_battlecommand.cpp rpg_battlecommands.cpp rpg_battleranimation.cpp rpg_battleranimationitemskill.cpp rpg_battleranimationpose.cpp rpg_battleranimationweapon.cpp rpg_chipset.cpp rpg_class.cpp rpg_commonevent.cpp rpg_database.cpp rpg_encounter.cpp rpg_enemy.cpp rpg_enemyaction.cpp rpg_equipment.cpp rpg_event.cpp rpg_eventcommand.cpp rpg_eventpage.cpp rpg_eventpagecondition.cpp rpg_item.cpp rpg_learning.cpp rpg_map.cpp rpg_mapinfo.cpp rpg_movecommand.cpp rpg_moveroute.cpp rpg_music.cpp rpg_parameters.cpp rpg_rect.cpp rpg_save.cpp rpg_saveactor.cpp rpg_savecommonevent.cpp rpg_saveeasyrpgdata.cpp rpg_saveeasyrpgtext.cpp rpg_saveeasyrpgwindow.cpp rpg_saveeventexecframe.cpp rpg_saveeventexecstate.cpp rpg_saveinventory.cpp rpg_savemapevent.cpp rpg_savemapeventbase.cpp rpg_savemapinfo.cpp rpg_savepanorama.cpp rpg_savepartylocation.cpp rpg_savepicture.cpp rpg_savescreen.cpp rpg_savesystem.cpp rpg_savetarget.cpp rpg_savetitle.cpp rpg_savevehiclelocation.cpp rpg_skill.cpp rpg_sound.cpp rpg_start.cpp rpg_state.cpp rpg_stringvariable.cpp rpg_switch.cpp rpg_system.cpp rpg_terms.cpp rpg_terrain.cpp rpg_testbattler.cpp rpg_treemap.cpp rpg_troop.cpp rpg_troopmember.cpp rpg_trooppage.cpp rpg_trooppagecondition.cpp rpg_variable.cpp src/doors/syncrpg/easyrpg/lib/liblcf/src/inireader.cpp src/doors/syncrpg/easyrpg/lib/liblcf/src/lcf/context.h dbarray.h dbarrayalloc.h dbbitarray.h dbstring.h encoder.h enum_tags.h flag_set.h inireader.h src/doors/syncrpg/easyrpg/lib/liblcf/src/lcf/ldb/reader.h src/doors/syncrpg/easyrpg/lib/liblcf/src/lcf/lmt/reader.h src/doors/syncrpg/easyrpg/lib/liblcf/src/lcf/lmu/reader.h src/doors/syncrpg/easyrpg/lib/liblcf/src/lcf/log_handler.h src/doors/syncrpg/easyrpg/lib/liblcf/src/lcf/lsd/reader.h src/doors/syncrpg/easyrpg/lib/liblcf/src/lcf/reader_lcf.h reader_util.h reader_xml.h saveopt.h scope_guard.h span.h string_view.h src/doors/syncrpg/easyrpg/lib/liblcf/src/lcf/third_party/span.h src/doors/syncrpg/easyrpg/lib/liblcf/src/lcf/writer_lcf.h writer_xml.h src/doors/syncrpg/easyrpg/lib/liblcf/src/ldb_equipment.cpp ldb_eventcommand.cpp ldb_parameters.cpp ldb_reader.cpp lmt_reader.cpp lmt_rect.cpp lmt_treemap.cpp lmu_movecommand.cpp lmu_reader.cpp log.h log_handler.cpp lsd_reader.cpp reader_flags.cpp reader_lcf.cpp reader_struct.h reader_struct_impl.h reader_util.cpp reader_xml.cpp rpg_setup.cpp rpg_terms.cpp saveopt.cpp writer_lcf.cpp writer_xml.cpp src/doors/syncrpg/easyrpg/src/algo.cpp algo.h async_handler.cpp async_handler.h async_op.h attribute.cpp attribute.h audio.cpp audio.h audio_decoder.cpp audio_decoder.h audio_decoder_base.cpp audio_decoder_base.h audio_decoder_midi.cpp audio_decoder_midi.h audio_generic.cpp audio_generic.h audio_generic_midiout.cpp audio_generic_midiout.h audio_midi.cpp audio_midi.h audio_resampler.cpp audio_resampler.h audio_secache.cpp audio_secache.h autobattle.cpp autobattle.h background.cpp background.h baseui.cpp baseui.h battle_animation.cpp battle_animation.h bitmap.cpp bitmap.h bitmap_hslrgb.h bitmapfont.h bitmapfont_glyph.h cache.cpp cache.h callback.h cmdline_parser.cpp cmdline_parser.h color.h compiler.h config_param.h decoder_drwav.cpp decoder_drwav.h decoder_fluidsynth.cpp decoder_fluidsynth.h decoder_fmmidi.cpp decoder_fmmidi.h decoder_libsndfile.cpp decoder_libsndfile.h decoder_mpg123.cpp decoder_mpg123.h decoder_oggvorbis.cpp decoder_oggvorbis.h decoder_opus.cpp decoder_opus.h decoder_wildmidi.cpp decoder_wildmidi.h decoder_xmp.cpp decoder_xmp.h default_graphics.h directory_tree.cpp directory_tree.h docmain.h drawable.cpp drawable.h drawable_list.cpp drawable_list.h drawable_mgr.cpp drawable_mgr.h dynrpg_easyrpg.cpp dynrpg_easyrpg.h dynrpg_textplugin.cpp dynrpg_textplugin.h enemyai.cpp enemyai.h exe_reader.cpp exe_reader.h exfont.h src/doors/syncrpg/easyrpg/src/external/dr_wav.h src/doors/syncrpg/easyrpg/src/feature.cpp feature.h fileext_guesser.cpp fileext_guesser.h filefinder.cpp filefinder.h filefinder_rtp.cpp filefinder_rtp.h filesystem.cpp filesystem.h filesystem_hook.cpp filesystem_hook.h filesystem_lzh.cpp filesystem_lzh.h filesystem_native.cpp filesystem_native.h filesystem_root.cpp filesystem_root.h filesystem_stream.cpp filesystem_stream.h filesystem_tar.cpp filesystem_tar.h filesystem_zip.cpp filesystem_zip.h flash.h flat_map.h font.cpp font.h fps_overlay.cpp fps_overlay.h frame.cpp frame.h game_actor.cpp game_actor.h game_actors.cpp game_actors.h game_battle.cpp game_battle.h game_battlealgorithm.cpp game_battlealgorithm.h game_battler.cpp game_battler.h game_character.cpp game_character.h game_clock.cpp game_clock.h game_commonevent.cpp game_commonevent.h game_config.cpp game_config.h game_config_game.cpp game_config_game.h game_constants.cpp game_constants.h game_destiny.cpp game_destiny.h game_dynrpg.cpp game_dynrpg.h game_enemy.cpp game_enemy.h game_enemyparty.cpp game_enemyparty.h game_event.cpp game_event.h game_ineluki.cpp game_ineluki.h game_interpreter.cpp game_interpreter.h game_interpreter_battle.cpp game_interpreter_battle.h game_interpreter_control_variables.cpp game_interpreter_control_variables.h game_interpreter_debug.cpp game_interpreter_debug.h game_interpreter_map.cpp game_interpreter_map.h game_interpreter_shared.cpp game_interpreter_shared.h game_map.cpp game_map.h game_message.cpp game_message.h game_message_terms.cpp game_message_terms.h game_party.cpp game_party.h game_party_base.cpp game_party_base.h game_pictures.cpp game_pictures.h game_player.cpp game_player.h game_quit.cpp game_quit.h game_runtime_patches.cpp game_runtime_patches.h game_screen.cpp game_screen.h game_strings.cpp game_strings.h game_switches.cpp game_switches.h game_system.cpp game_system.h game_targets.cpp game_targets.h game_variables.cpp game_variables.h game_vehicle.cpp game_vehicle.h game_windows.cpp game_windows.h src/doors/syncrpg/easyrpg/src/generated/bitmapfont_baekmuk.h bitmapfont_rmg2000.h bitmapfont_ttyp0.h bitmapfont_wqy.h logo.h logo2.h shinonome_gothic.h shinonome_mincho.h src/doors/syncrpg/easyrpg/src/graphics.cpp graphics.h hslrgb.cpp hslrgb.h icon.h image_bmp.cpp image_bmp.h image_png.cpp image_png.h image_xyz.cpp image_xyz.h input.cpp input.h input_buttons.h input_buttons_desktop.cpp input_source.cpp input_source.h instrumentation.cpp instrumentation.h json_helper.cpp json_helper.h keys.h src/doors/syncrpg/easyrpg/src/lcf/data.h src/doors/syncrpg/easyrpg/src/lcf_data.cpp main_data.cpp main_data.h maniac_patch.cpp maniac_patch.h map_data.h memory_management.h message_overlay.cpp message_overlay.h meta.cpp meta.h midiprogram.h midisequencer.cpp midisequencer.h midisynth.cpp midisynth.h opacity.h options.h output.cpp output.h pending_message.cpp pending_message.h pixel_format.h pixman_image_ptr.h plane.cpp plane.h platform.cpp platform.h src/doors/syncrpg/easyrpg/src/platform/clock.h src/doors/syncrpg/easyrpg/src/platform/sdl/axis.h main.cpp sdl2_audio.cpp sdl2_audio.h sdl2_ui.cpp sdl2_ui.h sdl3_audio.cpp sdl3_audio.h sdl3_ui.cpp sdl3_ui.h sdl_audio.cpp sdl_audio.h sdl_ui.cpp sdl_ui.h src/doors/syncrpg/easyrpg/src/player.cpp player.h point.h rand.cpp rand.h rect.cpp rect.h registry.cpp registry.h registry_wine.cpp rtp.cpp rtp.h rtp_table.cpp scene.cpp scene.h scene_actortarget.cpp scene_actortarget.h scene_battle.cpp scene_battle.h scene_battle_rpg2k.cpp scene_battle_rpg2k.h scene_battle_rpg2k3.cpp scene_battle_rpg2k3.h scene_debug.cpp scene_debug.h scene_end.cpp scene_end.h scene_equip.cpp scene_equip.h scene_file.cpp scene_file.h scene_gamebrowser.cpp scene_gamebrowser.h scene_gameover.cpp scene_gameover.h scene_import.cpp scene_import.h scene_item.cpp scene_item.h scene_language.cpp scene_language.h scene_load.cpp scene_load.h scene_logo.cpp scene_logo.h scene_map.cpp scene_map.h scene_menu.cpp scene_menu.h scene_name.cpp scene_name.h scene_order.cpp scene_order.h scene_save.cpp scene_save.h scene_settings.cpp scene_settings.h scene_shop.cpp scene_shop.h scene_skill.cpp scene_skill.h scene_status.cpp scene_status.h scene_teleport.cpp scene_teleport.h scene_title.cpp scene_title.h screen.cpp screen.h shake.h span.h sprite.cpp sprite.h sprite_actor.cpp sprite_actor.h sprite_airshipshadow.cpp sprite_airshipshadow.h sprite_battler.cpp sprite_battler.h sprite_character.cpp sprite_character.h sprite_enemy.cpp sprite_enemy.h sprite_picture.cpp sprite_picture.h sprite_timer.cpp sprite_timer.h sprite_weapon.cpp sprite_weapon.h spriteset_battle.cpp spriteset_battle.h spriteset_map.cpp spriteset_map.h state.cpp state.h std_clock.h string_view.cpp string_view.h system.h teleport_target.h text.cpp text.h tilemap.cpp tilemap.h tilemap_layer.cpp tilemap_layer.h tone.h transform.h transition.cpp transition.h translation.cpp translation.h util_macro.h utils.cpp utils.h version.cpp version.h weather.cpp weather.h window.cpp window.h window_about.cpp window_about.h window_actorinfo.cpp window_actorinfo.h window_actorsp.cpp window_actorsp.h window_actorstatus.cpp window_actorstatus.h window_actortarget.cpp window_actortarget.h window_base.cpp window_base.h window_battlemessage.cpp window_battlemessage.h window_battlestatus.cpp window_battlestatus.h window_command.cpp window_command.h window_command_horizontal.cpp window_command_horizontal.h window_equip.cpp window_equip.h window_equipitem.cpp window_equipitem.h window_equipstatus.cpp window_equipstatus.h window_face.cpp window_face.h window_gamelist.cpp window_gamelist.h window_gold.cpp window_gold.h window_help.cpp window_help.h window_import_progress.cpp window_import_progress.h window_input_settings.cpp window_input_settings.h window_interpreter.cpp window_interpreter.h window_item.cpp window_item.h window_keyboard.cpp window_keyboard.h window_menustatus.cpp window_menustatus.h window_message.cpp window_message.h window_name.cpp window_name.h window_numberinput.cpp window_numberinput.h window_paramstatus.cpp window_paramstatus.h window_savefile.cpp window_savefile.h window_selectable.cpp window_selectable.h window_settings.cpp window_settings.h window_shop.cpp window_shop.h window_shopbuy.cpp window_shopbuy.h window_shopnumber.cpp window_shopnumber.h window_shopparty.cpp window_shopparty.h window_shopsell.cpp window_shopsell.h window_shopstatus.cpp window_shopstatus.h window_skill.cpp window_skill.h window_skillstatus.cpp window_skillstatus.h window_stringview.cpp window_stringview.h window_targetstatus.cpp window_targetstatus.h window_teleport.cpp window_teleport.h window_varlist.cpp window_varlist.h src/doors/syncrpg/test/boot_yumenikki.sh test_input_term.cpp unit_input_term.sh xtrn/syncrpg/.gitignore README.md getdata.js install-xtrn.ini syncrpg.example.ini
Modified Files:
docs/superpowers/plans/2026-07-20-syncrpg-door.md docs/superpowers/specs/2026-07-19-syncrpg-door-design.md
Log Message:
syncrpg: a Synchronet door for RPG Maker 2000/2003 games (Yume Nikki)
Add SyncRPG, a dedicated door that plays RPG Maker 2000/2003 games over a terminal via a vendored EasyRPG Player, built on the shared termgfx library, with the freeware Yume Nikki 0.10a as the v1 flagship.
- Vendored + pruned EasyRPG Player + inline liblcf + inih under easyrpg/
(GPLv3; see PROVENANCE.md), built as a CMake OBJECT library and linked with
libtermgfx -- no vendored source patched.
- A BaseUi_termgfx backend (EasyRPG's UI implemented on termgfx): the engine
runs headless through it (the UI is swapped in by build-wiring, not a
vendored patch), presents its 32-bit screen to termgfx_termio_present_rgbx
zero-copy, translates termgfx key events to EasyRPG Input::Keys, and feeds
GenericAudio PCM to the shared termgfx audio stream.
- Keyboard-only input (RM2k/2k3 has no mouse); engine settings/debug/reset
keys are deliberately not forwarded, and the door fails closed on a game dir
that is not a valid RM project, so a BBS user cannot reach engine UI or
escape the game.
- Portable getdata.js (Synchronet JS, Windows + Linux) fetches the official
English Yume Nikki 0.10a from an established archive, sha256-verified; the
game data is never bundled or re-hosted. install-xtrn.ini registers it with
per-user saves at data/user/<####>/<game>/. Door + per-game READMEs.
termgfx and the vendored engine are pure, unmodified dependencies. Verified: headless render/keyboard/audio boot tests, a whole-branch security review, and a live sysop play-test (render, audio, keyboard, save/load) on SyncTERM.
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net