![](https://habrastorage.org/getpro/habr/post_images/9d4/579/787/9d4579787e58b62d45606ac707104072.png)
8ããããã³ããæ¶ç©ºã®TIC-80ã³ã³ãœãŒã«çšã®ã²ãŒã ã
ãã®æçš¿ã¯ãæ¶ç©ºã® TIC-80 ã³ã³ãœãŒã«çšã®ã·ã³ãã«ãªã¯ã©ã·ãã¯ã¹ã¿ã€ã«ã®ãã©ãããã©ãŒããŒã§ãã8ããããã³ããã©ã®ããã«æžãããã«é¢ãããã®ã§ã ã
ãã㧠å®æããã²ãŒã ããã¬ã€ã§ã ãŸã ã
ããªããã¬ããã²ãŒã ã®ãã¡ã³ã§ããã°ã©ãã³ã°ã奜ããªããããããææ°ã®ãã¬ã³ãã§ããæ¶ç©ºã®ã³ã³ãœãŒã«ã«æ £ããŠããã§ãããã ããã§ãªãå Žåã¯ãæãæåãªä»£è¡šè ã§ããPICO-8ããã³TIC-80ã調ã¹ã䟡å€ããããŸãã
TIC-80ãéžæããã®ã¯ãç¡æã§ç©æ¥µçã«éçºãããŠãããPICO-8ãããã¢ã¹ãã¯ãæ¯ãåºãïŒ240x136ïŒãHTMLãAndroidãPCçšã®ãã€ããªãã¡ã€ã«ãå«ãå€ãã®ãã©ãããã©ãŒã ã«ãšã¯ã¹ããŒãã§ããããã§ãã
ãã®èšäºã§ã¯ãTIC-80çšã«ã·ã³ãã«ãª8ããããã³ããã©ãããã©ãŒããŒãã©ã®ããã«äœæãããã説æããŸãã
äž»äººå ¬
ãŸãããã¬ã€ã€ãŒãã£ã©ã¯ã¿ãŒãå¿ èŠã§ããã ç§ã¯ããã«ã€ããŠããŸãèããŸããã§ãããèšèšããã»ã¹ã¯åºæ¬çã«ããã³ãã§ã¯ãªãã®ã¯ãªãã§ããïŒããšãã質åã§æ§æãããŠããŸããããã®çãã¯ããã¡ããããªãã§ããïŒã 80ïŒ
![ç»å](https://habrastorage.org/getpro/habr/post_images/06e/319/c39/06e319c394f35d1d4ed23a695d3d52a1.png)
èžè¡çãªã¹ãã«ã®å°è±¡çãªäžè¶³ãã楜ãã¿ããã ããŸããã16è²ã®8x8ã¹ãã©ã€ãã®çµã¿åããã¯2,256åãã䜿çšã§ããªãããšãèæ ®ãã䟡å€ããããŸãã ãããã®ããã€ãã ãããã³ãã«ãªããŸãã ãããææªã®çµã¿åããã§ãããšããçµè«ã«è³ããªãå Žåã¯ããäžèŸã«ãªããŸãã
ãããåºç€ãšããŠãç§ã¯ä»ã®ããŒãºã®äž»äººå ¬ãè¡šãããã€ãã®ã¹ãã©ã€ããæããŸããïŒãŠã©ãŒãã³ã°ããžã£ã³ããæ»æãªã©ã
![ç»å](https://habrastorage.org/getpro/habr/post_images/817/435/250/817435250fe527214155dd33fe392b46.gif)
ããã§ãã³ããæãã¬ãã¹ã³ãèŠã€ããããšãæåŸ ããŠãããã¹ãŠã®èªè ãééããªãç§ã«èãåããã®ã§ãã³ãŒããèŠãŠã¿ãŸãããã
ãœãŒã¹ã³ãŒãã圹ç«ã€ãšæãå Žåã¯ãç§ã®ãœãŒã¹ã³ãŒãã調ã¹ãããšãã§ããŸã ã ããããããã¯å¿ èŠã§ã¯ãããŸãããåãããã¯ã§å¯èœãªéãå€ãã®ã³ã³ããã¹ããäŒããããã«ããããã§ãã ãã¡ããããœãŒã¹ã³ãŒãå šäœã調æ»ããã®ã§ã¯ãªããéçºäžã«åºäŒã£ãèå³æ·±ãç¹ã«ã€ããŠã話ããŸãã
ã¬ãã«äœæ
TIC-80ã«ã¯ãã¬ãã«ãäœæããããã«äœ¿çšã§ããïŒããã³äœ¿çšããå¿ èŠãããïŒããããšãã£ã¿ãŒãçµã¿èŸŒãŸããŠããŸãã ããã䜿çšããã®ã¯éåžžã«ç°¡åã§ãïŒããã¯ã¿ã€ã«ã®éåžžã®ãããªãã¯ã¹ã§ãåã¿ã€ã«ã¯ã¹ãã©ã€ãããŒãã«ã®äžéšã«ãã256åã®ã¹ãã©ã€ãã®ããããã§ãïŒäžéšã«ã¯256ãã511ã®ã€ã³ããã¯ã¹ããããã²ãŒã äžã«æç»ã§ããŸããããããäžã«ã¯é 眮ã§ããŸããïŒè¡šç€ºããã«ã¯9ããããå¿ èŠã§ãïŒã
ã¹ãã©ã€ããšã¿ã€ã«ïŒ TIC-80ã§ã¯ããã¹ãã©ã€ããã¯8x8ãã¯ã»ã«ã«ãŒããªããžå ã®512åã®å®çŸ©æžã¿ç»åã®1ã€ãæããŸãã ãããã¿ã€ã«ã¯åãªãã¹ãã©ã€ãã§ãïŒåãããã¿ã€ã«ã¯ãã¹ãã©ã€ãããŒãã«ã®äžååã«ãã256åã®ã¹ãã©ã€ãã®ããããã«ãªããŸãïŒã ãããã£ãŠãã°ã©ãã£ãã¯èŠçŽ ã«é¢ããŠã¯ãã¹ãã©ã€ãããšèšããæè¡çã«ã¯ã»ã«ã«ã¹ãã©ã€ããå«ãŸããŠããŠãããããã®ã»ã«ãæããšãã¯ãã¿ã€ã«ããšèšããŸãã èŠçŽãããšãããã¯ãã¹ãŠéèŠã§ã¯ãªããã¿ã€ã«ãšã¹ãã©ã€ãã¯ãŸã£ããåããã®ã§ãã
ãŸãæåã«ãããããšãã£ã¿ãŒã䜿çšããŠãããªãåçŽãªãã¬ãã«ããäœæããŸããã
![ç»å](https://habrastorage.org/getpro/habr/post_images/ca8/abb/56a/ca8abb56ac4ccc021efb80f59fadfdcd.gif)
ãŸããã¿ã€ã«ã«ã¯äž»ã«2ã€ã®ã¿ã€ããããããšã«æ³šæããŠãã ããã
- ãã¬ãŒã€ãŒãç«ã€ããšãã§ãããã¬ãŒã€ãŒã®åãããããã¯ããããŒãã¿ã€ã« ïŒåãšå+èã®ã¿ã€ã«ïŒã
- è£ é£Ÿã¿ã€ã« ïŒæšãèãã©ã³ã¿ã³ãç³ãªã©ïŒã ãããã¯çŸã®ããã ãã«å¿ èŠã§ãããã²ãŒã å ã®äœã«ã圱é¿ããŸããã
åŸã§ãšã³ãã£ãã£ã¿ã€ã«ã«ã€ããŠç¥ãããšã«ãªããŸãããä»ã®ãšãããããã«ã€ããŠã¯èª¬æããŸããã ã³ãŒãã¯ãã¿ã€ã«ãåºäœãã©ãããäœããã®æ¹æ³ã§éä¿¡ããå¿ èŠããããŸãã åçŽãªã¢ãããŒããéžæããã¹ãã©ã€ãã€ã³ããã¯ã¹ïŒ80ïŒã«å¶éããããšã«ããŸãããã¹ãã©ã€ãã€ã³ããã¯ã¹ã<80ã®å Žåãã¿ã€ã«ã¯ãœãªããã§ãã 80以äžã®å Žåãã¿ã€ã«ã¯è£ 食ã«äœ¿çšãããŸãã ãããã£ãŠãã¹ãã©ã€ãããŒãã«ã§ã¯ããã¹ãŠã®ãœãªããã¿ã€ã«ãã€ã³ããã¯ã¹80ã«æç»ãã80ã®åŸã®ãã¹ãŠã®è£ 食ã¿ã€ã«ãæç»ããŸããã
![ç»å](https://habrastorage.org/getpro/habr/post_images/e59/b35/ec2/e59b35ec24f2477ca18b3c576ac666be.gif)
ããããåŸ ã£ãŠãã ãããæ°Žã¯åºäœã§ã¯ãããŸããïŒ åœŒå¥³ã¯ããŒãã¹ãã©ã€ãã§äœãããŸããïŒ ãªãŒããŒã©ã€ãã«ã€ããŠã¯ãäŒãããŸããã§ãããããã©ã«ãã®ç¡¬åºŠã眮ãæããããšãã§ããã¹ãã©ã€ãã®ç¡¬åºŠã®ãªãŒããŒã©ã€ãã®ãªã¹ãããããŸãã 圌ã¯ãããšãã°ãæ°Žã¿ã€ã«ã¯ç¡¬ãã¿ã€ã«ã®ããéšåã®ã¹ãã©ã€ãããŒãã«ã«ããã«ãããããããå®éã«ã¯åºäœã§ã¯ãªãããšãæããŠãããŸãã ããããã²ãŒã ã«åœ±é¿ãäžãããããè£ é£Ÿã§ã¯ãããŸããã
ãã¬ã€ã€ãŒã®ã¹ããŒã¿ã¹
ããã°ã©ããŒãšããŠã®ãã£ãªã¢ã®äžã§äœããåŠãã å Žåãã°ããŒãã«å€æ°ãæªããšããããšã§ããããã·ã³ã°ã«ãã³ããªã©ã®èå³æ·±ãååãæãã€ããå Žåã«äœ¿çšã§ããŸãã ãããã£ãŠãã²ãŒã ã®ç¶æ ãèšå®ããããã€ãã®ãã·ã³ã°ã«ãã³ããå®çŸ©ããŸããã ãã®çšèªã¯OOPã§ã¯ãªããããéåžžã«singleæçã«äœ¿çšããŸããå®éãå®éã®ã·ã³ã°ã«ããŒã³ã§ã¯ãªããé«ã¬ãã«ã®æ§é äœã§ãã
ãŸãã倧äžå€«ãããã¯åœŒããäœãšåŒã°ãããã¯é¢ä¿ãããŸããã Plrããå§ããŸããããããã¯ãç¹å®ã®æç¹ã§ã®ãã¬ãŒã€ãŒã®ç¶æ ãèšå®ããŸãã
Plr={ lives=3, x=0,y=0, grounded=false, ... }
ä»ã®å€ãã®ãã£ãŒã«ãããããŸãããããã§æãéèŠãªããšã¯ããã®ãªããžã§ã¯ããçŸåšã®ã¬ãã«ã§ãã¬ã€ã€ãŒã®å šäœã®ç¶æ ãä¿åããããšã«æ³šæããããšã§ãïŒãã¬ã€ã€ãŒãã¬ãã«ã«ããããžã£ã³ãããŠããããå°é¢ã«ç«ã£ãŠãæ³³ãã§ãæ°Žé¢ã«æ»ããæ»ã«ãããŠãããé£è¡æ©ã§ã®é£è¡ïŒã¯ããããã¯é£è¡æ©ã§é£è¡ãããã³ãã®1ã€ã§ãïŒããã€ã³ããã¢ã¯ãã£ããªããŒãã¹ãªã©
ãã¬ã€ã€ãŒã®ç¶æ ãšã¯å¥ã®ã²ãŒã ã®ç¶æ ããããŸãã äŸãã°
Game={ m=M.BOOT, -- lvlNo=0, -- , ... }
çŸåšã®ã¢ãŒãïŒããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãïŒãçŸåšã®ã¬ãã«ãããã³å®è¡äžã«èšç®ãããã²ãŒã å šäœã®ããŒã¿ãªã©ã®å€ãä¿åããŸãã
ã²ãŒã ã®ç¶æ ãšãã¬ãŒã€ãŒã®ç¶æ ãåé¢ãããšäŸ¿å©ã§ããã¬ãã«ãéå§/åèµ·åããã ãã§ååã§ããã²ãŒã ã®ç¶æ ã«è§Šããã«ãã¬ãŒã€ãŒã®ç¶æ ããªã»ããããã³åé€ããã ãã§ååã§ãã
ã¬ãã«ãšãã¬ãŒã€ãŒã®ã¬ã³ããªã³ã°
TIC-80ã§ã¬ãã«ãšãã¬ã€ã€ãŒãã¬ã³ããªã³ã°ããã®ã¯éåžžã«ç°¡åã§ãã å¿ èŠãªããšã¯ã mapïŒïŒãåŒã³åºããŠããããæç»ïŒåå²ïŒãã sprïŒïŒãåŒã³åºããŠä»»æã®å Žæã«ã¹ãã©ã€ããæç»ããããšã ãã§ãã ãããã®å·Šäžé ããã¬ãã«ãæç»ããŠããã®ã§ã次ã®ããã«åçŽã«æç»ã§ããŸãã
COLS=30 ROWS=17 function Render() map(0,0,COLS,ROWS) end
次ã«ããã¬ãŒã€ãŒãè¿œå ããŸãã
PLAYER_SPRITE=257 spr(PLAYER_SPRITE, Plr.x, Plr.y)
ãããŠã次ã®ãã®ãåŸãããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/168/c49/753/168c49753ac9019c424de6a6c176533c.gif)
ãããŠããã¡ããããã³ãã¯é ã«æ®ããäœãããŸããã ããã¯ã²ãŒã ã«ããŸã䌌ãŠããŸãããããŸã çµãã£ãŠããŸããã
ãã¡ãããåæ¹ã«ç§»åãããšãã«ã«ã¡ã©ããã¬ãŒã€ãŒã«ä»éãããµã€ãã¹ã¯ããŒã©ãŒãå®è£ ããå Žåããã¹ãŠãããè€éã«ãªããŸãã 次ã®ããšãè¡ããŸãããç»é¢ãå³ã«ã¹ã¯ããŒã«ããè·é¢ã決å®ããGame.scrå€æ°ãäœæããŸããã 次ã«ãç»é¢ãã¬ã³ããªã³ã°ãããšãã«ãããããã®ãã¯ã»ã«æ°ã ãå·Šã«ç§»åãããã¹ãŠãã¬ã³ããªã³ã°ãããšãã¯åžžã«Game.scrãå·®ãåŒããŠãç»é¢ã®é©åãªå Žæã«æ¬¡ã®ããã«æç»ããŸãã
spr(S.PLR.STAND, Plr.x - Game.scr, Plr.y)
ããã«ãå¹çã®ããã«ãã¬ãã«ã®ã©ã®éšåãä»»æã®ãã€ã³ãããèŠãããã決å®ãããã®å šäœã§ã¯ãªããç»é¢äžã®ãããã®ãã®é·æ¹åœ¢ã®ã¿ãæç»ããŸãã glyã詳现ã¯ã RendMapïŒïŒé¢æ°ã«ãããŸãã
次ã«ããã¬ãŒã€ãŒã®ã¢ã¯ã·ã§ã³ã«å¿çããŠãã³ãã移åãããããžãã¯ãèšè¿°ããå¿ èŠããããŸãã
ãã³ããåãã
ãããªåå¹ã§èšäºãæžããšã¯æã£ãŠããŸããã§ãããã人çã¯é©ãã«æºã¡ãŠããŸãã ãã³ãã¯ç§ãã¡ã®äž»äººå ¬ã§ããããã©ãããã©ãŒã ã²ãŒã ã§ã¯ãã¹ãŠãåãããžã£ã³ããããããããã³ãã®åãããã²ãŒã ã®äžå¿ã§ãããšåççã«èšãããšãã§ããŸãã
ã移åãã®éšåã¯éåžžã«åçŽã§ããPlr.xãšPlr.yãå€æŽããã ãã§ããã®åŸãã³ããå¥ã®å Žæã«è¡šç€ºãããŸãã ãããã£ãŠãã ãŒãã¡ã³ãã®æãåçŽãªå®è£ ã¯ã次ã®ããã«æžãããšãã§ããŸãã
if btn(2) then Plr.x = Plr.x - 1 elseif btn(3) then Plr.x = Plr.x + 1 end
TIC-80ã§ã¯ã btnïŒ2ïŒãå·ŠããŒã§ããã btnïŒ3ïŒãå³ããŒã§ããããšãæãåºããŠãã ããã ãããããã®æ¹æ³ã§ã¯ãæ°Žå¹³æ¹åã«ãã移åã§ãããå£ãšè¡çªããããšã¯ã§ããŸããã éåãšé害ãèæ ®ããŠããã£ãšè€éãªãã®ãå¿ èŠã§ãã
function UpdatePlr() if not IsOnGround() then -- Plr.y = Plr.y + 1 end if btn(2) then Plr.x = Plr.x - 1 elseif btn(3) then Plr.x = Plr.x + 1 end end
IsOnGroundïŒïŒãæ£ããå®è£ ããå Žåãããã¯å€§ããªæ¹åã«ãªããŸãããã¬ãŒã€ãŒã¯å·Šå³ã«ç§»åã§ãããã£ãããšããå°é¢ã«ããªããšãã«èœäžã§ããŸãã ã ãããç§ãã¡ã¯ãã§ã«åŽããæ©ããŠèœã¡ãããšãã§ããŸãã ãããïŒ
ãããåæã«ãé害ã¯èæ ®ãããŠããŸããïŒéªéã«ãªã£ãŠãã硬ãã¿ã€ã«ã«ïŒæ°Žå¹³ã«ïŒå ¥ããšã©ããªããŸããïŒ ããã«å ¥ãããšã¯ã§ããŸããã ã€ãŸããäžè¬çã«ããã®ãããªã¹ããŒã ããããŸã-åãã«ã¯2ã€ã®æ®µéããããŸãïŒ
- äž»äººå ¬ãè¡ãããå Žæã決å®ããŸãïŒéåãªã©ã®å€éšèŠå ãèæ ®ã«å ¥ããŸãïŒã
- äž»äººå ¬ãããã«ç§»åã§ããããã«ãããã©ããã決å®ããŸãïŒé害ç©ã®ããïŒã
ãè¡ãããããšããæŠå¿µã¯åºãå®çŸ©ãããŠãããæå³çã§äžæ¬æãªç§»åãèšå®ããŸããå åºãªå°é¢ã«ç«ã£ãŠãäž»äººå ¬ã¯ïŒéåã®ããã«ïŒäžã«ç§»åãããããäžã«ç§»åãããšå°é¢ã«è¡çªããããã移åã§ããŸããã
ãããã£ãŠããããŒããŒãç¹å®ã®äœçœ®xãyã«ç§»åãããããšãã§ããŸãããšããããžãã¯å šäœããšã³ã³ãŒãããé¢æ°ãèšè¿°ããããšã¯çã«ããªã£ãŠããŸãã ããããæµãèªèãããšãã«ãå¿ èŠã«ãªããŸããããã®æµã¯xãyã®äœçœ®ã«ç§»åã§ããã®ãããšå°ããå¿ èŠãããããã§ãã ã€ãŸããäžè¬åã®ããã«ãå ¥åã§xãyããã³ä»»æã®è¡çªç©åœ¢ãåãåãé¢æ°ãèšè¿°ããã®ãæé©ã§ãïŒãã®ããã«ããŠãæ£ããxãyããã³ããŒããŒãŸãã¯æµã®æ¬è³ªã®è¡çªç©åœ¢ãæ£ãã転éã§ããŸãïŒã
C=8 -- ( TIC-80 8) -- , -- cr={x,y,w,h} x,y function CanMove(x,y,cr) local x1 = x + cr.x local y1 = y + cr.y local x2 = x1 + cr.w -1 local y2 = y1 + cr.h - 1 -- , local startC = x1 // C local endC = x2 // C local startR = y1 // C local endR = y2 // C for c = startC, endC do for r = startR, endR do if IsTileSolid(mget(c, r)) then return false end end end end
ããžãã¯ã¯éåžžã«åçŽã§ãïŒåè§åœ¢ã®å¢çç·ãèŠã€ããåè§åœ¢ãæ¥è§Šãããã¹ãŠã®ã¿ã€ã«ãç¹°ãè¿ããŠèª¿ã¹ãåºäœã®ã¿ã€ã«ããããã©ããã確èªããŸãïŒ IsTileSolidïŒïŒã¯ããã¹ã " â¥80 "ãšãªãŒããŒã©ã€ããå®è¡ããŸãïŒã ãã¹ã«ãœãªããã¿ã€ã«ãèŠã€ãããªãå Žåã¯ã trueãè¿ããŸã ãã€ãŸãã ãããã§ç§»åã§ããŸãããšããæå³ã§ã ã ãã®ãããªã¿ã€ã«ãèŠã€ãã£ãå Žåã¯ã falseãè¿ããŸãããã㯠ã ãããããããã«ç§»åã§ããŸããããšããæå³ã§ã ã 以äžã«2ã€ã®ç¶æ³ã瀺ããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/a09/a77/0cc/a09a770cc5cced38e0df922368557a4a.gif)
ç¹å®ã®ãªãã»ããã«ç§»åããããšããå¥ã®äººçãåçŽåããé¢æ°ãæžããŸãããã å¯èœã§ããã°ïŒ
PLAYER_CR = {x=2,y=2,w=5,h=5} function TryMoveBy(dx,dy) if CanMoveEx(Plr.x + dx, Plr.y + dy, PLAYER_CR) then Plr.x = Plr.x + dx Plr.y = Plr.y + dy return true end return false end
移åæ©èœã®å®è£ ãããã¯ãªãŒã³ã«ãªããŸããããŸããã©ãã«è¡ããããã決ãã次ã«ãããå¯èœãã©ããã確èªããŸãã å¯èœã§ããã°ãããã«ç§»åããŸãã
function UpdatePlr() -- " " " " Plr.grounded = not CanMove(Plr.x, Ply.y + 1) if not Plr.grounded then -- , . Plr.y = Plr.y + 1 end local dx = btn(2) and -1 or (btn(3) and 1 or 0) local dy = 0 -- TryMoveBy(dx,dy) end
ããŠãä»ç§ãã¡ã¯é害ãèæ ®ããéåãããŠããŸãã åŸã§ããœãªãããšã³ãã£ãã£ïŒã¢ãã€ã«ãã©ãããã©ãŒã ãªã©ïŒãè¿œå ãããšãããšã³ãã£ãã£ãšã®è¡çªããã§ãã¯ããããã«æ©èœãå°ãè€éã«ããå¿ èŠããããŸãããååã¯åããŸãŸã§ãã
ãã³ãã®ã¢ãã¡ãŒã·ã§ã³
åžžã«1ã€ã®ã¹ãã©ã€ãïŒ257çªïŒã䜿çšããå Žåããã³ãã¯åžžã«åãç«ã¡äœçœ®ã«ãããããã²ãŒã ã¯éå±ã«èŠããŸãã ãããã£ãŠããã³ããæ©ã/ãžã£ã³ã/æ»æããå¿ èŠããããŸãã ãã¬ãŒã€ãŒã®ç¶æ ã«åºã¥ããŠã¹ãã©ã€ããå€æŽããå¿ èŠããããŸãã ã¹ãã©ã€ãçªå·ã«ã¢ã¯ã»ã¹ããããããããã«ãå®æ°ã宣èšããŸãïŒ
-- S - S={ -- S.PLR - PLR={ STAND=257, WALK1=258, WALK2=259, JUMP=273, SWING=276, SWING_C=260, HIT=277, HIT_C=278, DIE=274, SWIM1=267, SWIM2=268, } }
ãããã¯ãã¹ãã©ã€ãããŒãã«ã®ããã€ãã®ãã³ãã¹ãã©ã€ãã«å¯Ÿå¿ããŠããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/117/cda/55b/117cda55b7654ee9826664b97018955f.gif)
ãããã£ãŠãã¬ã³ããªã³ã°é¢æ°ã§ã¯ã䜿çšããã¹ãã©ã€ãã決å®ããŸãã ããã¯RendPlrïŒïŒé¢æ°ã§ããã以äžãå«ãŸããŠããŸãã
local spid if Plr.grounded then if btn(2) or btn(3) then spid = S.PLR.WALK1 + time()%2 else spid = S.PLR.STAND end else spid = S.PLR.JUMP end ... spr(spid, Plr.x, Plr.y)
ã€ãŸãããã¬ã€ã€ãŒãå åºãªå°é¢ã«ããŠæ©ããŠããå Žåãæ©è¡ã¢ãã¡ãŒã·ã§ã³ãå®è¡ããã¹ãã©ã€ãS.PLR.WALK1ãšS.PLR.WALK2ã亀äºã«æç»ããŸãã ãã¬ãŒã€ãŒããã£ãããšããå°é¢ã«ããŠæ©è¡ããŠããªãå Žåã¯ãS.PLR.STANDã䜿çšããŸãã åºãå°é¢ïŒèœäžãŸãã¯ãžã£ã³ãïŒã«ãªãå Žåã¯ãS.PLR.JUMPã䜿çšããŸãã
ããŒããŒãèŠãŠããåŽã決å®ããæ»æãšãžã£ã³ãã®ã¢ãã¡ãŒã·ã§ã³ã·ãŒã±ã³ã¹ãå®è¡ããããŒãã¹ãäœæãããšãã«ã¹ãã©ã€ããªãŒããŒã¬ã€ãè¿œå ããããã®è¿œå ã®ããžãã¯ããããŸãã
ãžã£ã³ã
人ã ã¯å¥åŠãªããšãæåŸ ããŠããŸãïŒå®éã®ç掻ã§ãžã£ã³ããããšãããžã£ã³ãã®è»è·¡ãå€æŽããããšã¯å®éã«ã¯ã»ãšãã©ã§ããŸãããããã©ãããã©ãŒã ã²ãŒã ããã¬ã€ãããšãã¯ããã£ã©ã¯ã¿ãŒã空äžã®ãžã£ã³ãã®è»è·¡ãä»»æã«å€æŽã§ããããšãæãã§ããŸãïŒãããå¿ èŠã§ã ïŒã ãããã£ãŠãä»ã®å€ãã®ã²ãŒã ã®ãã£ã©ã¯ã¿ãŒã®ããã«ãç§ãã¡ã®ãã³ãã¯ç©ºäžãèªç±ã«ç§»åããããšãã§ããŸããããã¯ç©çåŠã«åããŠããŸãã
å®éãããã«ãããžã£ã³ãã®å®è£ ãå€§å¹ ã«ç°¡çŽ åãããŸãã ãžã£ã³ãã¯ãæ¬è³ªçã«ãããŒããŒã®Y座æšã®äžé£ã®å€åã§ãã X座æšã¯ããã¬ã€ã€ãŒãå°é¢ã«ãããã®ããã«ç¢å°ããŒã§èªç±ã«å€æŽã§ããŸãã
ããžã£ã³ãã·ãŒã±ã³ã¹ãã®å埩ãšããŠãžã£ã³ãã瀺ããŸãã
JUMP_DY={-3,-3,-3,-3,-2,-2,-2,-2,1,1,0,0,0,0,0}
ãã¬ãŒã€ãŒããžã£ã³ããããšãåãã¬ãŒã ã§Yäœçœ®ãã·ãŒã±ã³ã¹ã«ç€ºãããŠããå€ã ãå€åããŸãã ãžã£ã³ãã·ãŒã±ã³ã¹ã®çŸåšã®å Žæã远跡ããå€æ°ã¯Plr.jmpãšåŒã°ããŸã ã
ãžã£ã³ãã®éå§/çµäºã®ããžãã¯ã¯æ¬¡ã®ããã«ãªããŸãã
- ãã£ãããšããå°é¢ã«ããŠããžã£ã³ããã¿ã³ïŒ btnïŒ4ïŒ ïŒãæŒããšããžã£ã³ããéå§ããŸãïŒ Plr.jmp = 1ã«èšå®ïŒã
- ãžã£ã³ãããã§ã«å®è¡ãããŠããå ŽåïŒ Plr.jmp > 0ïŒããžã£ã³ããç¶è¡ãã å¯èœã§ããã°ïŒCanMoveïŒïŒé¢æ°ã«åŸã£ãŠïŒ JUMP_DY [Plr.jmp]ã«ãã£ãŠYã®ãã¬ã€ã€ãŒã®äœçœ®ãå€æŽããããšããŸãã
- ãžã£ã³ãã®ããæç¹ã§ããã¬ã€ã€ãŒã®åãã劚ãããã®ãããïŒ CanMoveïŒïŒãfalseãè¿ããŸãïŒããžã£ã³ããäžæããŸãïŒ Plr.jmp = 0ã«èšå®ããŠèœäžãå§ããŸãïŒã
çµæãšããŠçãããžã£ã³ãã®è»è·¡ã¯ãå®å šãªæŸç©ç·ã®ããã«ã¯ãªããŸããããç§ãã¡ã®ç®çã«ã¯éåžžã«é©ããŠããŸãã ãžã£ã³ãã®åŸã«èœäžããã®ã¯çŽç·ã§ããäžã«è¡ãéäžã§å éãé©çšããªãããã§ãã è¿œå ããããšããŸããããå¥åŠã«èŠããã®ã§ãå éããã«å®è¡ããããšã«ããŸããã ããã«ã1ãã¯ã»ã«/ãµã€ã¯ã«ã®ããããã¬ãŒãã«ãããè¡çªãèªèãããšãã«ããªãããªãããŒãªããªãã¯ã䜿çšããããšãã§ããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/7f2/6eb/3ea/7f26eb3ea664117d43acf501e42d140b.gif)
ãžã£ã³ãã®è»è·¡ã
ãšã³ãã£ãã£
ã¿ã€ã«ã¯åªããŠããŸãããéçã§ãã 楜ãããã®ã¯ãåããªãå°çã®ãããã¯ãé£ã³è¶ããããšã ãã§ãã ãã©ãããã©ãŒããŒã埩掻ãããã«ã¯ãæµãããŒãã¹ãªã©ãå¿ èŠã§ãã ãããã®ã移åãªããžã§ã¯ããŸãã¯ã€ã³ã¿ã©ã¯ãã£ããªããžã§ã¯ããã¯ãã¹ãŠãšã³ãã£ãã£ãšåŒã°ããŸãã
ãŸã第äžã«ãç§ã¯ããã€ãã®çŽ æŽãããæµãæããŸããã åºæ¬çã«ã圌ãã¯å³é¢ã®å質ã«ææãæããŠããŸãããæããšããäºå®ã§ã¯ãããŸããã
![ç»å](https://habrastorage.org/getpro/habr/post_images/8d2/9a8/d8c/8d29a8d8c2812795fe7033866d35058e.gif)
ããããã¹ãã©ã€ãããŒãã«ã«è¿œå ããããããã®ã¢ãã¡ãŒã·ã§ã³ãäœæããŸããã ãŸããæ°ããã¹ããªãããã€ã³ããèšå®ããŸããã€ã³ããã¯ã¹ã128以äžã®ã¹ãã©ã€ãã¯ãšã³ãã£ãã£ã§ãããéçã¿ã€ã«ã§ã¯ãããŸããã ãããã£ãŠãããããšãã£ã¿ã䜿çšããŠæµãã¬ãã«ã«è¿œå ããã ãã§ãã¹ãã©ã€ãã€ã³ããã¯ã¹ã®ãããã§æµã§ããããšãããããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/646/310/e03/646310e03e02fcf3e9f9f15e83524aab.gif)
åæ§ã«ãä»ã®å€ãã®ãªããžã§ã¯ãã¯ãšã³ãã£ãã£ã§ãïŒãã§ã¹ããç Žå£å¯èœãªãããã¯ãäžæçãªãã©ãããã©ãŒã ããšã¬ããŒã¿ãŒãããŒã¿ã«ãªã©ã
ã¬ãã«ãèªã¿èŸŒããšãããããäžã®ãã¹ãŠã®ã¿ã€ã«ããã§ãã¯ããŸãã 128以äžã®å Žåããããã¿ã€ã«ãåé€ãããã®å Žæã«ãšã³ãã£ãã£ãäœæããŸãã ãšã³ãã£ãã£IDïŒEIDïŒã¯ããããäœã§ãããã決å®ããŸãã EIDãšããŠäœã䜿çšããŸããïŒ ã¯ããããäžåºŠã¹ãã©ã€ãçªå·ãååŸããŠãã ããïŒ ã€ãŸããæµã®ãç·ã®ãã¡ã¯ãžãã®ã¹ãã©ã€ãã180ã§ããå Žåãç·ã®ãã¡ã¯ãžã®EIDã¯180ã«ãªããŸããããã¯ç°¡åã§ãã
ãã¹ãŠã®æµã¯ã°ããŒãã«ãªEntsæ§é ã«ä¿åãããŸãã
ãšã³ãã£ãã£ã¢ãã¡ãŒã·ã§ã³
ãšã³ãã£ãã£ã¯ã¢ãã¡ãŒã·ã§ã³åã§ããŸãã æµã®çš®é¡ããšã«ã¢ãã¡ãŒã·ã§ã³ãæåã§ãšã³ã³ãŒããã代ããã«ãEIDã§ã€ã³ããã¯ã¹ä»ããããã¢ãã¡ãŒã·ã§ã³ã®å€§ããªããŒãã«ãäœæããŸãããããã«ãããã©ã®ã¹ãã©ã€ããåšæçã«è¡šç€ºãããã決ãŸããŸãã
-- EID. ANIM={ [EID.EN.SLIME]={S.EN.SLIME,295}, [EID.EN.DEMON]={S.EN.DEMON,292}, [EID.EN.BAT]={S.EN.BAT,296}, [EID.FIREBALL]={S.FIREBALL,294}, [EID.FOOD.LEAF]={S.FOOD.LEAF,288,289}, [EID.PFIRE]={S.PFIRE,264}, ... }
ãããã®ããã€ãã¯ããšã³ãã£ãã£ã®ã¹ãã©ã€ããšãäžèŽããå Žåã¯ã·ã³ããªãã¯å®æ°ïŒS.EN.DEMONãªã©ïŒã§ãããããã€ãã¯ããŒãã³ãŒããããæŽæ°ïŒ292ïŒã§ããããšã«æ³šæããŠãã ãããåç §ããå¿ èŠããªããªããŸããã
ã¬ã³ããªã³ã°ãããšãããã®ããŒãã«ã§ç®çã®ã¢ãã¡ãŒã·ã§ã³ãç°¡åã«èŠã€ããŠãåãšã³ãã£ãã£ã®æ£ããã¹ãã©ã€ããã¬ã³ããªã³ã°ã§ããŸãã
ã¡ã¿ã¿ã°ïŒãããã¢ãããŒã·ã§ã³
ã²ãŒã ã®å®è¡äžã«äœ¿çšããããããã«æ³šéãè¿œå ããå¿ èŠãããå ŽåããããŸãã ããšãã°ãå®ç®±ãããå Žåãäœããããã®ãªããžã§ã¯ãã®å éšã«äœåãããã瀺ãå¿ èŠããããŸãã ãããã®å Žåããããã¢ãããŒã·ã§ã³ããŒã«ãŒã䜿çšããŸãããããã¯0ã12ã®æ°åãæã€ç¹å¥ãªã¿ã€ã«ã§ã衚瀺ãããããšã¯ãããŸããïŒå®è¡æã«ãããããåé€ãããŸãïŒã
![ç»å](https://habrastorage.org/getpro/habr/post_images/5af/6a6/54f/5af6a654fdbc5f3446fccf94e6bfe0b7.gif)
ã¬ãã«ããŒããŒã¯èžãèŠããšãèžã®äžã«ããã¿ã€ã«ãèŠãŠãã®å 容ãèŠã€ããæ°éã瀺ãç¹å¥ãªæ°å€ããŒã«ãŒãæ¢ããŸãã äœæããããªããžã§ã¯ãã ãããã£ãŠããã¬ã€ã€ãŒããã§ã¹ããããããããšããã¹ãŠã®ã¢ã€ãã ãäœæãããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/73c/e85/785/73ce85785187faccd4c861449e8962ae.gif)
ã¡ã¿ã¿ã°ã¯ãããšãã°ããšã¬ããŒã¿ã移åãéå§ããã³åæ¢ããå Žæãã¬ãã«ã®åæäœçœ®ãã©ãã«ããããäžæçãªãã©ãããã©ãŒã ã®ãã§ãŒãºæ å ±ãªã©ã決å®ããããšãã§ããŸãã
ã¬ãã«å§çž®ã«ã䜿çšãããŸãã ããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã
ã¬ãã«
ã²ãŒã ã«ã¯17ã®ã¬ãã«ããããŸãã ãããã¯ã©ãã«ä¿åãããŸããïŒ ã«ãŒãã®ã¡ã¢ãªãèŠããšã次ã®å³ã衚瀺ãããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/b70/2f7/55e/b702f755eb5ba4410677455d8d1edbe1.gif)
TIC-80ã«ã¯64ã®ãããŒãžãã«ãŒããããããããããã³ã³ãã³ãã®1ã€ã®ãç»é¢ãïŒ30x17ã¿ã€ã«ïŒã§ãã ããŒãžã«ã¯0ã63ã®çªå·ãä»ããããŸãã
ãã®ã¹ããŒã ã§ã¯ãã²ãŒã å®è¡äžã«äœ¿çšããããã«äžäœ8ã€ãäºçŽããŸããã ããã«ã解ååŸã®ã¬ãã«ãä¿åããŸãïŒããã«ã€ããŠã¯åŸã§èª¬æããŸãïŒã 次ã«ãåã¬ãã«ã¯ãã«ãŒãã®ã¡ã¢ãªå ã®2ããŒãžãŸãã¯3ããŒãžã®ã·ãŒã±ã³ã¹ã§ãã ãã¬ãŒãã³ã°ç»é¢ãåå©ç»é¢ãäžçå°å³ãããŒã ç»é¢çšã®ããŒãžãäœæããããšãã§ããŸãã 泚éä»ãã®ãããã®ããŒãžã§ã³ã¯æ¬¡ã®ãšããã§ãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/90f/e0b/5dc/90fe0b5dc4c8f2e05b0f17f0a73f9314.png)
ã²ãŒã ããã¬ã€ãããšãå®éã«ã¯ã¬ãã«ã2ã€ãŸãã¯3ã€ã®ç»é¢ã«åãŸããããã¯ããã«é·ãããšã«æ°ä»ããããããŸãã ã ããããã«ãŒããªããžã«ãŒãã®ã¡ã¢ãªã§ã¯ãã¯ããã«å°ãããªã£ãŠããŸãã ããã§äœãèµ·ãã£ãŠããŸããïŒ
ããªãã¯ãããæšæž¬ããŸããïŒãããŠç§ã¯ãã³ããäžããŸããïŒïŒã¬ãã«ã¯å§çž®ãããŠããŸãïŒ ã«ãŒãã®ã¡ã¢ãªã§ã¯ãååã®æäžè¡ã«ã¡ã¿ã¿ã°ãæ ŒçŽãããåãç¹°ãè¿ãããåæ°ã瀺ãããŸãã ã€ãŸããåçŽãªåœ¢åŒã®RLEå§çž®ãå®è£ ããŸããã
![ç»å](https://habrastorage.org/getpro/habr/post_images/513/685/754/513685754d0732682b3c3d23c0584564.gif)
ãããã£ãŠããã®ããŒãžãå±éãããšãå®éã«ã¯ã¬ãã«ã®ã¯ããã«é·ãéšåãå®çŸ©ãããŸãïŒã»ãŒ2åãããã«äžéšã®ã¬ãã«ã§ã¯ããã«ïŒã
ãã ããå®è¡æã«ãããã®äžäœ8ããŒãžã䜿çšããããã«ãã¬ãã«ããã¬ã€ããæºåãã§ãããã0ã7ããŒãžã®ã²ãŒã ãã¬ã€çšã«ã¬ãã«ãã¢ã³ããã¯ããŸãã ã¬ãã«ã®å®è¡ã«äœ¿çšãããããžãã¯ã¯æ¬¡ã®ãšããã§ãã
- ã«ãŒãã®ã¡ã¢ãªå ã®é©åãªå Žæããããã¯ã¬ãã«ãèªã¿åããŸãã
- ããã¯ã¬ãã«ã®ååã®ç¹°ãè¿ãåæ°ã«å¿ããŠãäžäœ8ããŒãžã«å±éããŸãã
- ãšã³ãã£ãã£ïŒã¹ãã©ã€ãâ¥128ïŒãæ€çŽ¢ããã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã
- ãã¬ãŒã€ãŒã®éå§äœçœ®ïŒã¡ã¿ããŒã«ãŒãAãïŒãæ¢ããŠãããã«ãã¬ãŒã€ãŒã眮ããŸãã
- ãã¬ã€ãéå§ããŸãã
ãšã³ãã£ãã£ã®åäœ
æµãç¹å®ã®æ¹æ³ã§åäœããåå ã¯äœã§ããïŒ ããšãã°ãã²ãŒã ãã赀鬌ãåããŸãã ãã¬ãŒã€ãŒã«ç«ã®çãæããããšãã圌ã®æ§ãã¯ã©ãããæ¥ãã®ã§ããããïŒ ãªã圌ãã¯ãã ã®åéã«ãªããªãã®ã§ããïŒ
![ç»å](https://habrastorage.org/getpro/habr/post_images/c81/4eb/d78/c814ebd78c96de7d44be6e297b0ca688.gif)
åãšã³ãã£ãã£ã«ã¯ç¬èªã®åäœããããŸãã æªéã¯ç«ã®çãæããŠãžã£ã³ãããŸãã ç·ã®ãã¡ã¯ãžãååŸã«åãåããŸãã ãã«ãŒã¢ã³ã¹ã¿ãŒã¯å®æçã«ãžã£ã³ãããŸãã ã€ããã¯ããã¬ãŒã€ãŒãååã«éããšãã«èœã¡ãŸãã ç Žå£å¯èœãªãããã¯ã¯ç Žå£ãããŸãã ãªãããäžæããŸãã ãã§ã¹ãã¯ããã¬ã€ã€ãŒãããããããŸã§ãã§ã¹ãã®ãŸãŸã«ãªãããã®åŸããã§ã¹ãã¯éããŠã³ã³ãã³ããäœæããŸãã
ãã®ãã¹ãŠã®ããžãã¯ãäœæããç°¡åãªæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
if enemy.eid == EID.DEMON then ThrowFireballAtPlayer() elseif enemy.eid == EID_SLIME then -- - elseif enemy.eid == EID_ELEVATOR then -- - -- ... ...
æåã¯ããã¹ãŠãã·ã³ãã«ã«æããŸãã ãããããã®å Žåãäœæ¥ã¯è€éã§å調ã«ãªããŸãã åããäŸã«ãšããŸããæµãåããããäžé£ã®ãã§ãã¯ãå®è¡ããå¿ èŠããããŸã-æµãæå®ã®äœçœ®ã«ç§»åã§ããããšã確èªããæµãåãããã©ããã確èªããŸãã ãã ããèœäžããªãæµãããŸãïŒã³ãŠã¢ãªãªã©ïŒã ãããŠãããã€ãã®æ³³ãïŒéïŒã ãã¬ã€ã€ãŒãèŠããæµãããã°ããã§ãªãæµãããŸãã äžéšã®æµã¯ãã¬ã€ã€ãŒãè¿œãããããã§ãã ãã¬ã€ã€ãŒãã©ãã«ããããç¥ãããåã«ããžãã¹ã«åãããã人ãããŸãã ã·ã§ã«ã¯ã©ãã§ããïŒ ç«ã®çããã©ãºãããŒã«ãéªçã éåã®åœ±é¿ãåãããã®ãããã°ãããã§ãªããã®ããããŸãã åºäœãªããžã§ã¯ããšè¡çªãããã®ãšããã§ãªããã®ããããŸãã åã·ã§ã«ããã¬ã€ã€ãŒã«åœäžãããšã©ããªããŸããïŒ ãã¬ã€ã€ãŒãããããããããããšã©ããªããŸããïŒ éåžžã«å€ãã®å€æ°ãšçµã¿åããïŒ
ãã°ããããŠãããã®ã±ãŒã¹ããšã«if / elseãããã¯ãçºçãããšãè² æ ã«ãªããŸãã ãããã£ãŠã代ããã«ãã²ãŒã éçºã§ããªãäžè¬çã§æçšãªãã¿ãŒã³ã§ããåäœã·ã¹ãã ãäœæããŸãã ãŸãããšã³ãã£ãã£ãæã€å¯èœæ§ã®ãããã¹ãŠã®åäœãšå¿ èŠãªãã©ã¡ãŒã¿ãŒã決å®ããŸãã ããšãã°ã次ã®ããšãã§ããŸãã
- 移åïŒãããã§ããïŒæ£ã®ç«¯ãã©ã®ããã«åŠçããŸããïŒåºäœã«ééãããšã©ããªããŸããïŒïŒ
- èœã¡ã
- æ¹åãå€æŽããŸãïŒã©ã®ãããã®é »åºŠã§ããïŒåžžã«ãã¬ãŒã€ãŒãèŠãŸããïŒïŒ
- ãžã£ã³ãïŒã©ã®ãããã®é »åºŠã§ããïŒã©ã®ãããã§ããïŒïŒ
- æã€ïŒäœïŒã©ã®æ¹åã«ïŒãã¬ã€ã€ãŒãçãïŒïŒ
- è匱ã§ããïŒãã¬ãŒã€ãŒãããã¡ãŒãžãåããïŒã
- è¡çªã§ãã¬ã€ã€ãŒã«ãã¡ãŒãžãäžãã
- è¡çªã§åŽ©å£ïŒã©ããããïŒïŒ
- äžå®æéåŸã«èªåçã«æãããã¿ãŸãïŒã©ã®ãããã§ããïŒïŒ
- ããŒãã¹ãèŽãïŒã©ãïŒïŒ
- ãªã©...
èãããããã¹ãŠã®åäœãå®çŸ©ããããå¿ èŠãªãã©ã¡ãŒã¿ãŒã䜿çšããŠé©åãªãšã³ãã£ãã£ã«åçŽã«å²ãåœãŠãEBTïŒEntity-Behavior Tableããšã³ãã£ãã£åäœã®ããŒãã«ïŒãåŒã³åºããŸãã 以äžã¯ãredããŒã¢ã³ã®ãšã³ããªã®äŸã§ãã
-- EBT={ ... [EID.EN.DEMON]={ -- : beh={BE.JUMP,BE.FALL,BE.SHOOT, BE.HURT,BE.FACEPLR,BE.VULN}, -- : data={hp=1,moveDen=5,clr=7, aim=AIM.HORIZ, shootEid=EID.FIREBALL, shootSpr=S.EN.DEMON_THROW, lootp=60, loot={EID.FOOD.C,EID.FOOD.D}}, }, ... }
ããã¯ãæªéã«ã¯æ¬¡ã®åäœãããããšãå ±åããŸãïŒãžã£ã³ãããããããã·ã¥ãŒãããã¡ãŒãžããã¬ãŒã€ãŒãžã®æ¹å転æãè匱æ§ã ããã«ããã©ã¡ãŒã¿ãŒã¯ããšã³ãã£ãã£ã«1ã€ã®ãã¡ãŒãžãã€ã³ããããã5ãµã€ã¯ã«ããšã«ç§»åããããŒã¹ã«ã©ãŒã7ïŒèµ€ïŒãç«ã®çã§æã€ïŒEID.FIREBALLïŒãæ°Žå¹³é¢å ã®ãã¬ã€ã€ãŒãæšçã«ããïŒAIM.HORIZïŒãè±èœããå¯èœæ§ãããããšã瀺ããŸã60ïŒ ã®å ±é ¬ã¯ãé£ã¹ç©CãšDïŒå¯¿åžïŒãæããããšãã§ããŸãã åç §ããŠãã ãã-ä»ãç§ãã¡ã¯ããŸããŸãªè¡åã®çµã¿åããã«ãã£ãŠããã®æµã®è¡åå šäœãã»ãã®æ°è¡ã§èšå®ã§ããŸãïŒ
èæ¯ã®ãããã®å±±ã¯ã©ãã§ããïŒ
ãããããªãã¯èæ¯ã«å±±ã«æ°ã¥ããŸããïŒ ã¡ã¢ãªã«ãŒããèŠããšãããã«ã¯ãããŸããããŸãããã¬ã€ã€ãŒãšäžç·ã«æ£ç¢ºã«ç§»åããããã§ããããŸãããèŠå·®å¹æããããåæ¯ããããã£ãããšç§»åãããããèæ¯ããé ãé¢ããŠããããã«èŠããŸãã
ãã®å¹æã¯ã©ã®ããã«åŸãããŸããïŒå®éãå®è¡æã«å±±ãäœæããŸããã¬ãã«ãããŒããããšããã©ã³ãã ã«ïŒãã ãããžã§ãã¬ãŒã¿ãŒã®åææ°ãäžå®ã«ããŠïŒã»ã«ããšã«1ã€ã®å€ãæã€æšé«ããããçæããã¬ãã«ïŒéåžžãçŽ300çšåºŠã®å€ïŒããå°ã倧ããããŸãã
ã·ãŒã³ãã¬ã³ããªã³ã°ãããšãããã¬ãŒã€ãŒã®äœçœ®ã䜿çšããŠæšé«ãããã®å€äœã決å®ãïŒèŠå·®å¹æãåŸãããã«å®æ°ã§é€ç®ïŒãã¹ãã©ã€ãããŒãã«ã®å±±ã®éšåã®ã¹ãã©ã€ãã䜿çšããŠå±±ãã¬ã³ããªã³ã°ããŸããçŸåšè¡šç€ºãããŠããå±±ã®ã¿ãã¬ã³ããªã³ã°ããã®ã§ãããã¯é«éã§ãïŒããããèŠããšç°¡åã«èå¥ã§ããŸãïŒGame.scrãšåãèšç®ãè¡ãïŒã
ãã¬ããã®ãªãŒããŒã©ã€ã
TIC-80ã®åªããæ©èœã®1ã€ã¯ãRAMã¡ã¢ãªã¢ãã¬ã¹ã«å€ãæžã蟌ãããšã§ãã¬ãããåå®çŸ©ã§ããããšã§ããããã¯ãåã¬ãã«ãããã¬ããã®åå®çŸ©ããæã€ããšãã§ããããšãæå³ããŸããããã¯ãèµ·åæã«èšå®ããŸãã
function SetPal(overrides) for c=0,15 do local clr=PAL[c] if overrides and overrides[c] then clr=overrides[c] end poke(0x3fc0+c*3+0,(clr>>16)&255) poke(0x3fc0+c*3+1,(clr>>8)&255) poke(0x3fc0+c*3+2,clr&255) end end
RAMã¢ãã¬ã¹0x3fc0ã¯ãTIC-80ããã¬ãããä¿åããé åã®å é ã§ãããããã£ãŠããã¬ãããå€æŽããã«ã¯ããã®ã¡ã¢ãªã«ãã€ããæžã蟌ãã ãã§ãã
äžçå°å³
éçºã®åŸã®æ®µéã§äžçå°å³ãè¿œå ããŸããããã¬ã€ã€ãŒã«é²æç¶æ³ãç¥ãããã®ã«åœ¹ç«ã¡ãŸããã²ãŒã ã®17ã¬ãã«ã6ã€ã®å³¶ã«æ£ãã°ã£ãŠããŸãïŒ
![ç»å](https://habrastorage.org/getpro/habr/post_images/b20/1b3/b50/b201b3b504321d8b257f37cc49dd7d0f.gif)
ãã¬ãŒã€ãŒã¯ãç¢å°ããŒã§ç§»åããZãæŒãããšã§ã¬ãã«ãå ¥åã§ããŸããäžçå°å³ã¯ã2ããŒãžã®ãããïŒåé¢ãšèæ¯ïŒã§å®è£ ãããŸãã
ããã¯ã°ã©ãŠã³ãããŒãžïŒãããã¡ã¢ãªââã®62ããŒãžïŒã«ã¯ããããã®éçãªéšåã®ã¿ãå«ãŸããŠããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/4a0/575/cdc/4a0575cdcfe0b2535081d7bbfba0f6cb.gif)
å®è¡æã«ãããã³ãããŒãžãããã«éããããŸãïŒããŒãž61ïŒïŒ
![ç»å](https://habrastorage.org/getpro/habr/post_images/3be/aac/1e3/3beaac1e3f89d4d39b4b0794ed535723.gif)
ãã®ããŒãžã«ã¯ãã¬ãã«ã®å Žæã衚瀺ãããŸããã¿ã€ã«ã1ããã2ããã3ãã¯ã¬ãã«ã§ããã²ãŒã ã¯ãã¿ã€ã«åšèŸºã§ã¡ã¿ããŒã«ãŒæ€çŽ¢ïŒ1ã6ïŒãå®è¡ããããšã«ãããæå±ãã島ãèŠã€ããŸããã€ãŸããããšãã°ãã²ãŒã ãã¢ã€ã©ã³ã3ïŒãããã®å³åŽïŒã®ã2ãã¿ã€ã«ãèŠããšããã®æšªã«ã3ãã¡ã¿ããŒã«ãŒãããããšã«æ°ã¥ããŸããã€ãŸããã¬ãã«3â2ã§ããããšãããããŸãã
ããŒã«ãŒãAãã¯ãã¬ã€ã€ãŒã®éå§äœçœ®ã瀺ããããŒã«ãŒãBãã¯ä¿åãããã²ãŒã ã埩å ãããšãã®å島ã®éå§äœçœ®ã瀺ããŸãã
å¹æé³ãšé³æ¥œ
å èµã®TIC-80ãšãã£ã¿ãŒã䜿çšããŠããã¹ãŠã®ãµãŠã³ããšãã§ã¯ããšé³æ¥œãäœæããŸãããç§ã¯å¹æé³ãäœæããè¯ãæ¹æ³ããããšèšãããã®ã§ãããå®éã«ã¯ãã¿ã³ãã¯ãªãã¯ããŠãæ£ããçªå·ãåŸããããŸã§èª€ã£ãŠæ°åãå€æŽããŸãããããã¯ã¬ãããªãµãŠã³ããšãã§ã¯ããäœæããéåžžã«åççãªæ¹æ³ã ãšæããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/926/0f0/56c/9260f056c8bc2e718cab5bd097cd6e79.gif)
ããã¯ã°ã©ãŠã³ããã¥ãŒãžãã¯ãäœæããããã«ãé³æ¥œãäœæããæ¹æ³ã«ã€ããŠå°ãèªãã ããšããããŸããéåžžã«åæ©çãªç¥èãããã°ãããªã容èªã§ããïŒãŸãã¯ãå°ãªããšãç§ã®æããããã³ãã®ã°ã©ãã£ãã¯ãç®ã«å®¹èªãããã®ãšåããããèŽåã«å®¹èªã§ããïŒäœããæ§æã§ããããšãããããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/94b/902/0b9/94b9020b9083293d63e25c5be1385cf9.gif)
8ã€ã®ãã©ãã¯ãæ§æããŸããïŒTIC-80ã®å¶éïŒïŒ
- ã¢ã€ã©ã³ã1ã5ã§äœ¿çšãããã¬ãã«ã®é³æ¥œAã
- 島1ã5ã§äœ¿çšãããã¬ãã«ã®é³æ¥œBã
- çä¿¡é³ã®çµäºã¬ãã«ïŒçãïŒã
- 島1ã5ã§äœ¿çšãããã¬ãã«ã®Cé³æ¥œã
- äžçå°å³ã®é³æ¥œã
- ããŒã ç»é¢ã®ããŒãã
- 島ã¬ãã«6ã®é³æ¥œïŒæåŸã®2ã¬ãã«ïŒ
- ã²ãŒã çµäºããŒãïŒçµäºç»é¢ïŒ
ãããã«
ãã®ã²ãŒã ã®äœæã¯ç§ã«ä¿¡ããããªãã»ã©ã®åã³ããããããŸããããããŠãã®çŽ æŽããããã©ãããã©ãŒã ã®ç»å Žã«ã€ããŠTIC-80ïŒVadim GrigorukïŒã®äœæè ã«æ·±ãæè¬ããŠããŸããç§ã¯ãããäœæããã®ã奜ãã ã£ãã®ã§ãããªããã²ãŒã ã楜ããã§ãããããšãé¡ã£ãŠããŸãïŒãããŠããªããæããªããœãŒã¹ã³ãŒãããããã³ã°ããŸãïŒïŒ
å°æ¥çã«ã¯ãTIC-80ããã³åæ§ã®ã³ã³ãœãŒã«çšã®ä»ã®ã²ãŒã ãäœæããäºå®ã§ãã