OPTION STRICT
' PI FIX: console COLOR takes a 24-bit RGB code,TPAL[not a 3DS 0-15 text-palette]
' index. TPAL maps the old index to the equivalent RGB color.
DIM TPAL[16]
TPAL[0]=RGB(0,0,0):TPAL[1]=RGB(0,0,0):TPAL[2]=RGB(128,0,0):TPAL[3]=RGB(255,0,0)
TPAL[4]=RGB(0,128,0):TPAL[5]=RGB(0,255,0):TPAL[6]=RGB(128,128,0):TPAL[7]=RGB(255,255,0)
TPAL[8]=RGB(0,0,128):TPAL[9]=RGB(0,0,255):TPAL[10]=RGB(128,0,128):TPAL[11]=RGB(255,0,255)
TPAL[12]=RGB(0,128,128):TPAL[13]=RGB(0,255,255):TPAL[14]=RGB(128,128,128):TPAL[15]=RGB(255,255,255)
DIM M[50,30],MCL[50,30],MC$[50,30],TL[50,30]
DIM LT[50,30],X1[0],X2[0],Y1[0],Y2[0],ACT$[9]
DIM MNSHP[26],MNSEX[26],MNSSP[26],MNSHR[26]
DIM MNSN$[26],MNSTBL[0],MSLP[26],EMN$[26]
DIM RING$[25],POTION$[27],SCROLL$[12]
DIM WAND$[20],ITMG[0],ITMN$[66],ITMS[0]
DIM ITAN$[0],ITMTBL[0],IINS[66],KIN$[0]
DIM IRND[66],WHR[8],WAT[8],ADF[8],IPRC[0]
DIM HI[100,20]
GAME_INIT
VAR CNT
VAR SCNT
VAR MSSTP
VAR STSTP   'スティック入力一時停止
VAR FLR     '現在の階層
VAR FOD     '現在の満腹度
VAR MFOD    '最大満腹度
VAR LV      '現在のレベル
VAR GLD     '現在の所持金
VAR ST      '現在のSTR
VAR MST     '最大STR
VAR EX      '現在の経験値
VAR NEX     '必要経験値
VAR PEX     '前回の必要経験値
VAR DEX     '現在のきようさ
VAR PWEP    '装備中の武器
VAR PHR     '現在の命中力
VAR PAT     '現在の攻撃力
VAR PARM    '装備中の防具
VAR PDF     '現在の守備力
VAR RNG1    '装備中の指輪1
VAR RNG2    '装備中の指輪2
VAR HL      'HP回復用変数
VAR MMK     '盲目状態
VAR GKK     '幻覚状態
VAR FLZ     '凍結状態
VAR DMV     'つかまれ状態
VAR MOF     'モンスター感知状態
VAR MIE     '見え見え状態
VAR KSK     '倍速状態
VAR IPF     'アイテム自動拾得フラグ
VAR FYU     '浮遊状態
VAR LST     '
VAR UF      '
VAR WZ      '
DIM ITM[0]  '所持アイテム番号
DIM ITMV[0] '所持アイテム状態

DIM HP[64]  '現在のHP
DIM MHP[64] '最大HP
DIM AC[64]  'ターン内行動終了フラグ
DIM SLP[64] '睡眠状態
VAR KRN[64] '混乱状態
VAR TKM[64] 'つかみ状態
VAR MZM[64] '目覚めチェックフラグ
'--------------------------------------------
@MAIN
'メインループ ***
WHILE 1
 TITLE
 PLAYER_INIT
 MAKE_DUNGEON
 REPEAT
  STSTP=0
  MSSTP=0
  PLAYER
  IF !UF THEN CALL SPRITE
  VSYNC
  IF STSTP || MSSTP THEN VSYNC 7
  SCNT=SCNT+1 AND 3
  IF !(SCNT MOD 2) THEN FILL AC,0
  INC CNT
  POP_MONSTER
  IF UF THEN MAKE_DUNGEON
  UF=0
 UNTIL !HP[0] || !FLR

 PRINT_STATUS
 IF !HP[0] THEN
  BEEP 14
  SET_LIGHT 0,#RED
  BLOOD 0
  SPCLR 0
  VSYNC 60
 ENDIF
 FADE #BLACK,30
 VSYNC 30
 GAMEOVER
 GCLS
 CLS
 SPCLR
WEND
'--------------------------------------------
@SUB
'プレイヤー操作 ***
DEF PLAYER
VAR SX,SY,BT1,ERR,COM,A,I,J,X,Y,F,H
VAR DX[8],DY[8]

 PRINT_STATUS
 IF !TCHK(0) THEN RETURN
 IPF=0

 '凍結状態回復処理 ***
 IF FLZ THEN
  DEC FLZ
  IF !FLZ THEN
   SET_LIGHT 0,#LIME
   BGMPLAY 2,155,80
  ENDIF
  IF FLZ THEN
   SPCHR 0,64
   SPCOLOR 0,#CYAN
   VSYNC 8
   RETURN
  ENDIF
 ENDIF

 CANIM 0
 REPEAT
  ERR=0
  REPEAT
   BT1=BUTTON(1)
   STICK OUT SX,SY
   SY=-SY 'PI: STICK Y INVERTED VS 3DS
   IF SY>0.2  && SX<-0.2 THEN BT1=BT1 OR 5
   IF SY>0.2  && SX> 0.2 THEN BT1=BT1 OR 9
   IF SY<-0.2 && SX<-0.2 THEN BT1=BT1 OR 6
   IF SY<-0.2 && SX> 0.2 THEN BT1=BT1 OR 10
   VSYNC
  UNTIL BT1

  COM=-1
  IF  BT1 AND  1 THEN COM=0
  IF  BT1 AND  8 THEN COM=2
  IF  BT1 AND  2 THEN COM=4
  IF  BT1 AND  4 THEN COM=6
  IF (BT1 AND  9)== 9 THEN COM=1:STSTP=1
  IF (BT1 AND 10)==10 THEN COM=3:STSTP=1
  IF (BT1 AND  6)== 6 THEN COM=5:STSTP=1
  IF (BT1 AND  5)== 5 THEN COM=7:STSTP=1
  IF  BT1 AND 16 THEN COM=MENU()
  IF  BT1 AND 32 THEN COM=11
  IF COM==-1 THEN ERR=1

  '混乱状態処理 ***
  IF KRN[0] && COM<8 THEN
   DEC KRN[0]
   IF KRN[0] THEN
    COPY DX,@DDX
    COPY DY,@DDY
    A=0
    REPEAT
     CSPOFS 0 OUT X,Y
     COM=RND(8)
     F=!KCHK(X,Y,COM)
     INC A
     H=HCHK(X+DX[COM],Y+DY[COM])
    UNTIL (H && F) || A>15
    IF A>15 THEN COM=11
   ELSE
    SET_LIGHT 0,#LIME
    BGMPLAY 2,155,80
   ENDIF
  ENDIF

  COM=PATTACK(COM)

  IF !DMV THEN
   IF COM==0 THEN ERR=CMOVE(0,0)
   IF COM==1 THEN ERR=CMOVE(0,1)
   IF COM==2 THEN ERR=CMOVE(0,2)
   IF COM==3 THEN ERR=CMOVE(0,3)
   IF COM==4 THEN ERR=CMOVE(0,4)
   IF COM==5 THEN ERR=CMOVE(0,5)
   IF COM==6 THEN ERR=CMOVE(0,6)
   IF COM==7 THEN ERR=CMOVE(0,7)
  ENDIF

  IF COM== 8 THEN ERR=ITMUSE()
  IF COM== 9 THEN IPF=0
  IF COM==10 THEN ERR=STAIR()
  IF COM==11 THEN ERR=0

 UNTIL !ERR

 'アイテムを拾う ***
 H=SPHITSP(0,64,127)
 IF !IPF && H>-1 THEN GET_ITEM H

 'テレポート判定 ***
 IF PER(((RNG1==19)+(RNG2==19))*8) THEN
  TELEPORT
 ENDIF

 '満腹度減少処理 ***
 IF FOD>0 THEN
  IF !AML() THEN
   DEC FOD,1-((RNG1==21)+(RNG2==21))*0.5
  ENDIF
  'HP回復処理 ***
  IF HP[0]<MHP[0] THEN
   A=((RNG1==20)+(RNG2==20)+1)
   INC HL,(MHP[0]/100)*A
  ENDIF
  IF HL>=1 THEN
   INC HP[0],FLOOR(HL)
   SET_DPOP 0,FLOOR(HL)
   DEC HL,FLOOR(HL)
   IF HP[0]>MHP[0] THEN HP[0]=MHP[0]
  ENDIF
 ELSE
  BGMPLAY 5,167,80
  FOR I=0 TO 3:BREPEAT I,16,3:NEXT
  BREPEAT 5,16,3
  DEC HP[0]
  LST=26
  SET_DPOP 0,-1
 ENDIF

 '倍速終了処理
 IF KSK THEN
  DEC KSK
  IF !KSK THEN
   SET_LIGHT 0,#OLIVE
   BGMPLAY 4,159,80
   SPVAR 0,2,SPVAR(0,2)-2
  ENDIF
 ENDIF


 '盲目回復処理 ***
 IF MMK THEN
  DEC MMK
  IF !MMK THEN
   SET_LIGHT 0,#LIME
   BGMPLAY 2,155,80
   FOR J=0 TO 27
    FOR I=0 TO 49
     IF LT[I,J] THEN
      LOCATE I,J
      COLOR TPAL[MCL[I,J]]
      PRINT MC$[I,J];
     ENDIF
    NEXT
   NEXT
  ENDIF
 ENDIF

 '幻覚回復処理 ***
 IF GKK THEN
  DEC GKK
  IF !GKK THEN
   SPANIM 132,6,-16,#WHITE,1
   VSYNC 16
   SET_LIGHT 0,#LIME
   BGMPLAY 2,155,80
   GPAGE 0,SPPAGE()
   GFILL 0,0,215,15,#BLACK
   GFILL 224,0,295,7,0
   GPUTCHR 0,0,"@KEBSHIROZLCQANYFTWPXUMVGJD"
   GPUTCHR 0,8,"äkebshirozlcqanyftwpxumvgjd"
   GPUTCHR 224,0,"*:)]=!?/,"
   GPAGE 0,0
   SPCOLOR 132,0
  ENDIF
 ENDIF

 '浮遊回復処理 ***
 IF FYU THEN
  DEC FYU
  IF !FYU THEN
   SET_LIGHT 0,#OLIVE
   BEEP 95
  ENDIF
 ENDIF

 '画面表示 ***
 PRINT_STATUS
 PRINT_DUNGEON 0
 CANIM 0
 BEEP 9
END

'プレイヤー攻撃判定 ***
DEF PATTACK(V)
VAR H,X,Y,DX[8],DY[8]
 IF V<0 || V>7 THEN RETURN V
 COPY DX,@DDX
 COPY DY,@DDY
 CSPOFS 0 OUT X,Y
 IF KCHK(X,Y,V) THEN RETURN V
 INC X,DX[V]
 INC Y,DY[V]
 H=SPHITRC(1,63,X*8,Y*8,1,1)
 IF H>-1 THEN ATTACK 0,H ELSE RETURN V
 RETURN -1
END

'テレポート処理 ***
DEF TELEPORT
VAR I,X,Y
 SET_LIGHT 0,RGB(255,127,0)
 BGMPLAY 4,147,80
 VSYNC 24
 RNDLOCATE OUT X,Y
 SPOFS 0,X*8,Y*8
 SET_LIGHT 0,RGB(255,127,0)
 FOR I=0 TO 3:BREPEAT I,16,3:NEXT
 BREPEAT 5,16,3
END
'--------------------------------------------
'コマンドメニュー表示 ***
DEF MENU()
VAR R,X,Y
 BGMPLAY 1,140,80
 SPSET 129,257
 CSPOFS 0 OUT X,Y
 DEC X,6
 DEC Y,4
 IF X<0 THEN INC X,7
 IF Y<0 THEN INC Y,4
 SPOFS 129,X*8,Y*8,-15
 R=SEL(X+1,Y+1,3,0)
 IF !LEN(ITM) THEN R=-1
 IF R>-1 THEN INC R,8
 SPCLR 129
 RETURN R
END
'--------------------------------------------
'アイテムを使う ***
DEF ITMUSE()
VAR R,X,Y,IN,COM,G,VV,HR,AT,FL
 ITEMLIST OUT X,Y
 IN=SEL(X,Y,LEN(ITM),1)
 IF IN>-1 THEN
  SPLIT ITMV[IN] OUT VV,HR,AT,FL
  CSPOFS 0 OUT X,Y
  DEC X,7
  DEC Y,5
  IF X<0 THEN INC X,8
  IF Y<0 THEN INC Y,5
  G=ITMG[ITM[IN]]
  SPANIM 132,6,-8,0
  SPCLR 131
  GPAGE 0,SPPAGE()
  GFILL 88,40,111,47,#BLACK
  IF FL AND 4 THEN
   GPUTCHR 88,40,"外す"
  ELSE
   GPUTCHR 88,40,ACT$[G]
  ENDIF
  GFILL 88,48,111,55,#BLACK
  IF PWEP==6 && ITM[IN]==8 THEN
   GPUTCHR 88,48,"撃つ"
  ELSE
   GPUTCHR 88,48,"投げる"
  ENDIF
  GPAGE 0,0
  SPSET 133,259
  SPOFS 133,X*8,Y*8,-15
  COM=SEL(X+1,Y+1,4,0)
  IF COM>-1 THEN
   IF COM==0 THEN
    IF G!=7 THEN
     CALL "ACT"+STR$(G),IN
    ELSE
     R=ZAP(IN)
    ENDIF
   ENDIF
   IF COM==1 THEN R=THROW(IN)
   IF COM==2 THEN IPUT IN
   IF COM==3 THEN RENM IN:R=1
  ELSE
   R=1
  ENDIF

 ELSE
  R=1
 ENDIF
 SPCLR 131
 SPCLR 133
 SPANIM 132,6,-8,0
 RETURN R
END
'--------------------------------------------
'名前をつける ***
DEF RENM IN
VAR ID=ITM[IN],V=ITMV[IN],IG=ITMG[ID]
VAR RN$[0],A,B,I,X,Y,R

 IF IG<4 || IG>7 THEN
  BGMPLAY 4,164,80
  RETURN
 ENDIF

 DP "新しい名前は?"

 IF IG==4 THEN 
  A=18
  B=28
 ELSEIF IG==5 THEN
  A=29
  B=42
 ELSEIF IG==6 THEN
  A=43
  B=54
 ELSEIF IG==7 THEN
  A=55
  B=64
 ENDIF

 SPANIM 132,6,-8,RGB(133,0,0,0)
 CSPOFS 0 OUT X,Y
 DEC X,5
 DEC Y,3
 X=X*8
 Y=Y*8
 IF X<0 THEN X=0
 IF X>240 THEN X=240
 IF Y<0 THEN Y=0
 IF Y+(B-A)*8>224 THEN Y=224-(B-A)*8

 GPAGE 0,SPPAGE()
 GFILL 0,80,199,255,0

 FOR I=A TO B
  GPUTCHR 8,80+(I-A)*8,KIN$[I]
 NEXT

 GPAGE 0,0
 SPSET 131,258
 SPOFS 131,X,Y,-25

 X=X DIV 8
 Y=Y DIV 8

 R=SEL(X,Y,B-A+1,0)
 IF R==-1 THEN RETURN
 ITMN$[ID]=KIN$[A+R]+"?"
 DP "呼び名を変更した"
END
'--------------------------------------------
'アイテムを食べる ***
DEF ACT1 IN
VAR ID=ITM[IN]
 SET_LIGHT 0,#YELLOW
 BGMPLAY 2,136,80
 IF ID==1 THEN
  IF PER(54) THEN
   INC FOD,RND(201)+500
  ELSE
   INC FOD,RND(201)+300
  ENDIF
 ELSEIF ID==2 THEN
  INC FOD,RND(201)+500
 ENDIF
 IF FOD>MFOD THEN FOD=MFOD
 IDEC IN
END
'--------------------------------------------
'武器を装備する ***
DEF ACT2 IN
VAR ID=ITM[IN],V=ITMV[IN],VV,HR,AT,FL,A,B,C,D
VAR I
 SPLIT V OUT VV,HR,AT,FL

 '装備をはずす ***
 IF FL AND 4 THEN
  IF FL AND 2 THEN
   BGMPLAY 4,163,80
   SET_LIGHT 0,#PURPLE
   RETURN
  ENDIF
  BGMPLAY 4,142,80
  ITMV[IN]=MERGE(VV,HR,AT,FL-4)
  PWEP=0
  PHR=0
  PAT=0
  RETURN
 ENDIF

 FOR I=0 TO LEN(ITM)-1
  SPLIT ITMV[I] OUT A,B,C,D
  IF ITMG[ITM[I]]==2 THEN 
   'のろい ***
   IF (D AND 6)==6 THEN
    BGMPLAY 4,163,80
    SET_LIGHT 0,#PURPLE
    RETURN
   ENDIF
   IF D AND 4 THEN ITMV[I]=MERGE(A,B,C,D-4)
  ENDIF
 NEXT

 BGMPLAY 4,138,80
 PWEP=ID
 PHR=WHR[ID-3]+HR
 PAT=WAT[ID-3]+AT
 IF FL AND 2 THEN
  BGMPLAY 4,163,80
  SET_LIGHT 0,#PURPLE
 ENDIF
 ITMV[IN]=MERGE(VV,HR,AT,(FL OR 4) AND 14)
END
'--------------------------------------------
'防具を装備する ***
DEF ACT3 IN
VAR ID=ITM[IN],V=ITMV[IN],VV,HR,AT,FL,A,B,C,D
VAR I
 SPLIT V OUT VV,HR,AT,FL

 '防具をはずす ***
 IF FL AND 4 THEN
  IF FL AND 2 THEN
   SET_LIGHT 0,#PURPLE
   BGMPLAY 4,163,80
   RETURN
  ENDIF
  BGMPLAY 4,142,80
  ITMV[IN]=MERGE(VV,HR,AT,FL-4)
  PARM=0
  PDF=0
  RETURN
 ENDIF

 FOR I=0 TO LEN(ITM)-1
  SPLIT ITMV[I] OUT A,B,C,D
  IF ITMG[ITM[I]]==3 THEN 
   'のろい ***
   IF (D AND 6)==6 THEN
    BGMPLAY 4,163,80
    SET_LIGHT 0,#PURPLE
    RETURN
   ENDIF
   IF D AND 4 THEN ITMV[I]=MERGE(A,B,C,D-4)
  ENDIF
 NEXT

 BGMPLAY 4,138,80
 PARM=ID
 PDF=ADF[ID-11]+HR
 IF FL AND 2 THEN
  BGMPLAY 4,163,80
  SET_LIGHT 0,#PURPLE
 ENDIF
 ITMV[IN]=MERGE(VV,HR,AT,(FL OR 4) AND 14)
