#!./ds -drldump.txt -rrl.log

#!p - player
#!m - array of monsters
#!l - level

#!w - dungeon width
W=80
#!h - dungeon height
H=22
#!depth
z=1
#!turns count
t=1

#!init visibility struct
vv=0
#!init move offset
d'xy=0

#!current health
h=100

#! current level cell alias
C=^l[x,y]

#!sign
#S(v)?v<0`-1:?v`1:0\\\
#!bh line
#!absolute value
#A(v)?v<0`!-v:!v\\
#!swap
#W(&a&b)
  'v=a
  a=b
  b=v
\
#L(xyabc)
  'tres=?A(b-y)>A(a-x)`1:0\
  ?t`
    W(x,y)
    W(a,b)
  \
  ?x>a`
    W(x,a)
    W(y,b)
  \
  q=a-x
  s=S(b-y)
  r=A(b-y)
  e=q/2
  @x`x:a
    ?t`?*c(y,x)`@>\:?*c(x,y)`@>\\
    e-=r
    ?e<0`
      y+=s
      e+=q
    \
  \
\

#! sQuare
#Q(a)!a*a\
#!squared distaNce to player
#N(xy)!Q(x-px)+Q(y-py)\


#!move c
#M(&c)?l[cx+dx,cy+dy]o`c+=d!0\!1\


#!level generator
#!draw corridor callback
#D(xy)C'to={".",1}!0\
#!random unoccupied spot not too close to player
#R@:'xy={~W,~H}?N(x,y)>9&Co`!{x,y}\\\
#G@xy`0,0<W,H
Ct="#"
C'vo=0\
'ht=0
m={}
s=m
@`0:7
 @:
  k=1
  i=1~(W-9)
  j=1~(H-9)
  w=4~8
  h=4~8
  @xy`i-1,j-1:i+w+1,j+h+1?Co`k=0\\
  ?k`@>\
 \
 s+={{w/2+i,h/2+j}}
 @xy`i,j:i+w,j+h
 C'to={".",1}\
\
@i`0<#s
  L(s[i-1]0,s[i-1]1,s[i]0,s[i]1,&D)
\
p'xy=s0
#!generate monsters
@`0:5+z
  'xy=R()
  m+={x:x,y:y,c:4,s:"a"}
\
#!stairs
'xy=R()
Ct=">"
Co=0
\
G()

#!for visibility check
#V(xy)?Co=0&(vx!x|vy!y)`vv=0!1:!0\\

#! main loop
@:
 @xy`0,0<W,H
   ?N(x,y)<64`v'vxy={1,x,y}
   L(x,y,px,py,&V):vv=0\
   Cv=?vv`7:?Cv`1:0\\^x,y$Cv<?Cv`Ct:" "\
 \
 @{n:m}
   ?p'xy=n'xy`h+=5+~z*5
   n'xy=0@<\
   ?l[nx,ny]v`d={S(nx-px),S(ny-py)}
   M(n)
   $nc^nx,ny<ns\
 \
 ^px,py$7<"@"
 ^0,22<<"H:$h T:$t L:$z"
 >c
 ??c`81:@>\
 dx=c-1%3-1
 dy=-(c-49/3%3-1)
 ?M(p)`??l[px+dx,py+dy]t`">":z++
 G()\\
 t++
 h-=z/3+1
 ?h<0`@>\
\

