幞ããªããšã«ãä»æ¥ãã»ãšãã©ã®éçºè ã¯ã²ãŒã ã®ç 究ã«å¹²æžããã ãã§ãªãããã®éãåæ§ã§ããããã¬ã€ã€ãŒãã²ãŒã ãå€æŽããŠè£è¶³ããããã«ãã¹ãŠãè¡ããŸãã ãã ããå ¬åŒã®ããã¥ã¡ã³ãããªããŠãã99ïŒ ã®ã²ãŒã ã§é梱çšã®æ¢è£œã®ããã°ã©ã ãèŠã€ããããšãã§ããŸãã
ãã®èšäºãæžããŠãã¢ãŒã«ã€ãããã¢ã³ããã«ãŒãã«å¥ªãããŠããªããéåžžã«ãŸãã§å€ãã²ãŒã ã圹ã«ç«ããªãã²ãŒã ã«åºäŒã£ããšããŠããããã°ã©ãã³ã°èšèªã®æäœéã®ç¥èã§ãããããªãã«ãšã£ãŠéåžžã«å¯èœã§ããããšã瀺ãããšã«ããŸãã圌ã¯ç¬åã§å¯ŸåŠãããã®ã²ãŒã ã骚ã«æã¡èŸŒãããšãã§ããæåã®äººã«ãªããŸãã
ããèªäœã§ã¯ãã²ãŒã ã¢ãŒã«ã€ãã®ããã€ã¹ã®èª¬æã¯äœã®å©ç¹ããããããªãå¯èœæ§ãé«ããããã²ãŒã ã¢ãŒã«ã€ãã®ç 究äžã«ç§ãåã£ãå šäœã®éçãç§ã®èãããããŠç§ãè¡ãæ¢ãŸãã«å°ãããšã©ãŒã«ã€ããŠèª¬æããŸãã
ãã¯ã¿ã€
åäŸã®é ãSquareSoftã²ãŒã ã®ãã¡ã³ã§ããã1æ1æ¥ã«ã¢ã€ãã«ç¶æ ã«èŠããã§ãããšããäºå®ãããç§ã¯åæã®ãã¡ã€ãã«ãã¡ã³ã¿ãžãŒãããã¿ã€ãã«é¢ããæ å ±ã«èå³ãæã¡ãPlayStationçšã®ãã¡ã€ãã«ãã¡ã³ã¿ãžãŒVIIã®æ¥æ¬èªçã«ãããŒãã¹ããã£ã¹ã¯ãããããšãç¥ã£ãŠé©ããéçºã®åæ段éã§ã®ã²ãŒã ã®ã¹ã±ãããã¹ã¯ãªãŒã³ã·ã§ãããªã©ãããããçš®é¡ã®è¿œå è³æãå«ãŸããŸãã
ããã¬ã³ããããããã«åœŒã®ã€ã¡ãŒãžãããŠã³ããŒãããŠãšãã¥ã¬ãŒã¿ãŒã§å®è¡ãããšããŸãããšãã¥ã¬ãŒã¿ãŒã§ãã£ã¹ã¯ãã²ã©ãé ããªãïŒæ°ããããŒããŠã§ã¢ã«ããããããïŒããšããããŠæ¬¡ã«ãæ¥æ¬èªã®ã€ã³ã¿ãŒãã§ãŒã¹å šäœãå£ããŠããŸãããšãçºèŠããŠãå°ããã£ããããŸããããããã¡ãã¥ãŒã§ãã

ãããããéçºè ãææ¡ããã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããã«ããã£ã¹ã¯ãã¬ããåãããã®å 容ãçŽæ¥èª¿ã¹ããšããã¢ã€ãã¢ãåŸãŸããã
äžæ¬¡èª¿æ»
ãŸãããã£ã¹ã¯ã«äžè¬çã«å«ãŸãããã¡ã€ã«ã調ã¹ãããšã«ããŸããã
ãã®æ§é ã¯æ¬¡ã®ãšããã§ãã
SLPS_01060
E:.
â CG.FFD
â DUMMY3M.DA
â FFANM.APK
â FF_OPN.LPK
â FF_SYS.LPK
â NPK_ACC.NPK
â NPK_BOU.NPK
â NPK_DF.NPK
â NPK_DF2.NPK
â NPK_ETC.NPK
â NPK_MAIN.NPK
â NPK_MAKE.NPK
â NPK_MON.NPK
â NPK_WEP.NPK
â NPK_WM.NPK
â SLPS_010.60
â SYSTEM.CNF
â
ââââBG
â DATF001.LPK
â .....
â DATF009.LPK
â
ââââHERO
â HERO.FFD
â
ââââITEM
â ââââMATER
â MATER.FFD
â
ââââMAKINGCG
â MAKINGCG.NPK
â
ââââR3D
â RIDE_0.NPK
â
ââââS1G
â INST_M.S1G
â INST_P.S1G
â TITLE.S1G
â
ââââSM
â SM000.FFD
â SM001.FFD
â
ââââSTR
â PP07FFA.STR
â PP07FFB.STR
â PP07FFC.STR
â PP07FFD.STR
â PP07FFE.STR
â
ââââTEXT
â MLIST.LPK
â
ââââTOWN
FF_TTOWN.NPK
ç§ãæåã«ç®ãåŒããã®ã¯ãNPKããã³LPKãã¡ã€ã«ã®æ¡åŒµåã§ãããããããã¢ãŒã«ã€ãã§ããããšãéæ¥çã«ç€ºããŠããŸããã
ãããã£ãŠãç§ã®é ã«æµ®ããã æåã®ã¢ã€ãã¢ã®1ã€ã¯ãããããçš®é¡ã®ãŠãããŒãµã«ã¢ãã©ã€ã¶ãŒãšã¢ã³ããã«ãŒã䜿çšããããšã§ããã PSXçšã«èŠã€ãããã®ããã¹ãŠããŠã³ããŒããã念ã®ããã«PCçšã«Dragon UnPACKerãããŠã³ããŒãããŸããã
ãããããã£ããã¯åãã«è¶³ããªããã®ã§ãã.STRãã©ã«ããŒå ã®ãã¡ã€ã«ã¯STRã®æšæºPSX圢åŒã®ãããªã§ãããS1Gãã©ã«ããŒã®3ã€ã®ãã¡ã€ã«ã¯ãSona TIM圢åŒçšã®åçã§ããã ç°ãªãæ¡åŒµåã§ã®ã¿ã
NPKãšLPKã®ã¢ãŒã«ã€ãã¯ãäºæ³ã©ããããã£ã¹ã¯ã®ã¡ã€ã³ã³ã³ãã³ããå«ãã§ããããFinal Fantasy VIIåãã®ãœãããŠã§ã¢ãå«ãããã°ã©ã ã§ã¯äœ¿çšã§ããŸããã§ããã
ããããããããã®NPKã¢ãŒã«ã€ãã«é¢ããå°ãªããšãããã€ãã®æ å ±ãæ¢ãæéãããå°ãç±å¿ã«ãªããŸããããããããããããåãäžããã®ã¯ç§ãåããŠã§ã¯ãªããå°ãªããšãããã€ãã®èšåãèŠã€ãã£ãã¯ãã ããã§ãã
çµæã¯éåžžã«é¢çœãããã®æ¹æ³ã§ã¯ãšãªãäœæããããšããŠãæ€çŽ¢ã¬ããŒãžã®å±±ãæ©ããŠãããšããã®ãã£ã¹ã¯ã®ã³ã³ããã¹ãã§ãããã®ã¢ãŒã«ã€ããžã®åç §ã2ã€ããèŠã€ãããŸããã§ããã

ããã«ããã®èšäºãæžããŠããæç¹ã§ãFFã²ãŒã ãæ¹é ããããã®ãœãããŠã§ã¢å°çšãµã€ãã§ããäž¡æ¹ã«é¢é£ãããããŠã³ããŠããããšã«é¢é£ããäž¡æ¹ã®ãªãã¡ã¬ã³ã¹ããããŸããã
ã¹ã¬ããã®1ã€ã¯ãããããã¢ãã«ãåŒãè£ãã®ã¯ã©ãã»ã©è¯ãã ãããããšãããããã¯ã«é¢ããã¢ã€ãã«ãã£ã¹ã«ãã·ã§ã³ã§ãããªãåã«ãã¹ãã«ãã£ãŠåé€ãããã¹ã¯ãªãŒã³ã·ã§ããã®ä»£ããã«ã¹ã¿ãã®æããããŸããã
ãããã2005幎ã«é¢é£ãã2çªç®ã®ã¹ã¬ããã¯éåžžã«è¯ããªãŒããäžããŸããã ãã®äžã§ãäžéšã®ãŠãŒã¶ãŒã¯ããªãœãŒã¹ãåŒãè£ãããã«ãã®ãã£ã¹ã¯ãã¯ã©ãã¯ããããã®ææŠãææ¡ããŸããã
QhimmïŒãã©ãŒã©ã ã®ææè ã§ãããFFã®å€ãã®ã¢ã³ããã«ãŒããã°ã©ã ã®äœæè ïŒã¯ããããã®ã¢ãŒã«ã€ããç 究ããããã«çç ŽãããŸãããããã¹ãŠçªç¶çµäºããŸãã...
PSXãªãœãŒã¹ãé®æãããœãããŠã§ã¢ã®å¥ã®éçºè ïŒsnailrushïŒãããããã®ã¢ãŒã«ã€ãã解åããããã®ãŠãŒãã£ãªãã£ããã§ã«äœæããŠããããšãå€æããŸããã ãäžæ³ãã®ããã«èŠãããªã³ã¯ããã©ã£ãŠãŠãŒãã£ãªãã£ãããŠã³ããŒãããŸããããã¹ãŠãããŸãããã°ããã®èšäºã¯ããã§ã¯ãªãã£ãã§ãããã äžè¬ã«ããªã³ã¯ã¯æ»ãã§ããŠãarchive.orgã§ããå©ãã«ã¯ãªããŸããã§ããã Snailrushã®ãµã€ãã¯ããã®äŸ¿å©ãªãŠãŒãã£ãªãã£ãäœæããŠããæ°æ¥åŸãäœå¹ŽãããŠã³ããŸããããã®ããŒãžã®ã¹ãããã·ã§ããã¯ä¿åãããŸããã§ããã