END
'--------------------------------------------
'指輪を装備する ***
DEF ACT4 IN
VAR ID=ITM[IN],V=ITMV[IN],VV,HR,AT,FL,A,B,C,D
VAR I
 SPLIT V OUT VV,HR,AT,FL

 '指輪をはずす ***
 IF FL AND 4 THEN
  IF FL AND 2 THEN
   BGMPLAY 4,163,80
   SET_LIGHT 0,#PURPLE
   RETURN
  ENDIF
  BGMPLAY 4,142,80
  ITMV[IN]=MERGE(VV,HR,AT,FL-4)
  IF ID==RNG1 THEN RNG1=0 ELSE RNG2=0
  IF ID==22 THEN DEC ST,HR:DEC MST,HR
  IF ID==24 THEN DEC DEX,HR
  RETURN
 ENDIF

 IF RNG1 && RNG2 THEN
  BGMPLAY 4,164,80
  RETURN
 ENDIF

 BGMPLAY 4,138,80
 IF !RNG1 THEN RNG1=ID ELSE RNG2=ID
 IF FL AND 2 THEN
  BGMPLAY 4,163,80
  SET_LIGHT 0,#PURPLE
 ENDIF
 ITMV[IN]=MERGE(VV,HR,AT,FL OR 4)
 IF ID==22 THEN INC ST,HR:INC MST,HR
 IF ID==24 THEN INC DEX,HR
END
'--------------------------------------------
'薬を飲む ***
DEF ACT5 IN
VAR ID=ITM[IN],A,P,I,X,Y
 IDEC IN
 BGMPLAY 5,136,80
 SPCLR 133
 IINS[ID]=1
 ITMN$[ID]=KIN$[ID]
 DP ITMN$[ID]


 IF ID==29 THEN
  SET_LIGHT 0,RGB(255,127,127)
  BGMPLAY 4,156,80
  IF ST==MST THEN
   INC ST
   INC MST
  ELSE
   INC ST
  ENDIF

 ELSEIF ID==30 THEN
  SET_LIGHT 0,#LIME
  BGMPLAY 4,155,80
  ST=MST

 ELSEIF ID==31 THEN
  IF MMK THEN MMK=1
  P=25
  SET_DPOP 0,P
  IF HP[0]==MHP[0] THEN INC MHP[0]
  INC HP[0],P
  IF HP[0]>MHP[0] THEN HP[0]=MHP[0]
  SET_LIGHT 0,#LIME
  BGMPLAY 4,157,80

 ELSEIF ID==32 THEN
  IF MMK THEN MMK=1
  IF GKK THEN GKK=1
  IF KRN[0] THEN
   KRN[0]=0
   A=HP[0]/MHP[0]*255
   SPCOLOR 0,RGB(255,A,A)
  ENDIF
  P=99
  SET_DPOP 0,P
  IF HP[0]==MHP[0] THEN INC MHP[0],2
  INC HP[0],P
  IF HP[0]>MHP[0] THEN HP[0]=MHP[0]
  SET_LIGHT 0,#LIME
  BGMPLAY 4,157,80

 ELSEIF ID==33 THEN
  IF GKK THEN GKK=1
  DEC ST,RND(3)+1
  IF ST<1 THEN ST=1
  DEC HP[0],5
  IF HP[0]<0 THEN HP[0]=0
  SET_LIGHT 0,#MAGENTA
  BGMPLAY 4,150,80
  SET_DPOP 0,-5

 ELSEIF ID==34 THEN
  SET_LIGHT 0,#YELLOW
  IF LV<21 THEN
   A=RND(8)+3
   EX=NEX
   BGMPLAY 7,254,80
   DP "レベルがあがった"
   INC LV
   INC HP[0],A
   INC MHP[0],A
   RESTORE @LEVEL
   FOR I=0 TO LV
    PEX=NEX
    READ NEX
   NEXT
  ENDIF

 ELSEIF ID==35 THEN
  SET_LIGHT 0,#MAGENTA
  BGMPLAY 4,150,80
  MMK=RND(301)+500

 ELSEIF ID==36 THEN
  SET_LIGHT 0,#MAGENTA
  SPANIM 132,6,-16,#MAGENTA,1
  BGMPLAY 4,150,80
  GKK=RND(301)+500
  GPAGE 0,SPPAGE()
  GFILL 0,0,215,15,#BLACK
  GFILL 224,0,295,7,#BLACK
  GPUTCHR 0,0,"@%%%%%%%%%%%%%%%%%%%%%%%%%%"
  GPUTCHR 0,8,"ä%%%%%%%%%%%%%%%%%%%%%%%%%%"
  GPUTCHR 224,0,"%%%%%%%%%"
  GPAGE 0,0

 ELSEIF ID==37 THEN
  SET_LIGHT 0,#CYAN
  BGMPLAY 4,158,80
  MOF=1

 ELSEIF ID==38 THEN
  IF !MMK && !GKK THEN
   SET_LIGHT 0,#CYAN
   BGMPLAY 4,158,80
   FOR I=64 TO 127
    IF SPUSED(I) THEN SPCOLOR I,#CYAN
   NEXT
  ENDIF

 ELSEIF ID==39 THEN
  KRN[0]=RND(11)+12
  SET_LIGHT 0,#PURPLE
  BGMPLAY 2,144,80
  SPANIM 132,6,-16,#PURPLE,1

 ELSEIF ID==40 THEN
  VSYNC 8
  BGMPLAY 4,170,80
  IF DMV THEN
   DMV=0
   SET_LIGHT 0,#CYAN
  ENDIF
  CSPOFS 0 OUT X,Y
  SPSET 135,262
  SPOFS 135,X*8,Y*8,-20
  SPANIM 135,0,-60,X*8,Y*8-16,1
  SPANIM 135,6,-60,0,1
  SPFUNC 135,"SPCLEAR"
  FYU=RND(16)+15

 ELSEIF ID==41 THEN
  SPANIM 132,6,-16,#BLUE,1
  SPVAR 0,2,SPVAR(0,2) OR 2
  KSK=(RND(11)+11)*2
  SET_LIGHT 0,#BLUE
  BGMPLAY 4,158,80

 ELSEIF ID==42 THEN
  SPANIM 132,6,-16,#YELLOW,1
  BGMPLAY 4,171,80
  MIE=1

 ENDIF

 PRINT_DUNGEON 0
 PRINT_STATUS
 VSYNC 16
END
'--------------------------------------------
'薬をモンスターに当てた場合 ***
DEF HITPOTION ID,TG
VAR A

 IF ID==29 THEN
  SET_LIGHT TG,RGB(255,127,127)
  BGMPLAY 4,156,80
  A=(MHP[TG] DIV 5)-1
  SET_DPOP TG,A
  INC HP[TG],A

 ELSEIF ID==30 THEN
  SET_LIGHT TG,#LIME
  BGMPLAY 4,155,80

 ELSEIF ID==31 THEN
  SET_LIGHT TG,#LIME
  BGMPLAY 4,157,80
  A=MHP[TG] DIV 2
  SET_DPOP TG,A
  INC HP[TG],A

 ELSEIF ID==32 THEN
  SET_LIGHT TG,#LIME
  BGMPLAY 4,157,80
  A=MHP[TG]
  SET_DPOP TG,A
  INC HP[TG],A

 ELSEIF ID==33 THEN
  SET_LIGHT TG,#MAGENTA
  BGMPLAY 4,150,80
  A=(MHP[TG] DIV 4)+1
  SET_DPOP TG,-A
  DEC HP[TG],A

 ELSEIF ID==34 THEN
  SET_LIGHT TG,RGB(255,127,127)
  BGMPLAY 4,156,80
  A=(MHP[TG] DIV 5)-1
  SET_DPOP TG,A
  INC HP[TG],A

 ELSEIF ID==35 THEN
  SET_LIGHT TG,#GREEN
  BGMPLAY 3,144,80
  SLP[TG]=2

 ELSEIF ID==36 THEN
  SET_DPOP TG,-1
  DEC HP[TG],1

 ELSEIF ID==37 THEN
  SET_DPOP TG,-1
  DEC HP[TG],1

 ELSEIF ID==38 THEN
  SET_DPOP TG,-1
  DEC HP[TG],1

 ELSEIF ID==39 THEN
  KRN[TG]=RND(11)+12
  SET_LIGHT TG,#PURPLE
  BGMPLAY 2,144,80

 ELSEIF ID==40 THEN
  SET_DPOP TG,-1
  DEC HP[TG],1

 ELSEIF ID==41 THEN
  SET_LIGHT TG,#BLUE
  BGMPLAY 4,158,80
  IF SPP(TG,0) THEN
   SPVAR TG,2,SPVAR(TG,2)-1
  ELSE
   SPVAR TG,2,SPVAR(TG,2) OR 2
  ENDIF

 ELSEIF ID==42 THEN
  SET_DPOP TG,-1
  DEC HP[TG],1

 ENDIF

 IF HP[TG]>MHP[TG] THEN HP[TG]=MHP[TG]

END
'--------------------------------------------
'巻物を読む ***
DEF ACT6 IN
VAR I,ID=ITM[IN],VV,HR,AT,FL,F,G,MX,MY,X,Y
VAR DX[8],DY[8],A,V,SH,R

 SPCLR 133
 IDEC IN
 SET_MCIRCLE 0
 BGMPLAY 6,169,80
 VSYNC 48

 IF ID==43 THEN
  FOR I=0 TO LEN(ITM)-1
   SPLIT ITMV[I] OUT VV,HR,AT,FL
   G=ITMG[ITM[I]]==3
   IF G && FL AND 4 && !(FL AND 8) THEN
    IF FL AND 2 THEN FL=FL AND 13
    ITMV[I]=MERGE(VV,HR,AT,FL OR 8)
    F=1
   ENDIF
  NEXT
  IF F THEN
   SET_LIGHT 0,#YELLOW
   BGMPLAY 4,154,80
  ENDIF

 ELSEIF ID==44 THEN
  FOR I=1 TO 63
   IF SPUSED(I) && SPHITSP(I,128) THEN
    SET_LIGHT I,#GREEN
    BGMPLAY 3,144,80
    SLP[I]=2
    VSYNC 8
   ENDIF
  NEXT

 ELSEIF ID==45 THEN
  FOR I=0 TO LEN(ITM)-1
   SPLIT ITMV[I] OUT VV,HR,AT,FL
   IF (FL AND 4) && ITMG[ITM[I]]==2 THEN
    SET_LIGHT 0,#BLUE
    BGMPLAY 4,154,80
    IF RND(2) THEN
     ITMV[I]=MERGE(VV,HR+1,AT,FL AND 13)
     INC PHR
    ELSE
     ITMV[I]=MERGE(VV,HR,AT+1,FL AND 13)
     INC PAT
    ENDIF
   ENDIF
  NEXT

 ELSEIF ID==46 THEN
  FOR I=0 TO LEN(ITM)-1
   SPLIT ITMV[I] OUT VV,HR,AT,FL
   IF (FL AND 4) && ITMG[ITM[I]]==3 THEN
    SET_LIGHT 0,#BLUE
    BGMPLAY 4,154,80
    ITMV[I]=MERGE(VV,HR+1,AT,FL AND 13)
    INC PDF
   ENDIF
  NEXT

 ELSEIF ID==47 THEN
  BGMPLAY 4,172,80
  IINS[47]=1
  ITMN$[47]=KIN$[47]
  IF LEN(ITM) THEN
   DP "識別するアイテムは?"
   VSYNC 32
   ITEMLIST OUT X,Y
   R=SEL(X,Y,LEN(ITM),1)
   IINS[ITM[R]]=1
   ITMN$[ITM[R]]=KIN$[ITM[R]]
   SPLIT ITMV[R] OUT VV,HR,AT,FL
   ITMV[R]=MERGE(VV,HR,AT,FL AND 14)
   DP INAME$(ITM[R],ITMV[R])
   BGMPLAY 4,173,80
  ENDIF

 ELSEIF ID==48 THEN
  TELEPORT

 ELSEIF ID==49 THEN
  SET_LIGHT 0,#CYAN
  BGMPLAY 3,152,80
  FLZ=RND(5)+4

 ELSEIF ID==51 THEN
  FOR I=0 TO LEN(ITM)-1
   SPLIT ITMV[I] OUT VV,HR,AT,FL
   IF (FL AND 6)==6 THEN
    ITMV[I]=MERGE(VV,HR,AT,FL AND 13)
    F=1
   ENDIF
  NEXT
  IF F THEN
   SET_LIGHT 0,#BLUE
   BGMPLAY 4,153,80
  ENDIF
 ELSEIF ID==52 THEN
  COPY DX,@DDX
  COPY DY,@DDY
  CSPOFS 0 OUT X,Y
  REPEAT
   V=RND(8)
   MX=X+DX[V]
   MY=Y+DY[V]
   SH=SPHITRC(64,127,MX*8+4,MY*8+4,1,1)
   IF HCHK(MX,MY) && SH==-1 THEN
    SET_CHR MX,MY,MNSTBL[RND(LEN(MNSTBL))]
    SET_LIGHT 0,#RED
    BGMPLAY 4,151,80
    F=1
   ENDIF
   INC A
  UNTIL F || A==63

 ELSEIF ID==53 THEN
  FOR I=1 TO 63
   IF SPUSED(I) && SLP[I] THEN
    SPCOLOR I OUT F
    IF F THEN
     SET_LIGHT I,#GRAY
     SLP[I]=0
     AC[I]=1
    ENDIF
   ENDIF
  NEXT
  BGMPLAY 4,145,80
 ELSEIF ID==54 THEN
  SPCOLOR 132,#WHITE
  SET_LIGHT 0,#YELLOW
  BGMPLAY 4,148,80
  PRINT_DUNGEON 1
 ENDIF
END
'--------------------------------------------
'杖をふる ***
DEF ZAP(IN)
VAR ID=ITM[IN],V=ITMV[IN],TR,VV,HR,AT,FL
VAR DX[8],DY[8],X,Y,H

 IPF=1
 COPY DX,@DDX
 COPY DY,@DDY

 SPLIT V OUT VV,HR,AT,FL

 SPCLR 133
 TR=INPUT_R()
 IF TR==-1 THEN RETURN 1

 IF HR THEN
  BGMPLAY 5,175,80
  CSPOFS 0 OUT X,Y
  SPSET 137,127
  REPEAT
   INC X,DX[TR]
   INC Y,DY[TR]
   SPOFS 137,X*8,Y*8
   SET_EF 137,RGB(63,15,15)
   H=SPHITRC(1,63,X*8,Y*8,1,1)
   VSYNC
  UNTIL M[X+DX[TR],Y+DY[TR]]==255 || H>-1
  SPCLR 137
  IF H>-1 THEN
   MAGIC ID,H
  ENDIF
 ELSE
  BGMPLAY 5,135,80
 ENDIF

 IF HR THEN DEC HR
 ITMV[IN]=MERGE(VV,HR,AT,FL)
 RETURN 0
END
'--------------------------------------------
'杖 ***
DEF MAGIC ID,TG
VAR X,Y
 WZ=1
 IF ID==55 THEN
  SET_LIGHT TG,RGB(255,127,0)
  BGMPLAY 4,147,80
  RNDLOCATE OUT X,Y
  SPOFS TG,X*8,Y*8

 ELSEIF ID==56 THEN
  SET_LIGHT TG,#MAGENTA
  BGMPLAY 4,159,80
  SPVAR TG,2,SPVAR(TG,2) OR 1

 ELSEIF ID==57 THEN
  KRN[TG]=RND(11)+12
  SET_LIGHT TG,#PURPLE
  BGMPLAY 2,144,80

 ELSEIF ID==58 THEN
  SET_LIGHT TG,RGB(255,127,0)
  BGMPLAY 2,176,80
  SPCOLOR TG,0
  SPVAR TG,2,SPVAR(TG,2) OR 2048

 ELSEIF ID==59 THEN
  CSPOFS TG OUT X,Y
  SET_LIGHT TG,#SILVER
  BGMPLAY 4,161,80
  SPCLR TG
  SET_CHR X,Y,RND(26)+1

 ELSEIF ID==60 THEN
  SET_LIGHT TG,#BLUE
  BGMPLAY 2,158,80
  SPVAR TG,2,SPVAR(TG,2) OR 2

 ELSEIF ID==61 THEN
  SET_LIGHT TG,#GREEN
  BGMPLAY 3,144,80
  SLP[TG]=2

 ELSEIF ID==62 THEN
  SET_LIGHT TG,#RED
  ATTACK 0,TG
  BEEP 120

 ELSEIF ID==63 THEN
  SET_LIGHT TG,#CYAN
  BGMPLAY 3,144,80
  SPVAR TG,2,0
 ENDIF
 WZ=0
END
'--------------------------------------------
'イェンダーの魔除け ***
DEF ACT8 IN
 BGMPLAY 4,174,80
 SET_LIGHT 0,#YELLOW
 DP "ついに手に入れたぞ"
END
'--------------------------------------------
'アイテムを投げる ***
DEF THROW(IN)
VAR ID=ITM[IN],V=ITMV[IN],TR,VV,HR,AT,FL
VAR DX[8],DY[8],X,Y,H

 IPF=1
 COPY DX,@DDX
 COPY DY,@DDY

 SPLIT V OUT VV,HR,AT,FL

 IF (FL AND 6)==6 THEN
  SET_LIGHT 0,#PURPLE
  BGMPLAY 4,163,80
  RETURN 1
 ENDIF

 SPCLR 133
 TR=INPUT_R()
 IF TR==-1 THEN RETURN 1
 BGMPLAY 5,139,80

 CSPOFS 0 OUT X,Y

 SPSET 137,127
 REPEAT
  INC X,DX[TR]
  INC Y,DY[TR]
  SPOFS 137,X*8,Y*8
  SET_EF 137,RGB(15,15,63)
  H=SPHITRC(1,63,X*8,Y*8,1,1)
  VSYNC
 UNTIL M[X+DX[TR],Y+DY[TR]]==255 || H>-1
 SPCLR 137

 IF !(H>-1 && TATTACK(IN,H)) THEN DROP X,Y,IN

 IDEC IN
 VSYNC 8
 RETURN 0
