ãã«ããã©ãããã©ãŒã â SDL2 ã§åºããäžç
kaedevn ã§äœã£ãäœåã¯ãWeb ãã©ãŠã¶ã ãã§ãªããAndroidãPCããããŠå°æ¥çã«ã¯ Nintendo Switch ã§ããã¬ã€ã§ããããã«ãªããŸãããããæ¯ããã®ãããã©ãããã©ãŒã ããšã«å·®ãæ¿ãå¯èœãªãæœè±¡ã¬ã€ã€ãŒãã®èšèšãšãC++ ã§æžããããã€ãã£ããšã³ãžã³ã§ãã
1ã€ã®äœåããã©ãã§ãåãçç±
kaedevn ã®ãšã³ãžã³ã¯4ã€ã®æœè±¡ã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ããŠããŸãã
- IInput â ãã¹ãŠã®å ¥åãçµ±äžçã«åãåããWeb: PixiJS ãã€ã³ã¿ / ããŒããŒã / ãã€ãã£ã: SDL_EventïŒJoy-Con / ã¿ãã / ããŒããŒãïŒ
- IAudio â BGM / SE / VOICE ã®åçå¶åŸ¡ãWeb: Web Audio API / ãã€ãã£ã: SDL_mixer
- IStorage â ã»ãŒã / ããŒãã®æœè±¡åãWeb: IndexedDB / ãã€ãã£ã: ãã¡ã€ã«ã·ã¹ãã ïŒJSONïŒ
- IOpHandler â Op åœä»€ã®å®è¡ïŒ210è¡ã®ã€ã³ã¿ãŒãã§ãŒã¹å®çŸ©ïŒãWeb: WebOpHandler (PixiJS) / ãã€ãã£ã: SDL2Engine (OpenGL)
ã¹ã¯ãªãããšã³ãžã³ïŒVMïŒã¯ãããã®ã€ã³ã¿ãŒãã§ãŒã¹ã ãã䜿ã£ãŠåäœããŸãããç»é¢ã«ãã£ã©ã¯ã¿ãŒã衚瀺ããããBGM ãåçããããšãã£ãåŠçã¯ããã©ãããã©ãŒã ããšã®å®è£ ã«å§è²ãããŸãã
Web: PixiJS ãšã³ãžã³ïŒå®å šå¯Ÿå¿ïŒ
çŸåšã®ã¡ã€ã³ç°å¢ã§ããPixiJSïŒWebGLïŒã«ããé«é㪠2D æç»ã§ã4å±€ã®ã¬ã€ã€ãŒæ§é ãæã¡ãŸãã
Layer 3: UIïŒããã¹ããŠã£ã³ããŠãéžæè¢ãã¡ãã¥ãŒïŒ
Layer 2: OverlayïŒãšãã§ã¯ãç»åïŒ
Layer 1: CharacterïŒç«ã¡çµµ L/C/RïŒ
Layer 0: BackgroundïŒèæ¯ç»åïŒ
æèŒæ©èœ:
- GPU ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ïŒWebGLïŒã«ããæ»ãããªæç»
- ããã¹ãã®1æåãã€è¡šç€ºïŒã¿ã€ãã©ã€ã¿ãŒå¹æïŒ
- ãã§ãŒããç»é¢æºãããºãŒã ããã³ãªã©ã®ã«ã¡ã©å¶åŸ¡
- 46 çš®ã®ç»é¢ãã£ã«ã¿ãŒïŒæé垯ã»å€©åã»ããŒãã£ã¯ã«ã»å£ç¯æã»é°å²æ°ã»è²èª¿ã»ç¹æ®å¹æã»ã¬ããïŒ
- ã¬ã¹ãã³ã·ã察å¿ïŒPC / ã¹ããŒããã©ã³äž¡å¯Ÿå¿ïŒ
ã²ãŒã ã·ã¹ãã :
- ã»ãŒã / ããŒãïŒIndexedDBãè€æ°ã¹ãããïŒ
- ããã¯ãã°ïŒããã¹ãå±¥æŽã®é²èЧïŒ
- èšå®ç»é¢ïŒããã¹ãé床ãé³éããã«ã¹ã¯ãªãŒã³ïŒ
- ã®ã£ã©ãªãŒïŒCG / ã·ãŒã³åæ³ïŒ
- ã€ã³ãã³ããªïŒã¢ã€ãã 管çïŒ
- ãããã°ç»é¢ïŒå€æ°ãŠã©ããããã¬ãŒã¯ãã€ã³ãïŒ
ãã€ãã£ããšã³ãžã³: SDL2 + C++ïŒå®æ©åäœç¢ºèªæžã¿ïŒ
SDL2ïŒSimple DirectMedia LayerïŒã䜿ã£ã C++ ãã€ãã£ããšã³ãžã³ãå®è£ ãããŠããŸããçŽ 1,100 è¡ã®ã€ã³ã¿ããªã¿ã³ãŒããšçŽ 800 è¡ã®ãšã³ãžã³ã¢ãžã¥ãŒã«ã§æ§æãããŸãã
ãšã³ãžã³ã®æ§æ
Event Loop â SDL2Engine (157è¡)
âââ TextureManager (55è¡) ââ ç»åããŒã + LRU ãã£ãã·ã¥
âââ FontManager (52è¡) ââââ SDL_ttf ããã¹ãã¬ã³ããªã³ã°
âââ AudioManager (61è¡) âââ SDL_mixer BGM/SE/Voice
âââ Shader (55è¡) ââââââ GLSL ãã£ã«ã¿ãŒ
âââ FileStorage (40è¡) ââââ JSON ã»ãŒã/ããŒã
âââ HistoryManager (60è¡) â éžæå±¥æŽ
âââ AssetProvider (41è¡) ââ ã¢ã»ããIDâãã¡ã€ã«ãã¹å€æ
âââ Interpreter ââââââââ KS ã¹ã¯ãªãã VM
âââ Tokenizer (91è¡) ââ åå¥è§£æ
âââ Parser (136è¡) ââââ AST çæ
âââ Evaluator (85è¡) ââ åŒè©äŸ¡
âââ GameState (73è¡) ââ 倿°ã»ãã©ã°ç®¡ç
Web â ãã€ãã£ãã®æ©èœå¯Ÿå¿è¡š
- æç» â Web: PixiJS (WebGL) / ãã€ãã£ã: SDL2 + OpenGL
- ãã¯ã¹ã㣠â Web: PIXI.Texture / ãã€ãã£ã: SDL_Texture + LRU ãã£ãã·ã¥
- é³å£° â Web: Web Audio API / ãã€ãã£ã: SDL_mixer
- ãã©ã³ã â Web: PIXI.Text / ãã€ãã£ã: SDL_ttf
- ã¹ãã¬ãŒãž â Web: IndexedDB / ãã€ãã£ã: ãã¡ã€ã«ã·ã¹ãã (JSON)
- å ¥å â Web: Pointer / Keyboard events / ãã€ãã£ã: SDL_Event
- ã¹ã¯ãªãã â Web: KscRunner + VM (TypeScript) / ãã€ãã£ã: C++ Interpreter
- ã·ã§ãŒã㌠â Web: PixiJS Filter / ãã€ãã£ã: GLSL çŽæ¥ã³ã³ãã€ã«
察å¿ãã©ãããã©ãŒã
- WebïŒãã©ãŠã¶ïŒ â å®å šå¯Ÿå¿ãæè¡: PixiJS / WebGL
- Android â ãã«ãæåã»å®æ©åäœç¢ºèªæžã¿ãæè¡: SDL2 + NDK + JNI
- PCïŒMac / LinuxïŒ â ãã«ãæåã»åäœç¢ºèªæžã¿ãæè¡: SDL2 + CMake
- iOS â æ€èšŒäžãæè¡: SDL2
- Windows â æ€èšŒäžãæè¡: SDL2
- Nintendo Switch â 2026幎äžåæäºå®ãæè¡: SDL2 + DevkitPro
Android ç㯠JNI ããªããžïŒJava â C++ïŒãä»ã㊠SDL2 ãšã³ãžã³ãåŒã³åºããŸããGradle ãã«ãèšå®æžã¿ã§ãã
å ¥åã®çµ±äž: Action ããã
ãã¹ãŠã®ãã©ãããã©ãŒã ã§ãå ¥åã¯ãActionããšããå ±éã®åäœã«å€æãããŸããWeb ã§ã¯åªå 床ããŒã¹ã®å ¥åã·ã¹ãã ïŒGAME / UI / MODAL ã®3ã¬ãã«ïŒã§ãã¢ãŒãã«ãéããŠãããšãã«ã²ãŒã å ¥åã誀çºç«ããªãèšèšã§ãã
- OK â ããã¹ãéããæ±ºå®ãWeb: ã¯ãªã㯠/ Enter / Switch: A ãã¿ã³
- Back â ãã£ã³ã»ã«ãæ»ããWeb: Escape / Switch: B ãã¿ã³
- Menu â ã¡ãã¥ãŒè¡šç€ºãWeb: M ã㌠/ Switch: + ãã¿ã³
- SkipToggle â ã¹ãããåæ¿ãWeb: S ã㌠/ Switch: ZR
- AutoToggle â ãªãŒãåæ¿ãWeb: A ã㌠/ Switch: ZL
- Log â ããã¯ãã°ãWeb: L ã㌠/ Switch: - ãã¿ã³
- QuickSave â ã¯ã€ãã¯ã»ãŒããWeb: F5 / Switch: L
- QuickLoad â ã¯ã€ãã¯ããŒããWeb: F9 / Switch: R
- Screenshot â ã¹ã¯ãªãŒã³ã·ã§ãããWeb: P ã㌠/ Switch: æ®åœ±ãã¿ã³
- HideWindow â UIé衚瀺ãWeb: H ã㌠/ Switch: X ãã¿ã³
äœè ã¯ãã©ãããã©ãŒã ããšã®ãã¿ã³é 眮ãæèããå¿ èŠã¯ãããŸããããOK ãæŒããããããã¹ããé²ããããšããããžãã¯ã ããæžãã°ãWeb ã§ã Switch ã§ãæ£ããåäœããŸãã
è§£å床ãšã»ãŒããšãªã¢
kaedevn ã¯è«çè§£å床 1280x720 ãåºæºã«èšèšãããŠããŸãã
- TVåºåïŒSwitchïŒ: ã»ãŒããšãªã¢5%ïŒ64px æ°Žå¹³ / 36px åçŽïŒã確ä¿ããç»é¢ç«¯ãåããŠãéèŠãª UI ãé ããªã
- ã¹ããŒããã©ã³: ã¢ã¹ãã¯ãæ¯ãç¶æãã€ã€ã¹ã±ãŒãªã³ã°
- PC ãã©ãŠã¶: ãŠã£ã³ããŠãµã€ãºã«è¿œåŸ
UI ã®é 眮ã¯ã¢ã³ã«ãŒããŒã¹ã®çžå¯Ÿåº§æšã§å®çŸ©ããããããããŒãã³ãŒãããããã¯ã»ã«å€ã«äŸåããŸããã
äœè ã«ãšã£ãŠã®ã¡ãªãã
- äžåºŠäœãã°å šãã©ãããã©ãŒã : ã¹ã¯ãªãããã¢ã»ãããå ±é
- ç§»æ€äœæ¥ã¯äžèŠ: ãšã³ãžã³åŽãåãã©ãããã©ãŒã ã«å¯Ÿå¿
- å質ãä¿èšŒããã: 281 è¡ã® C++ ãŠããããã¹ã + 107 ã® TypeScript ãã¹ãã§åäœãæ€èšŒ
- å°æ¥æ§: æ°ãããã©ãããã©ãŒã ã远å ãããŠããäœåã¯ãã®ãŸãŸåã
é¢é£ããã¥ã¡ã³ã
- ãšã³ãžã³ã®ä»çµã¿ â ã¹ã¯ãªãããšã³ãžã³ã®èšèš
- ã¢ã»ããã®ããŒã¿ããªã㣠â ã¢ã»ããå ±é仿§
- ãããã質å â ãã©ãããã©ãŒã 察å¿ç¶æ³