ãããã£ãŠãç§ã¯Qhimmã«ããæçš¿ïŒç§ã®ãã©ãŒã©ã ã«ã¯é·å¹Žã«ããã£ãŠç»å ŽããŠããªãã£ãïŒã®ã¿ãæã¡ã圌ããããã®ã¢ãŒã«ã€ãã®æ§é ãææ¡ããããšãã§ããŸããã ãããŠãããã¯åœŒãã«ç¹ã«è€éãªãã®ã¯äœããªãã£ãããšãæå³ããŸããã
èªåã§æãå§ãã
HEXãšãã£ã¿ãŒã§ãã¡ã€ã«ãéãæéã§ãã ããã«æåã®æ°åã®æ°åã«ã¶ã€ãã£ããããã¯ããã¡ã€ã«ã«ããããŒã®ãããªãã®ãããããšã瀺ããŠããã
ããã§ãå°ãäœè«ããŸãã åœåããªãœãŒã¹ãæãäžããããã®ç¹å¥ãªç¥èã¯å¿ èŠãªããšèšã£ããšããäºå®ã«ããããããã ãå°ããªãäŸå€ã1ã€ãããŸãã å°ãªããšããããŒã¿ãã¡ã¢ãªãŸãã¯ãã£ã¹ã¯ã«ãæãåçŽãªåœ¢åŒã§ããæ°å€ã§ä¿åããæ¹æ³ã®åºæ¬çãªèãæ¹ãå¿ èŠã§ãã ã€ãŸãã ããã°ãšã³ãã£ã¢ã³ãšãªãã«ãšã³ãã£ã¢ã³ãäœã§ããããç¥ãå¿ èŠããããŸããããã«ãäžèŠãããšãããã»ãšãã©ãã¹ãŠã®ãã¡ã€ã«ã¯ãæ¡åŒµåãLPKãTZLãFFDã«é¢ä¿ãªããæåã¯éåžžã«é¡äŒŒããæ§é ã§ããã
ãšãã»ã³ã¹ãã§ããã ãç°¡æœã«èª¬æããããšæããŸãã
å€ãã®å Žåãæ°åãæåã¯éã®é åºã§ã¡ã¢ãªã«ä¿åãããŸãã ããšãã°ã16é²æ°ã§ã41 BEãã®ããã«èŠããã¡ã¢ãªèªäœã®ã00 00 41 BEãã®ãããªintå€æ°ã§ããæ°åã16830ãã¯ãBE 41 00 00ããšããŠä¿åã§ããŸããããªããããªã®ãã¯èª¬æããŸããïŒã°ãŒã°ã«ã§æ€çŽ¢ã§ããŸãïŒèªåèªèº«ïŒããã³ã³ãã¥ãŒã¿ã®æ¹ã䟿å©ã ããšã ãèšããŸãã ãããã£ãŠãåãæ¹æ³ã§ãéã®é åºã§ãããŒã¿ããã£ã¹ã¯äžã®ãã¡ã€ã«ã«ä¿åã§ããŸãã
intãshortãªã©ã®ããã€ãã®æ°åãã·ãŒã±ã³ã¹ãDF 10 00 00 00 09ãããããŠäœããã®ããŒã¿ã®ãããªãã€ãã®ããã·ã¥ããã·ã¥ããããŸãã


ãã¹ãŠã®ãã¡ã€ã«ã®æåã®æ°å€ã¯ç°ãªãããããããã¯å éšãããã¯ã®ãªãã»ãããŸãã¯ãµã€ãºã§ããå¯èœæ§ãé«ããšæ³å®ããŸããã
ãã詳现ãªç 究ã®ããã«ãç§ã¯1ã€ã®ãã¡ã€ã«ã«éäžããããšã決å®ããNPK_WEP.NPKãéžæããŸãããããã¯ãã¹ã¬ãããããæåã«ããã解åããããšãå¯èœã§ããã次ã«ãTIM圢åŒã®åçãããã«ä¿åãããŠããããšãããã£ãŠããããã§ã
TIMãã©ãŒãããã«ã€ããŠè©³ããèŠãŠãããšããæ¥ãŸãããTIMãã©ãŒãããã«ã€ããŠã¯ãäžãèŠãŠãããŸãã
幞ããªããšã«ãçŸæç¹ã§ã¯ãå ¬åŒã®Sonyã®ããã¥ã¡ã³ããæŒããããŠãããªã©ãTIMã®ããã¥ã¡ã³ãã¯å å®ããŠããŸãã
ããã«æå ±ã§ããTIMã®æšæºèŠåºãã¯ã10 00 00 00ãã§ã

åæã«ããã§ã«éãã圢åŒã§å©çšå¯èœãª3ã€ã®ãã¡ã€ã«ã16é²æ°ã§éããŸãã

ãããŒãããã«ãããã¹ãŠã®ã10 00 00 00 09ãã¯ãã¡ããã©ç§ã®ã¢ãŒã«ã€ãã®ããã«ãæåã¯ã10 00 00 00 09ãã§ãã
å¶ç¶ã§ã¯ãªãããã§ããããã«ãããŸãïŒ Timãã¡ã€ã«ã¯å éšã«ãããŸããããªãèªåã¢ãã©ã€ã¶ãŒããããèŠã€ããããªãã£ãã®ã§ããïŒ ãããŠããªãã10 00 00 00 09ãã®çŽåŸã«æ··ä¹±ãããã®ã§ããïŒ
ãã¡ã€ã«å ã§ã10 00 00 00 09ããæ€çŽ¢ããŠã127åã®äžèŽãèŠã€ããããšããŸããã ããã«ãã10 00 00 00 09ããæã€ãã¹ãŠã®å Žæã¯äºãã«é¡äŒŒããŠããŸãã
NPK_WEP.NPKã®2çªç®ã®å Žæã®äŸã¯ãã·ãŒã±ã³ã¹ã10 00 00 00 09ããèŠã€ãããŸããã

ãŒãã®æã®åŸããã¡ã€ã«ã®æåãšãŸã£ããåãæ§é ãèŠãŸããã
ãã®ãããããã§ããã€ãã®äºåçãªä»®å®ãšçµè«ãç«ãŠãããšãã§ããŸãã
- ã10 00 00 00 09 09ããå®éã«TIMãã¡ã€ã«ã®éå§ã瀺ã眲åã§ããå Žåãã¢ãŒã«ã€ãã«ã¯ãã®ãããªãã¡ã€ã«ã127åãããŸããããã¯äžè¬ã«è«ççã§ãããæ¬åœã®ããã§ãã
- NPK_WEP.NPKã¢ãŒã«ã€ãèªäœã¯ãç¬èªã®ããããŒïŒæ§é ãèšè¿°ããïŒãæãããããããäœããã®åœ¢ã§æ§é åãããããŒã¿ã®å±±ã§ãã
- ã¢ãŒã«ã€ãå ã®TIMãã¡ã€ã«ïŒãã¹ãŠåãå ŽåïŒã¯ãããããŒã10 00 00 00 09ãã®åŸã®ããŒã¿ãå®éã®ãã¡ã€ã«ã®ããã«èŠããªããããäœããã®æ¹æ³ã§å§çž®ãããŸãã
ããã§ãNPKã¢ãŒã«ã€ãã®æ§é ãããã«è©³ãã調ã¹ã10 00 00 00 09以åã®æ°åã®æå³ã調ã¹ãããšã«ããŸããã
æåã®æ°åã¯æ¬¡ã®ãšããã§ãã
37 00 00 00> 00 00 00 37ïŒHEXïŒ> 55ïŒDECïŒãªãã»ãã37ã¯æ¢ã«å§çž®ããŒã¿ãšæããããã®ã®äžã«ããã®ã§ãããã¯ã¹ãããããªãããã§ãã
2çªç®ã®æ°åã¯çãã£ãF7 03> 03 F7ïŒHEXïŒ> 1015ïŒDECïŒ
3çªç®ãçãF6 04> 04 F6ïŒHEXïŒ> 1270ïŒDECïŒ
ããã2ã€ã¯ãã§ã«å€äœã«äŒŒãŠããŸãããããã®å Žæã®é åã§äœããèŠã€ããŠã¿ãŸãããã
03 F7ãæ¢ããŠããŸãïŒ