END
'--------------------------------------------
'投げて攻撃 ***
DEF TATTACK(IN,H)
VAR ID=ITM[IN],V=ITMV[IN],G=ITMG[ID]
VAR I,VV,HR,AT,FL,R,DM,HT,F,WF

 BGMPLAY 1,131,80

 '攻撃先起こし処理 ***
 IF SLP[H] THEN SLP[H]=0
 IF SPP(H,5) THEN SPVAR H,2,SPVAR(H,2)-32
 IF SPP(H,15) THEN
  SPVAR H,2,SPVAR(H,2)-32768
  SPCHR H,20
 ENDIF

 IF G==2 THEN
  HR=WHR[ID-3]+HR
  AT=WAT[ID-3]+AT
  DM=DICE(HR,AT)+STRAT()
  INC DM,LV/2+DEX/2-(!!RNG1+!!RNG2)/2
  HT=60+HR*3+LV+DEX*2-!!RNG1-!!RNG2
  IF ID==8 && PWEP==6 THEN
   INC DM,DICE(PHR,PAT)+STRAT()
   INC DM,LV/2+DEX/2-(!!RNG1+!!RNG2)/2
   DM=DM/3*2
   HT=HT/3*4
  ENDIF
  WF=(ID==7 || ID==9 || ID==10)
  IF FL AND 4 && WF THEN
   DM=DM/2*3
   HT=HT/3*4
  ENDIF
 ELSEIF G==5 || G==7 THEN
  DM=0
  HT=63+LV+DEX*2-!!RNG1-!!RNG2
 ELSE
  DM=STRAT()-1
  INC DM,LV/2+DEX/2-(!!RNG1+!!RNG2)/2
  HT=63+LV+DEX*2-!!RNG1-!!RNG2
 ENDIF
 DM=CEIL(DM)

 '命中判定 ***
 IF PER(HT) THEN
  IF G==5 THEN HITPOTION ID,H
  IF G==7 THEN MAGIC ID,H
  SET_DPOP H,-DM
  DEC HP[H],DM
  IF HP[H]<=0 THEN
   HP[H]=0
   SET_LIGHT H,#RED
   ADDEXP SPVAR(H,3)
   BLOOD H
   F=1
   BEEP 13
   'つかみ回復処理 ***
   IF TKM[H] THEN
    DMV=0
    SET_LIGHT 0,#LIME
    BGMPLAY 2,155,80
   ENDIF
  ENDIF
  R=1
 ELSE
  BGMPLAY 1,135,80
 ENDIF
 AC[0]=1
 FOR I=0 TO 3:BREPEAT I,16,3:NEXT
 BREPEAT 5,16,3
 COLOR TPAL[4]
 LP 41,26,""*8
 LP 41,27," "*8
 COLOR TPAL[7]
 LP 41,26,EMN$[SPVAR(H,3)]
 MTR$ 41,27,HP[H],MHP[H],#YELLOW,#RED
 IF F THEN SPCLR H
 RETURN R
END
'--------------------------------------------
'アイテムを落とす ***
DEF DROP X,Y,IN
VAR ID=ITM[IN],V=ITMV[IN],VV,HR,AT,FL
VAR I,DX[8],DY[8],DS[8],H,F,DRX,DRY
 SPLIT V OUT VV,HR,AT,FL

 COPY DX,@DDX
 COPY DY,@DDY
 COPY DS,@DSORT
 SORT DS,DX,DY

 H=SPHITRC(64,127,X*8,Y*8,8,8)
 IF H>-1 THEN
  REPEAT
   DRX=X+DX[I]
   DRY=Y+DY[I]
   H=SPHITRC(64,127,DRX*8,DRY*8,8,8)
   F=(M[DRX,DRY]!=255)
   IF H==-1 && F THEN BREAK
   INC I
  UNTIL (H==-1 && F) || I==8
  IF I==8 THEN RETURN
  X=X+DX[I]
  Y=Y+DY[I]
 ENDIF

 SET_ITEM X,Y,ID,MERGE(1,HR,AT,FL AND 11)
END
'--------------------------------------------
'方向を入力する ***
DEF INPUT_R()
VAR R,X,Y,DX[8],DY[8],CX,CY,BT,SX,SY,SW

 CSPOFS 0 OUT X,Y
 SPSET 136,263
 SPOFS 136,X*8,Y*8,-15
 SPCOLOR 136,#YELLOW
 SPANIM 136,6,-24,#RED,-24,#YELLOW,0

 COPY DX,@DDX
 COPY DY,@DDY

 WHILE 1
  STICK OUT SX,SY
  SY=-SY 'PI: STICK Y INVERTED VS 3DS
  BT=BUTTON(1)
  SW=0
  IF SX> 0.3 THEN BT=BT OR 8:SW=7
  IF SX<-0.3 THEN BT=BT OR 4:SW=7
  IF SY> 0.3 THEN BT=BT OR 1:SW=7
  IF SY<-0.3 THEN BT=BT OR 2:SW=7

  IF BT AND 8 && CX< 1 THEN INC CX
  IF BT AND 4 && CX>-1 THEN DEC CX
  IF BT AND 1 && CY>-1 THEN DEC CY
  IF BT AND 2 && CY< 1 THEN INC CY
  IF BT AND 15 THEN BEEP 9
  SPOFS 136,X*8+CX*8,Y*8+CY*8
  VSYNC 1+SW
  IF BT AND 16 THEN BREAK
  IF BT AND 32 THEN
   CX=0
   CY=0
   BREAK
  ENDIF
 WEND
 FOR R=0 TO 7
  IF CX==DX[R] && CY==DY[R] THEN
   BGMPLAY 1,140,80
   BREAK
  ENDIF
 NEXT
 IF CX==0 && CY==0 THEN R=-1
 SPCLR 136
 RETURN R
END
'--------------------------------------------
'アイテムを置く ***
DEF IPUT IN
VAR I,X,Y,H,ID=ITM[IN],V=ITMV[IN],VV,HR,AT,FL
VAR IG=ITMG[ID],R
 IPF=1
 SPLIT V OUT VV,HR,AT,FL
 CSPOFS 0 OUT X,Y
 H=SPHITRC(64,127,X*8,Y*8,8,8)
 IF H>-1 THEN
  BGMPLAY 4,164,80
  RETURN
 ENDIF

 IF (FL AND 6)==6 THEN
  SET_LIGHT 0,#PURPLE
  BGMPLAY 4,163,80
  RETURN
 ENDIF

 IF FL AND 4 THEN
  IF IG==2 THEN
   PWEP=0
   PHR=0
   PAT=0
  ELSEIF IG==3 THEN
   PARM=0
   PDF=0
  ELSEIF IG==4 THEN
   IF ID==RNG1 THEN RNG1=0 ELSE RNG2=0
  ENDIF
 ENDIF

 IF ID!=50 THEN
  FOR I=IN TO LEN(ITM)-2
   ITM[I]=ITM[I+1]
   ITMV[I]=ITMV[I+1]
  NEXT
  I=POP(ITM)
  I=POP(ITMV)
  SET_ITEM X,Y,ID,MERGE(VV,HR,AT,FL AND 11)
 ELSE
  SET_MCIRCLE 0
  BEEP 101
  IDEC IN
  SPSET 64,127,34 OUT R
  IF R==-1 THEN RETURN
  SPOFS R,X*8,Y*8,0
  SPVAR R,0,50
  SPVAR R,1,1
  SPCOL R,4,4,1,1
  SPFUNC R,"ITEM"
  SPCOLOR R,#CYAN
 ENDIF

 BEEP 95

END
'--------------------------------------------
'アイテムを減らす ***
DEF IDEC IN
VAR I,A,ID=ITM[IN],V=ITMV[IN],VV,HR,AT,FL
 SPLIT V OUT VV,HR,AT,FL
 IF VV>1 THEN
  ITMV[IN]=MERGE(VV-1,HR,AT,FL)
 ELSE
  IF FL AND 4 THEN
   IF ITMG[ID]==2 THEN
    PWEP=0
    PHR=0
    PAT=0
   ELSEIF ITMG[ID]==3 THEN
    PARM=0
    PDF=0
   ENDIF
  ENDIF
  FOR I=IN TO LEN(ITM)-2
   ITM[I]=ITM[I+1]
   ITMV[I]=ITMV[I+1]
  NEXT
  A=POP(ITM)
  A=POP(ITMV)
 ENDIF
END
'--------------------------------------------
'アイテムリストを表示 ***
DEF ITEMLIST OUT X,Y
VAR I,ID,V,VV,HR,AT,FL,N$,CL

 BGMPLAY 1,140,80
 SPANIM 132,6,-8,RGB(133,0,0,0)
 CSPOFS 0 OUT X,Y
 DEC X,5
 DEC Y,3
 X=X*8
 Y=Y*8
 IF X<0 THEN X=0
 IF X>240 THEN X=240
 IF Y<0 THEN Y=0
 IF Y+LEN(ITM)*8>224 THEN Y=224-LEN(ITM)*8

 GPAGE 0,SPPAGE()
 GFILL 0,80,199,255,0

 FOR I=0 TO LEN(ITM)-1
  CL=#WHITE
  ID=ITM[I]
  V=ITMV[I]
  SPLIT V OUT VV,HR,AT,FL
  N$=INAME$(ID,V)
  IF !IINS[ID] THEN CL=#YELLOW
  IF FL AND 1 THEN CL=#YELLOW
  IF FL AND 4 THEN CL=#LIME
  IF (FL AND 6)==6 THEN CL=#MAGENTA
  IF ID==8 && PWEP==6 THEN CL=#CYAN
  GPUTCHR 8,80+I*8,N$,CL
 NEXT

 GPAGE 0,0
 SPSET 131,258
 SPOFS 131,X,Y,-25
 X=X DIV 8
 Y=Y DIV 8
END
'--------------------------------------------
'カーソルで選択 ***
DEF SEL(X,Y,A,B)
VAR R,BT1,BT2

 SPSET 130,91
 SPOFS 130,X*8,Y*8,-20

 WHILE 1
  BT1=BUTTON(1)
  BT2=BUTTON(2)
  IF BT1 AND 1 THEN DEC R:BEEP 9
  IF BT1 AND 2 THEN INC R:BEEP 9
  IF R>=A THEN R=0
  IF R<0  THEN R=A-1
  VSYNC
  SPOFS 130,X*8,(Y+R)*8,-20
  IF B && (BT2 AND 128) THEN ISORT
  IF BT2 AND 16 THEN
   BGMPLAY 1,140,80
   BREAK
  ENDIF
  IF BT2 AND 32 THEN R=-1:BREAK
 WEND

 SPCOLOR 130,0
 RETURN R
END
'--------------------------------------------
DEF ISORT
VAR I,X,Y,USD[0],ID,V,A,VV,HR,AT,FL

 FOR I=0 TO LEN(ITM)-1
  ID=ITM[I]
  V=ITMV[I]
  SPLIT V OUT VV,HR,AT,FL
  A=ITMG[ID]*100+(IRND[ID]*!IINS[ID])
  IF FL AND 4 THEN A=ITMG[ID]
  IF ID==8 && PWEP==6 THEN A=-10
  PUSH USD,A
 NEXT

 SORT USD,ITM,ITMV
 ITEMLIST OUT X,Y
 BEEP 117
END
'--------------------------------------------
'アイテムを拾う ***
DEF GET_ITEM H
VAR ID=SPVAR(H,0),V=SPVAR(H,1),IG=ITMG[ID]
VAR I,VV,HR,AT,FL,IVV,IHR,IAT,IFL,F,CK

 IF FYU && !IPF THEN
  DP "身体が浮いていて拾えない"
  IPF=1
  RETURN
 ENDIF

 FOR I=0 TO 3:BREPEAT I,16,3:NEXT
 BREPEAT 5,16,3
 SPLIT V OUT VV,HR,AT,FL
 IF IG==0 THEN
  DP STR$(V)+"枚の金貨"
  INC GLD,V
  BGMPLAY 2,128,80
  SPCLR H
 ELSEIF IG>=1 && IG<=8 THEN
  IF ITMS[ID] THEN
   FOR I=0 TO LEN(ITM)-1
    SPLIT ITMV[I] OUT IVV,IHR,IAT,IFL
    F=(HR==IHR) && (AT==IAT)
    IF ID==ITM[I] && F THEN
     DP INAME$(ID,V)
     ITMV[I]=MERGE(VV+IVV,IHR,IAT,IFL)
     BGMPLAY 2,128,80
     SPCLR H
     CK=1
     BREAK
    ENDIF
   NEXT
  ENDIF
  IF !CK && LEN(ITM)<20 THEN 
   DP INAME$(ID,V)
   PUSH ITM,ID
   PUSH ITMV,V
   BGMPLAY 2,128,80
   SPCLR H
  ENDIF
 ENDIF
END
'--------------------------------------------
'階段を使う ***
DEF STAIR()
VAR X,Y
 IF FYU THEN
  DP "身体が浮いていて使えない"
  BGMPLAY 4,164,80
  RETURN 1
 ENDIF
 CSPOFS 0 OUT X,Y
 IF MC$[X,Y]!="%" THEN RETURN 1
 BGMPLAY 3,129,80
 UF=1
 RETURN 0
END
'--------------------------------------------
'モンスター行動処理 ***
DEF MONSTER
VAR ID=CALLIDX,X,Y,A,B,V,FF,PX,PY,D,H

 '起こし判定 ***
 IF SLP[ID]==1 THEN
  IF !MZM[ID] THEN
   CSPOFS 0 OUT PX,PY
   H=SPHITRC(ID,PX*8-8,PY*8-8,24,24)
   IF H THEN AWAKE ID
  ELSE
   IF SPHITSP(ID,128) THEN MZM[ID]=0:AWAKE ID
  ENDIF
 ENDIF

 IF !TCHK(ID) THEN
  CANIM ID
  RETURN
 ENDIF

 '混乱回復処理 ***
 IF KRN[ID] THEN DEC KRN[ID]

 H=SPHITSP(ID,128)

 IF !KRN[ID] THEN
  'にらみ処理 ***
  IF H && SPP(ID,12) && PER(75) THEN
   SET_LIGHT ID,#WHITE
   BGMPLAY 3,137,80
   VSYNC 8
   IF PER(40) THEN
    KRN[0]=RND(11)+12
    SET_LIGHT 0,#PURPLE
    BGMPLAY 2,144,80
   ENDIF
   SPVAR ID,2,SPVAR(ID,2)-4096
   RETURN
  ENDIF

  '炎攻撃処理 ***
  IF H && SPP(ID,14) && PER(50) THEN
   CSPOFS ID OUT X,Y
   CSPOFS 0 OUT PX,PY
   D=DEG(ATAN(PY-Y,PX-X))
   IF !(D MOD 45) THEN
    SET_LIGHT ID,RGB(255,63,0)
    BGMPLAY 3,162,80
    VSYNC 8
    SET_LIGHT 0,RGB(255,63,0)
    ATTACK ID,0
    RETURN
   ENDIF
  ENDIF
 ENDIF

 FF=SPP(ID,2) && PER(67)
 IF !FF && !KRN[ID] && MATTACK(ID) THEN
  IF SPUSED(ID) THEN CANIM ID
  RETURN
 ENDIF
 MMOVE ID,FF
 CANIM ID
END

'モンスター移動処理 ***
DEF MMOVE ID,FF
VAR I,A,B,V,X,Y,MX,MY,DX[8],DY[8],TV[0],DS[0]
VAR PX,PY,H,RM
 COPY DX,@DDX
 COPY DY,@DDY
 CSPOFS ID OUT X,Y

 IF FF || KRN[ID] THEN
  'ふらふら処理 ***
  REPEAT
   INC A
  UNTIL !CMOVE(ID,RND(8)) || A>7
  RETURN
 ENDIF

 IF SPP(ID,5) && GLIKE(ID) THEN RETURN

 IF !SPVAR(ID,1) THEN
  IF TL[X,Y] THEN
   'ルート巡回処理 ***
   V=((SPVAR(ID,0) DIV 2)*2-2) AND 7
   MX=X+DX[V]
   MY=Y+DY[V]
   REPEAT
    WHILE !HCHK(MX,MY) || !TL[MX,MY]
     V=V+2 AND 7
     MX=X+DX[V]
     MY=Y+DY[V]
     INC A
     IF A>7 THEN BREAK
    WEND
    INC B
    IF B>7 || A>7 THEN BREAK
   UNTIL !CMOVE(ID,V)
  ELSE
   '巡回ルート外 ***
   REPEAT
    INC A
   UNTIL !CMOVE(ID,RND(8)) || A>7
  ENDIF
 ELSE
  '追跡処理 ***
  CSPOFS 0 OUT PX,PY
  V=SPVAR(ID,0)
  FOR I=0 TO 7
   V=V+1 AND 7
   MX=X+DX[V]
   MY=Y+DY[V]
   IF HCHK(MX,MY) THEN
    A=PX*8-MX*8
    B=PY*8-MY*8
    PUSH TV,V
    PUSH DS,SQR(POW(A,2)+POW(B,2))
   ENDIF
  NEXT
  IF LEN(TV) THEN
   A=-1
   SORT DS,TV
   REPEAT
    INC A
   UNTIL A>LEN(TV)-1 || !CMOVE(ID,TV[A])
   IF DS[0]>50 THEN SPVAR ID,1,0
  ENDIF
 ENDIF
END

'モンスター攻撃判定 ***
DEF MATTACK(ID)
VAR I,X,Y,DX[8],DY[8],PX,PY,F,MX,MY,SH
 COPY DX,@DDX
 COPY DY,@DDY
 CSPOFS ID OUT X,Y
 CSPOFS 0 OUT PX,PY
 FOR I=0 TO 7
  MX=X+DX[I]
  MY=Y+DY[I]
  F=!KCHK(X,Y,I)
  IF MX==PX && MY==PY && F THEN BREAK
 NEXT
 IF I==8 THEN RETURN 0
 SH=SPHITRC(64,127,MX*8+4,MY*8+4,1,1)
 IF SH>-1 THEN RETURN 0
 ATTACK ID,0
 RETURN 1
END

'モンスター発生処理 ***
DEF POP_MONSTER
VAR X,Y,A,PX,PY
 IF !(CNT MOD 64) THEN
  REPEAT
   RNDLOCATE OUT X,Y
   CSPOFS 0 OUT PX,PY
   INC A
  UNTIL M[X,Y]!=M[PX,PY] || A>255
  SET_CHR X,Y,MNSTBL[RND(LEN(MNSTBL))]
 ENDIF