ãããŠãã³ãŽïŒ ãã£ã³ããŒã³ã¯ãããŒã¿ãããã¯ãçµäºããå Žæã§ãããŒããããã®å Žæã«ç§»åããããã§ãã
äžã®è¡ã¯äœã§ããïŒ 36 00 00 00 FD 03 2F 08-å§çž®ããŒã¿ãšã¯ç°ãªããŸãããæåãšåãããããŒã«éåžžã«äŒŒãŠããŸãã
次ã«ã3çªç®ã®å€äœã¯äœã§ãããïŒ æ¬¡ã®ãããã¯ã®äžå€®ãæããŠããã®ã§ãä»ã®ãšãããããã¯è§£ååŸã®ããŒã¿ã®ãµã€ãºã§ãããšä»®å®ããŸãã
ãããä»ã§ã¯ãæåã®æ°ã37ïŒHEXïŒãŸãã¯55ïŒDECïŒã§ãããšããä»®å®ããããŸã
ã©ããããããã¯ããã¯ããããã¡ã€ã«ã®çµãããŸã§ã®ãµããããã¯ã®æ°ã§ããã次ã®ãããã¯ããšã«1ãã€æžå°ããŸãããã®ä»®å®ã確èªããŠãã ããã
ãããã¯ã®é·ãã瀺ããªãã»ãããããå Žåãåã®ãããã¯ã®çµããã®çŽåŸã«æ¬¡ã®ãããã¯ãéå§ããªãã®ã¯ãªãã§ããïŒãªããã®ãã¹ãŠã®ãŒãã®æïŒ ããã«ã0x400ã¯2çªç®ã®ãããã¯ã®å§ãŸãã瀺ããŠããŸããã次ã®ãããã¯ãã©ãããå§ãŸãããã©ã®ããã«ç解ããã®ã§ããããã äžæ¹ã0400ã¯éåžžã«çããããã€ã¢ã¹ã§ãããæ»ãããããŸãã 12æã¯ãããã§ããïŒ

ããïŒ ã¡ããã©1024ãããã¯ã»ãšãã©å¶ç¶ã§ã¯ãããŸããã ãªãã»ãã0x800ã§ããã«1024ãã€ããååŸããåŸã®çµæãèŠãŠã¿ãŸãããã

ããã§ãã¹ãŠãæ確ã«ãªããåãµããããã¯ã®ãµã€ãºã¯1ãããã€ãã«ãªããŸããã
ãããã£ãŠãNPK_WEP.NPKæ§é ã¯ã»ãŒå®å šã«è§£èªãããŸãã
ãã¡ã€ã«å šäœã¯1024ãã€ãã®ãããã¯ã«åå²ãããŸãã
åãããã¯ã®æåã®4ãã€ãã¯ãã¢ãŒã«ã€ãã«å«ãŸãã1ã€ã®ãã¡ã€ã«ã®çµãããŸã§ã®ãµããããã¯ã®æ°ã§ãã
次ã®2ãã€ãã¯ããµããããã¯ã®å é ãããã€ããŒãã®æ«å°ŸãŸã§ã®ãªãã»ããã§ã
ããã«2ãã€ã-ã»ãšãã©ã®å Žåãã¢ã³ããã¯åŸã®ããŒã¿ã®ãµã€ãºïŒæããã«ã¡ã¢ãªå ã«ããŒã¿çšã®ã¹ããŒã¹ãå²ãåœãŠãããïŒã
çå®ã®ããã«èŠããŸãããããŒã¿èªäœãã©ã®ããã«å§çž®ãŸãã¯æå·åãããããç解ããããšã ããæ®ã£ãŠããŸãã
å§çž®ãæ±ã
ãã以åã¯ãå§çž®ãæå·åã«ééããããšã¯äžåºŠããªãã£ãã®ã§ããŸã£ããèããçµéšãããŠããŸããã§ããã
ãããã£ãŠãç§ã¯äžåºŠã«2ã€ã®æ¹åã§æ å ±ãæ€çŽ¢ãå§ããŸããã
æåã«ããã¡ã€ã«ã§ã©ã®ãããªå§çž®ã䜿çšãããŠããããããããªãå Žåãç®ã§ã©ã®ããã«ç解ãããã
次ã«ãPlayStationå šè¬ããŸãã¯SquareSoftã²ãŒã ãç¹ã«FFã·ãªãŒãºã§æããã䜿çšãããå§çž®ã®çš®é¡ã æãããã¯ãQhimmãããã«ãã¡ã€ã«ãèŠã€ãããšããããšã§ããã
ããã¡ã€ã«ãå§çž®ãããŠãããã®ãç®ã§ç¢ºèªããæ¹æ³ããšããäžè¬çãªæ€çŽ¢ããå§ããŠãç§ãèŠã€ããæãæçšãªãã®ã¯æ¬¡ã®ãªã¹ãã§ãã
zenhax.com/viewtopic.php?t=27ã§ãç®ãåŒããŸãã
lzssããã¯åºæ¬çã«ç§ãæã£ãŠãããã®ã®ããã«èŠããŸããã
å§çž®ãããŠããªãå ã®ããŒã¿ã®éšåã
ãããŠã第äºã«ãå§çž®ããŒã¿ã§ããããŒã«é¡äŒŒãããã®ã¯äœã芳å¯ãããªãã£ããããæšæºããããŒãå«ãŸãããã¹ãŠã®çš®é¡ã®zipé¢é£ããã³ãã®ä»ã®ã¡ãœãããããã«é€å€ããããšãã§ããŸããã
Final Fantasy VIIã§äœ¿çšãããŠããå§çž®ã®æ€çŽ¢ã«ããããã©ãŒã«ããã¯ãµã€ãwiki.qhimm.comãèŠã€ãããŸããã ãã®ã¹ãããã·ã§ããã¯å¹žãã«ãWayback Machineã§å©çšã§ããŸããã
ããšãã°ãFF VIIã§ã¯ã2çš®é¡ã®å§çž®GZIPãšLZSã䜿çšãããŸãïŒäžéšã®ç¹å®ã®äºçš®LZSSïŒã GZipã«ã¯ããããŒãå¿ èŠã ã£ããããããã«GZipãåŽäžããŸããããLZSSã§ã¯ããã¹ãŠãæã瀺ããŠããããããã詳现ã«åæ¢ããããšã«ããŸããã
ãããããã®åŸãç§ã¯ééããç¯ããããããŠã£ãããã£ã¢ã«å ¥ããŠïŒèšäºãç·šéãããšãããŠã£ãããã£ã¢ã§ã¯ãªãå¥ã®ãŠã£ããµã€ãã§ããããšã«æ°ã¥ããŸããïŒLZSSã«ã€ããŠèªã¿ãŸããããåé¡ã¯80幎代ã®å§çž®åçã1ã€å§çž®ã®ååãç¶æããªãããããŸããŸãªæ¹æ³ã§å®è£ ã§ããããšã¯ãŸã£ããèæ ®ããŠããŸããã§ããããã€ã³ã¿ãŒãããã§èª¬æãããŠããã»ãšãã©ã®èšäºãå«ããæç§æžã§ã¯æ¬¡ã®ããã«èª¬æãããŠããŸãïŒ 0ã®å Žåã次ã®8ããããèªã¿åããããã®ãŸãŸå ¥åãããŸãã ãããã¡ïŒåºåïŒã«æ ŒçŽããã1ã®å Žåã次ã®7ããããèªã¿åãããŸãããã®äžéšã¯ãããã¡å ã§ãªãã»ãããããäžéšã¯ãããã¡ããèªã¿åãããŠåºåãããå¿ èŠãããããŒã¿ã®é·ãã§ãã
ããªãã¡ ãã¹ãŠãæ確ã§è«ççã§ããããããŸããŸãããã®ã§ã¯ãªããç§ãæã£ãŠãããããªãã®ã§ã¯ãªããããã«ã¯ãããŒã¿ã®å é ããå§çž®ãããŠããªããããã«èŠããã¹ããšããèãã«å¯Ÿå¿ããŠããŸããã ïŒãŸããåã«ãã®ãããªå®è£ ã§ã¯ãæåã®ãã€ãã«ã¯1ä¿¡å·ããããš7ãããã®éå§çž®ããŒã¿ãå«ãŸãããã®8ãããç®ã¯2çªç®ã®ãã€ãã®æåã®ãããã«ãªãããããã¹ãŠã®ããŒã¿ã¯æ··ä¹±ã®ããã«èŠããŸããïŒ
ã¢ã«ãŽãªãºã ã®ç¹å®ã®å®è£ ããããã¡ã®ãµã€ãºã«éåžžã«äŸåããŠãããæç§æžã«èšèŒãããŠãããã®ãç¡èŠã§ããé·ãã®ãããã¡ã«é©ããŠããããšãããã«ã¯ç解ããŸããã§ããã
äžè¬ã«ã2 + 2ãè¿œå ããããšããŠç¡é§ã«æ°æéã倱ã£ããããå察åŽã«é²ã¿ãFF VIIã§äœ¿çšãããå§çž®ã®ãã³ãŒãå ãã®å®è£ ã®ã¹ã¬ãããæ¢ãããšã«ããŸããã
ãããŠãããã«github.com/cebix/ff7toolsãèŠã€ããŸãããããã¯ãlzssãšunlzssãå«ããff7ã翻蚳ããããã®PythonãŠãŒãã£ãªãã£ã®ã»ããã§ãã æ€èšŒã®ããã«ãtimãã¡ã€ã«ã®1ã€ã«lzssãèšå®ããããšã«ããŸããã ã©ãããããããã®ããã«ãªã£ãïŒ