END

'モンスターのプレイヤー感知処理 ***
DEF AWAKE ID
VAR V=45,B,I
 B=(RNG1==18)+(RNG2==18)
 IF B==1 THEN V=11 ELSEIF B==2 THEN V=4
 IF !PER(V) THEN RETURN
 FOR I=0 TO 3:BREPEAT I,16,3:NEXT
 BREPEAT 5,16,3
 SET_LIGHT ID,RGB(127,63,0)
 BGMPLAY 3,137,80
 SLP[ID]=0
 AC[ID]=1
END
'--------------------------------------------
DEF GLIKE(ID)
VAR I,J,X,Y,RM,H,GL[0],PX,PY,V,MX,MY,A,B
VAR DX[8],DY[8],DS[0],TV[0]


 CSPOFS ID OUT X,Y
 RM=M[X,Y]
 IF RM==9 THEN RETURN 0

 H=SPHITRC(64,127,X*8,Y*8,1,1)
 IF H>-1 && !SPVAR(H,0) THEN RETURN 1

 FOR J=Y1[RM] TO Y2[RM]
  FOR I=X1[RM] TO X2[RM]
   H=SPHITRC(64,127,I*8,J*8,1,1)
   IF H>-1 && !SPVAR(H,0) THEN
    IF SPHITRC(1,63,I*8,J*8,1,1)==-1 THEN
     PUSH GL,H
    ENDIF
   ENDIF
  NEXT
 NEXT

 IF !LEN(GL) THEN RETURN 0

 COPY DX,@DDX
 COPY DY,@DDY

 CSPOFS GL[0] OUT PX,PY
 V=SPVAR(ID,0)
 FOR I=0 TO 7
  V=V+1 AND 7
  MX=X+DX[V]
  MY=Y+DY[V]
  IF HCHK(MX,MY) THEN
   A=PX*8-MX*8
   B=PY*8-MY*8
   PUSH TV,V
   PUSH DS,SQR(POW(A,2)+POW(B,2))
  ENDIF
 NEXT
 IF LEN(TV) THEN
  A=-1
  SORT DS,TV
  REPEAT
   INC A
  UNTIL A>LEN(TV)-1 || !CMOVE(ID,TV[A])
  IF DS[0]>50 THEN SPVAR ID,1,0
 ENDIF

 RETURN 1
END
'--------------------------------------------
'攻撃処理 ***
DEF ATTACK ID,TG
VAR I,DM,D1,D2,D3,D4,HT,MNB,F

 BGMPLAY 1,131-!!ID,80

 '攻撃先起こし処理 ***
 IF SLP[TG] THEN SLP[TG]=0
 IF SPP(TG,5) THEN SPVAR TG,2,SPVAR(TG,2)-32
 IF SPP(TG,15) THEN
  SPVAR TG,2,SPVAR(TG,2)-32768
  SPCHR TG,20
 ENDIF

 IF !ID THEN
  '与ダメージ算出 ***
  DM=DICE(PHR,PAT)+STRAT()
  INC DM,LV/2+DEX/2-(!!RNG1+!!RNG2)/2
  DM=CEIL(DM)
  HT=60+PHR*3+LV+DEX*2-!!RNG1-!!RNG2
  IF WZ THEN HT=999
 ELSE
  '被ダメージ算出 ***
  MNB=SPVAR(ID,3)
  RESTORE "@MAT"+STR$(MNB)
  READ D1,D2,D3,D4
  DM=DICE(D1,D2)+DICE(D3,D4)
  DM=CEIL(DM/100*(100-PDF*3))
  IF TKM[ID] THEN DM=TKM[ID]
  HT=MNSHR[MNB]-LV*2-DEX*2+!!RNG1+!!RNG2
 ENDIF

 '命中判定 ***
 IF PER(HT) && HP[TG] THEN
  SET_DPOP TG,-DM
  DEC HP[TG],DM
  IF SPP(ID, 3) THEN ICE
  IF SPP(ID, 4) THEN POISON
  IF SPP(ID, 7) THEN ACID
  IF SPP(ID, 9) THEN TSUKAMI ID
  IF SPP(ID,10) THEN LVDOWN
  IF SPP(ID,13) THEN DRAIN
  IF SPP(ID, 6) && GSTEAL(ID) THEN RETURN
  IF SPP(ID, 8) && THEFT(ID) THEN RETURN
  IF ID THEN LST=SPVAR(ID,3)
  IF HP[TG]<=0 THEN
   HP[TG]=0
   IF !ID THEN
    SET_LIGHT TG,#RED
    ADDEXP SPVAR(TG,3)
    BLOOD TG
    F=1
    BEEP 13
    'つかみ回復処理 ***
    IF TKM[TG] THEN
     DMV=0
     SET_LIGHT 0,#LIME
     BGMPLAY 2,155,80
    ENDIF
   ENDIF
  ENDIF
 ELSE
  BGMPLAY 1,135-!!ID,80
 ENDIF
 AC[ID]=1
 FOR I=0 TO 3:BREPEAT I,16,3:NEXT
 BREPEAT 5,16,3
 IF !ID THEN
  COLOR TPAL[4]
  LP 41,26,""*8
  LP 41,27," "*8
  COLOR TPAL[7]
  LP 41,26,EMN$[SPVAR(TG,3)]
  MTR$ 41,27,HP[TG],MHP[TG],#YELLOW,#RED
 ENDIF
 IF F THEN SPCLR TG
 VSYNC 8
END

'経験値増加処理 ***
DEF ADDEXP ID
VAR I,A=RND(8)+3
 IF EX>99999999 THEN EX=99999999
 IF LV>20 THEN RETURN
 INC EX,MNSEX[ID]
 WHILE EX>=NEX
  DP "レベルがあがった"
  'レベルアップ処理 ***
  BGMPLAY 7,254,80
  INC LV
  INC HP[0],A
  INC MHP[0],A
  RESTORE @LEVEL
  FOR I=0 TO LV
   PEX=NEX
   READ NEX
  NEXT
 WEND
END

'凍結攻撃 ***
DEF ICE
VAR A
 SET_LIGHT 0,#CYAN
 IF PER(12) THEN RETURN
 A=99-(ST*1.5)-(LV+DEX)*4-PDF*5-(MHP[0]/3)
 IF FLOOR(A)<10 THEN RETURN
 IF !PER(FLOOR(A)) THEN RETURN
 BGMPLAY 3,152,80
 IF !FLZ THEN
  DP "凍り付いた"
  FLZ=RND(5)+4
 ENDIF
 IF !PER(FLOOR(A)) THEN RETURN
 HP[0]=0
END

'毒攻撃 ***
DEF POISON
VAR A
 IF ST<4 THEN RETURN
 SET_LIGHT 0,#MAGENTA
 IF RNG1==23 || RNG2==23 THEN RETURN
 IF PARM==13 THEN RETURN
 A=71-(PDF*6)
 IF LV+DEX>8 THEN DEC A,(LV+DEX-8)*6
 IF !PER(A) THEN RETURN
 BGMPLAY 3,150,80
 DP "毒を受けた"
 DEC ST
END

'金貨盗み ***
DEF GSTEAL(ID)
VAR I,A
 IF !GLD || !PER(90) THEN RETURN 0
 A=FLR*(RND(21)+10)
 IF GLD<A THEN A=GLD
 DEC GLD,A
 DP STR$(A)+"枚の金貨を盗まれた"
 VSYNC 8
 FOR I=0 TO 3:BREPEAT I,16,3:NEXT
 SET_LIGHT ID,#YELLOW
 BGMPLAY 3,154,80
 SPCLR ID
 RETURN 1
END

'つかみ ***
DEF TSUKAMI ID
 IF FYU THEN RETURN
 INC TKM[ID]
 IF DMV THEN RETURN
 DMV=1
 SET_LIGHT 0,#OLIVE
 BGMPLAY 3,144,80
 DP "掴まれて移動できない"
END

'レベルさげ ***
DEF LVDOWN
VAR I,A=RND(8)+3
 IF !PER(20) || LV<6 THEN RETURN
 SET_LIGHT 0,#PURPLE
 BGMPLAY 7,253,80
 DP "レベルを下げられた"
 DEC LV
 DEC MHP[0],A
 IF HP[0]>MHP[0] THEN HP[0]=MHP[0]
 RESTORE @LEVEL
 FOR I=0 TO LV
  PEX=NEX
  READ NEX
 NEXT
 EX=NEX-1
END

'ドレイン ***
DEF DRAIN
VAR A=RND(3)
 IF !PER(40) THEN RETURN
 SET_LIGHT 0,#PURPLE
 BGMPLAY 3,151,80
 DP "ステータスを下げられた"
 IF A==0 || A==2 THEN
  DEC ST
  IF RND(2) THEN DEC MST
 ENDIF
 IF A==1 || A==2 THEN
  DEC HP[0]
  DEC MHP[0]
 ENDIF
END

'サビ ***
DEF ACID
VAR I,VV,HR,AT,FL
 SET_LIGHT 0,#GRAY
 IF !PARM || PDF<2 THEN RETURN
 IF PARM==11 THEN RETURN
 FOR I=0 TO LEN(ITM)-1
  SPLIT ITMV[I] OUT VV,HR,AT,FL
  IF ITMG[ITM[I]]==3 && FL AND 4 THEN
   IF FL AND 8 THEN RETURN
   ITMV[I]=MERGE(VV,HR-1,AT,FL)
  ENDIF
 NEXT
 BEEP 101
 DP "鎧が錆びた"
 DEC PDF
END

'アイテム盗み ***
DEF THEFT(ID)
VAR I,LST[0],VV,HR,AT,FL,T
 IF RNG1==25 || RNG2==25 THEN RETURN 0
 IF !PER(85) || !LEN(ITM) THEN RETURN 0
 FOR I=0 TO LEN(ITM)-1
  SPLIT ITMV[I] OUT VV,HR,AT,FL
  IF !(FL AND 4) THEN PUSH LST,I
 NEXT
 IF !LEN(LST) THEN RETURN 0
 T=LST[RND(LEN(LST))]
 DP INAME$(ITM[T],ITMV[T])+"を盗まれた"
 FOR I=T TO LEN(ITM)-2
  ITM[I]=ITM[I+1]
  ITMV[I]=ITMV[I+1]
 NEXT
 I=POP(ITM)
 I=POP(ITMV)
 SET_LIGHT ID,#YELLOW
 BGMPLAY 4,166,80
 SPCLR ID
 RETURN 1
END
'--------------------------------------------
'プレイヤーステータス初期化 ***
DEF PLAYER_INIT
VAR I

 GPAGE 0,SPPAGE()
 GFILL 0,0,215,15,#BLACK
 GFILL 224,0,295,7,0
 GPUTCHR 0,0,"@KEBSHIROZLCQANYFTWPXUMVGJD"
 GPUTCHR 0,8,"äkebshirozlcqanyftwpxumvgjd"
 GPUTCHR 224,0,"*:)]=!?/,"
 GPAGE 0,0

 FLR   =0
 FOD   =1250
 MFOD  =1250
 LV    =1
 ST    =16
 MST   =16
 EX    =0
 NEX   =10
 PEX   =0
 HP[0] =12
 MHP[0]=12
 KRN[0]=0
 MMK   =0
 FLZ   =0
 DMV   =0
 DEX   =0
 GLD   =0
 MIE   =0
 MOF   =0
 FYU   =0
 KSK   =0
 PWEP  =3
 PARM  =12
 PHR   =3
 PAT   =4
 PDF   =4
 RNG1  =0
 RNG2  =0
 MMK   =0
 GKK   =0
 LST   =-1
 KRN[0]=0

 COPY ITMN$,KIN$
 FILL IINS,0
 FOR I=0 TO 17
  IINS[I]=1
 NEXT

 FOR I=0 TO 255
  SWAP RING$[RND(25)],RING$[RND(25)]
 NEXT

 FOR I=0 TO 255
  SWAP POTION$[RND(27)],POTION$[RND(27)]
 NEXT

 FOR I=0 TO 255
  SWAP SCROLL$[RND(12)],SCROLL$[RND(12)]
 NEXT

 FOR I=0 TO 255
  SWAP WAND$[RND(20)],WAND$[RND(20)]
 NEXT

 FOR I=18 TO 64:IRND[I]=RND(10)+1:NEXT
 FOR I=18 TO 28:ITMN$[I]=RING$[I-18]:NEXT
 FOR I=29 TO 42:ITMN$[I]=POTION$[I-29]:NEXT
 FOR I=43 TO 54:ITMN$[I]=SCROLL$[I-43]:NEXT
 FOR I=55 TO 64:ITMN$[I]=WAND$[I-55]:NEXT

 ITM=DIMCLR()
 ITMV=DIMCLR()

 PUSH ITM,1
 PUSH ITMV,MERGE(1,0,0,0)

 PUSH ITM,12
 PUSH ITMV,MERGE(1,1,0,4)

 PUSH ITM,3
 PUSH ITMV,MERGE(1,1,1,4)

 PUSH ITM,6
 PUSH ITMV,MERGE(1,1,0,0)

 PUSH ITM,8
 PUSH ITMV,MERGE(RND(11)+25,0,0,0)

END
'--------------------------------------------
'キャラクタ設置 ***
DEF SET_CHR X,Y,ID
VAR R
 IF !ID THEN
  R=0
  SPSET R,0
 ELSE
  SPSET 1,63,ID OUT R
  IF R==-1 THEN RETURN
  SPFUNC R,"MONSTER"
  DEC ID
  SPVAR R,2,MNSSP[ID] '特殊行動フラグ
  SPVAR R,3,ID        'モンスター番号
  HP[R]=MNSHP[ID]     'モンスター残りHP
  MHP[R]=HP[R]        'モンスター最大HP
  KRN[R]=0            '混乱状態
  TKM[R]=0            'つかみ状態
  MZM[R]=0            '感知フラグ
  SLP[R]=MSCK(ID)     '睡眠状態
 ENDIF
 SPOFS R,X*8,Y*8,-5
 SPCOL R,0,0,1,1
 CANIM R
END

'アイテム設置 ***
DEF SET_ITEM X,Y,A,B
VAR R
 SPSET 64,127,ITMG[A]+28 OUT R
 IF R==-1 THEN RETURN
 SPOFS R,X*8,Y*8,0
 SPVAR R,0,A
 SPVAR R,1,B
 SPCOL R,0,0,1,1
 SPFUNC R,"ITEM"
 SPCOLOR R,0
 IF SPHITSP(R,128) || LT[X,Y] THEN
  SPCOLOR R,#CYAN
 ENDIF
END

'アイテム表示変更処理 ***
DEF ITEM
VAR ID=CALLIDX,F
 IF MMK THEN SPCOLOR ID,0
 IF SPHITSP(ID,128) THEN
  SPCOLOR ID,#CYAN
  IF GKK THEN SPCOLOR ID,#YELLOW
 ENDIF
END

'キャラクタアニメ変更 ***
DEF CANIM ID
VAR CH,A,F,G,SCL=RGB(255,127,0),H,C
 SPCHR ID OUT CH
 SPCOLOR ID OUT C
 CH=CH MOD 64
 IF SLP[ID] THEN
  SPCHR ID,CH
 ELSE
  IF !(SPCHK(ID) AND 8) THEN
   SPANIM ID,3,16,CH,16,CH+64,0
  ENDIF
 ENDIF
 '視界判定 ***
 F=MIE || !SPP(ID,11)
 G=(RNG1==26) || (RNG2==26)
 H=SPHITSP(ID,128)
 IF MOF || H && (F || G) THEN
  A=HP[ID]/MHP[ID]*255
  IF KRN[ID] THEN
   SPCOLOR ID,#MAGENTA
  ELSEIF SLP[ID]==1 THEN
   IF !(SPCHK(ID) AND 64) THEN
    SPCOLOR ID,RGB(255,A,A)
    SPANIM ID,6,-32,SCL,-32,#WHITE,0
   ENDIF
  ELSEIF SLP[ID]==2 THEN
   SPCOLOR ID,SCL
  ELSE
   SPCOLOR ID,RGB(255,A,A)
  ENDIF
  IF ID && GKK THEN SPCOLOR ID,#YELLOW
  IF H THEN SPVAR ID,1,1
  IF SPP(ID,15) THEN
   SPCHR ID,28+(FLR MOD 8)
   SPCOLOR ID,#CYAN
  ENDIF
 ELSE
  IF SPP(ID,15) && C==#CYAN THEN RETURN
  MZM[ID]=1
  SPCOLOR ID,0
 ENDIF
END

'キャラクタ移動 ***
DEF CMOVE(ID,V)
VAR X,Y,MX,MY,DX[8],DY[8],SH,F=1
 COPY DX,@DDX
 COPY DY,@DDY
 CSPOFS ID OUT X,Y
 MX=X+DX[V]
 MY=Y+DY[V]
 SH=SPHITRC(64,127,MX*8,MY*8,8,8)
 IF SH>-1 && SPVAR(SH,0)==50 THEN F=0
 IF !ID THEN F=1
 IF HCHK(MX,MY) && !KCHK(X,Y,V) && F THEN
  SPOFS ID,MX*8,MY*8
  SPVAR ID,0,V
  RETURN 0
 ELSE
  RETURN 1
 ENDIF
END

'移動先衝突判定 ***
DEF HCHK(X,Y)
VAR H,F,SH
 H=SPHITRC(0,63,X*8,Y*8,1,1)==-1
 F=M[X,Y]!=255
 RETURN (H && F)
END

'壁ひっかかり判定 ***
DEF KCHK(X,Y,V)
VAR R,A,B,C,D
 A=M[X,Y-1]==255
 B=M[X+1,Y]==255
 C=M[X,Y+1]==255
 D=M[X-1,Y]==255
 IF V==1 && (A || B) THEN R=1
 IF V==3 && (B || C) THEN R=1
 IF V==5 && (C || D) THEN R=1
 IF V==7 && (D || A) THEN R=1
 RETURN R
END

'行動速度チェック ***
DEF TCHK(ID)
 IF SLP[ID] THEN RETURN 0
 IF AC[ID] && ID>0 THEN RETURN 0
 IF SPP(ID,0) && SCNT!=0 THEN RETURN 0
 IF !SPP(ID,1) && (SCNT MOD 2) THEN RETURN 0
 RETURN 1
END

'SPチェック ***
DEF SPP(ID,N)
VAR SP=SPVAR(ID,2)
 RETURN !!(SP AND POW(2,N))
END