äžèŠ-è¯ãããšã§ã¯ãããŸãããã09ãšãã®èåŸã®ã·ãŒã±ã³ã¹ãã€ãã¿ãŸãããããã¯ãã¢ãŒã«ã€ãå ã§ã®ç§ã®ãã¡ã€ã«ã®å€èŠ³ã«éåžžã«äŒŒãŠããŸããã ããããç§ã¯åçãããã€ãã®LZSSå®è£ ã«ãã£ãŠå§çž®ãããŠããããšãã»ãŒå®å šã«ç¢ºä¿¡ããŸããã
ãããè¡ãããã«ãç§ã¯wiki.qhimm.comã«æ»ãããããã¯åœŒãã®LZSã§ããã«ã€ããŠãã詳ããèªãããšã«ããŸããã
泚ææ·±ãèªãã§åèªããåŸãããºã«ãçºå±ããŸããïŒ ãã³ãŽïŒ
圢åŒã¯æ¬¡ã®ãšããã§ãã
æ¥ä»å šäœã¯ãããã¯ã«åå²ããããã®é·ãã¯9ãã€ããã17ãã€ããŸã§ããŸããŸã§ãã
ãããã¯ã®æåã®ãã€ãã¯ããããã¯ã®ä»ã®ãã¹ãŠã®ãã€ããäœã§ãããã瀺ããŸãã ããã¯ãããã¬ãã«ã§ãšã³ã³ãŒããããŸãã 1-ãã€ãããã®ãŸãŸãããã¡ãŒããã³åºåã«éä¿¡ãããããšãæå³ããŸãã 0-2ãã€ããèªã¿åãå¿ èŠãããããšãæå³ãããããã¯ãããã¡ãŒãžã®åç §ã«ãªããŸãã ããã«ããããã®èªã¿åãã¯æåŸããè¡ãããŸãã
ãããã£ãŠããããã¯ã®æåã®ãã€ããFFïŒ11111111ïŒã§ããå Žåãããã¯æ¬¡ã®8ãã€ãããã®ãŸãŸèªã¿åããåºåïŒãããã¡ãŒïŒã«æžã蟌ãå¿ èŠãããããšãæå³ããŸãã
ãããŠããã§ã«ç§ã«ãšã£ãŠå€§åã«ãªã£ãã10 00 00 00 09ã®åã®DFãã€ãã¯ããã圢åŒã§11011111ã®ããã«èŠããŸããã€ãŸããããã«ç¶ã5ãã€ãã¯ãã®ãŸãŸïŒåã10 00 00 00 09ïŒèªã¿åãããªããã°ãªããŸããã 2ãã€ãã®åç §ïŒEF F0ïŒããããåã³2ãã€ãããã®ãŸãŸèªã¿åãå¿ èŠããããŸãïŒ0C 02ïŒã
ãããããããã ãªã³ã¯ã®åœ¢åŒã¯ããããã¡ã®ãµã€ãºã«å€§ããäŸåããŸãã ãã®å®è£ ã§ã¯ããããã¡ãŒã¯4ãããã€ãã§ããããããåäœã®ãªã³ã¯ã¯æ¬¡ã®ããã«ãªããŸãïŒç¹°ãè¿ããŸããããããã¯ããå«ãã§ãïŒïŒ
OOOO OOOO OOOO LLLLïŒO =ãªãã»ãããL =é·ãïŒ
ããŠããŸãã¯ããããªãã§ã§ããã®ã§ãOO OLïŒãã€ãã¬ãã«ïŒã2çªç®ã®ãã€ãã®æåã®4ããããæåã®ãªãã»ãããã€ãã«ãªããŸããããã¯ãæåŸããèªã¿åãå¿ èŠãããããã§ãã ããããããã ãã§ã¯ãããŸãããé·ãã3ã€è¿œå ããå¿ èŠããããŸãããŸãã«ããŒãã³ãŒãã§ãã é·ã0ã1ã2ã¯æå³ããªããªãããããã®å Žåããªã³ã¯ã¯èªã¿åãããããŒã¿ãããå€ãã®ã¹ããŒã¹ãå æããããã§ãã ãããã£ãŠã0ã¯3ã1ã¯4ãªã©ã§ã...
ç解ããã®ãé£ããããšãç解ããŠããã®ã§ãå®éã®äŸã䜿ã£ãŠèª¬æããŸãã
ãã€ãDFã¯ããªãã»ããã®6çªç®ãš7çªç®ã®ãã€ããEF F0ã§ããããšã瀺ããŠããŸãã
æåŸã®4ãããïŒé·ãïŒãåãåã£ãŠå転ãã0xFEF-ãããã¡ãŒã®ãªãã»ãããæ®ãã®0 + 3 = 3-é·ããååŸããŸãã
ãããã£ãŠããªã³ã¯ã¯ããããã¡ãŒãã3ãã€ãã®ãªãã»ãã0xFEFãèªã¿åãããã«æ瀺ããŸãã äžã«ã¹ã¯ããŒã«ããŠãéåžžã®TIMãã¡ã€ã«ãã©ã®ããã«èŠããããèŠããšã09ã®çŽåŸã«3ã€ã®ãŒããã€ããããããããã¯ãããã¡ãŒããã³ããŒããããã®ã§ãïŒæããã«ããããã¯3ã€ã®ãŒããã€ãã§ãããæåéããã¡ããã©ãæžãäžãããŸãïŒä»¥åã®ã¢ã¯ã·ã§ã³ïŒã
ãŸãããã®èšäºã§ã¯ããããã¡ãŒããèªã¿åãå¿ èŠãããå®éã®ãªãã»ãããèšç®ããããã®è€éãªåŒã«ã€ããŠèª¬æããŸããã ããã¯ãäœæè ãæžã蟌ã¿ãšèªã¿åãã«éåžžã®å ¥åºåã¹ããªãŒã ã䜿çšããããšãæå³ããŠãããå§çž®åœ¢åŒããªã³ã°ãããã¡ãŒã®äœ¿çšãæ瀺ããŠãããäœããã®æ¹æ³ã§ãªãã»ãããå€æããå¿ èŠããããšããäºå®ã«ãã£ãŠèª¬æãããŸããã
ããããç§ã¯åæ°ããããããŸããããã£ã°ãããããã®å¥åŠãªåŒãç解ããããããèªåã®å Žæã«ãªã³ã°ãããã¡ãå®è£ ããæ¹ãè¯ããšå€æããŸããã ãã¡ãããåŸæããŸããããåæã«ãæ©èœããªããçç±ãç解ãå§ãããšãããã®èšäºã®èè ãããã¯ããã«çŸãã解決çãèŠã€ããŸããã
ããã«ããã®èšäºã§ã¯ãèŠããŠããå¿ èŠã®ãã2ã€ã®ãããªãã¯ãã«ã€ããŠæžããŠããŸãããããã¡ãžã®åç §ã¯éå»ã«ãæªæ¥ã«ãè¡ãããšãã§ããããããçš®é¡ã®ãããã³ã°ãåé¿ããããšãææ¡ãããŸããã
ãããã¡ã®æ£ããå®è£ ã§åŸã§ããã£ãããã«ãããããã³ã°ãã¯å¿ èŠãããŸããã
ã³ãŒããæžã
ããŠãä»ã®ãšãããç§ã¯EclipseãçºèŠããŸããïŒç§ã«ãšã£ãŠã¯JAVAã§æžãã»ãã䟿å©ã ããã§ãïŒ
ãŸãããªã³ã°ãããã¡ã®å®è£ æ¹æ³ã決å®ããå¿ èŠããããŸãã å®éã®ãšãããéåžžã«ããŸããŸãªæ¹æ³ã§å®è£ ã§ããããšãããã«ç解ããã®ã§ã幞éãè©Šãããšã«ããapache.commons.collectionsã®ã»ãŒæšæºçãªCircularFifoQueueã©ã€ãã©ãªããåæ§ã®å®è£ ãéžæããŸããã ããã¯FIFOãããã¡ã§ãããèªåã®äžã§ãªãã»ãããèªã¿åãããšãã§ããŸãã ããã«äœ¿çšã§ããä»ã®å®è£ ã§ã¯ãã»ãšãã©ã®å Žåããªãã»ããã§ã®èªã¿åããèš±å¯ãããŸããã§ããã
ãã®çµæãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸããïŒèªã¿åããšåæžãç°¡åã«ããããã«ããã¹ãŠã®ãŽããæšãŠãŸããïŒã
static CircularFifoQueue<Byte> circularBuffer = new CircularFifoQueue<>(4096); private static void processNPK() { FileInputStream fis = new FileInputStream(new File("NPK_WEP.NPK")); ByteBuffer b1kb = ByteBuffer.allocate(1024); while (fis.read(b1kb.array()) != -1) { int blocksInMegaBlockCount = EndianUtils.swapInteger(b1kb.getInt()); int compressedDataLenght = EndianUtils.swapShort(b1kb.getShort()); int decompressedDataLenght = EndianUtils.swapShort(b1kb.getShort()); while (b1kb.position()<compressedDataLenght) { readLZSBlock(b1kb); } if (blocksInMegaBlockCount == 1) {dumpFile(result);} } } private static void readLZSBlock(ByteBuffer bb){ byte controlByte = bb.get(); for (int i = 0; i < 8; i++) { if (isLiteral(controlByte,i)) { byte b = bb.get(); circularBuffer.add(b); result.write(b); } else result.write(getFromCBuffer(bb)); } } private static byte[] getFromCBuffer(ByteBuffer bb) { byte first = bb.get(); byte second = bb.get(); Integer lowNibble = Integer.valueOf(second & 0x0f); Integer highNibble = Integer.valueOf(((second & 0xf0) >> 4)); int offset = EndianUtils.readSwappedShort(new byte[] {first, highNibble.byteValue()}, 0); byte[] bytesFromBuffer = new byte[lowNibble+3]; for (int i = 0; i < (lowNibble+3); i++) { byte b = circularBuffer.get(offset); circularBuffer.add(b); bytesFromBuffer[i]=b; } return bytesFromBuffer; } private static boolean isLiteral(byte controlByte, int position) { if (((controlByte >> position) & 1) == 1) return true; else return false; }
圌ã®äœåã¯æ¬¡ã®ããã«èª¬æã§ããŸãã
1ïŒãã¡ã€ã«ã¯1024ãã€ãã«åå²ããã
2ïŒããããã«ã€ããŠãintãshortãshortãèªã¿èŸŒãŸããŸã
3ïŒæ®ãã¯ã¢ã³ããã«ãŒã§ã«ãŒããããŸãïŒreadLZSBlockïŒ
4ïŒæåã®ãã€ããèªã¿åããæ®ãã®åŠçãèŠã€ããŠããã®ãŸãŸæžã蟌ãããããããªã³ã¯ã®å Žåããããã¡ãŒããèªã¿åããããã¡ãŒåç §ãã³ãã©ãŒïŒgetFromCBufferïŒã«éä¿¡ããŸãã
5ïŒã¢ãŒã«ã€ãå ã®1ã€ã®ãã¡ã€ã«ãèªã¿åããããšããã£ã¹ã¯ã«ããŒãžãããŸã
å®è¡ã®çµæã¯æ¬¡ã®ãšããã§ãã

äžæ¹ã§ãããã¯è¯ãããšã§ãããå£ã®èŒªéãèŠãããã¥ãŒã¢ãŒã§ãã¡ã€ã«ãéãããŸãã äžæ¹ããã±ãã¿ãããã¡ãæ©èœããªãããšã¯æããã§ãããããããèªã¿åããããã¹ãŠã®ããŒã¿ã¯ã¬ããŒãžã§ããããšãæšæž¬ã§ããŸããæåã¯ãŒããã¬ããŒãžã§ããããã¡ã€ã«ã®äžéšãã»ãŒçœã§ããããããã¡ããã£ã±ãã«ãªããšã¬ããŒãžã«ãªãããšãããããŸãè²ã«ãªããŸããã åæã«ãå£ã®èŒªéãèŠããããã«ãªã£ãŠããŸãã
ãããã¡ãçµäºããå¿ èŠããããšæã£ãŠããã®ã§ãç§ã¯ããŸãåæºããŠããŸããã§ããã 念ã®ããããã£ã¹ã¯äžã®ä»ã®ãã¹ãŠã®ã¢ãŒã«ã€ããããã°ã©ã ã§å®è¡ããNPK_WEP.NPKã¢ãŒã«ã€ãã®æåã®ãã¡ã€ã«ãtimãã¡ã€ã«ãã¥ãŒã¢ãŒã§éããå¯äžã®ãã¡ã€ã«ã§ããããšã«é©ããã ã ããã圌ãšäžç·ã«å§ããã®ã¯ãšãŠãã©ãããŒã ã£ãã
次ã®ã¹ãããã¯ãé害ãçºçããå Žæãæ£ç¢ºã«ææ¡ããããšã§ããã ãã®ãããHEXãšãã£ã¿ãŒã§TIM圢åŒã®èª¬æãæã«å ¥ããŠæåã§ãã¡ã€ã«ã調ã¹å§ããŸããã åžæã¯ãããããŒã§é害ããã§ã«æ€åºãããŠããŠãã©ã®å€ãæ³å®ãããŠããŠãã©ã®å€ãå®éã«æžã蟌ãŸããŠããã®ããèŠã€ããããšãã§ãããããã¡ãŒã®ç¶æ ãç¥ã£ãŠãããã€ãä¿®æ£ããããšã§ããã
ãªãã»ãã0x214ã§é¡èãªãšã©ãŒãèŠã€ãããŸããã éåžžã®TIMãã¡ã€ã«ã«ã¯ããã®äžã®ããŒã¿ã®ãµã€ãºã«å¯Ÿå¿ããintããããããã©ã«ãã§ã¯TIMãã¡ã€ã«ã¯å§çž®ãããŠãããããµã€ãºã¯è§£å床ã«äŸåãããã¬ã€ã¹ããŒã·ã§ã³ã§ãã¬ãã®ãã«ã¹ã¯ãªãŒã³ã«åŒã䌞ã°ãããç»åã®è§£å床ã¯åãã§ãããšèããããŸã , .
éåžžã®ãã¡ã€ã«ã®äŸã次ã«ç€ºããŸãã

ããŒã¿ãµã€ãº00 01 E0 0Cã
ãããŠãããã«ç§ã®ãã¡ã€ã«ããããŸãïŒ

éåžžã®çªå·ã®ä»£ããã«ãããã«ããçš®ã®ãŽãããããŸãã
ã³ãŒããå°ãå€æŽãããšããã®å Žæã®åŠçã«é¢é£ããããŒã¿ãåŸãããŸããã
ãã¡ã€ã«ããèªã¿åããããªãã»ããã¯4092ã§ãé·ãã¯3ãã€ãã§ããã
ããã§ã®æã«ç§ã®ãããã¡ãèŠãŠã¿ãŸããããããªãã¯00 01 E0ãååŸããå¿ èŠããããŸã

ïŒãããã¡å šäœã§ãç§ã®ç»é¢ã§intermeddleã§ã¯ãããŸããããåãã«ç»åãããã¡ããã©ããå€ãã®ãŒãããããŸãã®ã§ãå®éã«ã¯ãããã¯ãçµããã§ãããïŒ
ã§çºèŠç®çã®ããŒã¿ããããã¡ãªã³ã°ãããšãæ··ä¹±ããŸããã
527ãã€ãã®ãæçšãªãæ¥ä»ããããã¡ã«ããã·ã¥ãããŸãããå¿ èŠãªããŒã¿ã¯ãããŒã¿å ¥åã®å é ãããªãã»ãã15ã§ããããã¡ã®å é ããçŽ3569ãªãã»ããã§èŠã€ãããŸãããç§ã«çºè¡ããããªãã»ãã4092ã§ããããã©ã®ããã«èããããšãã§ããããç解ã§ããŸããã§ããããŸãããã®èšäºã§18çªã«ã€ããŠèšåãããŠããããšãæãåºããŠãå¥ã®ãªãã»ããããå ç®ãšæžç®ãè©Šã¿ãŸããããæå³ã®ãããã®ã¯äœãåŸãããŸããã§ããã
ãã®çµæãã«ããã²ã£ãããŠãå ã®ãããã¡ãŒã®é 眮ãç§ã®ãã®ãšã¯ããªãç°ãªã£ãŠããããšã«æ°ä»ããã®ã§ãèšäºã«æ»ããã¹ããªãŒã ããã®èªã¿åãã䜿çšãããšãã«ãå®éã®ãªãã»ããããååŸããæ¹æ³ã«ã€ããŠèª¬æããŸããããã©ãŒãã¥ã©ã¯ã²ã©ãèŠããã®ã§ãæãäžããããšããã«ãã®ãŸãŸã³ããŒããŠãã¯ãªããããŒãã«åŒã£åŒµãããã«ããã€ãã®ã¢ããªã³è»ãè¿œå ããŸããããçµå±ãç§ã¯ãã®ãããªææãæããŸããïŒ
// int offset = EndianUtils.readSwappedShort(new byte[] {first, highNibble.byteValue()}, 0); // ( OUTPOS - ) int realoffset = OUTPOS - ((OUTPOS + 0xfee - offset) & 0xfff); // " " int realoffset2 = 4096 - OUTPOS + realoffset;
ïŒrealoffsetãšrealoffset2ã¯ç¢ºãã«ççž®ã§ããŸãããåäœãããã©ãã確信ãæãŠãªãã£ãã®ã§ããããã°çšã«ãã®ãŸãŸã«ããŠãããŸãããïŒ
ãããŠå¥åŠãªããšã«ãåäœããŸããïŒ