'モンスターの睡眠状態をせってい ***
DEF MSCK(ID)
VAR R
 REPEAT
  R=RND(3)
 UNTIL MSLP[ID] AND POW(2,R)
 RETURN R
END
'--------------------------------------------
'HPの変動値を表示 ***
DEF SET_DPOP ID,V
VAR R,X,Y,CL
 IF V==0 THEN RETURN
 IF V> 99 THEN V= 99
 IF V<-99 THEN V=-99
 IF SGN(V)==-1 THEN CL=#RED ELSE CL=#CYAN
 SPOFS ID OUT X,Y
 INC X,RND(7)-3
 SPSET 256,511,128+ABS(V) OUT R
 IF R==-1 THEN RETURN
 SPOFS R,X,Y,-10
 SPANIM R,0,JPOP(X,Y),1
 SPANIM R,6,8,#YELLOW,8,CL,-32,0,1
 SPFUNC R,"SPCLEAR"
END

'アニメーションが終わったSPを開放 ***
DEF SPCLEAR
VAR ID=CALLIDX
 IF !(SPCHK(ID) AND 64) THEN SPCLR ID
END

'ジャンプアニメ処理 ***
DEF JPOP(X,Y)
VAR I,R[0],PY=-4-RND(4),LY=Y
 REPEAT
  PUSH R,1
  PUSH R,X
  PUSH R,Y+PY
  INC PY,0.5
 UNTIL Y+PY>LY
 RETURN R
END

'エフェクト処理 ***
DEF SET_LIGHT ID,C
VAR R,X,Y
 CSPOFS ID OUT X,Y
 SPSET 256,511,256 OUT R
 IF R==-1 THEN RETURN
 SPOFS R,X*8+4,Y*8+4,-5
 SPANIM R,4,-15,360,0
 SPANIM R,5,1,0.5,0.5,-16,1,1,-32,2,2,1
 SPANIM R,6,1,C,-64,0,1
 SPFUNC R,"SPCLEAR"
END

'エフェクト処理2 ***
DEF SET_EF ID,C
VAR R,X,Y
 CSPOFS ID OUT X,Y
 SPSET 256,511,263 OUT R
 IF R==-1 THEN RETURN
 SPOFS R,X*8,Y*8,-5
 SPANIM R,6,1,C,-64,0,1
 SPFUNC R,"SPCLEAR"
END

'まほうじん表示 ***
DEF SET_MCIRCLE ID
VAR I,R,X,Y,C=RGB(0,0,255,0)
 CSPOFS ID OUT X,Y
 SPSET 256,511,261 OUT R
 IF R==-1 THEN RETURN
 SPOFS R,X*8+4,Y*8+4,-5
 SPCOLOR R,#YELLOW
 SPANIM R,6,-16,#RED,-16,#BLUE,-32,C,1
 SPFUNC R,"SPCLEAR"
END
'--------------------------------------------
'マップ初期化 ***
DEF MAKE_DUNGEON
VAR RX1=1,RY1=1,RX2=39,RY2=29
VAR I,J,A,B,C,D,E,F,G,H,X,Y,S,SM,MX,CH$,SD$,K
DIM SZ[0],CX[0],CY[0],QX[0],QY[0],CL
DIM DX[4],DY[4],ITM[67],ITMCHK[8]

 FADE #BLACK,30
 VSYNC 30
 VISIBLE 0,0,0
 COPY DX,@DX:COPY DY,@DY
 CLS
 GCLS
 SPCLR
 IF AML() THEN DEC FLR ELSE INC FLR
 IF FLR>99 THEN FLR=99
 FILL M  ,255:FILL TL ,0:FILL LT ,0
 FILL MCL,15 :FILL MC$," "
 X1=DIMCLR():X2=DIMCLR():Y1=DIMCLR()
 Y2=DIMCLR():CX=DIMCLR():CY=DIMCLR()
 QX=DIMCLR():QY=DIMCLR():MNSTBL=DIMCLR()

 MOF =0
 MIE =0
 CNT =0
 SCNT=0

 IF !FLR THEN
  VISIBLE 1,1,1
  RETURN
 ENDIF

 PUSH X1,RX1:PUSH X2,RX2:PUSH Y1,RY1
 PUSH Y2,RY2:PUSH SZ,0

 REPEAT
  SORT SZ,X1,X2,Y1,Y2
  RX1=POP(X1):RX2=POP(X2):RY1=POP(Y1)
  RY2=POP(Y2):S  =POP(SZ)

  F=RND(2)
  IF F  && RX2-RX1<20 THEN F=!F
  IF !F && RY2-RY1<20 THEN F=!F

  IF F THEN
   X=((RX2-RX1) DIV 2)+RX1
   FOR I=RY1 TO RY2:M[X,I]=8:NEXT
   PUSH X1,RX1
   PUSH X2,X
   PUSH Y1,RY1
   PUSH Y2,RY2
   PUSH SZ,(X-RX1)*(RY2-RY1)
   PUSH X1,X+1
   PUSH X2,RX2
   PUSH Y1,RY1
   PUSH Y2,RY2
   PUSH SZ,(RX2-X)*(RY2-RY1)
  ELSE
   Y=((RY2-RY1) DIV 2)+RY1
   FOR I=RX1 TO RX2:M[I,Y]=8:NEXT
   PUSH X1,RX1
   PUSH X2,RX2
   PUSH Y1,RY1
   PUSH Y2,Y
   PUSH SZ,(RX2-RX1)*(Y-RY1)
   PUSH X1,RX1
   PUSH X2,RX2
   PUSH Y1,Y+1
   PUSH Y2,RY2
   PUSH SZ,(RX2-RX1)*(RY2-Y)
  ENDIF
 UNTIL SZ[LEN(SZ)-1]<150 || !RND(8)

 FOR I=0 TO LEN(X1)-1
  REPEAT
   RX1=X1[I]
   RX2=X2[I]
   RY1=Y1[I]
   RY2=Y2[I]
   INC RX1,1+RND((RX2-RX1) DIV 2)
   INC RY1,1+RND((RY2-RY1) DIV 2)
   DEC RX2,2+RND((RX2-RX1) DIV 2)
   DEC RY2,2+RND((RY2-RY1) DIV 2)
   A=RX2-RX1
   B=RY2-RY1
   SM=MIN(A,B)
   MX=MAX(A,B)
  UNTIL SM>2

  IF RND(2) THEN 
   RX2=RX1+SM+(RND((MX-SM)) DIV 3)*(B==SM)
   RY2=RY1+SM+(RND((MX-SM)) DIV 3)*(A==SM)
  ENDIF

  X1[I]=RX1
  X2[I]=RX2
  Y1[I]=RY1
  Y2[I]=RY2

  FOR Y=RY1 TO RY2
   FOR X=RX1 TO RX2
    M[X,Y]=I
   NEXT
  NEXT

  X=RND(RX2-RX1-1)+RX1+1
  Y=RND(RY2-RY1-1)+RY1+1
  IF I THEN
   A=0
   REPEAT
    F=0
    X=RND(RX2-RX1-1)+RX1+1
    Y=RND(RY2-RY1-1)+RY1+1
    FOR J=0 TO LEN(CX)-1
     IF X==CX[J] || Y==CY[J] THEN F=1
    NEXT
    INC A
   UNTIL !F || A==255
  ENDIF
  PUSH CX,X
  PUSH CY,Y
  TL[CX[I],CY[I]]=1
 NEXT

 FOR Y=1 TO 28
  FOR X=1 TO 48
   F=0
   FOR I=0 TO 3
    IF M[X+DX[I],Y+DY[I]]==8 THEN
     F=F OR POW(2,I)
    ENDIF
   NEXT
   IF F==15 THEN
    PUSH QX,X
    PUSH QY,Y
    FOR I=0 TO 3
     PUSH QX,X+DX[I]
     PUSH QY,Y+DY[I]
    NEXT
   ENDIF
  NEXT
 NEXT

 FOR I=0 TO LEN(QX)-1
  M[QX[I],QY[I]]=255
 NEXT

 QX=DIMCLR()
 QY=DIMCLR()

 FOR I=0 TO LEN(CX)-1
  FOR J=0 TO 3
   A=0
   B=0
   F=0
   X=CX[I]
   Y=CY[I]
   REPEAT
    INC X,DX[J]
    INC Y,DY[J]
    A=X<2 || Y<2 || X>47 || Y>27
    B=M[X+DX[J],Y+DY[J]]==8
   UNTIL A || B

   IF B THEN 
    M[X+DX[J],Y+DY[J]]=9
    TL[X+DX[J],Y+DY[J]]=1
    X=CX[I]
    Y=CY[I]
    REPEAT
     INC X,DX[J]
     INC Y,DY[J]
     IF M[X,Y]==255 THEN M[X,Y]=9
     TL[X,Y]=1
    UNTIL M[X+DX[J],Y+DY[J]]==9
    PUSH QX,X+DX[J]
    PUSH QY,Y+DY[J]
   ENDIF
  NEXT
 NEXT

 FOR I=0 TO LEN(QX)-1
  FOR J=0 TO 3
   A=0
   B=0
   F=0
   X=QX[I]
   Y=QY[I]
   REPEAT
    INC X,DX[J]
    INC Y,DY[J]
    F=M[X,Y]!=8
    A=X<2 || Y<2 || X>47 || Y>27
    B=M[X+DX[J],Y+DY[J]]==9
   UNTIL A || B || F

   IF B THEN 
    X=QX[I]
    Y=QY[I]
    REPEAT
     INC X,DX[J]
     INC Y,DY[J]
     M[X,Y]=10
    UNTIL M[X+DX[J],Y+DY[J]]==9
   ENDIF

  NEXT
 NEXT

 FOR Y=0 TO 29
  FOR X=0 TO 49
   IF M[X,Y]== 8 THEN M[X,Y]=255
   IF M[X,Y]==10 THEN M[X,Y]=9:TL[X,Y]=1
  NEXT
 NEXT

 FOR Y=0 TO 29
  FOR X=0 TO 49
   IF M[X,Y]==255 THEN
    MC$[X,Y]=" "
    MCL[X,Y]=0
   ENDIF
  NEXT
 NEXT

 FOR I=0 TO LEN(X1)-1
  FOR J=Y1[I] TO Y2[I]
   MC$[X1[I]-1,J]="｜"
   MC$[X2[I]+1,J]="｜"
   MCL[X1[I]-1,J]=7
   MCL[X2[I]+1,J]=7
  NEXT

  A=X2[I]-X1[I]+1
  FOR J=X1[I]-1 TO X2[I]+1
   MC$[J,Y1[I]-1]="-"
   MC$[J,Y2[I]+1]="-"
   MCL[J,Y1[I]-1]=7
   MCL[J,Y2[I]+1]=7
  NEXT
 NEXT

 FOR I=0 TO LEN(X1)-1
  FOR Y=Y1[I] TO Y2[I]
   FOR X=X1[I] TO X2[I]
    MC$[X,Y]="À"
    MCL[X,Y]=4
   NEXT
  NEXT
 NEXT

 FOR Y=0 TO 29
  FOR X=0 TO 49
   IF M[X,Y]==9 THEN
    SD$=MC$[X,Y]
    IF SD$!=" " THEN
     FOR I=0 TO 3
      A=M[X+DX[I],Y+DY[I]]
     NEXT
     CH$="+"
     CL=7
     'IF !RND(12) THEN CH$=SD$
    ELSE
     CH$="Á"
     CL=4
    ENDIF
    MCL[X,Y]=CL
    MC$[X,Y]=CH$
   ENDIF
  NEXT
 NEXT

 RESTORE @MTBL
 FOR I=0 TO 25
  READ A,B
  IF A<=FLR && B>=FLR THEN PUSH MNSTBL,I+1
 NEXT

 RNDLOCATE OUT X,Y
 MC$[X,Y]="%"
 MCL[X,Y]=7

 COLOR TPAL[4]
 FOR I=0 TO 29:LP 40,I,""*10:NEXT
 COLOR TPAL[7]
 LP 41, 1," nROGUE "
 LP 41, 3,"στυ     "
 LP 41, 5,"ËÌ"
 LP 41, 6," "*8
 LP 41, 8,"ÏÐ"
 LP 41, 9," "*8
 LP 41,11,"Ó  "
 LP 47,13,"ÉÊ"
 LP 41,12," "*8
 LP 41,14,"ÿþ"
 LP 41,15," "*8
 LP 41,17,"ÑÒ"
 LP 41,18," "*8
 LP 41,20,"Čûüý    "
 LP 41,21,"ŠŽĀ     "
 LP 41,22,"ĂĄĆĊ    "

 VSYNC
 RNDLOCATE OUT X,Y
 SET_CHR X,Y,0
 PRINT_STATUS
 PRINT_DUNGEON 0

 'アイテム設置処理 ***
 IF !AML() THEN
  IF FLR>26 THEN
   RNDLOCATE OUT X,Y
   SET_ITEM X,Y,65,1
  ENDIF

  IF !(FLR MOD 3) THEN
   RNDLOCATE OUT X,Y
   SET_ITEM X,Y,1,1
  ENDIF

  C=RND(8)+1
  FOR I=0 TO C
   RNDLOCATE OUT X,Y
   IRND OUT A,B
   SET_ITEM X,Y,A,B
  NEXT

  C=RND(3)+3
  FOR I=0 TO C
   RNDLOCATE OUT X,Y
   SET_ITEM X,Y,0,RND(FLR*10)+FLR*10
  NEXT
 ENDIF

 'モンスター設置処理 ***
 C=RND(8)+1
 FOR I=0 TO C
  RNDLOCATE OUT X,Y
  SET_CHR X,Y,MNSTBL[RND(LEN(MNSTBL))]
 NEXT

 SPSET 132,27
 SPSCALE 132,50,30
 SPOFS 132,0,0,-19
 SPCOLOR 132,0

 VISIBLE 1,1,1
 FADE #BLACK
 FADE 0,30
END
'--------------------------------------------
'魔除けのしょじ状態をしらべる ***
DEF AML()
VAR I
 FOR I=0 TO LEN(ITM)-1
  IF ITM[I]==65 THEN RETURN 1
 NEXT
 RETURN 0
END
'--------------------------------------------
'部屋内のランダム座標を返す ***
DEF RNDLOCATE OUT X,Y
VAR R,H
 REPEAT
  R=RND(LEN(X1))
  X=X1[R]+RND(X2[R]-X1[R]+1)
  Y=Y1[R]+RND(Y2[R]-Y1[R]+1)
  H=SPHITRC(0,127,X*8,Y*8,1,1)
 UNTIL H==-1 && MC$[X,Y]!="%"
END
'--------------------------------------------
'キャラクタ座標 ***
DEF CSPOFS ID OUT X,Y
 SPOFS ID OUT X,Y
 X=X DIV 8
 Y=Y DIV 8
END
'--------------------------------------------
'ダイスで乱数を返す ***
DEF DICE(A,B)
VAR R,I,SN
 SN=SGN(B)
 FOR I=0 TO A-1
  INC R,RND(ABS(B))*SN+1
 NEXT
 RETURN R
END
'--------------------------------------------
'百分率の成否を返す ***
DEF PER(A)
 IF A>RND(100) THEN RETURN 1 ELSE RETURN 0
END
'--------------------------------------------
'アイテムの性能値を分割 ***
DEF SPLIT V OUT A,B,C,D
 A=V AND 255
 B=(V >>  8) AND 255
 B=B-(B>127)*256
 C=(V >> 16) AND 255
 C=C-(C>127)*256
 D=(V >> 24) AND 255
END
'--------------------------------------------
'アイテムの性能値を併合する ***
DEF MERGE(A,B,C,D)
 IF A>99 THEN A=99
 B=(B+(B<0)*256) << 8
 C=(C+(C<0)*256) << 16
 D=D << 24
 RETURN A+B+C+D
END
'--------------------------------------------
'ダンジョン表示 ***
DEF PRINT_DUNGEON A
VAR X,Y,R,I
 CSPOFS 0 OUT X,Y
 R=M[X,Y]

 IF MMK THEN
  FOR I=0 TO 29
   LOCATE 0,I
   PRINT " "*40;
  NEXT
 ENDIF

 IF A THEN
  PRINT_ROOM 0,0,39,29
 ELSE
  IF R==9 || MMK THEN
   PRINT_ROOM X-1,Y-1,X+1,Y+1
  ELSE
   PRINT_ROOM X1[R]-1,Y1[R]-1,X2[R]+1,Y2[R]+1
  ENDIF
 ENDIF
END

'範囲表示 ***
DEF PRINT_ROOM X1,Y1,X2,Y2
VAR I,J
 FOR J=Y1 TO Y2
  FOR I=X1 TO X2
   LOCATE I,J
   COLOR TPAL[MCL[I,J]]
   PRINT MC$[I,J];
   LT[I,J]=1
  NEXT
 NEXT
 SPSET 128,27
 SPOFS 128,X1*8,Y1*8,-10
 SPCOL 128,0,0,8,8,1
 SPCOLOR 128,RGB(31,0,255,255)
 SPSCALE 128,X2-X1+1,Y2-Y1+1
END
'--------------------------------------------
'プレイヤーステータス表示 ***
DEF PRINT_STATUS

 MTR$ 41, 6,HP[0],MHP[0],#YELLOW,#RED
 MTR$ 41, 9,ST,MST,#LIME,#MAGENTA
 MTR$ 41,12,EX-PEX,NEX-PEX,#CYAN,#BLUE
 MTR$ 41,15,FOD,MFOD,RGB(255,127,0),#MAROON
 MTR$ 41,20,PHR,20,#GREEN,#BLACK
 MTR$ 41,21,PAT,20,#RED,#BLACK
 MTR$ 41,22,PDF,20,#BLUE,#BLACK

 COLOR TPAL[1],TPAL[0]
 LP 42, 6,FORMAT$("%3DÖ%3D",HP[0],MHP[0])
 LP 42, 9,FORMAT$("%3DÖ%3D",ST,MST)
 LP 41,12,FORMAT$("%8D",EX)
 LP 41,15,FORMAT$("%8.0F",CEIL(FOD/MFOD*100))
 COLOR TPAL[7]
 LP 47,3,FORMAT$("%2D",FLR)
 LP 42,11,STR$(LV,2)
 LP 41,18,FORMAT$("%8.0F",GLD)
 COLOR TPAL[7]
 LP 45,20,FORMAT$("%+4D",PHR)
 LP 45,21,FORMAT$("%+4D",PAT)
 LP 45,22,FORMAT$("%+4D",PDF)
 COLOR TPAL[15],TPAL[0]
END
'--------------------------------------------
'メーター表示 ***
DEF MTR$ X,Y,A,B,C1,C2
VAR R$,C
 IF A>B THEN A=B
 IF A<0 THEN A=0
 X=X*8
 Y=Y*8
 C=CEIL(A/B*63)
 GPAGE 0,0
 GFILL X,Y,X+63,Y+7,C2
 IF C THEN GFILL X+63-C,Y,X+63,Y+7,C1
END
'--------------------------------------------
'配列初期化 ***
DEF DIMCLR()
VAR A[0]
 RETURN A
END
'--------------------------------------------
'キー入力待機 ***
DEF KEYWAIT
 REPEAT
  COLOR TPAL[((MAINCNT DIV 8) MOD 2)*15]
  LOCATE 49,29
  PRINT "";
  VSYNC
 UNTIL BUTTON(2) AND 16
 LOCATE 49,29
 PRINT " ";
 VSYNC
 BGMPLAY 1,140,80
END
'--------------------------------------------
'ゲーム初期化 ***
DEF GAME_INIT
VAR I,J,K,X,Y,A,B,C,A$,B$,C$,E$,FA$,FDD[64]
VAR DX[8],DY[8]

 COPY DX,@DDX
 COPY DY,@DDY

 IF CHKFILE("DAT:SAVE") THEN
  LOAD "DAT:SAVE",HI
 ENDIF

 A$="080C1018202830384048505860687078"
 B$="7C797870686058504840383028201810"
 WAVSET 224,122,0,0,125,A$+B$,33

 ACLS
 VSYNC 30
 BGMSTOP
 VSYNC
 XSCREEN 400,240

 FOR I=0 TO 3:BREPEAT I,16,3:NEXT
 FOR I=4 TO 7:BREPEAT I, 0,0:NEXT
 BREPEAT 5,16,3

 FOR I=0 TO 48
  BGMSETD 128+I,"@SE"+STR$(I)
 NEXT

 FOR I=0 TO 4
  BGMSETD 255-I,"@M"+STR$(I)
 NEXT

 RESTORE @CHRDATA
 WHILE A!=-1
  B$=""
  READ A,A$
  IF A==-1 THEN BREAK
  FA$=""
  FOR I=0 TO 3
   INC FA$,HEX$(ASC(A$[I]),4)
  NEXT
  A$=FA$
  FOR I=0 TO 15
   C$=MID$(A$,I,1)
   FOR J=0 TO 3
    B=I*4+3-J
    FDD[B]=VAL("&H"+C$) >>J AND 1
   NEXT
  NEXT
  FOR I=0 TO 63
   E$="0F"[FDD[I]]*8
   INC B$,E$
  NEXT
  FONTDEF A,B$
 WEND

 GPAGE 0,SPPAGE()
  GCLS
  GFILL 0,0,215,15,#BLACK
  GFILL 29,37,66,66,#BLACK
  GFILL 77,37,122,74,#BLACK

  GPUTCHR 0,0,"@KEBSHIROZLCQANYFTWPXUMVGJD"
  GPUTCHR 0,8,"äkebshirozlcqanyftwpxumvgjd"
  GPUTCHR 224,0,"*:)]=!?/,"

  GPUTCHR 0,32,"",#SILVER
  GPUTCHR 0,40,"",#SILVER
  GPUTCHR 0,48,"",#SILVER
  GPUTCHR 0,56,"ικλ"
  GPUTCHR 0,64,"μνξ"
  GPUTCHR 0,72,"οπρ"

  GPUTCHR 216,0,""
  GPUTCHR 216,8,"",#RED
  GPUTCHR 24,32,""
  GPUTCHR 24,40," 道具      "
  GPUTCHR 24,48," 拾う  投げる "
  GPUTCHR 24,56," 階段  置く  "
  GPUTCHR 24,64," 名付け "
  GPUTCHR 24,72,"      "

  FOR I=0 TO 99
   A$=FORMAT$("%2D",I)
   X=(I MOD 64)*8
   Y=(I DIV 64)*8+16
   B$="ÛÜÝŸÞßàáâã"[VAL(A$[0])]
   C$="ÛÜÝŸÞßàáâã"[VAL(A$[1])]
   IF I<10 THEN B$=""
   GPUTCHR X,Y,B$
   GPUTCHR X+4,Y,C$
  NEXT

  FOR J=17 TO 31
   FOR I=0 TO 511
    IF !GSPOIT(I,J) THEN
     FOR K=0 TO 7
      IF GSPOIT(I+DX[K],J+DY[K])==#WHITE THEN
       GPSET I,J,#BLACK
       BREAK
      ENDIF
     NEXT
    ENDIF
   NEXT
  NEXT

 GPAGE 0,0

 FOR I=0 TO 255
  X=(I MOD 64)*8
  Y=(I DIV 64)*8
  SPDEF I,X,Y,8,8,0,0,&B1
 NEXT
 SPDEF 256,  0,32, 24, 24,12,12,&B100001
 SPDEF 257, 24,32, 48, 40, 0, 0,&B1
 SPDEF 258,  0,80,200,256, 0, 0,&B1
 SPDEF 259, 72,32, 56, 48, 0, 0,&B1
 SPDEF 261,  0,56, 24, 24,12,12,&B100001
 SPDEF 262,  0, 0,  8,  8, 0, 0,&B100001
 SPDEF 263,216, 0,  8,  8, 0, 0,&B100001

 COPY MNSHP,@MHP
 COPY MNSEX,@MEX
 COPY MNSSP,@MSP
 COPY MNSHR,@MHR
 COPY MSLP,@MSLP
 COPY MNSN$,@MNAME
 COPY EMN$,@EMNAME

 I=0
 WHILE CHKLABEL("@ITM"+STR$(I),1)
  RESTORE "@ITM"+STR$(I)
  READ A,A$,B,B$,C
  PUSH ITMG,A
  PUSH KIN$,A$
  PUSH ITMS,B
  PUSH ITAN$,B$
  PUSH IPRC,C
  INC I
 WEND

 'アイテム出現テーブル ***
 FOR I=1 TO  5:PUSH ITMTBL,1:NEXT
 FOR I=1 TO 10:PUSH ITMTBL,2:NEXT
 FOR I=1 TO  9:PUSH ITMTBL,3:NEXT
 FOR I=1 TO  3:PUSH ITMTBL,4:NEXT
 FOR I=1 TO 30:PUSH ITMTBL,5:NEXT
 FOR I=1 TO 30:PUSH ITMTBL,6:NEXT
 FOR I=1 TO  4:PUSH ITMTBL,7:NEXT

 RESTORE @WST
 FOR I=0 TO 7:READ WHR[I],WAT[I]:NEXT
 COPY ADF,@AST
 COPY ACT$,@ACT

 COPY RING$,@RING
 COPY POTION$,@POTION
 COPY SCROLL$,@SCROLL
 COPY WAND$,@WAND

END
'--------------------------------------------
'設置アイテムのデータを返す ***
DEF IRND OUT ID,V
VAR I,J,R,P[0],A
 A=ITMTBL[RND(LEN(ITMTBL))]
 IF A==1 THEN
  ID=RND(2)+1
  V=1
 ELSEIF A==2 THEN
  ID=RND(8)+3
  V=WEAPON(ID)
 ELSEIF A==3 THEN
  ID=RND(7)+11
  V=ARMOUR()
 ELSEIF A==4 THEN
  ID=RND(11)+18
  V=RING(ID)
 ELSEIF A==5 THEN
  RESTORE @DPOTION
  FOR I=0 TO 13
   READ R
   FOR J=1 TO R
    PUSH P,I+29
   NEXT
  NEXT
  ID=P[RND(LEN(P))]
  V=1
 ELSEIF A==6 THEN
  RESTORE @DSCROLL
  FOR I=0 TO 11
   READ R
   FOR J=1 TO R
    PUSH P,I+43
   NEXT
  NEXT
  ID=P[RND(LEN(P))]
  V=1
 ELSEIF A==7 THEN
  ID=RND(10)+55
  V=WAND(ID)
 ENDIF
END
'--------------------------------------------
'武器の性能を決定 ***
DEF WEAPON(ID)
VAR R,I,V,H,A,F,DC,B
 DC=RND(6)
 V=1
 F=1
 IF ID>6 THEN V=RND(13)+3
 IF DC==0 THEN
  B=RND(3)
  FOR I=0 TO B
   IF RND(2) THEN DEC H ELSE DEC A
  NEXT
  F=3
 ELSEIF DC==1 THEN
  B=RND(3)
  FOR I=0 TO B
   IF RND(2) THEN INC H ELSE INC A
  NEXT
  F=1
 ENDIF
 R=MERGE(V,H,A,F)
 RETURN R
END
'--------------------------------------------
'鎧の性能を決定 ***
DEF ARMOUR()
VAR R,A,B,FL
 A=RND(100)
 FL=1
 IF A<16 THEN
  B=-RND(3)-1
  FL=3
 ELSEIF A>15 && A<33 THEN
  B=RND(3)+1
  FL=1
 ENDIF
 R=MERGE(1,B,0,FL)
 RETURN R
END
'--------------------------------------------
'指輪の性能を決定 ***
DEF RING(ID)
VAR R,VV,HR,AT,FL,A
 FL=1
 IF ID==19 THEN
  FL=FL OR 2
 ELSEIF ID==22 || ID==24 THEN
  HR=RND(2)+1
  IF RND(2) THEN
   HR=HR*-1
   FL=FL OR 2
  ENDIF
 ELSEIF ID==25 THEN
  IF RND(2) THEN FL=FL OR 2
 ENDIF
 R=MERGE(1,HR,0,FL)
 RETURN R
END
'--------------------------------------------
'杖の性能を決定 ***
DEF WAND(ID)
VAR VV,HR,FL
 IF ID==62 THEN
  HR=RND(7)+6
 ELSEIF ID==63 THEN
  HR=RND(5)+5
 ELSE
  HR=RND(4)+3
 ENDIF
 IF ID==64 THEN HR=0
 RETURN MERGE(1,HR,0,1)
END
'--------------------------------------------
'STR修正値 ***
DEF STRAT()
VAR R
 IF ST<6 THEN
  R=ST-5
 ELSEIF  5<ST && ST<15 THEN
  R=1
 ELSEIF 14<ST && ST<18 THEN
  R=3
 ELSEIF 17<ST && ST<19 THEN
  R=4
 ELSEIF 18<ST && ST<21 THEN
  R=5
 ELSEIF 20<ST && ST<22 THEN
  R=6
 ELSEIF 21<ST && ST<31 THEN
  R=7
 ELSE
  R=8
 ENDIF
 RETURN R
END
'--------------------------------------------
DEF BLOOD ID
VAR I,J,X,Y,CL=RGB(95,0,0)
 CSPOFS ID OUT X,Y
 X=X*8-12
 Y=Y*8-12
 IF RND(2) THEN
  GPUTCHR X,Y   ,"ΞΟΠΡ",CL
  GPUTCHR X,Y+ 8,"ΣΤΥΦ",CL
  GPUTCHR X,Y+16,"ΧΨΩΆ",CL
  GPUTCHR X,Y+24,"ΈΉΊΌ",CL
 ELSE
  GPUTCHR X,Y   ,"ΎΏΪΫ",CL
  GPUTCHR X,Y+ 8,"ΐΰς;",CL
  GPUTCHR X,Y+16,"αβγδ",CL
  GPUTCHR X,Y+24,"εζηθ",CL
 ENDIF
END
'--------------------------------------------
'メッセージを表示 ***
DEF DP A$
VAR L=LEN(A$),X,Y,PX,PY
 CSPOFS 0 OUT X,Y
 GPAGE 0,SPPAGE()
  GFILL 128,32,511,39,0
  GFILL 128,32,128+L*8-1,39,#BLACK
  GPUTCHR 128,32,A$
 GPAGE 0,0
 PX=X*8-(L DIV 2)*8
 PY=Y*8-16
 IF PX<0 THEN PX=0
 IF PY<0 THEN PY=Y*8+16
 SPDEF 260,128,32,LEN(A$)*8,  8, 0, 0,&B1
 SPSET 134,260
 SPOFS 134,PX,PY,-9
 SPANIM 134,6,-32,#WHITE,-24,0,1
END
'--------------------------------------------
'テキスト表示 ***
DEF LP X,Y,A$
 LOCATE X,Y
 PRINT A$;
END
'--------------------------------------------
'アイテムの表示名を返す ***
DEF INAME$(ID,V)
VAR N$,VV,HR,AT,FL,MC,IG=ITMG[ID]
 SPLIT V OUT VV,HR,AT,FL
 MC=(FL >> 1) AND (3-(FL AND 1))
 N$=ITMN$[ID]
 IF VV>1 || IG==1 THEN
  N$=STR$(VV)+ITAN$[ID]+"の"+N$
 ENDIF
 IF FL AND 8 THEN N$=""+N$
 IF FL AND 1 THEN
  IF IG==2 || IG==3 THEN
   N$=N$+"(?)"
  ENDIF
 ELSE
  IF IG==2 THEN
   N$=N$+FORMAT$("(%+2D,%+2D)",HR,AT)
  ELSEIF IG==3 THEN
   N$=N$+FORMAT$("%+2D",HR)*!!HR
  ELSEIF IG==4 THEN
   N$=N$+FORMAT$("%+2D",HR)*!!HR
  ELSEIF IG==7 THEN
   N$=N$+FORMAT$("(%D)",HR)
  ENDIF
 ENDIF
 IF MC THEN N$=N$+" œÙù"[MC]
 RETURN N$
END
'--------------------------------------------
DEF TITLE
VAR R
 REPEAT
  FADE #BLACK
  CLS
  GCLS
  SPCLR
  SPSET 130,91
  SPOFS 130,152,176,-5

  COLOR TPAL[15]
  LP 20, 5,"nROGUE"
  LP 20, 6,"ver 1.00"
  LP 20,22,"GAME START"
  LP 20,23,"DISPLAY SCORE"
  'LP 20,24,"DISPLAY STORY"
  LP 20,26,"2016 neko800"
  FADE 0,30
  VSYNC 30
  R=SEL(19,22,2,0)
  SPCOLOR 130,#RED
  FADE #BLACK,30
  VSYNC 30
  SPCOLOR 130,0
  IF R==1 THEN PRINT_HISCORE 0
  'IF R==2 THEN STORY
 UNTIL !R
 CLS
END
'--------------------------------------------
DEF OPENING
VAR I,A$
 FADE #BLACK
 CLS
 RESTORE @G0
 COLOR TPAL[15]
 FOR I=0 TO 20
  READ A$
  LP 8,5+I,A$
 NEXT
 FADE 0,30
 VSYNC 30

 SPSET 0,0
 SPANIM 0,3,16,0,16,64,0
 SPOFS 0,176,256
 SPANIM 0,0,-120,176,136,1
 VSYNC 120
 SPCLR
END
'--------------------------------------------
DEF STORY
VAR I,A$
 FADE #BLACK
 CLS
 RESTORE @STORY
 COLOR TPAL[15]
 FOR I=0 TO 15
  READ A$
  LP 6,7+I,A$
 NEXT
 FADE 0,30
 VSYNC 30
 KEYWAIT
 FADE #BLACK,30
 VSYNC 30
END
'--------------------------------------------
DEF ENDING
VAR I,A$
 FADE #BLACK
 CLS
 GCLS
 SPCLR
 RESTORE @G0
 COLOR TPAL[15]
 FOR I=0 TO 20
  READ A$
  LP 8,5+I,A$
 NEXT
 FADE 0,30
 VSYNC 30

 SPSET 0,0
 SPANIM 0,3,16,0,16,64,0
 SPOFS 0,176,136
 SPANIM 0,0,-120,176,256,1
 VSYNC 120
 FADE #BLACK,30
 VSYNC 30
END
'--------------------------------------------
DEF GAMEOVER
VAR S$,ID,V,I,Y,VV,HR,AT,FL,P,TP,K$,F=AML()
VAR LY,LNK
 IF HP[0] THEN ENDING
 FADE #BLACK
 CLS
 GCLS
 SPCLR

 IF F && HP[0]>0 THEN
  S$="イェンダーの魔除けを手に入れ生還する。"
 ELSEIF LST>-1 && LST<26 THEN
  IF LST==5 THEN
   S$=MNSN$[LST]+"に氷漬けにされる。"
  ELSE
   S$=MNSN$[LST]+"に殺される。"
  ENDIF
  S$="地下"+STR$(FLR)+"階で"+S$
 ELSEIF LST==26 THEN
  S$="地下"+STR$(FLR)+"階で餓死した。"
 ENDIF
 IF F && HP[0]<1 THEN S$="魔除けを手に入れるが"+S$

 LP 0,0,DATE$+" "+S$

 LP  1,3,STR$(GLD)+"枚の金貨"
 LP 18,3,""
 LP 20,3,STR$(GLD)+"枚の金貨"
 LP 39,3,"= "+STR$(GLD*10,8)
 TP=GLD*10

 FOR I=0 TO LEN(ITM)-1
  ID=ITM[I]
  V=ITMV[I]
  SPLIT V OUT VV,HR,AT,FL
  Y=4+I
  COLOR TPAL[15]
  IF (FL AND 1) || !IINS[ID] THEN COLOR TPAL[7]
  IF (FL AND 4) THEN COLOR TPAL[5]
  IF (FL AND 6)==6 THEN COLOR TPAL[11]
  LP  1,Y,INAME$(ID,V)
  COLOR TPAL[15]
  LP 18,Y,""
  IINS[ID]=1
  ITMN$[ID]=KIN$[ID]
  V=MERGE(VV,HR,AT,FL AND 14)
  LP 20,Y,INAME$(ID,V)
  P=PRICE(I)
  LP 39,Y,"= "+STR$(PRICE(I),8)
  IF F && HP[0] THEN
   INC TP,P
  ELSE
   LY=Y*8+4
   GLINE 49*8-LEN(STR$(P))*8-4,LY,49*8+2,LY
  ENDIF
 NEXT
 LP  1,5+I,"Ç"*48
 K$=FORMAT$("TOTAL SCORE  %D",TP)
 LP 49-LEN(K$),7+I,K$

 FADE 0,30
 VSYNC 30

 KEYWAIT

 LNK=ADDSCORE(TP,S$)
 IF LNK>-1 THEN
  PRINT_HISCORE LNK
  SAVE "DAT:SAVE",HI
 ENDIF

 FADE #BLACK,30
 VSYNC 30