ããã¯åæ¢ããå¯èœæ§ããããŸããããããã¡ãŒã®æ²ç·ã®å®è£ ã¯ç§ã«äŒæ¯ãäžããŸããã§ããããããŠæãéèŠãªããšã¯ããªãã»ããã®èªã¿åãæã«éçºè èªèº«ãæ±ãããã¯ãæããããªãã»ãã4092ãåãåã£ãå Žåã«å¿ èŠãªããŒã¿ãå®éã«4092ã«ããããšã¯æããã ã£ãã®ã§ããããã¡ãŒãå®éã«ã©ã®ããã«é 眮ãããŠããããããããç解ãããã£ããšããããšã§ãã
ç§ã¯é·ãéãã©ããã£ãŠãããå®éã«å®è£ ãããã®ããæ£ç¢ºã«ããããŠæãéèŠãªããšã«ã¯ç解ããããã«ãçŽãšã¢ã¬ã€ãšãªã³ã°ã«å€ããæããŸããã
ãã®çµæã次ã®ããã«ãªããŸããã
public class ByteRingBuffer { private byte[] rBuf; // ring buffer data public int rBufSize = 4096; // ring buffer size public int writeReadOffsetCorrection = 18; public int lenghtCorrectionLZS = 3; private int rBufWrPos = rBufSize - writeReadOffsetCorrection; // position of first (oldest) data byte within the ring buffer public ByteRingBuffer() { rBuf = new byte[rBufSize]; } public byte write(byte bt) { rBuf[rBufWrPos++] = bt; if (rBufWrPos == rBufSize) rBufWrPos = 0; return bt; } public byte read(int offset) { return rBuf[offset & 0xfff]; } }
ç°¡åã«èšãã°ããããã¡ã¯éåžžã®ãã€ãé åã§ãããèªã¿åãã¯é åã®å é ããè¡ãããèªã¿åãããŒã«ãŒã¯ç§»åããŸããã§ãããå¯äžã®ããã¯ã¯ãé åãžã®æžã蟌ã¿ã®éå§ç¹ã0ã§ã¯ãªããé åã®ãµã€ãºãã18ãåŒãããã®ã§ãããšããããšã§ããã
ã€ãŸããæåã®æ®µéã§èšé²ãã€ã³ãã18ãããã ãã§ååã§ããããã®åŸããããã³ã°ãªãã§éãã«èªã¿æžãã§ããŸããããã®ã·ããªãªã§ã¯ãé åã«èšé²ããã15çªç®ã®ãã€ããå®éã«4092ãªãã»ãããããŸããã
ããã«ããéå»ããŸãã¯ãæªæ¥ãããèªã¿åãããã®ããã¯ã¯å¿ èŠãããŸããã§ããã
äžè¬ã«18ã®ãªãã»ãããå¿ èŠã ã£ãçç±ã¯ãå§çž®äžã«ãããã¡ããã£ã±ãã«ãªããšããã§ã«ãããã¡å ã«ããããŒã¿ã®äžéšãäžæžããããããã§ãããŸãã次ã®ç¶æ³ãçºçããå¯èœæ§ããããŸãã
1ïŒå§çž®å¯Ÿè±¡ã®ããŒã¿ããããã¡ã§æ€çŽ¢ãããŸãã
2ïŒèª¿ã¹ãŠãã ããã
3ïŒããããžã®ãªã³ã¯ãäœæããããããããããã¡ã«æžã蟌ãŸããŸãã
4ïŒãããã圌ãã¯æ¬è³ªçã«èªåèªèº«ãæžãçŽããŠãããããŒã
5ïŒãããŠããã®çµæãé©åãªé梱ãäžå¯èœã«ãªããŸããã
ããããããŒãã¹ãã£ã¹ã¯ããã®é©ãã¯ããã ãã§ã¯ãããŸãããä»ã®ã¢ãŒã«ã€ãã«ç§»åãããšãå¥åŠãªãç°åžžããçºèŠããŸããã
ããŒã¿ããããã«å°ãªãã¹ããŒã¹ãå ãã1024ãã€ããããã¯ãèŠããŠããŸããïŒãããã¯ã®æ®ãããã§ãã¯ãããŒãã ãã§ã¯ãªãå Žåã«éç¥ãçºè¡ããã³ãŒãããããŸãããæåã®ãã¡ã€ã«-NPK_WEP.NPKã§ã¯ãã³ãŒãã®ãã®éšåã¯æ©èœããŸããã§ãããã次ã®ãã¡ã€ã«ã§ã¯ãã§ã«ä»ã®ã»ãŒãã¹ãŠã®äžå®ã®èŠåããããã¢ãã衚瀺ãããŸããããã¡ã€ã«ãæ£ãã解åãããã®ã§ãã©ã®ãããªçš®é¡ã®ãäœåãªãããŒã¿ãæ«å°Ÿã«ãããã確èªããããšã«ããŸããããããŠå°ãã®ofigelãããããããšãªããã¢ãŒã«ã€ããããã¹ãŠã®ãã¬ããŒãžããå¥ã®ãã¡ã€ã«ã«ãã³ãããã³ãŒããè¿œå ããŸãããããã¯ããã®ã¬ããŒãžã§èŠã€ãããã®ã§ãã
æ¥æ¬èªã®ã³ã¡ã³ãä»ãã®ãœãŒã¹ã³ãŒãã®æç
<libetc.h> #include <libgte.h> #include <libgpu.h> #include <libsnd.h> #include <libgs.h> #include <KERNEL.H> #include <libsn.h> #include <libcd.h> *************************************************************************/ #include "ff.h" //#include "ff7list.h" #include "winsys.h" #include "cursol.h" #include "datafanm.inc" #include "dataflpk.inc" #include "lpk_sys.inc" #include "ffaku.h" #include "clickm.h" #include "npk_item.inc" /*****************************************************************************/ /* åå®çŸ© */ Z_CLUT, (long *)LPKBuf, (long *)ComnBuf #define DEFSET LZ_TIM | LZ_CLUT, (long *)MODELBuf, (long *)ComnBuf #define DEFSYS LZ_TIM | LZ_CLUT, (long *)SYSBuf, (long *)ComnBuf #define SUBBERMAX 3 #define SUBBERMAX 3 #define ZENGAMEN_X 168 /* åç»é¢ïŒžåº§æš */ #define ZIGAMEN_X 282 /* 次ç»é¢ïŒžåº§æš */ #define ZIGAMEN_Y 16, 17}; _BOXFTAG EXsubbox[SUBBERMAX]; /* ãµãã¡ãã¥ãŒçšã㌠*/ static int wait; /* ãŠã§ã€ã */ static int oldx; /* ããŠã¹ïŒžåº§æšååå€ä¿å */ static int oldy; /* ããŠã¹ïŒ¹åº§æšååå€ä¿å */ static int oldpad; /* ååã®ãããå€ä¿å/* åäž */ static int mode; /* ã¢ã¯ã»ã¹ãããã¡ã¢ãŒã */ static int Shop_Sel; /* ã·ã§ããæã®ã¢ã€ãã éžæ */ int EXdatflag; /* å€éšããåŒã°ããæåç
§ */ int EXdatnum; /* åäž */ static char /*ã³ãã ãã¡ã€ã«åä¿å */ extern _BOXFTAG EXbox01; /* éžæã㌠*/ /*****************************************************************************/ /* ãããã¿ã€ãå®£èš */ /*****************************************************************************/ void Item_ã» /* */ void ItemSelLoadEX(void); /*ïŸïŸïœžïŸïŸïŸïœšïœ¯ïœžïŸïŸïœ°ïŸïŸïœ°ïŸïŸ(å€éšåç
§çš)åŠç*/ void ShopList(void); /* ã·ã§ãããªã¹ãçæåŠç */ void ShopSel(void); /* ã·ã§ããé
ç®éžæåŠ */ /* */ /* 1997/05/07 GTV H.Mizukami */ /**************************** */ LLbox.r = 1; LLbox.g = 1; LLbox.b = 1; LLbox.x = 16-256; LLbox.y = 20-120; LLbox.w = 332; LLbox.h = 16; GsSort i = i - LLtbl[Q1]; if(i < 0) { ListPage[Q1] = n + 0x30; i = i + LLtbl[Q1]; */ /* 1997/03/26 GTV H.Mizukami */ /********************/ strcat(mlistbuf, akuselist[LLtop + Q1]); break; case 4: /* ãã®ä» */ strcat(mli /**/ /* 1997/04/22 GTV H.Mizukami */ /*****************************************************************************/ void Item_SelMenuInit(void) { WinFill LLwin; A/* ã¯ã»ãµãªãŒãéžæ */ case 4: /* ãã®ä»ãéžæ */ ListInit(item_menu); WinSetPos(wid[2], 128, 44, 16*20, 14*10); WinSetRGB(wid[2], 0, 0, 255, RGB_BUL); break; /* H.Mizukami */ /*****************************************************************************/ void Item_SelMenu(void) { int LLnum; MjsLoop(&EXtprm01); if((LLnum = MjsMenuStat(&EXtprm01)) == -1) return; /*se */ /* 1997/04/25 GTV H.Mizukami */ /*****************************************************************************/ void Item_Mat_SelInit(void) { WinFill LLwin; command = 2; EXsubbox[0].mode = 0; /* éžæããŒOFF */ /* æ¯æŽãããªã¢ */ char_pt = mat01_list; break; case 2: /* ã³ãã³ããããªã¢ */ char_pt = mat02_list; break; case 3: /* ç¬ç«ãããªã¢ */ char_pt = mat03_list; break; 1997/04/25 GTV H.Mizukami */ /*****************************************************************************/ void Item_Mat_Sel(void) { int LLpad; int LLnum = item_sel_mat; #ifdef DEBUG FntPrint("item_sel_mat = %d\n", item_sel_mat); #endif LLpad = Item_MatMouse(); if(oldpad == PADLup && item_sel_mat) item_sel_mat--; if(oldpad == PA if(LLpad == 0 || (oldpad & PADnext)) { command = 99; nextcommand = 2; } else { if((TGPad1 & PADRdown) || Char_cansel()) { command = 127; nextcommand = 0; TGPad1 |= PADnext; StopPreLoad(); /*******/ void ItemMat(void) { int LLpad = 1; GsBOXF LLbox; int LLnum = ItemListMatNum[item_sel_mat]; #ifdef DEBUG FntPrint("sel = %d max = %d\n", ItemListMatNum[item_sel_mat], ItemListMatMax[item_sel_mat]); #endif LLpad = Item_subMatMouse(); if(oldpad == PADLup && ItemListMatNum[item_sel_mat] > 1) ItemListMatNum[item_sel_mat] -= 2; ItemListMatNum[item_sel_mat] < ItemListMatMax[item_sel_mat] - 1) ItemListMatNum[item_sel_mat]++; if(LLnum != ItemListMatNum[item_sel_mat]) { _mt_sel_snd(); StopPreLoad(); } if(PreLoad == PL_NOUSE) ItemSelLoad((long *)(LPKBuf + BG_SZ)); EXsubbox[1].mode = 1; EXsubbox[1].b & PADRdown) || Char_cansel()) { command = 127; nextcommand = 2; TGPad1 |= PADnext; StopPreLoad(); } else { if((TGPad1 & PADnext) && LLpad == 0 || (oldpad & PADnext)) { command = 99; nextcommand = 3; / void Item_Char_SelInit(void) { WinFill LLwin; command = 2; EXsubbox[0].mode = 0; /* éžæããŒOFF */ WinNotDisp(wid[2]); memset(&LLwin, 0x00, sizeof(WinFill)); LLwin.flag = WINf_GRO; LLwin.wflag = WINw_001; LLwin.prm = 5; wid[3] = WinOpen(&LLwin); WinSetPos(wid[3], 128, 44, 1 */ /* 1997/03/31 GTV H.Mizukami */ /*********************************************************************************************************************************/ static void _init5(SCREEN_JOB *ps, int n) { WinFill LLwin; if(n == -1) { ShopList(); /* ã·ã§ãããªã¹ãçæ */ init_CursolEx(&EXmouse, 0, 256, 120, 32, 22, 3, 3); memset(&LLwin, 0x00, sizeof(WinFill)); LLwin.flag */ /* */ /* */ /* 1997/03/31 GTV H.Mizukami */ /*****************************************************************************/ static void _loop5(S */ MjsLoop(&EXtprm00); break; case 1: /* ã°ã©ãã£ãã¯è¡šç€º */ if(How_Kind_PadCon(0) == 1) SjsSel = 1; else SjsSel = 0; ic_flag = 0; break; case 99: if(anmwait == FsOpen(TOWNFILE); FsSeek(tmpcmp.lcv_offset+tmpcmp.bg_offset); FsReadLzs((long*)LPKBuf,tmpcmp.bg_size); /* Miz*/ FsOpen(tmpcmp.lpkname); FsSeek(tmpcmp.bg_offset); FsReadLzs((long*)LPKBuf,tmpcmp.bg_size); /**/ PreLoad=PL_USENOW; /* 1997/03/31 GTV H.Mizukami */ /*****************************************************************************/ static int _before5(SCREEN_JOB *ps, int n) { if(command == 0) return(1); command--; return(0); } /***********************/ raw(); } } /*****************************************************************************/ /* çµäºåŠç */ /* **********/ /* ã¢ãã¡ãŒã·ã§ã³ã«ãŒãåŠç */ /* */ /* ***************************************************************/ /* ã¢ãã¡ãŒã·ã§ã³ããŒã¿ */ /**************************************/ CR_NOTPUSH, _sinit5, _init5, _loop5, NULL, NULL, NULL, _draw5, _end5, wp, {NULL,}, 512, 240, NULL, 0, NULL, 0, 1, }; /************** */ /* */ command = 0; Shop_Sel = 0; SjsSel = 0; SjsSetBeforeKey(NULL); } anmwait = 0; } /**************************************************/ ; #endif oldx = EXmouse.cx; oldy = EXmouse.cy; oldpad = TGPad1; if(How_Kind_PadCon(0) == 1) read_Mouse_Data(&EXmouse, 1); SjsSel = 1; switch(command) { StopPreLoad(); SetTim(LPKBuf, 512, 0, 0, 480); _mt_ok_snd(); anmwait = 0; SjsSel=0; SjsSetMode(&scr_list); return; } } else { command--; _t_cancel_snd(); } } } /*****************************************************************************/ /*******************************************************************/ static void _init5(SCREEN_JOB *ps, int n) { WinFill LLwin; if(n == -1) { ShopList(); /* ã·ã§ãããªã¹ãçæ */ init_CursolEx(&EXmouse, 0, 256, 120, 32, 22, 3, 3); memset(&LLwin, 0x00, sizeof(WinFill)); LLwin.flag */ /* */ /* 1997/03/31 GTV H.Mizukami */ /*****************************************************************************/ static void _loop5(Swait == h> /**************************************************************************/ #include "ff.h" //#include "ff7list.h" #include "winsys.h" #include "cursol.h" #include "datafanm.inc" #include "dataflpk.inc" #include "lpk_sys.inc" #include "ffaku.h" #include "clickm.h" #include "npk_item.inc" /*****************************************************************************/ /* åå®çŸ© GAMEN_X 168 /* åç»é¢ïŒžåº§æš */ #define ZIGAMEN_X 282 /* 次ç»é¢ïŒžåº§æš */ #define ZIGAMEN_Y 1Oåå€ä¿å */ static int oldpad; /* ååã®ãããå€ä¿å åäž */ static char ************************************/ void Item_opSel(void); /* ã·ã§ããé
ç®éžæåŠ7 GTV H.Mizukami */ /**************************** */ = 1; LLbox.g = 1; LLbox.b = 1; LLbox.x = 16-256; LLbox.y = 20-120; LLbox.w = 332; LLbox.h = 16; GsSortLLtbl[Q1]; if(i < 0) { ListPage[Q1] = n + 0x30; i = i + LLtbl[Q1]; /* */ /* 1997/03/26 GTV H.Mizukami */ /******************** /* ã¢ã¯ã»ãµãªãŒ */ */ strcat(mlistbuf, akuselist[LLtop + Q1]); break; case 4: /* ãã®ä» */ strcat(mli */ /* 1997/04/22 GTV H.Mizukami */ /*****************************************************************************/ void Item_SelMenuInit(void) { WinFill LLwin;ã¢ã¯ã»ãµãªãŒãéžæ */ case 4: /* ãã®ä»ãéžæ */ ListInit(item_menu); WinSetPos(wid[2], 128, 44, 16*20, 14*10); WinSetRGB(wid[2], 0, 0, 255, RGB_BUL); break; **********************************************************************/ void Item_SelMenu(void) { int LLnum; MjsLoop(&EXtprm01); if((LLnum = MjsMenuStat(&EXtprm01)) == -1) return; /*se 1997/04/25 GTV H.Mizukami */ /*****************************************************************************/ void Item_Mat_SelInit(void) { WinFill LLwin; command = 2; EXsubbox[0].mode = 0; /* éžæããŒOFF at01_list; break; case 2: /* ã³ãã³ããããªã¢ */ char_pt = mat02_list; break; case 3: /* ç¬ç«ãããªã¢ */ char_pt = mat03_list; break; /* 1997/04/25 GTV H.Mizukami */ /*****************************************************************************/ void Item_Mat_Sel(void) { int LLpad; int LLnum = item_sel_mat; #ifdef DEBUG FntPrint("item_sel_mat = %d\n", item_sel_mat); #endif LLpad = Item_MatMouse(); if(oldpad == PADLup && item_sel_mat) item_sel_mat--; if(oldpad == PA if(LLpad == 0 || (oldpad & PADnext)) { command = 99; nextcommand = 2; } else { if((TGPad1 & PADRdown) || Char_cansel()) { command = 127; nextcommand = 0; TGPad1 |= PADnext; StopPreLoad(); void ItemMat(void) { int LLpad = 1; GsBOXF LLbox; int LLnum = ItemListMatNum[item_sel_mat]; #ifdef DEBUG FntPrint("sel = %d max = %d\n", ItemListMatNum[item_sel_mat], ItemListMatMax[item_sel_mat]); #endif LLpad = Item_subMatMouse(); if(oldpad == PADLup && ItemListMatNum[item_sel_mat] > 1) ItemListMatNum[item_sel_mat] -= 2; ItemListMatNum[item_sel_mat] < ItemListMatMax[item_sel_mat] - 1) ItemListMatNum[item_sel_mat]++; if(LLnum != ItemListMatNum[item_sel_mat]) { _mt_sel_snd(); StopPreLoad(); } if(PreLoad == PL_NOUSE) ItemSelLoad((long *)(LPKBuf + BG_SZ)); EXsubbox[1].mode = 1; EXsubbox[1].b & PADRdown) || Char_cansel()) { command = 127; nextcommand = 2; TGPad1 |= PADnext; StopPreLoad(); } else { if((TGPad1 & PADnext) && LLpad == 0 || (oldpad & PADnext)) { command = 99; nextcommand = 3; / void Item_Char_SelInit(void) { WinFill LLwin; command = 2; EXsubbox[0].mode = 0; /* éžæããŒOFF */ WinNotDisp(wid[2]); memset(&LLwin, 0x00, sizeof(WinFill)); LLwin.flag = WINf_GRO; LLwin.wflag = WINw_001; LLwin.prm = 5; wid[3] = WinOpen(&LLwin); WinSetPos(wid[3], 128, 44, 1 case 3: /* ã¬ããïŒïŒã®æŠåš */ char_pt = char03_list; break; case 4: /* ãšã¢ãªã¹ã®æŠåš */ char_pt = char04_list; break; case 5: /* ã·ãã®æŠåš */ char_pt = char05_listNum[item+ 1 >= BAEMax[item_menu]) bak = 1; else { bak = BAENum[item_menu]; BAENum[item_menu]++; ItemSelLoad((long *)MODELBuf); BAENum[item_menu] = bak; bak = ItemListNum[item_sel_hero]; break; case 1: /* é²å
· */ SjsSel = 0; switch(item_menu) dispcom = 99; dispcom = 99; DEBUG FntPrint("mat sel = %d\n", ItemListMatNum[item_sode(&scr_item_disp); oid cu_l(ANM2D *a2, ANMOBJ *ao) { ao->wait = 1; if(dispcom == 99 || wait) return; if(item_menu != 0 && item_menu != 3) /* ã¢ãã¡ãŒã·ã§ã³ã«ãŒãã©ã€ãåŠç */ /* */ if(ItemListMatNum[item_sel_mat] < ItemListMatMax[item_sel_mat] - 1) { ao->wait = 0; ao->Move(ao, 1); /*****************************************************************************/ /* ã¢ãã¡ãŒã·ã§ã³ããŒã¿ */ /*****************************************************************************/ static ANM2D anm2[L, wp2, {NULL,}, 512, 240, NULL, 0, NULL, 0, 1, }; /*****************************************************************************/ /* ã¯ãŒã«ããããããåŒã°ããä»æ§ã¹ã¯ãªãŒã³ãžã§ãé¢é£åŠç */ /* }; /*****************************************************************************/ /* ã¯ã€ãããŒãã« */ /*****************************************************************************/ static WIPE_PRM wp3[] = { {&WjCinCout,16,itch(EXdatflag) { case 0: /* æŠåš */ *AGoffset = BukSZTBL[EXdatnum].offset; *AGsize = BukSZTBL[EXdatnum].size; : /* ãããªã¢ */ *AGoffset = MatSZTBL[EXdatnum].offset; *AGsize = MatSZTBL[EXdatnum].size; strcpy(LLbuf, "ITEM\\MATER\\MATER.FFD"); break; /* 1997/03/28 GTV */ /*****************************************************************************/ static void _sinit3(SCREEN_JOB *ps, int n) { char LLbuf[64]; int i, Q1; int LLnum, LLoffset, LLsize; if(n == -py(LLbuf, Item_Image_TBL01[i]); break; case 2: // ã¢ã¯ã»ãµãªãŒLLoffset = AkuSZTBL[EXdatnum].offset; LLsize = AkuSZTBL[EXdatnum].size; strcpy(LLbuf, Item_Image_TBL02[i]); break; case 3: // ãããªã¢dSync(0); break; case PL_DONE: break; case PL_NOUSE: case PL_MUSTNOT: default: select_gfile(LLbuf, &LLoffset, &LLsize); FsOpen(LLbuf); FsSeek(LLoffset); FsReadLzsB((long*)LPKBuf, */ /* */ /* 1997/03/28 GTV */ /*****************************************************************************/ static void _init3(SCREEN_JOB *ps, int n) { SjsSel = 0; wait = 4; Sjs */ /*****************************************************************************/ static void _loop3(SCREEN_JOB *ps) { ClickMap tmpcmp; // å
èªã¿çšTEMPã¯ãªãã«ãã«ãããif(!PreLoad) { StopPreLoad(); tmpcmp=town_cmp[j_sel]; FsOpen(TOWNFILE); FsSeek(tmpcmp.lcv_offset+tmpcmp.b /* *****************************************************************/ /* çµäºåŠç */ /* */ /* */ /* */ 56|SCR_NOTPUSH, _sinit3, _init3, _loop3, NULL, NULL, NULL, NULL, _s_end, wp3, {&WjCinCout,64,0,0,0}, 512, 240, NULL, 0, NULL, 0, 1, }; /*****************************************************************************/ /* ã·ã§ãã(ã¢ã€ãã é
ç®éžæ)åŠç */ el < list_tbl_num - 1) Shop_Sel++; if(LLnum != Shop_Sel) { _mt_sel_snd(); StopPreLoad(); } if(PreLoad == PL_NOUSE) { switch(list_tbl[Shop_Sel].f) { case 0: for(Q1 = 0, i = 0; Q1 < list_tbl[Shop_Sel].n0; Q1++) *************************************************************************/ #include "ff.h" #include "ff7list.h" #include "winsys.h" #include "cursol.h" #include "datafanm.inc" #include "dataflpk.inc" #include "lpk_sys.inc" #include "ffaku.h" #include "clickm.h" #include "npk_item.inc" /*****************************************************************************/ /* åå®çŸ© */ Buf, (long *)ComnBuf #define DEFSYS LZ_TIM | LZ_CLUT, (long *)SYSBuf, (long *)ComnBuf #define SUBBERMAX 3 #define SUBBERMAX 3 #define ZENGAMEN_X 168 /* åç»é¢ïŒžåº§æš */ #define ZIGAMEN_X 282 /* 次ç»é¢ïŒžåº§æš */ #define ZIGAMEN_Y 15 /* ãŠã§ã€ã */ static int oldx; /* ããŠã¹ïŒžåº§æšååå€ä¿å */ static int oldy; /* ããŠã¹ïŒ¹åº§æšååå€ä¿å */ static int oldpad; /* ååã®ãããå€ä¿å ãæåç
§ */ int EXdatnum; /* åäž */ static char EXeéžæåŠç**********tBo[Q1]; *********cat(mlist set_ c== PADLmat] -= 2; rt; if(How_Kind_PadCon(0) == 4) /* ãããã§æäœãïŒ */ { set_Cursol_Point */ /* 1997/03/26 GTV H.Mizukami */ /****/ if(oldpad == PADLup && LLsel > 1) BAENum[item_menu] -= 2; if(oldpad == PADLdown && LLsel < LLend - 2) BAENum[item_menu] += 2; if(oldpad == PADLleft && LLsel % 2) BAENum[item_menu]--; if(oldpad == PADLright && (LLsel % 2) == 0 && LLsel < LLend - 1) BAENum[item_menu]++; if(LLnum != BAENum[item_me set_Cursol_Point(&EXmouse, ZENGAMEN_X, ZIGAMEN_Y); } StopPreLoad(); return; } if((((EXmouse.cx > 250 && EXmouse.cy > 10 && EXmouse.cx < 300 && EXmouse.cy < 22) && (TGPad1 & PADnext)) || (oldpad == PADR1)) && LLend == 20 && LLtop + 20 != BAEMax[item_menu]) { 1; EXsubbox[0].ber.attribute = 0; EXsubbox[0].ber.r = 0; EXsubbox[0].ber.g = 128; EXsubbox[0].ber.b = 0; EXsubbox[0].ber.x = LLsel % 2 * 161 + 122+8 - 256; EXsubbox[0].ber.y = LLsel / 2 * 14 + 44 - 120; EXsubbox[0].ber.w = 156; EXsubbox[0].ber.h = 14; if(How_Kind_PadCon(0) == 4) { set_Curtprm03); } /*****************************************************************************/ /* æŠåšãªã¹ãåŠç */ /* */ /* */ /* */ ItemListMax[item_sel_hero] - 2) { ItemListNum[item_sel_hero] += 2; if(ItemListNum[item_sel_hero] >= ItemListMax[item_sel_hero]) ItemListNum[item_sel_hero] = ItemListMax[item_sel_hero] - 1; } if(oldpad == PADLleft && ItemListNum[item_sel_hero] % 2) */ /* */ /* */ /* 1997/03/31 GTV H.Mizukami */ /*********************************************************************** */1; else SjsSel = 0; ic_flag = 0; break; case 99: _; / /* ****** ******/ /* å¬åã» */ MjsLown && ItemLa 20char05_list; t_Cursol_Point(&***u }, {_O_AKU04_FFD, _S_AKU04_FFD}, {_O_AKU05_FFD, _S_AKU05_FFD}, {_O_AKU06_FFD, _S_AKU06_FFD}, }; PFileDat Npk_BouSZTBL[] = {{_O_BOUGU00_FFD, _S_BOUGU00_FFD}, {_O_BOUGU01_FFD, _S_BOUGU01_FFD}, UKI09_FFD, _S_BUKI09_FFD}, {_O_BUKI10_FFD, _S_BUKI00_FFD}, {_O_BUKI11_FFD, _S_BUKI11_FFD}, #define _S_GUA_021_TIM 56566 #define _O_GUA_022_TIM 0xe000 #define _S_GUA_022_TIM 67549 #define _O_GUA_023_TIM 0x1e800 #define _S_GUA_023_TIM 61491 #define _O_GUA_024_TIM 0x2e000 #define _S_GUA_024_TIM 67618 #define _O_GUA_025_TIM 0x3f000 #define _S_GUA_025_TIM 68968 #define _BOUGU04_FFD_SIZE 327680 /*** [EOF] ***/ /*** NPK Header File ***/ #define _O_GUA_02
ãããããRAMå ã®æªå²ãåœãŠã®æçšãªæ å ±å Žæã¯ãã¡ã¢ãªããããã®ãŸãŸããã£ã¹ã¯ã«ãã³ãããã以åã®æ å ±ãå«ãŸããŠããŸããããœãŒã¹ã³ãŒãã«å ããŠãã³ã³ãã¥ãŒã¿ãŒã®ã¡ã¢ãªã«è¡šç€ºããããšäºæ³ããããã¿ãããã»ã¹ã€ã¡ãŒãžïŒãã£ã¹ã¯èªäœã®å®è¡å¯èœãã¡ã€ã«ãå«ãïŒãªã©ããããŸãã
ãã£ã¹ã¯äžã®ä»ã®ã¢ãŒã«ã€ãã®æ§é ã¯ãŸã£ããåããé¡äŒŒããŠãããããããã§ããããå解ããæå³ã¯ãããŸããã
念ã®ãããç§ã®ãgovnokodaãã®ãã«ããŒãžã§ã³ãžã®ãªã³ã¯ã
ããã ãã§ããèªãã§é¢çœããŠã誰ãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
PSïŒæ¬åœã«ã€ãŸããªããã®ã«æ°ã¥ããããããããã®ã€ã¥ããå¥èªç¹ã®ééãããaã³ããŸããããããæžããŠä¿®æ£ããŸãã