END
'--------------------------------------------
DEF ADDSCORE(NSC,A$)
VAR I,J,CR[0],SC[0],RLV[0],LSTM$[0],R=-1

 INC A$," "*99

 FOR I=0 TO 19
  PUSH CR,I
  PUSH SC,HI[0,I]
  PUSH RLV,HI[1,I]
  PUSH LSTM$,""
  FOR J=2 TO 99
   INC LSTM$[I],CHR$(HI[J,I])
  NEXT
 NEXT

 PUSH CR,20
 PUSH SC,NSC
 PUSH RLV,LV
 PUSH LSTM$,A$

 RSORT SC,RLV,LSTM$,CR

 FOR I=0 TO 19
  IF CR[I]==20 THEN R=I
  HI[0,I]=SC[I]
  HI[1,I]=RLV[I]
  FOR J=2 TO 99
   HI[J,I]=ASC(LSTM$[I][J-2])
  NEXT
 NEXT

 RETURN R
END
'--------------------------------------------
DEF PRINT_HISCORE A
VAR I,J,Y,CT
VAR SC[0],NAME$[0],MSG$[0],RLV[0],LSTM$[0]
 FADE #BLACK
 CLS
 GCLS
 SPCLR

 FOR I=0 TO 19
  PUSH SC,HI[0,I]
  PUSH RLV,HI[1,I]
  PUSH LSTM$,""
  FOR J=2 TO 99
   INC LSTM$[I],CHR$(HI[J,I])
  NEXT
 NEXT

 COLOR TPAL[11]
 LP 1,1,"TOP 20 PLAYERS"

 FOR I=0 TO 19
  IF RLV[I]>0 THEN
   Y=5+I
   COLOR TPAL[7-(I==A)*2]
   LP  1,Y,FORMAT$("%2D: %8D",I+1,SC[I])
   COLOR TPAL[7-(I==A)*2]
   COLOR TPAL[7-(I==A)*2]
   LP 14,Y,LSTM$[I]
   INC CT
  ENDIF
 NEXT

 IF !CT THEN RETURN
 FADE RGB(0,0,0,0),30
 VSYNC 30
 KEYWAIT
 FADE #BLACK,30
 VSYNC 30
END
'--------------------------------------------
DEF PRICE(IN)
VAR R,ID=ITM[IN],V=ITMV[IN],VV,HR,AT,FL
VAR G=ITMG[ID]
 SPLIT V OUT VV,HR,AT,FL
 R=IPRC[ID]
 IF G==2 THEN R=R+HR*85+AT*85
 IF G==3 THEN R=R+HR*85+!!(FL AND 8)*200
 IF G==4 THEN R=R*(HR+1)
 IF G==7 THEN R=R*(HR+1)
 IF R<10 THEN R=10
 R=R*VV
 RETURN R
END
'--------------------------------------------
@DX  DATA  0, 1,0,-1
@DY  DATA -1, 0,1, 0
@DDX DATA  0, 1,1, 1,0,-1,-1,-1
@DDY DATA -1,-1,0, 1,1, 1, 0,-1
'---
@DPOTION
DATA 10,10,10,10,10,5,10,10,10,10,10,5,4,4
@DSCROLL
DATA 6,6,5,5,15,8,7,5,9,9,6,5
'---
@LEVEL
DATA        0,       10,       20,       40
DATA       80,      160,      320,      640
DATA     1300,     2600,     5200,    10000
DATA    20000,    40000,    80000,   160000
DATA   320000,  1000000,  3333333,  6666666
DATA 10000000
'---
@WST
DATA 2,3,3,4,4,5,1,1,1,1,1,2,1,3,1,4
'---
@AST
DATA 2,3,4,5,6,6,7
'---
@DSORT
DATA 0,4,1,5,2,6,3,7
'---
@MAT0  DATA 1, 4,0,0:@MAT1  DATA 1, 3,0,0
@MAT2  DATA 1, 3,0,0:@MAT3  DATA 1, 3,0,0
@MAT4  DATA 1, 3,1,2:@MAT5  DATA 0, 0,0,0
@MAT6  DATA 2, 5,0,0:@MAT7  DATA 1, 5,0,0
@MAT8  DATA 1, 7,0,0:@MAT9  DATA 0, 0,0,0
@MAT10 DATA 3, 3,2,5:@MAT11 DATA 3, 5,0,0
@MAT12 DATA 0, 0,0,0:@MAT13 DATA 0, 0,0,0
@MAT14 DATA 3, 6,0,0:@MAT15 DATA 0, 0,0,0
@MAT16 DATA 4, 6,1,4:@MAT17 DATA 2, 8,0,0
@MAT18 DATA 5, 4,0,0:@MAT19 DATA 4, 6,0,0
@MAT20 DATA 4,10,0,0:@MAT21 DATA 4, 4,3,7
@MAT22 DATA 1,14,1,4:@MAT23 DATA 5, 5,5,5
@MAT24 DATA 3,10,4,5:@MAT25 DATA 4, 6,4,9
'---
@MHP
DATA  10, 11,10, 8,15,15,19,25,21,25,32, 30
DATA  25, 25,35,73,75,45,76,42,90,97,55,115
DATA 132,145
'---
@MEX
DATA   2,  2,  2,  2,  3,   5,  10,   5, 8
DATA  21, 15, 20, 20, 39,  50,  91, 125,55
DATA 120,110,200,250,350,2000,3000,5000
'---
@MHR
DATA 60,65,60,50,67,68,70,70,69,75,85, 78,100
DATA 75,80,80,75,75,80,75,85,85,85,85,100,100
'---
@MSP
DATA &H0002,&H0000,&H0004,&H0000,&H0000
DATA &H0008,&H0010,&H0020,&H0000,&H0040
DATA &H0000,&H0000,&H0080,&H0100,&H0000
DATA &H0200,&H0000,&H0400,&H0804,&H8000
DATA &H0000,&H1000,&H2000,&H0002,&H0000
DATA &H4000
'---
@MSLP
DATA &B011,&B010,&B101,&B011,&B011,&B100
DATA &B011,&B011,&B011,&B100,&B101,&B011
DATA &B011,&B100,&B101,&B001,&B011,&B101
DATA &B101,&B100,&B011,&B011,&B011,&B011
DATA &B101,&B010
'---
@MTBL
DATA  1, 6, 1, 7, 1, 8, 1, 9, 1,10, 2,11, 3
DATA 12, 4,13, 5,14, 6,16, 7,16, 8,17, 9,18
DATA 10,19,11,20,12,99,13,22,14,23,15,24,16
DATA 25,17,26,18,99,19,99,20,99,21,99,21,99
'---
@MNAME
DATA "チョウゲンボウ","あばれうずら","大こうもり" ,"スライム"
DATA "ホブゴブリン" ,"ゆきおんな" ,"ガラガラヘビ","オーク"
DATA "ゾンビ"    ,"レプラコーン","ケンタウロス","古代シマウマ"
DATA "塩水の精"   ,"ニンフ"   ,"イエティ"  ,"ハエトリグサ"
DATA "トロール"   ,"レイス"   ,"ファントム" ,"ミミック"
DATA "ユニコーン"  ,"メデューサ" ,"ヴァンパイア","グリフォン"
DATA "ジャバウォック","ドラゴン"
'---
@EMNAME
DATA "āăąć"   ,"ĹĻ"    ,"ĞĠ"    ,"śşť"
DATA "ŚŞŤŪŮ"  ,"ŰŲŹŻƒ" ,"ńņňőŕř","īį"
DATA "ΛΜΝ"    ,"ċčďēĕ" ,"ĢĦĪĮ"  ,"ļľł"
DATA "ĔĖĘ"    ,"ġģħ"   ,"ΙΚ"    ,"ĽŁŃŅ"
DATA "ūůű"    ,"ΓΔΕ"   ,"ıĳķĺ"  ,"ΖΗΘ"
DATA "ųźżǆ"   ,"ėęğ"   ,"ǳțΑΒ"  ,"ŇŐŔŘ"
DATA "ǅǲȚšž"  ,"İĲĶ"
'---
@ITM0  DATA 0,"金貨"       ,0,"枚",   0
@ITM1  DATA 1,"食料"       ,1,"袋",  10
@ITM2  DATA 1,"こけもも"     ,1,"個",  10
@ITM3  DATA 2,"ホコ"       ,0,"振", 360
@ITM4  DATA 2,"ロングソード"   ,0,"本", 470
@ITM5  DATA 2,"ブレードソード"  ,0,"本", 580
@ITM6  DATA 2,"弓"        ,0,"張", 150
@ITM7  DATA 2,"ダーツ"      ,1,"本",   8
@ITM8  DATA 2,"矢"        ,1,"本",  15
@ITM9  DATA 2,"ナイフ"      ,1,"本",  27
@ITM10 DATA 2,"手裏剣"      ,1,"枚",  35
@ITM11 DATA 3,"かわの鎧"     ,0,"着", 300
@ITM12 DATA 3,"かたびら"     ,0,"着", 300
@ITM13 DATA 3,"うろこの鎧"    ,0,"着", 400
@ITM14 DATA 3,"鎖かたびら"    ,0,"着", 500
@ITM15 DATA 3,"帯金の鎧"     ,0,"着", 600
@ITM16 DATA 3,"延金の鎧"     ,0,"着", 600
@ITM17 DATA 3,"鋼鉄の鎧"     ,0,"着", 700
@ITM18 DATA 4,"忍び足の指輪"   ,0,"個", 250
@ITM19 DATA 4,"転移の指輪"    ,0,"個", 100
@ITM20 DATA 4,"回復の指輪"    ,0,"個", 255
@ITM21 DATA 4,"スタミナの指輪"  ,0,"個", 295
@ITM22 DATA 4,"ちからの指輪"   ,0,"個", 200
@ITM23 DATA 4,"毒除けの指輪"   ,0,"個", 250
@ITM24 DATA 4,"器用さの指輪"   ,0,"個", 250
@ITM25 DATA 4,"安物の指輪"    ,0,"個",  25
@ITM26 DATA 4,"注意力の指輪"   ,0,"個", 300
@ITM27 DATA 4,"サビ除けの指輪"  ,0,"個", 290
@ITM28 DATA 4,"宝石の指輪"    ,0,"個", 500
@ITM29 DATA 5,"力の薬"      ,1,"瓶", 100
@ITM30 DATA 5,"解毒薬"      ,1,"瓶", 250
@ITM31 DATA 5,"回復の薬"     ,1,"瓶", 100
@ITM32 DATA 5,"とても回復する薬" ,1,"瓶", 200
@ITM33 DATA 5,"毒薬"       ,1,"瓶",  10
@ITM34 DATA 5,"神秘の薬"     ,1,"瓶", 300
@ITM35 DATA 5,"盲目の薬"     ,1,"瓶",  10
@ITM36 DATA 5,"幻覚の薬"     ,1,"瓶",  25
@ITM37 DATA 5,"聴覚の薬"     ,1,"瓶", 100
@ITM38 DATA 5,"透視の薬"     ,1,"瓶", 100
@ITM39 DATA 5,"混乱の薬"     ,1,"瓶",  10
@ITM40 DATA 5,"浮遊の薬"     ,1,"瓶",  80
@ITM41 DATA 5,"倍速の薬"     ,1,"瓶", 150
@ITM42 DATA 5,"霊感の薬"     ,1,"瓶", 145
@ITM43 DATA 6,"メッキの巻物"   ,1,"巻", 505
@ITM44 DATA 6,"昏睡の巻物"    ,1,"巻", 200
@ITM45 DATA 6,"武器強化の巻物"  ,1,"巻", 235
@ITM46 DATA 6,"鎧強化の巻物"   ,1,"巻", 235
@ITM47 DATA 6,"識別の巻物"    ,1,"巻", 175
@ITM48 DATA 6,"転移の巻物"    ,1,"巻", 190
@ITM49 DATA 6,"凍結の巻物"    ,1,"巻",  25
@ITM50 DATA 6,"聖域の巻物"    ,1,"巻", 610
@ITM51 DATA 6,"解呪の巻物"    ,1,"巻", 210
@ITM52 DATA 6,"召喚の巻物"    ,1,"巻", 100
@ITM53 DATA 6,"騒音の巻物"    ,1,"巻",  25
@ITM54 DATA 6,"魔法の地図"    ,1,"巻", 180
@ITM55 DATA 7,"テレポートの杖"  ,0,"本",  25
@ITM56 DATA 7,"鈍足の杖"     ,0,"本",  50
@ITM57 DATA 7,"混乱の杖"     ,0,"本",  45
@ITM58 DATA 7,"透明の杖"     ,0,"本",   8
@ITM59 DATA 7,"変化の杖"     ,0,"本",  55
@ITM60 DATA 7,"倍速の杖"     ,0,"本",   2
@ITM61 DATA 7,"昏睡の杖"     ,0,"本",  25
@ITM62 DATA 7,"火球の杖"     ,0,"本",  20
@ITM63 DATA 7,"封印の杖"     ,0,"本",  20
@ITM64 DATA 7,"魔法使いの杖"   ,0,"本",   0
@ITM65 DATA 8,"イェンダーの魔除け",0,"個",5000
'---
@RING
DATA "メノウの指輪","金緑石の指輪","紫水晶の指輪","紅玉髄の指輪"
DATA "金剛石の指輪","翠玉の指輪","ゲルマニウムの指輪","花コウ岩の指輪"
DATA "ザクロ石の指輪","ヒスイの指輪","クリプトナイトの指輪","瑠璃の指輪"
DATA "月長石の指輪","黒曜石の指輪","オニキスの指輪","蛋白石の指輪"
DATA "真珠の指輪","カンラン石の指輪","紅玉の指輪","蒼玉の指輪"
DATA "虎目石の指輪","黄玉の指輪","トルコ石の指輪","ターフェアイトの指輪"
DATA "ジルコンの指輪"
@POTION
DATA "コハク色の飲み薬","水色の飲み薬","黒色の飲み薬","青色の飲み薬"
DATA "茶色の飲み薬","透明な飲み薬","真紅の飲み薬","青緑色の飲み薬"
DATA "淡褐色の飲み薬","金色の飲み薬","緑色の飲み薬","灰色の飲み薬"
DATA "紅紫色の飲み薬","オレンジ色の飲み薬","桃色の飲み薬","格子柄の飲み薬"
DATA "紫色の飲み薬","赤色の飲み薬","銀色の飲み薬","黄土色の飲み薬"
DATA "夕焼け色の飲み薬","黄褐色の飲み薬","浅葱色の飲み薬"
DATA "朱色の飲み薬","スミレ色の飲み薬","白色の飲み薬","黄色の飲み薬"
@SCROLL
DATA "ネズミの巻物","ウシの巻物","ネコの巻物","ウサギの巻物"
DATA "ドラゴンの巻物","ヘビの巻物","ウマの巻物","ヒツジの巻物"
DATA "サルの巻物","ニワトリの巻物","イヌの巻物","イノシシの巻物"
@WAND
DATA "アカガシの杖","イチョウの杖","ウルシの杖","エンジュの杖"
DATA "カエデの杖","キリの杖","クロマツの杖","ケヤキの杖"
DATA "コクタンの杖","サワグルミの杖","シタンの杖","スギの杖"
DATA "センダンの杖","タブの杖","ドロノキの杖","ナラの杖"
DATA "ヒノキの杖","ベニマツの杖","マカバの杖","モミジの杖"
'---
@ACT  DATA "え?","食べる","装備","装備","着ける","飲む"
      DATA "読む","振る","眺める"
'---
@SE0  DATA "@147@E127,124,0,127 L64O1G<GA<DF"
      DATA "G>>GA<<<G",0
@SE1  DATA "@147@E127,124,0,127 L24O3[CGB]3V"
      DATA "80CGBV60CGBV40CGB",0
@SE2  DATA "@147@E127,124,0,127 L96O4 C>G+<F"
      DATA "+>G+<G+>G+<B",0
@SE3  DATA "@147@E127,124,0,127 L96O4 G<C>G<"
      DATA "D>G<G",0
@SE4  DATA "@147@E127,124,0,127 L24O4 CG",0
@SE5  DATA "@147@E127,124,0,127 L24O5 GE-FRB"
      DATA "-",0
@SE6  DATA "@147@E127,124,0,127 L24O5F>F>F",0
@SE7  DATA "@147@E127,124,0,127 L24O6G>G>G",0
@SE8  DATA "@147@E127,112,0,127 L24O3 C_>G<R"
      DATA "C_<C_>C",0
@SE9  DATA "@147@E127,124,0,127L48O6 A>A<A",0
@SE10 DATA "@147@E127,123,50,120 L24O4 AAA_<"
      DATA "<A",0
@SE11 DATA "@147@E127,110,30,127 O4 B48<B4_>"
      DATA ">B",0
@SE12 DATA "@224@E127,0,127,127O7V127A32",0
@SE13 DATA "@147@E127,120,0,127 L48O3 G<FG",0
@SE14 DATA "@147@E127,120,0,127 L48O3CDE-F",0
@SE15 DATA "@147@E127,109,0,127O3E32<E4_<E",0
@SE16 DATA "@147@E127,109,0,127 O2L64 V80DV9"
      DATA "0FV99D<DCV95DCV90C>B<V85C>BV80BA"
      DATA "V75BAV70AGV65AGV60GFV50GV40F",0
@SE17 DATA "@147@E127,109,0,127 O4L64 [FB]8V"
      DATA "95FBV90FBV85FBV80FBV70FBV60FBV50"
      DATA "FBV40FBV30FBV20FBV10FB",0
@SE18 DATA "@147@E127,109,0,127 O4L32 ECFG>R"
      DATA "BRR<C",0
@SE19 DATA "@147@E127,109,0,127 O4L48 ECF+G+"
      DATA "GFA+B<DF+A+",0
@SE20 DATA "@147@E127,119,0,127 O4L24 GDG<DC"
      DATA ">BA8",0
@SE21 DATA "@147@E127,121,0,127 O4L24 CE-B->"
      DATA "B-<E-A",0
@SE22 DATA "@147@E127,120,0,127 L64O2 C<C>CD"
      DATA "+D>G+GB",0
@SE23 DATA "@147@E127,120,0,127 O3L32 D+CC+C"
      DATA "EC+DC+",0
@SE24 DATA "@147@E127,126,0,127 O6L24 GCDFGD"
      DATA "E-B-",0
@SE25 DATA "@147@E127,122,0,127 O4L24 CDEGB<"
      DATA "C",0
@SE26 DATA "@147@E127,109,0,127 O3L24 C16_<C"
      DATA "&C_<<<C8",0
@SE27 DATA "@147@E127,125,0,127 O5L24AFDFC",0
@SE28 DATA "@147@E127,110,0,127 O3L8 C_<C>G_"
      DATA "<GC_<C>G_<G",0
@SE29 DATA "@147@E127,110,0,127 O4L8 B-_<B-D"
      DATA "_<D",0
@SE30 DATA "@147@E127,119,0,127 O4L24 GGG<DR"
      DATA ">GA",0
@SE31 DATA "@147@E127,107,0,127 O4L7 G_>G<D_"
      DATA ">DB_>B<G_>G",0
@SE32 DATA "@147@E127,107,0,127 O3L32 G<G>F<"
      DATA "G>E-<G>D<G",0
@SE33 DATA "@147@E127,107,0,127 O4L64 CC+DD+"
      DATA "C+DD+E",0
@SE34 DATA "@147@E127,107,0,127 O3L64 CDC+D+"
      DATA "DEC+D+CD>B<C+>A+<C>ABV90ABV80ABV"
      DATA "70ABV60ABV50ABV40ABV30ABV20ABV10"
      DATA "AB",0
@SE35 DATA "@147@E127,107,0,127 O3L32 FCFCA-"
      DATA "DA-D",0
@SE36 DATA "@147@E127,107,0,127O4L32Q3AAA",0
@SE37 DATA "@151@E127,100,0,127O4L64GRGRG2",0
@SE38 DATA "@147@E127,100,0,127 O4L64 FDFD>B"
      DATA "-GB-G<A-E-A-E-",0
@SE39 DATA "@147@E127,100,0,127 O4@MON@MP19,"
      DATA "19,19,0D4_>D",0
@SE40 DATA "@147@E127,109,0,122 O4L32 G_>G<R"
      DATA "V60G_>G<RV40G_>G",0
@SE41 DATA "@147@E127,122,0,127 O4L64 @MON@M"
      DATA "P29,19,9,0C+<C+>D+<D+>E<E>F+<F+>"
      DATA "G+<G+>A<AC<C>C+<C+>V80C+<C+>V70C"
      DATA "+<C+>V60C+<C+>V50C+<C+>V40C+<C+>"
      DATA "V30C+<C+>V20C+<C+>",0
@SE42 DATA "@147@E127,125,0,127 O5L16 CEFGA<"
      DATA "CEF",0
@SE43 DATA "@147@E127,120,50,99O3D8_<<<<D",0
@SE44 DATA "@147@E127,123,0,127O4L32GCDEG<DC"
      DATA 0
@SE45 DATA "@147@E127,123,0,127 O5L32 GC>GDG"
      DATA "<G",0
@SE46 DATA "@147@E127,123,0,127 O5L16 F+G+AB"
      DATA "AG+F+V80F+V60F+V40F+V20F+",0
@SE47 DATA "@149@E117,110,0,127 O4L64 @MON@M"
      DATA "P19,19,19,0GFGA4_<<<A",0
@SE48 DATA "@147@E127,110,0,127 O4L64 C+C>BA"
      DATA "+B<CC+",0
'---
@M0   DATA "T150@147@E127,120,40,127L8 R4 O4"
      DATA "FD>A<FC+E>AGA+<DGA+<C+>A+AG+ A16"
      DATA "G+16<C+8D2.",0
@M1   DATA ":0 T120@147@E127,120,40,127L16 O"
      DATA "5RFAFD+RFRGRA2&A8:1 @147@E127,12"
      DATA "0,40,127L16 O5RC>BA+ARA+R<D+RF2&"
      DATA "F8R4",0
@M2   DATA ":0 T120@147@E127,120,40,127L16 O"
      DATA "5RFFFD+RDRC+RC2&C8:1 @147@E127,1"
      DATA "20,40,127L16 O5RC>BA+G+RF+RARG+2"
      DATA "&G+8R4",0
@M3   DATA "@147@E127,120,40,127L16O5 CDEG<C"
      DATA "R>CRC48E48G48<C4...R4",0
@M4   DATA ":0@147@E127,120,40,127L8 O3 CC+D"
      DATA "D+RD+CGF+2.:1@147@E127,120,40,12"
      DATA "7L8 O4RFRGRA+G<DC+2.",0
'---
@G0
DATA "                              "
DATA "                              "
DATA "                            "
DATA "                         "
DATA "                       "
DATA "                        "
DATA "                      "
DATA "                   "
DATA "                  "
DATA "            "
DATA "            "
DATA "         "
DATA "          "
DATA "           "
DATA "             "
DATA "                  "
DATA "                     "
DATA "                  "
DATA "                   "
DATA "                    "
DATA "                           "
'---
@STORY
DATA " 君はある地方の戦士訓練学校での数年間を終えたばかりである。多くの汗と試練を"
DATA "くぐり抜け、とうとう訓練を終了した君は、いつでも危険な冒険へと旅発つ心の準備"
DATA "ができている。訓練学校の教師は、君の腕前を試すために君を運命の洞窟へ送り込む"
DATA "ことにした。君に課せられた試練は、イェンダーの魔除けを手に入れて戻ることであ"
DATA "る。成功のあかつきには、君は名誉ある地方戦士協会の一員となることができる。さ"
DATA "らに、洞窟から持ち帰った財宝はすべて自分の物とすることができるのだ。"
DATA ""
DATA " 冒険の旅に備え、はるか遠くにあるダークマウンテンに棲むドラゴンから奪い取っ"
DATA "て来たといわれる魔法のかけられたほこ、弓、そして１束の矢が君に与えられた。君"
DATA "はまた、森に棲む妖精が作ったかたびらを身にまとい、洞窟にたどりつくまでの食糧"
DATA "を持った。家族と友人に最後の別れを告げると、君は道を向かった。"
DATA ""
DATA " 洞窟へ出発してから数日のあいだ何事もなく旅を続けたのちに、君はようやく運命"
DATA "の洞窟への入口となる古代の廃虚にたどりついた。夜も更けていたので、君は洞窟の"
DATA "入口を宿と決め、その晩は夜空の下で眠った。一夜が明けると、君は武器を集め、か"
DATA "たびらを身にまとい、残り少ない食事を取り、そして洞窟へと降りていった…。"
'---
@CHRDATA
DATA &H021,"㠸㠰　　",&H022,"汬⑈  ",&H023,"泾汬泾氀"
DATA &H024,"ၼ큼ᙼက",&H025,"⹊踀",&H026,"烘瘀"
DATA &H027,"㠸ࠐ  ",&H028,"ᠰ恠怰᠀",&H029,"〘ఌఘ　"
DATA &H02A,"ᡚ㰘㱚᠀",&H02C,"  【 ",&H02D," |  "
DATA &H02E,"  0　",&H02F,"Ȅࠐ⁀耀",&H030,"|컎컎簀"
DATA &H031,"㡸㠸㠸︀",&H032,"糎๼︀",&H033,"糎฼໎簀"
DATA &H034,"᰼糜ᰀ",&H035,"ﻀﰎ໎簀",&H036,"糀ﳎ컎簀"
DATA &H037,"︎᰸㠸㠀",&H038,"糎칼컎簀",&H039,"糎컎縎簀"
DATA &H03A,"᠀᠘ ",&H03B,"᠀᠈က",&H03C,"ఘだ〘ఀ"
DATA &H03D," 簀簀 ",&H03E,"怰᠌ᠰ怀",&H03F,"糎฼㠀㠀"
DATA &H05B,"㰰〰〰㰀",&H05D,"㰌ఌఌ㰀",&H05C,"昼ᠼᠼ᠀"
DATA &H05E,"㡬였  ",&H05F,"   ︀",&H060,"〘   "
DATA &H07B,"᰸㣰㠸ᰀ",&H07D,"瀼灰",&H07C,"〰　〰　"
DATA &H07E,"犺鰀  ",&H07F,"聀‐ࠄȀ",&H040,"㡄銪驊␀"
DATA &H041,"糎컎ﻎ츀",&H042,"ﳎ컼컎ﰀ",&H043,"糦簀"
DATA &H044,"ﳎ컎컎ﰀ",&H046,"ﻠ",&H045,"ﻠ︀"
DATA &H047,"绠縀",&H048,"컎컾컎츀",&H049,"︸㠸㠸︀"
DATA &H04A,"Ḏฎ໎簀",&H04B,"",&H04C,"︀"
DATA &H04D,"웮﻾훆였",&H04E,"컮﻾츀",&H04F,"糎컎컎簀"
DATA &H050,"ﳦﳠ",&H051,"糦稀",&H052,"ﳦﳬ"
DATA &H053,"绠ฎﰀ",&H054,"︸㠸㠸㠀",&H055,"컎컎컎簀"
DATA &H056,"컎컎永က",&H057,"웆훾ﻮ였",&H058,"蛎簸磬였"
DATA &H059,"컎칼㠸㠀",&H05A,"︎᰸烠︀",&H061," ﰎ绎縀"
DATA &H062,"ﳦﰀ",&H063," 绠縀",&H064,"ฎ绎컎縀"
DATA &H065," 糦ﻠ簀",&H066,"Ḹ㣾㠸㠀",&H067," 绎칾๼"
DATA &H068,"ﳦ",&H069,"㠀砸㠸︀",&H06A,"฀Ḏฎ칼"
DATA &H06B,"",&H06C,"砸㠸㠸︀",&H06D," ﳚ"
DATA &H06E," ﳦ",&H06F," 糎컎簀",&H070," ﳦﳠ"
DATA &H071," 绎컎縎",&H072," ",&H073," 绠簎ﰀ"
DATA &H074," 㣾㠸Ḁ",&H075," 컎컎縀",&H076," 簸က"
DATA &H077," 웖ﻮ䐀",&H078," 칾㣼",&H079," 컎칾๼"
DATA &H07A," ︜㡰︀",&H030,"|컎컎簀",&H031,"㡸㠸㠸︀"
DATA &H032,"糎๼︀",&H033,"糎฼໎簀",&H034,"᰼糜ᰀ"
DATA &H035,"ﻀﰎ໎簀",&H036,"糀ﳎ컎簀",&H037,"︎᰸㠸㠀"
DATA &H038,"糎칼컎簀",&H039,"糎컎縎簀",&H0C0,"   က"
DATA &H0C1,"(簨簨 ",&H0C2,"᠀᠀",&H0C3," တတ"
DATA &H0C4," ðတတ",&H0C5,"တဟ  ",&H0C6,"တჰ  "
DATA &H0C7," ÿ  ",&H0C8,"တတတတ",&H0C9," 쒊"
DATA &H0CA," 삠삀蠀",&H0CB," ꂩ꤀",&H0CC," 뀈눀"
DATA &H0CD," ఊఊఀ",&H0CE," 삀耀",&H0CF," 撎䐤였"
DATA &H0D0,"  悀蠀",&H0D1," 悀꺪渀",&H0D2," 쉂䙊"
DATA &H0D3," 肀钔",&H0D4," 郤ꘀ",&H0D5," Ү䒤ꘀ"
DATA &H0D6," ࠐ ",&H0D8," တࠀ",&H152," ࠈက"
DATA &H0D9," ",&H0DA," ⁀退",&H0DB,"  "
DATA &H0DC," 䃀䁀",&H0DD," ",&H178," "
DATA &H0DE," ꂠ ",&H0DF," ",&H0E0," "
DATA &H0E1," † ",&H0E2," ",&H0E3," "
DATA &H0E4,"잻浕斵",&H0E5," 8糎컎",&H0E6,"㠸㠸㣾︀"
DATA &H0E7,"㡸砸㠸",&H0E8,"磠︀",&H0E9,"8糎츎฼"
DATA &H0EA,"㰎໎칼㠀",&H0EB,"8糎츎฼",&H0EC,"︜ᰀ"
DATA &H0ED,"᰼㱼糜",&H0EE,"ฎ໎칼㠀",&H0EF,"þﻀ샸ﰎ"
DATA &H0F0,"컎컎칼㠀",&H0F1,"<糀샸ﳎ",&H0F2,"㠸㠸㠸㠀"
DATA &H0F3,"þ︎ผ᰸",&H0F4,"糎컎칼㠀",&H0F5,"8糎컎칼"
DATA &H0F6,"칾㸎๼砀",&H0F8,"8糎컎컎",&H153,"肠 "
DATA &H0F9," ",&H0FA," 䂤ꘀ",&H0FB," @ꪊ渀"
DATA &H0FC,"  沔鸀",&H0FD," @ꪊ",&H0FF," 캊踀"
DATA &H0FE," Ȃ",&H160," 䒮ꘀ",&H17D," 䃠䱔縀"
DATA &H100," ࡈꪌ樀",&H102," 삤꺨였",&H104," ⁄䘀"
DATA &H106," 첢가",&H10A," @怀",&H10C," 䂤ꘀ"
DATA &H10E," 삤삤ꐀ",&H112,"  욮ꈄ",&H114," 䂠ꘂ"
DATA &H116," Ў撤",&H118,"  ",&H11E," 삠욪케"
DATA &H120," 䃠䁀怀",&H122," 䂤躈昀",&H126," Ў쒤ꘀ"
DATA &H12A,"  檪︀",&H12E,"  悀耀",&H130," 삠ꚨ저"
DATA &H132,"  暮",&H136,"  ",&H139," 캎"
DATA &H13B,"  ꂠ",&H13D," 쒄踁",&H141," Ў꒤䚀"
DATA &H143,"  沔鸀",&H145,"  삠삀",&H147," 悀ꚨ"
DATA &H150," Ʉไ䐀",&H154," ⁄䐀",&H158,"  삠ꀀ"
DATA &H15A," ꂠ글",&H15E," 肀욮숄",&H164," ࠈ"
DATA &H16A," 쁄䁄",&H16E,"  삠ꀀ",&H170," 䩈"
DATA &H172," ๎樀",&H179,"  ",&H17B," Ѯ쐤였"
DATA &H192," @栀",&H1C5," 怠ⰴ",&H1F2," 袈첪찀"
DATA &H21A," @栀",&H161,"  껪",&H17E," ࡈꪌ樀"
DATA &H101," ꂤ캨ꘀ",&H103," Ѯ쐤였",&H105,"  沔鸀"
DATA &H107," 쁀䁀",&H10B," 肄躈",&H10D,"  욨좀"
DATA &H10F," D昀",&H113," 肀욪꼀",&H115,"  겪"
DATA &H117," 꺨ꘀ",&H119," †檪渀",&H11F," `옪케"
DATA &H121," ꃠꐈ",&H123," ",&H127," 肀삠ꀀ"
DATA &H12B," ꚨ",&H12F," @ꂀ怀",&H131," 좨첊言"
DATA &H133,"  沪切",&H137," 䃠乊渀",&H13A," "
DATA &H13C," ꫪ",&H13E,"  暮",&H142,"  曪⽀"
DATA &H144," 삠욪꼀",&H146," 䓮䑄昀",&H148," 쁄么"
DATA &H151," `찪쨀",&H155," ࠈ檬切",&H159," @怀"
DATA &H15B," 沄䐤츀",&H15F," H๎一",&H165," @怀"
DATA &H16B," 䙈䠀",&H16F," ఄ",&H171," 쁀䁀"
DATA &H173," ꂠ겪",&H17A," Dੈ䘀",&H17C,"  "
DATA &H1C6,"  삠ꀀ",&H1F3," ꂠ걔帀",&H21B," "
DATA &H391," @و䠀",&H392," @怀",&H393," ꂠꛨꠀ"
DATA &H394," 悤",&H395," 䣨䱊樀",&H396," ꂤ亨ꘀ"
DATA &H397,"  溊踀",&H398," @ꂀ怀",&H399," ꂤ么䘀"
DATA &H39A," 䃤䁄搀",&H39B," 亊",&H39C," ࢈"
DATA &H39D," D่䘀",&H39E," ࠈ ȑ",&H39F,"༿㽿翿"
DATA &H3A0,"胰￿￿",&H3A1,"༟輎耀",&H3A3,"ጁ ȁ̇"
DATA &H3A4,"￿缿뿿￿",&H3A5,"￿￿￿￿",&H3A6,"À"
DATA &H3A7,"܏܇̃ă",&H3A8,"￿￿￿Ｋ",&H3A9,"쒁耈蒀"
DATA &H386,"쀀  ",&H388,"<繾繾㰀",&H389,"̃   "
DATA &H38A,"芈àĀ",&H38C," 삐郀",&H38E,"܏Ἷ㿿"
DATA &H38F,"신￿",&H3AA," ᠼ糾￿",&H3AB,"   胂"
DATA &H390,"缿㼿㼿Ἇ",&H3B0,"￿￿￿￿",&H3C2,"￿￿￿￿"
DATA &H37E,"﫸ﳼ﷼",&H3B1,"܀   ",&H3B2,"￿ｿ罿缿"
DATA &H3B3,"￿￿￿￿",&H3B4,"ﳾ﻾ﻼ",&H3B5," 쀀  "
DATA &H3B6,"羟Ἇ܇̀",&H3B7,"￿￿￾ﰜ",&H3B8,"샀䀀"
DATA &H3BA,"㳛ᠤ⓿䊁",&H3B9,"؈ဿえ",&H3BB,"怐ࣼఒ"
DATA &H3BC,"䡅薂芅䕈",&H3BD,"脀  ",&H3BE,"ኢꅁ䆡ꈒ"
DATA &H3BF,"䠰㼐ࠆĀ",&H3C0,"腂Ｄ␘",&H3C1,"ሌﰈၠ耀"
DATA &H3C3," 쒄踀",&H3C4,"  ",&H3C5,"  悀耀"
DATA &H3C6,"炲﻾먈 ",&H3C7,"᰾㱼᠀",&H3C8,"D糾먐 "
DATA &H3C9,"  㡼︀",&H3AC,"⢸룼縮⠀",&H3AD,"᠘縼ᠸ砀"
DATA &H3AE,"ఈ袨倀",&H3AF,"⠸㹾︸⠀",&H3CC,"တረ氀"
DATA &H3CD,"႖縸᠔ ",&H3CE,"₠繘᠀",&H3CA,"偐瀠穜吀"
DATA &H3CB,"㡔⡼ꨀ",&H410,"ဘ㠼㸘က",&H411,"း㡼ﹼ"
DATA &H412,"䳖搰먀",&H413,"㡔﻾머⠀",&H414,"း呬㠸吀"
DATA &H415,"㡔籄籼吀",&H401,"|籔T簀",&H416,"聠›ﺬ␀"
DATA &H417,"䐸호吸㸀",&H418,"႒簐㠤怀",&H419,"烾ﳼ繾嘀"
DATA &H41A,"瀐砘ᠾⰀ",&H41B,"ѮṾ됀",   -1,""



