DeathTestvDungeon - James D Jarvis - 09-29-2022
DeathTeatDungeon is a simple rogue-like example. It's based off the code I used in Wandering in the Cave but makes use of a graphic tileset.
It's currently set-up to play a simple escape scenario. Eventually monsters and treasures will be added to the game, the graphics are there currently just not all the rest of the code.
This is in two codeblocks, the main program you can name however you like the tileset and tileloading function should be saved in a file called "DTDtiles.bi" if you want to use the code as is.
thanks again to DAV for his BASIMAGE program whichmade this program possible as is.
DeathTestDungeon Main Program
Code: (Select All) 'DeathTestDungeon v0.3b
'By James D. Jarvis
' a simple rogue-like example
' in progress
' has simple exit challenge built in for now , no guarantee the starting positon will be safe or the game will be playable just yet
'
'curenntly this is all rough and in-development you'll see the dungeon get drawn as you start and it will stay on screen
'as long as you wish, press the spacebar to start playing
' use the numberpad or WASD to navigate <esc> to quit
'$dynamic
Screen _NewImage(800, 500, 32)
_Title "DeathTestDungeon v0.3"
_Define K As _UNSIGNED LONG
Dim Shared dmap As _Unsigned Long
Dim Shared ms As _Unsigned Long
Dim Shared Kblack, Kwhite, Kdgrey, Klgrey, kredm, kwater, kslime, klava, krubble, kcrystal, kexit, kfungus
Dim Shared kfloor2, kfloor3, kfloor4, cornerrubblechance
Dim Shared tiles&
Dim Shared rect_count As Integer
Type rect_type
xx As Integer
yy As Integer
ww As Integer
hh As Integer
lk As _Unsigned Long
fk As _Unsigned Long
notes As String
End Type
Dim Shared tilespot(0 To 528, 2) As Integer
Dim Shared rect(0) As rect_type
Dim Shared min_rectd
Dim Shared fillcell, openwallchance, pillarchance, puddleno, slimechance, lavachance
Dim Shared phealth, pstamina, pwounds, ptemp, ppx, ppy, lastx, lasty
Randomize Timer
Kblack = _RGB32(0, 0, 0) 'this is visible black as 0,0,0 will be "nothing is here" eventually
Kwhite = _RGB32(250, 250, 250) 'this is cooled paper white
Kdgrey = _RGB32(40, 40, 40)
Klgrey = _RGB32(150, 150, 150)
kfloor2 = _RGB32(151, 151, 151): kfloor3 = _RGB32(152, 152, 152): kfloor4 = _RGB32(153, 153, 153)
kred = _RGB32(250, 0, 0)
kwater = _RGB32(10, 30, 240): kslime = _RGB32(20, 240, 100): klava = _RGB32(200, 5, 5)
krubble = _RGB32(80, 80, 80): kcrystal = _RGB32(250, 250, 0): kexit = _RGB32(255, 0, 255)
kfungus = _RGB32(200, 50, 150)
dmap = _NewImage(800, 500, 32)
ms = _NewImage(800, 500, 32)
tiles& = Loadtileset1& 'loads the tileset in the file DTDtiles.bi
Const tilemaxx = 48
Const tilemaxy = 11
t = 0
For y = 0 To tilemaxy - 1
For x = 0 To tilemaxx - 1
tilespot(t, 1) = x * 16
tilespot(t, 2) = y * 16
t = t + 1
Next x
Next y
maxtiles = t - 1
fh = _FontHeight
fw = _FontWidth
restartdungeon:
walltile = getwalltile
Screen dmap
_Dest dmap
_Source dmap
_PrintMode _KeepBackground
Color Kdgrey, Kdgrey
Do
fillcell = Int(Rnd * 40)
openwallchance = Int(Rnd * 20)
pillarchance = Int(Rnd * 20)
puddleno = Int(Rnd * 30)
slimechance = Int(Rnd * 24)
lavachance = Int(Rnd * 10)
funguschance = Int(Rnd * 30)
cornerrubblechance = Int(1 + Rnd * 30)
ReDim rect(0) As rect_type
rect_count = 0
Cls
rwid = 780
rht = 480
newrect 10, 10, rwid, rht, Kdgrey, Klgrey
min_rectd = 40
'If min_rectd < 4 Then min_rectd = 4
drawrect 1
bisectrect 1
n = 0
min_rectd = Int(1 + Rnd * 30)
If min_rectd < 10 Then min_rectd = 10
Do
'Cls
For r = 1 To rect_count
bisectrect r
Next r
For r = 1 To rect_count
drawrect r
Next r
_Limit 5
kk$ = InKey$
n = n + Int(1 + Rnd * 8)
Loop Until kk$ <> "" Or n > 40
kk$ = Chr$(27)
Loop Until kk$ = Chr$(27)
For r = 1 To rect_count
If Int(1 + Rnd * 100) < fillcell Then rect(r).fk = Kdgrey
drawrect r
Next r
For r = 1 To rect_count 'if there's an open space across a wall open a space in the wall
If rect(r).fk <> Kdgrey Then
mx = rect(r).xx + Int(rect(r).ww / 2)
my = rect(r).yy + Int(rect(r).hh / 2)
If Point(mx, my + Int(rect(r).hh / 2) + 2) = Klgrey Then
Line (mx, my)-(mx, my + Int(rect(r).hh / 2) + 2), Klgrey
End If
If Point(mx, my - Int(rect(r).hh / 2) - 2) = Klgrey Then
Line (mx, my)-(mx, my - Int(rect(r).hh / 2) - 2), Klgrey
End If
If Point(mx - Int(rect(r).ww / 2) - 2, my) = Klgrey Then
Line (mx - Int(rect(r).ww / 2) - 2, my)-(mx, my), Klgrey
End If
If Point(mx + Int(rect(r).ww / 2) + 2, my) = Klgrey Then
Line (mx + Int(rect(r).ww / 2) + 2, my)-(mx, my), Klgrey
End If
End If
Next r
For y = 11 To rht - 1
For x = 11 To rwid - 2
If Point(x, y) = Klgrey And Point(x + 1, y) = Kdgrey And Point(x + 2, y) = Klgrey Then
PSet (x + 1, y), kred
End If
If Point(x, y) = Klgrey And Point(x + 1, y) = kred And Point(x + 2, y) = Kdgrey And Point(x + 3, y) = Klgrey Then
PSet (x + 2, y), kred
End If
If Point(x, y) = kdrgey And Point(x + 1, y) = Klgrey And Point(x + 2, y) = Kdgrey And Point(x + 3, y) = Kdgrey And Point(x + 4, y) = Klgrey And Point(x + 5, y) = Kdgrey Then
PSet (x + 2, y), Klgrey
PSet (x + 3, y), Klgrey
End If
Next x
Next y
For x = 11 To rwid - 2
For y = 11 To rht - 2
If Point(x, y) = Klgrey And Point(x, y + 1) = Kdgrey And Point(x, y + 2) = Klgrey Then
PSet (x, y + 1), kred
End If
If Point(x, y) = Klgrey And Point(x, y + 1) = kred And Point(x, y + 2) = Kdgrey And Point(x, y + 3) = Klgrey Then
PSet (x, y + 2), kred
End If
If Point(x, y) = kdrgey And Point(x, y + 1) = Klgrey And Point(x, y + 2) = Kdgrey And Point(x, y + 3) = Kdgrey And Point(x, y + 4) = Klgrey And Point(x, y + 5) = Kdgrey Then
PSet (x, y + 2), Klgrey
PSet (x, y + 3), Klgrey
End If
Next
Next
aa$ = Input$(1)
For y = 10 To rht
For x = 10 To rwid
If Point(x, y) = kred Then PSet (x, y), Klgrey
Next
Next
Color Kblack, Kwhite
'check to open walls
For r = 1 To rect_count
If rect(r).fk <> Kdgrey And Int(1 + Rnd * 100) <= openwallchance Then
Select Case Int(1 + Rnd * 4)
Case 1
rect(r).xx = rect(r).xx - 2
rect(r).ww = rect(r).ww + 2
Case 2
rect(r).xx = rect(r).xx + 2
rect(r).ww = rect(r).ww + 2
Case 3
rect(r).yy = rect(r).yy - 2
rect(r).hh = rect(r).hh + 2
Case 4
rect(r).yy = rect(r).yy + 2
rect(r).hh = rect(r).hh + 2
End Select
Line (rect(r).xx, rect(r).yy)-(rect(r).xx + rect(r).ww, rect(r).yy + rect(r).hh), Klgrey, BF
End If
Next r
'straysspaces
sp = Int(Rnd * 12)
For ss = 1 To sp
sx = Int(10 + Rnd * rwid - 30)
sy = Int(10 + Rnd * rht - 30)
sw = 10 + Int(Rnd * 20)
sh = 10 + Int(Rnd * 20)
Line (sx, sy)-(sx + sw, sy + sh), Klgrey, BF
Next
'add wormtunnels
nwt = Int(Rnd * (12 + fillcell))
For ww = 1 To nwt
wsx = Int(20 + Rnd * rwid - 50)
wsy = Int(20 + Rnd * rht - 50)
wtx = Int(20 + Rnd * rwid - 50)
wty = Int(20 + Rnd * rht - 50)
If wsx < wtx Then xtrend = 1
If wsx > wtx Then xtrend = -1
If wsy < wty Then ytrend = 1
If wsy > wty Then ytrend = -1
sx = wsx
sy = wsy
rl = 0
Do
nx = sx + Int(xtrend + Rnd * 2 - Rnd * 2)
ny = sy + Int(ytrend + Rnd * 2 - Rnd * 2)
If nx < 11 Then
nx = 11
xtrend = xtrend * -1
End If
If ny < 11 Then
ny = 11
ytrend = ytrend * -1
End If
If nx > rwid Then
nx = rwid
xtrend = xtrend * -1
End If
If ny > rht Then
ny = rht
ytrend = ytrend * -1
End If
dx = Abs(nx - wtx)
dy = Abs(ny - wty)
Line (sx, sy)-(nx, ny), Klgrey
sx = nx
sy = ny
rl = rl + 1
Loop Until dx < 5 And dy < 5 Or rl > rwid + 40
Line (sx, sy)-(wtx, wty), Klgrey
Next ww
For r = 1 To rect_count 'add pillars
pillarspread = 2 + Int(Rnd * 7)
If rect(r).fk <> Kdgrey And Int(1 + Rnd * 100) <= pillarchance Then
For y = rect(r).yy + pillarspread To rect(r).yy + rect(r).hh - pillarspread Step pillarspread
For x = rect(r).xx + pillarspread To rect(r).xx + rect(r).ww - pillarspread Step pillarspread
PSet (x, y), Kdgrey
Next
Next
End If
Next
For pr = 1 To rect_count
If rect(pr).fk <> Kdgrey And Int(1 + Rnd * 100) <= cornerrubblechance Then
addcornerrubble pr
End If
If rect(pr).fk <> Kdgrey And Int(1 + Rnd * 100) <= puddleno Then
addwater pr, Int(rect(pr).xx + 1 + Rnd * (rect(pr).ww - 2)), Int(rect(pr).yy + 1 + Rnd * (rect(pr).hh - 2)), Int(1 + Rnd * 3)
End If
If rect(pr).fk <> Kdgrey And Int(1 + Rnd * 100) <= slimechance Then
addslime pr, Int(rect(pr).xx + 1 + Rnd * (rect(pr).ww - 2)), Int(rect(pr).yy + 1 + Rnd * (rect(pr).hh - 2)), Int(1 + Rnd * 3)
End If
If rect(pr).fk <> Kdgrey And Int(1 + Rnd * 100) <= lavachance Then
addlava pr, Int(rect(pr).xx + 1 + Rnd * (rect(pr).ww - 2)), Int(rect(pr).yy + 1 + Rnd * (rect(pr).hh - 2)), Int(1 + Rnd * 3)
End If
If rect(pr).fk <> Kdgrey And Int(1 + Rnd * 100) <= funguschance Then
addfungus pr, Int(rect(pr).xx + 1 + Rnd * (rect(pr).ww - 2)), Int(rect(pr).yy + 1 + Rnd * (rect(pr).hh - 2)), Int(1 + Rnd * 3)
End If
Next pr
'dress floor to make it more interesting
For y = 1 To rht
For x = 1 To rwid
If Point(x, y) = Klgrey Then
Select Case Int(1 + Rnd * 100)
Case 1, 2
PSet (x, y), kfloor2
Case 3
PSet (x, y), kfloor3
Case 4
PSet (x, y), kfloor4
End Select
If Point(x, y) = Kdgrey Then 'convert some wall near lava inot rubble
If Point(x - 1, y) = klava And Int(1 + Rnd * 100) < 30 Then PSet (x, y), krubble
If Point(x + 1, y) = klava And Int(1 + Rnd * 100) < 30 Then PSet (x, y), krubble
If Point(x, y + 1) = klava And Int(1 + Rnd * 100) < 30 Then PSet (x, y), krubble
If Point(x, y - 1) = klava And Int(1 + Rnd * 100) < 30 Then PSet (x, y), krubble
If Point(x - 2, y) = klava And Int(1 + Rnd * 100) < 10 Then PSet (x, y), krubble
If Point(x + 2, y) = klava And Int(1 + Rnd * 100) < 10 Then PSet (x, y), krubble
If Point(x, y + 2) = klava And Int(1 + Rnd * 100) < 10 Then PSet (x, y), krubble
If Point(x, y - 2) = klava And Int(1 + Rnd * 100) < 10 Then PSet (x, y), krubble
End If
End If
Next
Next
For e = 0 To 9 'clean edge
Line (e, e)-(_Width - e, e), Kdgrey: Line (e, e)-(e, _Height - e), Kdgrey: Line (_Width - e, e)-(_Width - e, _Height - e), Kdgrey
Next e
Screen ms
_Source dmap
pick = 0
Do
pick = pick + 1
ppx = rect(pick).xx + Int(rect(pick).ww / 2): ppy = rect(pick).yy + Int(rect(pick).hh / 2)
kk = Point(ppx, ppy)
Loop Until kk <> Kdgrey
lightradius = 9: pstamina = 100: phealth = 100: pwounds = 0: ptemp = 98
turn = 0
Do
If rec_count > 12 Then
exitspot = Int(6 + Rnd * (rect_count - 7))
Else
exitspot = Int(1 + Rnd * rect_count)
End If
exitX = rect(exitspot).xx + Int(rect(exitspot).ww / 2)
exitY = rect(exitspot).yy + Int(rect(exitspot).hh / 2)
startX = Abs(exitX - ppx)
startY = Abs(exitY - ppy)
start_dx = Sqr(startX * startX + startY * startY)
Loop Until Point(exitX, exitY) <> Kdgrey And exitspot <> pick
_Dest dmap
PSet (exitX, exitY), kexit
_Dest ms
_PrintMode _KeepBackground
View Print 25 To 30
Cls
Do
'draw location
rsqrd = lightradius * lightradius
y = -lightradius
While y <= lightradius
x = Int(Sqr(rsqrd - y * y))
For x2 = ppx - x To ppx + x
vx = x2 - ppx + 12
kk = Point(x2, ppy + y)
Line (vx * 16, (y + 12) * 16)-(vx * 16 + 15, (y + 12) * 16 + 15), kk, BF
If kk = Kdgrey Then
coltileat walltile, _RGB32(100, 100, 100), vx * 16, (y + 12) * 16
End If
If kk = kfloor2 Then
coltileat 2, _RGB32(160, 160, 160), vx * 16, (y + 12) * 16
End If
If kk = kfloor3 Then
coltileat 3, _RGB32(165, 165, 170), vx * 16, (y + 12) * 16
End If
If kk = kfloor4 Then
coltileat 4, _RGB32(175, 165, 165), vx * 16, (y + 12) * 16
End If
If kk = kexit Then
coltileat 24, _RGB32(250, 40, 255), vx * 16, (y + 12) * 16
End If
If kk = kfungus Then
Color _RGB32(250, 100, 200)
' _PrintString (vx * 16, (y + 12) * 16), Chr$(234)
coltileat 57, _RGB32(250, 100, 200), vx * 16, (y + 12) * 16
Color _RGB32(255, 255, 255)
End If
If kk = kcrystal Then
'_PrintString (vx * 16, (y + 12) * 16), Chr$(127)
coltileat 433, _RGB32(10, 0, 10), vx * 16, (y + 12) * 16
End If
If kk = krubble Then
Color _RGB32(150, 150, 150)
'_PrintString (vx * 16, (y + 12) * 16), Chr$(177)
coltileat 61, _RGB32(220, 200, 180), vx * 16, (y + 12) * 16
Color _RGB32(255, 255, 255)
End If
If kk = kslime Then
Color _RGB32(250, 250, 150)
sb = Int(Rnd * 4)
'If sb = 1 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(247)
If sb = 1 Then coltileat 61, _RGB32(250, 250, 150), vx * 16, (y + 12) * 16
' If sb = 2 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(126)
If sb = 2 Then coltileat 61, _RGB32(150, 250, 150), vx * 16, (y + 12) * 16
Color _RGB32(255, 255, 255)
End If
If kk = klava Then
Color _RGB32(250, 250, 150)
lb = Int(Rnd * 7)
'If lb = 1 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(249)
If lb = 1 Then coltileat 61, _RGB32(250, 250, 150), vx * 16, (y + 12) * 16
'If lb = 2 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(9)
If lb = 2 Then coltileat 468, _RGB32(250, 250, 150), vx * 16, (y + 12) * 16
'If lb = 3 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(176)
If lb = 3 Then coltileat 461, _RGB32(250, 250, 150), vx * 16, (y + 12) * 16
'If lb = 4 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(248)
If lb = 4 Then coltileat 61, _RGB32(250, 0, 0), vx * 16, (y + 12) * 16
'If lb = 5 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(46)
If lb = 5 Then coltileat 468, _RGB32(250, 100, 0), vx * 16, (y + 12) * 16
Color _RGB32(255, 255, 255)
End If
If kk = kwater Then
Color _RGB32(40, 120, 250)
wb = Int(Rnd * 6)
'If wb = 1 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(45)
If wb = 1 Then coltileat 136, _RGB32(40, 120, 250), vx * 16, (y + 12) * 16
If wb = 2 Then coltileat 136, _RGB32(40, 120, 250), vx * 16, (y + 12) * 16
If wb = 3 Then _PrintString (vx * 16 + 4, (y + 12) * 16), Chr$(240)
Color _RGB32(255, 255, 255)
End If
Next
y = y + 1
Wend
Line (598, 18)-(795, 124), Kdgrey, BF
'_PrintString ((12) * 8, (12) * 16), "@"
If ptemp > 199 Then coltileat 470, _RGB32(40, 0, 0), (12) * 16, (12) * 16
coltileat 304, _RGB32(250, 250, 250), (12) * 16, (12) * 16
o$ = "Stamina " + Str$(pstamina)
_PrintString (600, 20), o$
o$ = "Health " + Str$(phealth)
_PrintString (600, 40), o$
o$ = "Wounds " + Str$(pwounds)
_PrintString (600, 60), o$
o$ = "Temperature " + Str$(ptemp)
_PrintString (600, 80), o$
edd = Int(Sqr((ppx - exitX) * (ppx - exitX) + (ppy - exitY) * (ppy - exitY)))
o$ = "Distance to Exit " + Str$(edd)
_PrintString (600, 100), o$
Print "Turn", turn
Do
_Limit 60
kk$ = InKey$
Loop Until kk$ <> ""
turn = turn + 1
lastx = ppx
lasty = ppy
Select Case kk$
Case "w", "8"
If pstamina > 0 And Point(ppx, ppy - 1) <> Kdgrey Then ppy = ppy - 1
Case "s", "2"
If pstamina > 0 And Point(ppx, ppy + 1) <> Kdgrey Then ppy = ppy + 1
Case "a", "4"
If pstamina > 0 And Point(ppx - 1, ppy) <> Kdgrey Then ppx = ppx - 1
Case "d", "6"
If pstamina > 0 And Point(ppx + 1, ppy) <> Kdgrey Then ppx = ppx + 1
Case "7"
If pstamina > 0 And Point(ppx - 1, ppy - 1) <> Kdgrey Then
ppy = ppy - 1
ppx = ppx - 1
End If
Case "9"
If pstamina > 0 And Point(ppx + 1, ppy - 1) <> Kdgrey Then
ppy = ppy - 1
ppx = ppx + 1
End If
Case "1"
If pstamina > 0 And Point(ppx - 1, ppy + 1) <> Kdgrey Then
ppy = ppy + 1
ppx = ppx - 1
End If
Case "3"
If pstamina > 0 And Point(ppx + 1, ppy + 1) <> Kdgrey Then
ppy = ppy + 1
ppx = ppx + 1
End If
Case "5", "."
If Int(1 + Rnd * 50) < phealth And pstamina < 100 Then pstamina = pstamina + Int(1.5 + Rnd * (phealth / 25))
End Select
If Point(ppx, ppy) = krubble Then pwounds = pwounds + checkrubble(ppx, ppy)
If Point(ppx, ppy) = kcrystal Then pwounds = pwounds + checkcrystal(ppx, ppy)
If Int(1 + Rnd * 80 + pwounds) > phealth Then pstamina = pstamina - 1
If Point(ppx, ppy) = kslime Then
Print "The slime is nauseating...";
If Int(Rnd * 120) > phealth Then phealth = phealth - Int(Rnd * 4)
If Int(Rnd * 120) > phealth Then
Select Case Int(1 + Rnd * 6)
Case 1, 2, 3
Print " it's making you itch."
Case 4, 5, 6
Print " it's feel's like it is burning you."
wounds = wounds + Abs(Int(Rnd * 2 - Rnd * 2))
End Select
End If
End If
If Point(ppx, ppy) = kwater Then ptemp = ptemp - Int(Abs(Rnd * 2 - Rnd * 2))
If Point(ppx, ppy) = klava Then
ptemp = ptemp + 100
dmg = 10 + Int(Rnd * 20)
pwounds = pwounds + dmg
Print "YOU ARE STANDING IN LAVA !!!"
Print "....suffering "; dmg; " points of damage !"
End If
If ptemp < 0 Then
Print "You are dangerously COLD .... brrrrr"
pstamina = pstamina - Int(Rnd * 2)
If Int(1 + Rnd * (50 + Abs(ptemp))) > pstamina Then
pwounds = pwounds + Int(1 + Rnd * 2)
phealth = phealth - Int(Rnd * 2)
End If
End If
tcheck = ptemp + Rnd * 10
If tcheck > 108 Then
pstamina = pstamina - 1
Print "You are dangerously warm!"
If Int(1 + Rnd * ptemp) > pstamina Then
pwounds = pwounds + 1
phealth = phealth - Int(Rnd * 2)
End If
End If
'If Point(ppx, ppy) = (kfloor2 Or kfloor3 or kfloor4 or klgrey) Then
If ptemp < 98 Then ptemp = ptemp + 1
If ptemp > 98 Then ptemp = Int((ptemp + 98) / 2)
' End If
If pstamina < 20 Then
Print "You are ";
If pstamina < 1 Then
Print "exhausted."
Else
Print "fatigued."
End If
End If
If wounds > phealth Then
Print "You are in intense pain !"
pstamina = pstamina = Int(Rnd * 2)
End If
If Point(ppx, ppy) = kexit Then
Print
Print "YOU HAVE FOUND THE EXIT"
Print
Print "it took you "; turn; " turns after starting "; start_dx; " spaces away from the exit."
Print
kk$ = Chr$(27)
End If
If phealth < 1 Or pwounds > 99 Then
Print "YOU HAVE PERISHED DUE TO YOUR POOR CONDITION."
Print
Print "(press any key to continue)"
any$ = Input$(1)
kk$ = Chr$(27)
End If
Loop Until kk$ = Chr$(27)
Print "GAME OVER"
Print "play again?"
Print "Y or N?"
Do
ask$ = Input$(1)
ask$ = UCase$(ask$)
Loop Until ask$ = "Y" Or ask$ = "N"
If ask$ = "Y" Then
Screen cmap
GoTo restartdungeon
End If
System
'SUBS======================================================================
'$INCLUDE: 'DTDtiles.bi'
'==========================================================================
Sub bisectrect (r)
If r > 0 Or r < rect_count + 1 Then
Select Case Int(1 + Rnd * 6)
Case 1, 2, 3 'vertical split
tries = 0
Do
tries = tries + 1
vpercent = (Int(1 + Rnd * 4) + Int(1 + Rnd * 4)) * .1
Loop Until vpercent * rect(r).ww >= min_rectd And vpercent * rect(r).hh >= min_rectd Or tries > 7
If tries < 8 Then
oldWW = Int(rect(r).ww * vpercent)
newX = rect(r).xx + oldWW
newWW = rect(r).ww - oldWW
If oldWW >= min_rectd And newWW >= min_rectd Then
rect(r).ww = oldWW
newrect newX, rect(r).yy, newWW, rect(r).hh, rect(r).lk, rect(r).fk
End If
End If
Case 4, 5, 6 'horizontal split
tries = 0
Do
tries = tries + 1
vpercent = (Int(1 + Rnd * 4) + Int(1 + Rnd * 4)) * .1
Loop Until vpercent * rect(r).ww >= min_rectd And vpercent * rect(r).hh >= min_rectd Or tries > 7
If tries < 8 Then
oldHH = Int(rect(r).hh * vpercent)
newYY = (rect(r).yy + oldHH)
newHH = rect(r).hh - oldHH
If oldHH >= min_rectd And newHH >= min_rectd Then
rect(r).hh = oldHH
newrect rect(r).xx, newYY, rect(r).ww, newHH, rect(r).lk, rect(r).fk
End If
End If
End Select
End If
End Sub
Sub wrect (rx, ry, ww, hh, line_klr As _Unsigned Long, fill_klr As _Unsigned Long)
If fill_klr > 0 Then Line (rx, ry)-(rx + ww - 1, ry + hh - 1), fill_klr, BF
If line_klr > 0 Then Line (rx, ry)-(rx + ww - 1, ry + hh - 1), line_klr, B
End Sub
Sub drawrect (r)
wrect rect(r).xx, rect(r).yy, rect(r).ww, rect(r).hh, rect(r).lk, rect(r).fk
End Sub
Sub newrect (XX, YY, WW, HH, klk, kfl)
rect_count = rect_count + 1
ReDim _Preserve rect(rect_count) As rect_type
rect(rect_count).xx = XX
rect(rect_count).yy = YY
rect(rect_count).ww = WW
rect(rect_count).hh = HH
rect(rect_count).lk = klk
rect(rect_count).fk = kfl
rect(rect_count).notes = "newrect"
End Sub
Sub addwater (rno, pcx, pcy, scale)
prr = Int(6 + Rnd * (12 * scale))
preps = (3 + Int(Rnd * prr))
For wr = 1 To preps
pcxx = pcx + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
pcyy = pcy + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = pcxx - x To pcxx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If pcyy + y >= rect(rno).yy And pcyy + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, pcyy + y)
If kk = Klgrey Then
PSet (x2, pcyy + y), kwater
End If
End If
End If
Next
y = y + 1
Wend
prr = Int((prr + Int(6 + Rnd * (12 * scale))) / 2)
Next
End Sub
Sub addslime (rno, pcx, pcy, scale)
prr = Int(5 + Rnd * (10 * scale))
preps = (3 + Int(Rnd * prr))
For wr = 1 To preps
pcxx = pcx + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
pcyy = pcy + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = pcxx - x To pcxx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If pcyy + y >= rect(rno).yy And pcyy + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, pcyy + y)
If kk = Klgrey Or kk = kwater Then
PSet (x2, pcyy + y), kslime
End If
End If
End If
Next
y = y + 1
Wend
prr = Int((prr + Int(6 + Rnd * (12 * scale))) / 2)
Next
End Sub
Sub addlava (rno, pcx, pcy, scale)
prr = Int(5 + Rnd * (10 * scale))
preps = (3 + Int(Rnd * prr))
For wr = 1 To preps
pcxx = pcx + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
pcyy = pcy + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = pcxx - x To pcxx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If pcyy + y >= rect(rno).yy And pcyy + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, pcyy + y)
If kk = Klgrey Or kk = kwater Or kk = kslime Then
If kk = kwater Then
If Abs(y) < prr / 2 Then
PSet (x2, pcyy + y), klava
Else
Select Case Int(1 + Rnd * 12)
Case 1, 2, 3, 4, 5
PSet (x2, pcyy + y), klava
Case 6, 7, 8
PSet (x2, pcyy + y), krubble
Case 9, 10
PSet (x2, pcyy + y), Klgrey
Case 11
PSet (x2, pcyy + y), Kdgrey
Case 12
PSet (x2, pcyy + y), kcrystal
End Select
End If
Else
PSet (x2, pcyy + y), klava
End If
End If
End If
End If
Next
y = y + 1
Wend
prr = Int((prr + Int(6 + Rnd * (12 * scale))) / 2)
Next
End Sub
Sub addfungus (rno, pcx, pcy, scale)
prr = Int(2 + Rnd * (2 * scale))
preps = (3 + Int(Rnd * prr))
For wr = 1 To preps
pcxx = pcx + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
pcyy = pcy + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = pcxx - x To pcxx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If pcyy + y >= rect(rno).yy And pcyy + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, pcyy + y)
If kk = Klgrey Or kk = kwater Then
If Int(1 + Rnd * 100) <= 30 Then PSet (x2, pcyy + y), kfungus
End If
End If
End If
Next
y = y + 1
Wend
prr = Int((prr + Int(6 + Rnd * (12 * scale))) / 2)
Next
End Sub
Function checkrubble (xx, yy)
stumblecheck = Int(1 + Rnd * 120)
dmg = 0
If stumblecheck > health Then
Print "whooops.... you stumbled on the rubble...";
Select Case Int(1 + Rnd * 20)
Case 1
If Point(ppx - 1, ppy - 1) <> Kdgrey Then
ppx = ppx - 1: ppy = ppy - 1
End If
Case 2
If Point(ppx, ppy - 1) <> Kdgrey Then
ppy = ppy - 1
End If
Case 3
If Point(ppx + 1, ppy + 1) <> Kdgrey Then
ppx = ppx + 1: ppy = ppy + 1
End If
Case 4
If Point(ppx - 1, ppy) <> Kdgrey Then
ppx = ppx - 1
End If
Case 6
If Point(ppx + 1, ppy) <> Kdgrey Then
ppx = ppx + 1
End If
Case 7
If Point(ppx - 1, ppy + 1) <> Kdgrey Then
ppx = ppx - 1: ppy = ppy + 1
End If
Case 8
If Point(ppx, ppy + 1) <> Kdgrey Then
ppy = ppy + 1
End If
Case 9
If Point(ppx + 1, ppy + 1) <> Kdgrey Then
ppy = ppy + 1: ppx = ppx + 1
End If
Case 10, 11, 12, 13, 14
Print " knocking the wind out of you... ";
pstamina = Int(pstamina / 4)
Case 15, 16, 17, 18, 19, 20
ppx = lastx: ppy = lasty
Print "you tumble back...";
End Select
dmg = Abs(Int((Rnd * 3) - (Rnd * 3)))
If dmg > 0 Then
Print "you suffer "; dmg; " points of damage!"
Else
Print "."
End If
End If
checkrubble = dmg
End Function
Sub addcornerrubble (rno)
numcorn = Int(1 + Rnd * 4)
For crr = 1 To numcorn
Select Case Int(Rnd * 5)
Case 1
crx = rect(rno).xx + 1
cry = rect(rno).yy + 1
Case 2
crx = rect(rno).xx + 1
cry = rect(rno).yy + rect(rno).hh - 2
Case 3
crx = rect(rno).xx + rect(rno).ww - 2
cry = rect(rno).yy + 1
Case 4
crx = rect(rno).xx + rect(rno).ww - 2
cry = rect(rno).yy + rect(rno).hh - 2
End Select
prr = Int((rect(rno).hh + rect(rno).ww) / 12)
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = crx - x To crx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If cry + y >= rect(rno).yy And cry + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, cry + y)
If kk = Klgrey And Int(1 + Rnd * 100) < (cornerrubblechance * 2.5) Then
PSet (x2, cry + y), krubble
End If
End If
End If
Next
y = y + 1
Wend
Next crr
End Sub
Function checkcrystal (xx, yy)
climbcheck = Int(1 + Rnd * 100)
If climbcheck > phealth Then
Print "You just can't gain any purchase to climb the crystal."
Else
stumblecheck = Int(1 + Rnd * 120)
dmg = 0
If stumblecheck > health Then
Print ".... you fell from the crytsal...";
Select Case Int(1 + Rnd * 9)
Case 1
If Point(ppx - 1, ppy - 1) <> Kdgrey Then
ppx = ppx - 1: ppy = ppy - 1
End If
Case 2
If Point(ppx, ppy - 1) <> Kdgrey Then
ppy = ppy - 1
End If
Case 3
If Point(ppx + 1, ppy + 1) <> Kdgrey Then
ppx = ppx + 1: ppy = ppy + 1
End If
Case 4
If Point(ppx - 1, ppy) <> Kdgrey Then
ppx = ppx - 1
End If
Case 5
ppx = lastx: ppy = lasty
Case 6
If Point(ppx + 1, ppy) <> Kdgrey Then
ppx = ppx + 1
End If
Case 7
If Point(ppx - 1, ppy + 1) <> Kdgrey Then
ppx = ppx - 1: ppy = ppy + 1
End If
Case 8
If Point(ppx, ppy + 1) <> Kdgrey Then
ppy = ppy + 1
End If
Case 9
If Point(ppx + 1, ppy + 1) <> Kdgrey Then
ppy = ppy + 1: ppx = ppx + 1
End If
End Select
dmg = Abs(Int((Rnd * 4) - (Rnd * 4)))
If dmg > 0 Then
Print "you suffer "; dmg; " points of damage!"
Else
Print "."
End If
End If
End If
checkcrystal = dmg
End Function
Sub coltileat (tn, ktc, xx, yy)
Dim kc As _Unsigned Long
_Source tiles&
_Dest ms
tx = tilespot(tn, 1): ty = tilespot(tn, 2)
For px = 0 To 16
For py = 0 To 15
kc = Point(tx + px, ty + py)
If kc <> Kblack Then
PSet (xx + px, yy + py), ktc
End If
Next py
Next px
_Source dmap
End Sub
Function getwalltile
wt = Int(1 + Rnd * 8)
Select Case wt
Case 1, 2, 3
wt = 8
Case 4, 5
wt = 15
Case 6
wt = 14
Case 7
wt = 11
Case 8
wt = 12
End Select
getwalltile = wt
End Function
Here's the tile set and loading function "DTDtiles.bi"
Code: (Select All) 'DeathTestDungeon Tileset
'Tiles are original and modifed versions of a monochrome tileset Distributed for use
'for private and commercial projects with no licensing or credit required
'
'The data and function are made possible due to DAV's BASIMAGE progam available here:
'https://qb64phoenix.com/forum/showthread.php?tid=217
'
Function Loadtileset1& 'smallrogue01.png
v& = _NewImage(768, 176, 32)
Dim m As _MEM: m = _MemImage(v&)
A$ = ""
A$ = A$ + "haIkJ]][[S\Klloo7WT7B##`0hd7BFG8KebNe?#HKY^hUR5Yd<[mojOm_n_o"
A$ = A$ + "GGkJGkHfoeoioao?;jJIGodine^fe^fe^fe^fW6kkWTM>e[gm\C5cMP_S_I^"
A$ = A$ + "OekJFMVXkYL]e[oInFM=VhWQ35oZL=R?Ih_XLBQoHiEE\Ee#UaXQ^ho>`Gig"
A$ = A$ + "Wf#egC4KE^oG9nXlhdeMFnlFd^O;e?kikbYM`_FOW87^F?>OmCF\MNndDmKg"
A$ = A$ + "mNIW?JV5Q]bG8>3M_Xm7[eLdg[foDMn\[5aeIa?[_DiGgN=bW>l7;N6OVM=F"
A$ = A$ + "N6Uo<f_6NeM3oJhEl1J>RQgIb=gJd9g[nNfmgMlI_oTiQK_KRJgU_f9W\KKb"
A$ = A$ + "mG<HDh[9f9<eiWdGCROmL<e`g\NM7mV:]IVV7iOE=OfLDF>DeG[fQWES\WAQ"
A$ = A$ + "o?acB?Qf;ZO5aWknIIW^nIiX>?olG4O5?Qfo<=NU[]NO6[:WMhcEoei\\lgd"
A$ = A$ + "Fenj>ejCcOCT7?mc<LlKWiOF>#Aka>kUmLM7KGJPYhe>hcfem4J;7lIkFIiT"
A$ = A$ + "_UNjCkg?m=k<H46Vn33NVN\[VZBc?AL[l=kk#4e[[hIdgG[]\lP]7bXQbf1W"
A$ = A$ + "acXm_Mh?fJVEKZN=WIgMdoWBoYVSImnZHW=[Rbm<mKE^P^Vj^1TnfA?X>?FM"
A$ = A$ + "FgkeeRlM6?hT78<CaOCc3IJ^Mcm:HHWkRfmYT;IgKZmGMZ1ehc`_<ledhIgo"
A$ = A$ + "YT3MdU>i?ZoRdb^i[j<c>mO6oc>oin<XXi05=W3nYi]MM^M_obik<lOfmc`c"
A$ = A$ + "h_Zm;IJf:l^l7K=_C]Yk>^MZOjP_:?I^>K>TYOHV=S`S^?;6Vl>RW#jCVjRA"
A$ = A$ + "cDMFgkQ>;CnaNMWI54?fYfV`HdM\m?d\c4e3cl?:OVBo=en3gjO7jW9c?WLc"
A$ = A$ + "MoJD_G=gGkU>hEROWNiCXGjFoAc78NJmJIck?EoTM?nCe[Hf1cNmMgoE[GE>"
A$ = A$ + ":COmdeKG>:ki4XiXZWaTYKk<?5i;fW1ZPOmn:h[Z]<^XR[HNnM5obLF4ga6O"
A$ = A$ + "6L\lkDc`IiNfiZZ1F=ZBnUa3IgC=7H`ZdoWfZd9EcVEcE\ggYVHVoEiaCVoA"
A$ = A$ + "iNdiI^?cggQ6J:MXcmbjE^c<M`kD3I?_H7ljCfoINFRcNeZiW>k^HgU\cnSJ"
A$ = A$ + "m7QWAWUEk\kBk`oCR_k<#F=Q^NT_A?GJ7J8Do[RGcdC:j?D<ER?c>2DnklKf"
A$ = A$ + "N>BobXeZ^O7]<Z7`6Od<8:OHl3CMYL?fI2Wi:ELIe_[ON23]o:k<ZmW<MRKn"
A$ = A$ + "RdIXMA[W[2GdIIeJXhGYGHj1XiEE]hDc>>hAm;5OhX_j6o>kgj`i?]OIZYE]"
A$ = A$ + "YB^6e;E`F=g6=o`RW]NE^GTOIgc>A>YFoEk_Dio9`SjEIORdLEG?COk`O\e0"
A$ = A$ + "kIIW;DV_b>?:7ER?Z6HcOUHPha:mD5N474=KRl?;6dNP<OEaEEj4UNFENjN?"
A$ = A$ + "dL#el13OY<GPd6:aG=GIeO8MA67Fa9:j?G>>23k\MF=`X_[d`El13GE=S`f3"
A$ = A$ + "#c[\cOOcFEM[^S\kL[Z>?ki=[o>;GZN>Cf<aKdbbGfWMh^SUI7YB_[BKbX?D"
A$ = A$ + "gc`DK?MoWU;WJoOflbDaLgl4Z6DWa[f1bXIEdC\iX2NDo=3?BgS^>bRR3:?I"
A$ = A$ + "`_j;V[aVo8NRYGWQ?SKIaF=;`<;GU?El5S>GIVP5o>fm<E^FeS#m?VNDVOM<"
A$ = A$ + "F=JdW_]io>eOF]i<oYd?WDC>Il[j3:HcjMMWaDbi<]YCNkD7?A_?KFHRL`E7"
A$ = A$ + "P`G]oi4LXROHfORfma^o5mm?c?TNWUWIW5b>OEnQhc>l7KmSVADWQLW;HZo<"
A$ = A$ + "nS1?kL<kmZboXlSYFb`QZ[8l<nW53JG#V_ZjeEcOXiLUIg9^7cllTc5AW;3_"
A$ = A$ + "b\6[Y`]EiT;n<>gIWUZ?DgOaZGDRoZ?ZZ_ehkX7bb1G]JE?I2Mi^a[\g5ic<"
A$ = A$ + "lMdH:aDmJCP_[]F[C63VMXMjmXccXMVXNIlAWW7ad_Hfk]b3XI_Z_cdkb^O4"
A$ = A$ + "NGNGI7odlg4j6FMKDmYV?<mOVLH7j?gO[>oEYOI[QMP7YW[`[dg[V?Hn>S^B"
A$ = A$ + "inIiCd_EejM>GdeWLfW]nH__Zf;[7EQO7e^Sij7G^CIn]bo<Wa]o5a7^Ja^c"
A$ = A$ + "L^hSh17LMi15\ZJcY_OGCIo0;_k`U[iQBm6=W4mkYi^?i56^;KfWQ[fEnkf_"
A$ = A$ + "LcY:>8[7n4ma>LDE^FE3XjCmgZmEDnZTOMa[TS[J7D\cfa=5NGmoZ?IR[Clc"
A$ = A$ + "bOeJ8k\:l7bWXm3MbCfcbV[CHXjCinCb;:nTEo^ShgAo=ancZNDD]_;>HRhQ"
A$ = A$ + "Z]M5ODOPY?5eWAkNNB]7B3fI7jDj6WNDF^5e7fInaTCk<NX[[\o9R;Ie>[W_"
A$ = A$ + "B3EQ5M]\h`nm?[CVlV1?C^FMFWh`bIXJ4eKcb;5]:Co[J_c^aGUW:jW\HW=C"
A$ = A$ + "RbmZl4YADaPfaTi;5=0cNT\jWAGiNOghgenVS?;FVN#To#j<F^9jLMgOX`3M"
A$ = A$ + "in\l?RORfiT=o>EmWeWDd]W0O4gVmK5Om4c]Me?CPOWe5keV>gLmEe^15l<k"
A$ = A$ + "mNbJEIWgWG_j<AgCiJIaQmkAe6KNDa=<eZ:oUmY2WYdKHhk<n0YSZhKVJW]O"
A$ = A$ + "adoH_GEnc4kXJJBlIk<D`h6O7KbmG<j`M5g[=7oS`g]gb<?kFWEc4<e#GNgM"
A$ = A$ + "nKZj_:WjFC?1N6Madlde^fe^fe^fe^fe^fe^fe^fe^fe^fe^fe^fe^fgTei_"
A$ = A$ + "oAgof9CogNai_kSjOkY9oKVo=ogNJRofO[L#G^XCoo9j5C[eklg7nJ?_EYcW"
A$ = A$ + "J6`9W^jVcY7>ion;>IMSnn_ZaDk\ok[j_<?>E?h_^MZgoOjMG:nbiMoLog]g"
A$ = A$ + "CGo>L_C^k`k<iMgok9kFkklIY[n]jm0gIOOBOn=IMOok9NoMfW]_[h?5?j>k"
A$ = A$ + "<m\ggZFmcnUC_C5_:?5]GN:l\_3kC]7ViNIiSceEnndhGc_WhiN_=k]F[?MN"
A$ = A$ + "=aNGgLNBMgD?3b1SkLddcM^aEM?ojNLWWO5iS9eb?E?DAkEaEXW;ZF7IHbnN"
A$ = A$ + "WWSl]I>?k?Z7EeoZN^_;n^i?[fAInGmnIj>Um?ZiCG=aTj^XJ^jJAlBGl^lj"
A$ = A$ + "Dhga>h>m1ekilm9ZoYh_^cgOkVK]Qd;EklEeV\jg^c9MlaTHEl1COPAO[V3C"
A$ = A$ + "_g:jl:moEnHB]C7^#Y^SR7KM`hgW^7R`Z\[Pa7MbmeHlfgiGYADd?M^GWhGe"
A$ = A$ + "SDg3iL_Yd?[eIfN<4FV?MZ3G]eCYOSd:X[=9Nel5mKfhe=nC`o[imJLZda8<"
A$ = A$ + "EOo]HZlo^cU9VOIad]OPVcVXN#HAk5N:n_K]jRWI_8bO^m;fn]C]X\c8ZnG_"
A$ = A$ + "^C]gE?Ydk[Z9fN1Z^jfoDj5^jXeJQQ3HeF<J7F=fdmnZjR9gcd\XLWEO`f[E"
A$ = A$ + "dOMSOGnS]gZT3Em0T^\J6`IoYSV];n^Fd\o^`cdOZd1IkXch#FmAegW\OT]K"
A$ = A$ + "=[^#jEU_cdcHkUM`_Nmej\[NT]?dIo3ZVD[Ofio<M3c\P2_hl<2Wh>MnfY>E"
A$ = A$ + "iOfnPJ\[b1F\^l?[f7eoAjoMD3\mNFo`f7LWMLi0FMGE>D=7S^GWN`:OEamA"
A$ = A$ + "O?cG:g[;fCSORnf4L7BKaF3>cnMbQek7miDkDD\W8NEkkAGKBl\e;2?Bk`4o"
A$ = A$ + ":Mgdj0FM?;ok>7a\[eI7Qj^_\I`M>CT5SXLHGL0CoTIVPM6E=GDbi<l\eQJm"
A$ = A$ + "Gac\e[K\AkIHWmLVIE`bhS\NYR6`A3abK:jGE]NTNa9NZmOd\3c<L7n[:ODj"
A$ = A$ + "Qk\7XRoJ?[mYfCiN[WSM7adi`jmSnDE;kZmSb[OIKMgU:_Z\kS1ODNhn<QWT"
A$ = A$ + "oD]:]6cggE=di<^HRZA6]#U_DddIi]ZVSmIlCbM>j#GOd9nMcOE<EggUkjbk"
A$ = A$ + "8O`DC<Jf^Jg>LPJLIW1EcMfnO6^eIgYV5#hDd]<lbTLMgNje`mMUk]fG#kfH"
A$ = A$ + "j]>co[iIfNP9fQZ`YMeZ?UFWMW5Z7kRO7eRC_;CWh\7S]^Sh]:>MGjRXWiDm"
A$ = A$ + "mWZWaf7AWS5?C_EA3inLc\MH^LXKo#Ek`T?Md0>L`4J#E<:iCgJGAGRdK^a>"
A$ = A$ + "KoTSncE[V]odeW\nA]oG]K:S?MWUWRGGke:nQmnEjV\_o;HEl:3Wg5?[og=n"
A$ = A$ + "9f16YK#L#dlHeeIkYMeY?m\NEOXZV#LL5NENZZo6Uo>jSZJ6QGikAa4]oOUS"
A$ = A$ + "k6o8]fC_g=[f[jSMVC#kADfkDYeEc=6>XJn[K^7e;jd3Eh3D=DUCXlUYNj4g"
A$ = A$ + "ZN5S_jDkIJ?5mGE>[6cYfAX4o:^_K\IeFMe0Ea5Q1a58=AdecbE5>e]7\V7C"
A$ = A$ + "XWNk6BSQ^GF?<kN_5lCcOXIa<\C\3^knk:o\C\\k[bl7RS[`cdOb>?C^SbQX"
A$ = A$ + "hc^7EEkDi_^hMnND?Rmk<cRZGgI6<kgIOZD7M<5==SF`Aog9^>eKe<7R;Ljm"
A$ = A$ + "CPUa?^m[W>oMe0Mi\8Mi4c?MlW;7T5KWNGWI[9VQAeD5OU=;Ga5EjS9ZeYeH"
A$ = A$ + "C[CIf=k`C<m=ghGY?Id^Ma?E_^JNkckE5[>kPWJ7nJ^Rbm9`F]_:RKAhAmV^"
A$ = A$ + "mi<=>Z?`<S4=ca4_MY[ImWZUeSHonThAk>Zh^8oGYoIinYk[<n[Z7QVmDfaX"
A$ = A$ + "4gMX5Mag9f^eTC=_3^caGC4OE\Cc[:Wge7XWAlDJP^eoTJWEn`9oE?Ge^NWM"
A$ = A$ + "hZiJV6Z:VEj6F=EE_2e7[jg\JQ>aO2l8NE]7VEg:LXj\Dgk7YebnL7Hch_8^"
A$ = A$ + "5Q7eKjfWAk9#J0fccX3bl=cgcd]EmTE>NZloDhEmCWI;6MF6ocPQI^CA[cTg"
A$ = A$ + "8^IbHYj7fngKcV>GOjj^Cnkf_f1Waj_^a>2_blo>jo>eDgi]XWgdaGMdP>L7"
A$ = A$ + "J?i^`NJl\?Gm]VoMd?Ic]EJGGmEFlFoND\ISIfk?Xn^;ZHEh?EMPbNLEM2C^"
A$ = A$ + "_cgmH]7[lm<=C6VYNNdKfLkMCekMe_XhhT7?MOn4aL7iBgjXck>MjJO:^kTJ"
A$ = A$ + "QgD>L2=`KZn?e<henKJI_ocYc[OE;km>cn_Q9jmGAm:6l\mI4Ndk0b6oZ_SR"
A$ = A$ + "?kg[h6fgo_KlIZgX_?=ngREYMN2lILje^fe^fe^fe^fe^fe^fe^fe^fe^fe^"
A$ = A$ + "fe^F7;k_Ub^abhc?olJo66j_I7j_WbYakF_CWoWRoIm7kioW[]n9Ko[;nE<?"
A$ = A$ + "=nCWo:GK7h?5o_N^8nO7c_^cYXjOGfdn_;oMaoMSgEOlFboMQ_kl9[oR>gTm"
A$ = A$ + "[9fAmYOH^?kW<n4M?Vj<kkALFd_c>gDFWIG7=nTingRmDk?Lb[Y`TU3EiFGm"
A$ = A$ + "`4k;IWIIkOM`[b;C6o9eeMdoWPoShR8Oa`o:c_MiiZj_cLEe\jTn^;omf`cF"
A$ = A$ + "KXc<emcbWM>oFY9IeoZl?;Vg:NUnX3gYNfe_[^O0a9EkEDZk<\X?[bKDo;Ro"
A$ = A$ + "DhbenOeIRndEGDaO^HbV]IhK6>7YO>=NWIaXhcPA9oMVOHSKF?]:^IgGYGDQ"
A$ = A$ + "Y3OOBS]_ifOER?:F:ao]acCgcNJlkZoo6\XM;AOF]3YRG#LWjc3HbOeh7]S="
A$ = A$ + "Kg\2n>k^IgMb^cFMgQZOE\_9lZcB<JBelGMFFYn[nlY\ehUYcIWMH?CDO:[7"
A$ = A$ + "^3^YJOAFOSEoVe?ofVoLV7#a[BK4mKglOgmoE\<lQj<2[n?c7IcAIg3EkAJi"
A$ = A$ + ">l7SfQA?iTo8><coXL5a?\mMVlKRmG:j7Vl1=_=UadoEhCDN[f_Hco<=V[n;"
A$ = A$ + ":?IdO:j8Vl[:?IjI:gGQOI`c`[>L_RVdUODkO_=lMVeZR7cIE`G]SX[oDSYb"
A$ = A$ + "W8O4e;R`We_Hn^b^ZM`MZm\8>Pm\[HV\6NC6BW[<oGM66nWMnW]WPjo:L3bW"
A$ = A$ + "EO?:nXJ0=oe1OGn;kLAgO7i?b7EkPHf?D=GX^C3ao>kRDh?GlInRY>IfoRZM"
A$ = A$ + "FnDEohFO8mGdeEdO<n\ZNbZ1Vi?VIX\lgmnIW=k<Il?ZgX>oGUG<j<6n=knX"
A$ = A$ + "?Aal9ROU6UM6VUo#WG]GQVW[V1EZ3UI[>mOTo[df>Oo=H8m2JnFASGaO\kWb"
A$ = A$ + "^_;oWE;<e<BgSha:L8c5?JfAIV<ZoP`Wao<jU:N7E3:eW3n>i?RODhGekUYc"
A$ = A$ + "IiEF^0Y3kJ^jOWhTYoL`SZWZNdKdZdIMkMEk`Hh;d>#gj8:>XNJEmkLOdWEi"
A$ = A$ + "6:^:i?C_UEk7Q;Jncic<l8Mmda_ZOi^gB5?kLRC>X<O`Z[Wf#l_K^[Ze[^^["
A$ = A$ + "F0Uc<n_J6<KF=[N#jTZM>\gWmkAe2ZocR1I<lg>`GUoZc9:jL6M0kgcR7S>_"
A$ = A$ + ":oEVC#LbgBncL>Vi?6mE6NF]3R;L`khS>joMHMW;Ie?Am?5N9K^7=CiXoDe_"
A$ = A$ + ":LMel7Jo6Cn[`oAaWmkXhWEKEhAgCMoc9V_V8f^HkFo_1nkY]Zm5EOR`c`W:"
A$ = A$ + "cL<hSRIfiDh65mBVF^ROZ``^SH]>E^OFlAGW]GkPYR7VDk[\3^:oEWcZhIDn"
A$ = A$ + "Rl9R[Ac?:m?5l?AnGam\h[bCdl53_XZ_HZ;5=DFMa\gA9oDecCMn\l6Yobjc"
A$ = A$ + "8^\B3b\oJmJ\l=CMjXoRbc:l^m_:]53oQboZ[UacIi2KlcVcLWoId?Zj]MIM"
A$ = A$ + "e7Ma=AmOBnc]N[d]>HMV9ZfGQ`clm\i74f\cQh46^TMoR:oPfWDaOEkgZZo\"
A$ = A$ + "kQh\\LUmJ<aNgcQXh`foHe:\j;FmIV?I>;C=`Tc\hEl?:^\jOfl_b#Hbdc\i"
A$ = A$ + "7BO]ciPZM]<LPBLLdOIhAWCIogY\^iCU6<CCFQWQ;cbOT^A9n\J`Zn<C__Bk"
A$ = A$ + "cFoCLOVL7YENZm5<JIUij:>a9n^eoYi_>eKG>ObL0]CJjN>c\^BoTU7AjU:^"
A$ = A$ + "PYoQh_\JGmn>OOJ]3RgH>WkmERKDocYVW0?bW:kSAcVIOWMf>S_Ii1eIBF^Z"
A$ = A$ + "CncL^ZmB:k7Hd_<L8So[b[>jGfi:FlAlH5OEi?VckPWMo9K?PIo6S_V4?bOZ"
A$ = A$ + "W_Cnc`[Ij6fNbdgGU;Le?kfn\FLgAPVC#HL[og0omdfJoRmc8OhLo8mOF_`E"
A$ = A$ + "G<1_PZ=fio<OFacZl7cnUXkWigZ[[DOIa?[OSRS3^9l;ciHgU<1n<]IeLHVn"
A$ = A$ + "#1;c<;JnU5;klCE?MGi?R3Ij=IWG9oImmTl_CmaT?CE_AiIDo;ZGZVoXik\l"
A$ = A$ + "O:mWknS;n_GlIJkE=CgiDUI[XjS=nEi_b\]JmOJnKWm3D=P>;b7IL737^NV<"
A$ = A$ + "OTY_F?Kd_c>G6?`bKEeLeL;CLDhn:nQQoRj5<G7e[AJ2VkOJ3EO\l4[nc5O7"
A$ = A$ + "m7[6V97?E?Rm<CWoEkNbdk<cWELoKSoMh[ZO[doZh>5oO][m=K\k?fMlSbQX"
A$ = A$ + "c`F7^hD[oCcOCek[^nCeoc^Fek]X4W8=Ef>oX?Ie1<L7kk>EmnG\iI5oQNO3"
A$ = A$ + "Vg7AmkAn_ZnZf9Dig>G[kIch9Tn=c_\jO5lMVEWHn;C3D=K<9NdN05mKWl_;"
A$ = A$ + "oaRm]aoCXOZdd:cUXj8cOEjZ^jW\H?1Nfn`mngk[<WZJC5Ogm;OklG7N?jc9"
A$ = A$ + "l1jc8lEF6FdcIHfoVUWE?7H=okDk>lM5n\WoDY=c>GemIhi:nOR[EU[AmJU["
A$ = A$ + "=aIAjU:N:kJCQW9OHWOjPWIVUQWEa?Em?Ang=nEhIe_?=o7e?#kn#hG_?;NF"
A$ = A$ + "n6]KT]oX`OAO>1Nfn`mnofg?C;5=c^;KZh?5>EoLJnk46J73Jg3BcR^Nenk\"
A$ = A$ + "MQEkWc^>Z?jFo<jV:MdO=mfe^fe^fe^fe^fe^fe^fe^fe^fe^fe^fe^fel\^"
A$ = A$ + "oM4#hInkDVmgjh=ToM`klgAl=UoGlk3_j\R3ngPn3icKl_ao6oc5O7kOliWO"
A$ = A$ + "^V3Xla1k^laDHGmQ2?ZPS9oIe;^j^_AK]>IhRM<oniib`c6Gf[_3]#7n3QM2"
A$ = A$ + "]\J_k]QGEkl4aoRO6lMeo\cNMVOVX6>il;b7gjoFooe[o8oDUkIih:fZle1k"
A$ = A$ + "jiMmATOLaFICeoLcoZNWZ>=C?iXOcdX<G;C3aFCAjKgI0DmG=3dQoHkY\mB7"
A$ = A$ + "mWBnSf5DakXlY;omfa[RK:o\khOjlo=P?J7CTf1]71]cQI?TbmD`k6SXJc=o"
A$ = A$ + "_eo]nc>c>fmPV7Eag=oIfO\6;UnV2oe1KdiMlAWh7Q]jkMWOV>ocj_:J^\n#"
A$ = A$ + "EoYJ^D1CE\I^?C^b>o<QnIRnODoS1kCQWE;EY?LS?ZFbd?CPgIGZ;o[VoIjn"
A$ = A$ + "Xk=]nYJ^;kn8OUmKF\^k_kR7YMEf57am:hEg1`PORhg1OEmdMo[jN9ghg1?C"
A$ = A$ + "m[^cE1?KoWiJ^a_Zn[<Vj7Q7Eo<a_3NVnYJmWUO<k?jPM=GMmAV6b1[[nYJ>"
A$ = A$ + "aM6TUo#e1BgeYnG_NeN9ec`P[B;YXoI[OG>TAoeEo>ElAhEgOU=Sda78lEo^"
A$ = A$ + "3NFnKGhO2mWk^_WXo]Cm_cn?eHgAkShS>j65lMRoCUo:gC5?CnWM?fjOWioO"
A$ = A$ + "Qjo_Xn_:F<kMFo=cn_>HG?_[?blW;fZ_?Ml[fa[^o?[?Sbmej\Z6Rb7ej?kg"
A$ = A$ + "8]#ElDboZiJ4nYcOVLR]gcXOLd`:j9Unn>lA6o_ClkXoQdJCfoEgoLJm7K?3"
A$ = A$ + "e;cRYbmDjM\j?5]F4f\mN\i>2OWh?AnS`[N?ElMR?Cm_cho[GoE6CmcP_ClI"
A$ = A$ + "g1i4OTO#WGU_EaFMFghkZEVRkHdiMN^QJ]hdkEcaZL:b?XcTaI<LIgh7Y?EW"
A$ = A$ + "oFcCdlOE?;;o#mBWILgk7EoCYaHeP_9l:kHkdoZboYk_AJBVWkhN?GnCI?7S"
A$ = A$ + "?LbAVIG6mS;nXn3jgM`SZQ\OGU7\hISo^W?L`[DoIhAa?S7MW?bf5hPWYnAh"
A$ = A$ + "[ROTODZOFl^a7Eo<hcR_ZNY:nZc8\HIkO>aGAO_3^3eobbOT^:CO`b=\gORI"
A$ = A$ + "W<oDMf^hSh>dLCEoU=oV2_J_5YoI<4NVn`4H[>Ke<4C]Gig9a?al3[_NjnO7"
A$ = A$ + "MPK\EmSjmRbS:>>B;DQ=SKHjc>hWXoYLOVIX<l\jgM5oo:eo>W1k4OfjOGa_"
A$ = A$ + "ZnImCFlI`GEoMROT>Cmn[i#fgSl12kJ>c`1\a_RSZheZi[:^3YOcZEVHDY1#"
A$ = A$ + "HHaSd>8nK2na]gSVm#e?J6\B[Y<Ke1_3og]o7QGig<W]BKPd38Nk9`kh3Vj5"
A$ = A$ + "YGMjOEc<\mOEm3klGFmGQ]b7CnKghcP=C7iPWE3aPEa7IjoW2OWLoFogjoG]"
A$ = A$ + "noL?Bd>U\kch[:ocRU1_kmGi56\[WY;gQhCecZXKblOFnSb76MG66DnWE?:i"
A$ = A$ + "IF^\FgAi0b7CdoAlg>joMSO6nZk[RUYgGe;ElOe>X>hcZS>l_bn:Via9ko:h"
A$ = A$ + "cjM8=#Uo#JV<mXZnE]n[lMUFRYgYR7aM8<AiSKmO2lgjoFogj_ocPnl<:hI`"
A$ = A$ + "6QIjhgQoj`MCamEHS>S2o5MV<\EFEmDEG<W]J60Mf\?[^g>koIa?3OFmTU_I"
A$ = A$ + "m5DnWeWAJ7gHS`bd_HVOD`k6OVi?7ngYOGYoDWORb[:]_ZnQ]nIcoZiEF]J5"
A$ = A$ + "NVl?SC#k>j<kFaG\J6VN?;7nF`O[oKmO[ONodQob`g1kDa_K]kR_kcObZoYN"
A$ = A$ + "F9jLMa_VKE?33Uo<hIR_bmF_>ZgXdkDWEZf;`dKHZOTnW]nL`b^gYJF8;G#W"
A$ = A$ + "Y;n<^_RGI>GElcVGAm?dlc>`GYK[bo9Vo?ImcRUEKS`GY]bd>EcWEnA=7>9N"
A$ = A$ + "VjFI6EUg>=n\n_CmWQgYomDhIWOEiO7mk9`oiIFa4mKGlXMJXHg=ocROfmAH"
A$ = A$ + "kR_J^;C7[f[Hn=RWc>GfeZj;Xn?ZgVamIl8SNR=oAj_ZhWQG=oEW5#W?3[S?"
A$ = A$ + "H`c`3:e2B3cdgLbG7l8^d9oAjKVHFYAAkojZOj6oYco8[2Cgjo9eR<i#gj7Q"
A$ = A$ + "Gii<ghOSo=n?Glc^oKJ782g9R_;noiN[OZNV^a_ci#JEE]<K>]jO4nZh[VGC"
A$ = A$ + "ZOjZ_jbOMcOEl:m0UJa]gbXOW2o>fmf=oOjn?C]Tmk_Qlg1Od^mZ[iRo=DoC"
A$ = A$ + "nl[Kl_ao6oiS_kNT>hW4kC7o_IlCMV_MCM^Ti\\hDj_GkJGkJGkJGkJGkJGk"
A$ = A$ + "JGkJGkJGkJGkJGkJGkJkfVh_;AGOd1ogNn_[niWoK_i=UOo5<eoM?]3OXP?k"
A$ = A$ + "Og1O;h?=oe]?_kHLRHm6bo_mjmJjVcon=ne`oYibQ^nhdaodh?Mm[P=j<Za>"
A$ = A$ + "kOgJ<n8kLZhoFcoYjQEHclA4^e?_og?hIoeOoOUiW>hAen4kPW:f<cKC[3?A"
A$ = A$ + "\N3ioC>kPbe_=l_QL#5?ccNIf3m]S_jIo\_7QS?>IlcN_5eLPimOHZOE\CkS"
A$ = A$ + "\J7YkL`[boEi[C>l]WoMkQ\j2fJ_Cn[XcNchGi2Ene]_?Y?jXoOBlIkVObjO"
A$ = A$ + "B3]3YJWNgIHUNDT6g=FIGCi\8lZLE7MCU^TQGbNV`K6oK87LaSVe#k2nfa7Y"
A$ = A$ + "K[fg`ZmElaYROf>2WL8J7CdeV6kdnPEc\637lXIG5M[;N6=QBn[h35MYB\Ek"
A$ = A$ + "Q^hIeEZlWjINChIn>:>:c>k`7:hIV1E`G]oZ:?SlWbNKGlEecDc7[n;RSEgC"
A$ = A$ + "4iCFm#WjZJVPIgC47`PGIOXk\Sj^g:<:kP?9ng#>hR7YE#cIOkhIf5`dkkjS"
A$ = A$ + "^HMmAVN#97#m3ViW^HW<nZeNTVcYg?Q6dYoG=WX`MMlA7lMVon<^CYoSZSXI"
A$ = A$ + "=enkgdmAo6i7WIoYlA7moDhGi<Tf[3nekYPo9ho:^:kgAhcZEFlEaB1?K>];"
A$ = A$ + "l:o6M6eICfIU:SA[mDhO3i#7l>HoU`SdnXk]jCGOhP=2W[?jPoK^nWZo?E\M"
A$ = A$ + "mA7>lK>oWXo_;lAkZZlmJ_Hmkobh?]n[K><YnGmiFM`7YAMR_;oa6o\c_jg:"
A$ = A$ + "lIHESoTiOfL2K=hP?;oclCdmV^n[fGDY1?=ng#>d1?2k_>nZME:W[BGh475\"
A$ = A$ + "MmA7>hK_nchR8M62W;n9lA7lo2io4eo4l7c>8TN^jk\JfMRWY?`Lm:OX\_>:"
A$ = A$ + "oHmAEnZV3CPoYWOZ>CWM0IeOF>PVU#eP;n\JLWh[ViDl[;nMUo^hcbAFnO7h"
A$ = A$ + "WBom4i#7l8\ojhSV5Rd[IHbdg\nH=7Ea>IlMi0FlELnYZOVjAil>hW`7M`cR"
A$ = A$ + "UE3hhSW2?C^?5NEMW;fXJOGhImGWJO]?c`oE?7Xb7AiZK>d]6>1nZN\BlGaU"
A$ = A$ + "QWMF;;foE`oDgGMf9jlM`_3CAcRla4iag6NUWmm[QOmi1<jEdc?[lAfldC5o"
A$ = A$ + "W2ojeEZo<\C4o8oTQUEgiPOmLZnX;N5\Em0GOldhcd?CQWI>QY7hPKGhMh?5"
A$ = A$ + "nI5Gd_M``>cg=7nFaW]oD9nAmNfIXXH5QM7hSb_MQ?cO?5ng8o?QE5[X[cj_"
A$ = A$ + "^id4eeDlRK]kT3OSh[VQ#JRXcXhSeMSW<nk6OD?Q]ncjWMSOgJ7]36eoFahZ"
A$ = A$ + "1L`[ToEcDMmaCQWY7<A?\bZ`7U;ILn_6n\NQkIEmaK7OU6Z3Nd>5VhgY7b\C"
A$ = A$ + "2UWMaWEW<L5;NFMj^`GUo<lg^`ga#mGWMHMca:n#e?^HAiDF<DVKDk9<e2[V"
A$ = A$ + "_SVP9VEiO57ZjS>HWb7?5ne?kRMJO\n93^ZcbRO2Od1?3FVm\MlaCPG]g_J\"
A$ = A$ + "hSlA5gUi?fco[P7]OS9V^nX;n9Z1diDgS`P?BO_Sh[boIcOXHjRW1KE]Q`c^"
A$ = A$ + "oHGhEj]:aN:l^FTF^jgMVoLcY\kYjCfMPZa]C?2YIAcO\Jf:Oe9nAjg<>QIf"
A$ = A$ + "aa7Am=WhkjSY`SZo<O`DoCTo\kaZfQ`<gYRO2Od1?;FdLL7OlDhI<Wm78OXR"
A$ = A$ + "=CKo6ac<?SlGFoUI^MUWkhSg:nX?W2?3oQROgNHVoEdO^hIdo<i?Sng=n?An"
A$ = A$ + "GaO>m1El_5[;oo?h#?WJ2oQ>WccOf9_6U?Xm3XWm_NVYbAfWOG]?EmM0jPee"
A$ = A$ + "7McO5l<LY;f>nHESi6OGlAc\>io>iOfIP^c#k4OenU<]`je#hSbQZcN]ncOW"
A$ = A$ + "NnIghG_nThSn]JlMkQ<ebmno^go]J<?cQe?CDk\i3knbO5CM7UJoRQ7EgY=M"
A$ = A$ + "lkjS^iogNm?IlMagMWiDkLoFco>hgQn?kmO^fNdOCjS_=mk4h?9oQVC^gogn"
A$ = A$ + "nojFgJW5?J7`_Z=acJIe_ElNGOhR][?jVoOkeoe^fe^fe^fe^fKb^_cbe^fe"
A$ = A$ + "^fcICno;Qk^koVf]gO][mlFdo_PEW3_k__fenkJkLgQbO33Fl[G[b7\ecDom"
A$ = A$ + ":WlmWElGWH[fcf1n?co^J`>mPgDoO:KW?CO7m_WTo#k>HfOYFoEaBi_kKfeL"
A$ = A$ + "fKXbQIhRfQ]Sh_[n_B?GQ7fEmg1OfIkbSkVoWf>I\O3ioKJok9doW<ooViO6"
A$ = A$ + "\EnR=fE??YK>l6d_OjW\[55?DnSb7D_Q=gMa_;mWROL`]f[b`[h[M]o`97fY"
A$ = A$ + "n?SSZh_ZJZ3oc^kHRMHEnCa7^cc>c?EhHacD;kH7`^ZO6]gjIVVoIjg<clMl"
A$ = A$ + "?Z>jbm:mAG;:>k>Vk\6Lh]CPWI6JmLIJc^cN\G_:7D_gYio:ND=g[`Rl7C\S"
A$ = A$ + "V?cRAF>`Z7Mfi\Kn?R?ZR[bL#Gmk4jOGS]nIdNIlO5f^k_DV1jXoDen>c0^m"
A$ = A$ + "?6nKgiQB^^;OYX1#cL:m`WHnW9OI_>C=kPE=n\ef>hoYfo_^S`IgA6Oh^ci9"
A$ = A$ + "g5MRHbV;CD7:m<Wm_^hc>Cee#k<E^W2NG>da7>a_CoO2l<HAm06lAkZHm1ZN"
A$ = A$ + "VPobd_C`QInZklKf<PB=`<O];3]o6]k8R[ZVWALGfn[9VQjXoZVGHbOVi7Em"
A$ = A$ + "_Jlg5ocVkCFoEnWa7\i2Robjc>coEhIjQZg[[n;S_Hd>8MV;oi4OfJLmlEo6"
A$ = A$ + "MfZHD]C]R3Ea?5_dEkUEoM`>mnO7NPM_93n8mTJoWIWYj>\:=Vk^W>kPjXoj"
A$ = A$ + "JXniDJ1Gl[WAMoUZ>`IoJWig:l\cGIi_kN>UWOiR_SEaG\kOD<T^IZM0khi7"
A$ = A$ + "AlCgm_MeoC]ofEOZb_C[KMe0EhEk5:c=M`Wi[^a?3WcL7kmVHgj>`[`OXm3>"
A$ = A$ + "iAenS\cFe7[>kDmO6oiDkZJg9laCVoXMd>mOD^Qdn<JiZJX:W[lAEO#e7ZHW"
A$ = A$ + "0OT6HB\\J9dcebn=b7Eed4cO:J>7l<lGT6N2>Win<a#UgIj3IW1=76Q;jl:j"
A$ = A$ + "jZLIRIX^j?d<AegIgCkDc:OWUkDgOS`Z>;a4OWI>El:m=d<13NV[iRGYGZRA"
A$ = A$ + "mN\jCeiV>hMh_M^oJEGUMFDoSiI0Mh?T6jDkODebCll3WLgAoPZIfMbIkZRf"
A$ = A$ + "YEeWIe]ELPknc>jW\H[T3MVOHafMf=[oajSZhWYIIj3?5NVn#4NUn6:NZk4g"
A$ = A$ + "9nZlVMgAT6QIWB6_GiCeJeUCcdBAi?[VEIGTb^[9h_^g_[N]Cl?mldCco<c?"
A$ = A$ + "AcOk\oSfgQf5nDi7;oj`O:j<VnKdWIkND=fI0eIS>knDcID=h4OgnkYd_\mF"
A$ = A$ + "DOAIn>B3fAk_jOUkaf_E[?E=H7l:HIk_IHAmo^k?Zhm^eo>egMd=8OFQidhI"
A$ = A$ + "W9Ii_>Vk\GV?LR;S^HmL:jCVjFmnkRoHab>ceY6DjMXh?9n9jOZj7D=4i?eh"
A$ = A$ + "SlWR^[2_Kn]KnEQoHe7\c#EmGUkYb1Ei7kIjPCAgD57TNf9fEhkXoWHnic[Q"
A$ = A$ + "j]AW?jgIa\[>k]aOIhI^7RcI>K7\ZhW`7XcFYGHl9Sn[SnVE;ZXgEV;RbgCR"
A$ = A$ + "WiL<hVbHWIk63fhbV3M`gMoeCcOIL9[^R]WXL65o[^c4Q7]_2e;HacDkAk3H"
A$ = A$ + "fo>=n8^CI>X;oY<od]nAi3kLDF\AnJmnAHVH?4CM4=[<57Xbk:mO6m7BOcdo"
A$ = A$ + "AhAiLF\Dm?jgEa?[V#c>EhWHnMRiOe[=AoS5k>`g=oof`S<ElEjj<]CDmL:l"
A$ = A$ + "XI16<CJCfo#m\XjRAoa`O:ioJ_93_R_NJmOTFTMoc4lGU?HjiMaWeSHjOIe<"
A$ = A$ + "[n[KlGkMAhZjMMd_Ii;3G<elcTlWR>EY6j<kj<3iDOEj9fHd9oI]ZJSInKWh"
A$ = A$ + "Sl1j\Ah#G;KnSESQjeIgS1OD^Z637lCeoG[c:l:HW0?CoEe7XMGEmnW4_RnV"
A$ = A$ + "5?BKP>gYacFoZlX[mdaMRmOEgWmlIJl<]=COVYO?1oY47dl[3g[6Gd>E7l<?"
A$ = A$ + "OQY>AjW8OXZOHZc^koIS_CmRR_:o?1oEaK<lHgm^8N]:nIe\[fIRJWiN[g_:"
A$ = A$ + "?b>kdj7FMjDhSjAEJX:n]b78n3QUEoYTkk0_CoKRn;;FfIHeJ[S?HfOXFSk0"
A$ = A$ + "?[YP?ZgTYmZ`L:l<e_;?jHImGgnWj\#57jXMHWMDfOQlG7ncYg?ilg4J?em7"
A$ = A$ + "CR_C<MaGMnXOSR_bmbRO57jfoMjMWToF_VK][To8M3c>a^jOeJ_Z^AL1;?Ql"
A$ = A$ + "ADnGeCch#TnMJl^n_jnEmDVk[ZSW8nCRG]oa<;FQA1;BSk6kYm13G];l?M>4"
A$ = A$ + "YCbdNEj_CQo=ICXoj6OdN;d<8kN_:lIoF1[S?^V_^1eoDfUDekDN6WKlEe_^"
A$ = A$ + "a?ZfLdo\?on9jOAndA;Ee_Ec1eh5ekIi?V?IeM\j`^hkZo[hXW2o4koW8okb"
A$ = A$ + "oWRo>9ocR5=od]gge7Aj05LCPoDa>J7Wcc>>5ngPeMn=Zo=mn?gWQYTgZh[>"
A$ = A$ + "WZ?H_nDHOCnHJl>_o02OUoV8n<GCE3c6?gIWYa?9oY`QImKGlMN>VJ_occWm"
A$ = A$ + "YC?D9nCP_3_UaoCnl7eLnYROE?hYRoYaO]o^FgioCSoJGkJGkJGK:knLW[M]"
A$ = A$ + "[M][M][M][M][M][M]mHMnkObh_ZcTMNWo6VgooFoKK:o]QAWEiOS4CTcEgO"
A$ = A$ + "bofeMok#ORoniW>god?ZJQ^hO3fgLoo=ROgmo_=mEF^kF7CGo^_g1;FUg1B]"
A$ = A$ + ">kTkCf;o6a_jW_iMhMZm\g5OJOGaiIog0X4Sg`o=0WFgl;[OSZ]\j]B7T][M"
A$ = A$ + ":=?[?Id^<hI_>:OIRi>`[<of=gj6oYaO:SUKL__Rn[;ooTj_MdoEO__ZgQF]"
A$ = A$ + "_ndh[Nn>[_LaYZSVb7^cJZ?;gMF`1gZ>Ge7[eV2NfgEdEohPmc?Obg1[kc?c"
A$ = A$ + "`c^73Q[b?>aV=oEdbIncYGPZI5Od9fMf5iVcMSaj\CfLIdiH[o<MIWNFE^=="
A$ = A$ + "gbZELel>j>Wm6M`SfK<A_LZNc>io8=_RfK2nk4mogTnM:MTZng5kYaGMNFOi"
A$ = A$ + "RK7J84>fk]NOflQ9nkH60U_<imjWZmOT6XR?L`>Y?jJ\iX3>7MGF]c>7kP9B"
A$ = A$ + "oTeGDhdg`N4EOT=7YX=jZ5W#g?i^GEOdU3DhOUi7fHj`SXiWg<n^a^ZGhf_E"
A$ = A$ + "cUXcP`QR1cNdgRm=[oVD36mYbIMeL?=n:NReG^hDk1Xn#WlU1;jN:nPYWX\3"
A$ = A$ + "Lm<^n`1ODmjP_RSDV1OJ[KLIkMIL8jl:m1G<\mM6MHdIEda8OhdKDckXHcZe"
A$ = A$ + "MW3RROGm9Km?e>OWN<K_WU_S`af_blQZV_[NORiUMTk8Oad3HeO^Jb>clEhE"
A$ = A$ + "[3WIY9`o]ZoV8nALg^ONCFmn4hAkjHlU;>eN8c^G6<Ii;k^[<O^SmO\caIkk"
A$ = A$ + "DmaCS?2CWHkjS>k[Hd1<jFF]]S?Fe8EJ>6]EU?AjOFne]WDe;L`7Y?Id4ZkT"
A$ = A$ + "RdZ\e`Zn7eCIk9IcUkP[EiiZcEamMWeHd:ImbCXkEk1AikDi^blSS>XZOk<k"
A$ = A$ + "ZT3CQ_c\DGlWDo5iS>HMViRl1:WF_VC\?5Nd\6k>C7L:jGfJQ1;:Oc`RbQYm"
A$ = A$ + "QJ?8J7XCOlYac>gaZ1k4OfnDE=[XQEg?EEG[ibjgIdKEklHVWjZoEVUL`[XK"
A$ = A$ + "Mc15lEgGA35eCHcETOAi#gNEV?D`eA3a>SDYOIbGfHl]MOenl>b_Zn>K^EYI"
A$ = A$ + "f=n<=fj^0FlIkBNSjWgdmIfU`ZYEd<W4OTFCQ7W#S=ac#Hm5[>#17b7\mZ\I"
A$ = A$ + "F6^0QSYoL2l[lCWHg=nCZeHec<Jm:m4B_Vm9SOAW;Z_[>3E5GVnT2NgL_KmG"
A$ = A$ + "5OD_3aQZo6a9<e2b?ZmOUHU5gYhOWlPIFEI72cmj\KHZhGYIG_V;OiXoD_OW"
A$ = A$ + "ng>jo:JaY_Ogh?Qn]J^NJl\LA56DNPVQf1NWjGIObDHgUnOGi[Rn;jj<lOT6"
A$ = A$ + "V5W[?>5NTNF=f>n8klAJ25]K5f:MR[>EM6bIn2aeEaTeo\lBGl[iE6gDeoEd"
A$ = A$ + "1\L;ZGQdn:aWU;[VoDlAU6PQGVVoAi=J6V9?ZfoDYa#j?FNT5CF_1YoIaRjm"
A$ = A$ + ">eoDlWkmjRWU3I_?ZoSjQXIP>aW]nbdT:moXi?dl[cebh^^nhYac>7idc[jQ"
A$ = A$ + "?]ncY>ZfmTM]ZMNEm?Wk=Q?Zd<k4?ZoZN_>n8KoAF_<k<:cA>aP=7HVWjP?Z"
A$ = A$ + "_7e;#kS#LGeLD7lEcZ:jI5nZC^GeoIdSXi6WJPYVFcaY`?1o[FG>j0fHU=OR"
A$ = A$ + "`4aMIg_:V<c8Zj7D]`XOEacL?F=WcL<jjMh#6l:eOD?=;Wk4OFlM_?B?hd3#"
A$ = A$ + "L5Jf<K6SEK`R?KW3J6G=7Ika\LhdjoYcEd\C5WWmk<n7I<HAG3iSCRg1k>i`"
A$ = A$ + "X?cdOIj26m<K^cRQ9o[hLUN#D<IVOHd^ZhS`Pd>>j5Vn\KLAkFLbSM<cXV;E"
A$ = A$ + "ePZVNZn7RkDZIWc`67VI?7lM\Yh_Yc7eLPY6j\7P]oS`Sjo[W9jgEi>Cmi6O"
A$ = A$ + "fl7a]k#oSj1Ih[`UUk<kSD`7ag^a7=?i`gMh#Gm_SV#5;ROSlUb<FV?I[5EO"
A$ = A$ + "L:lElFVNVUkDmAVV;CG4icX_[>kGIIHRj3ELEdIAaTA?[Lo:^_Z6Ih>GlIjF"
A$ = A$ + "T^CE_QjiIHHbS\[YbO<e0KoWeGXI?6mS:ocXm[lE6G[\gQY>ZZMGlMdakRoL"
A$ = A$ + "jS:jbgTa>_g]ocbQZc\EJ<7m;BK\;m?cN9fMGEiNe<a^`S^6b?Em1UHV]CHb"
A$ = A$ + "n?K?A5;;GZFO8MVbnQ>nhdhG?KecAfQ?#JJWLa97Z<466oDQUIoY:g<EmgY_"
A$ = A$ + "[dkAJQXciRWYW[`1AkJDhMfjcI>BY7jf7V:^<nEYGj`MZioYaoFh?gi64nM\"
A$ = A$ + "k>c7Io^[Y^;cIn_KnMbi7G=[2FgmH>hShDWjX:^Mci9kOMf1Q`FQ[ROE[m>k"
A$ = A$ + "Pbb96O4]gi9`7mk>a6eGHkAMgii^3c1[KLn4;R7VnIA<ieCQO]nIVkW2OfIE"
A$ = A$ + "O>4C^XZQLNn?Km<9n^m_\cYf3ZfM=E>lFa?5om9?b6o<NgI?jg:ocPWI6BmN"
A$ = A$ + "OCe_S?LgOoieHePk0?;7hl>B\leKBoX`A^?7g=oMRkDnXRWf9n^lNF\klLh["
A$ = A$ + "M=5KRgolJGnoJGkJGkJGkJO7fmm;^fe^fe^fe^fe^fenN]YnK6OboVOMngO#"
A$ = A$ + "5^CoO[cC6oMlg>j9bo>iLWJ6YKHdaWj_C7C\[^O7lX[[hk?okOTmg4UY_?A?"
A$ = A$ + "hngOUWWVj\Zk\W8fCo_?SYhZC`ok:?NZIW>okV83k4n0MFWjk4j7Ucg=?SnK"
A$ = A$ + "Q?=FD?7e??=n^jo8NRe7Igc=7LacR[SNJ:k9R=ZnM`bj3WMVIja>k?ZjeEGS"
A$ = A$ + "A__cl^K]b<[6=_iRWYOoimjbm<i_;7RfWUUoWdLg?>MlkLNd>ZZk[6KV[[4?"
A$ = A$ + "VM\Ac;CE3[Jc:cYOYZ5L^WBNa\WYZnAnMWn#]WbXE#J?VcVYAZ^NUoSdJ\k?"
A$ = A$ + "c>?cc?HaUEk:fK1?[6TU_ElQJ=a>?k<kaPCA3Z4GeIGUn7J>^KoOBnCAgXP_"
A$ = A$ + "Kn7E3>aUijMd>>6K=[>[f1OGO?M<Hh`?meKX_ZTgXi:dIMhZE>BE_ZT;Eg_C"
A$ = A$ + "^k`=XjW9o[n]:omi_cl5cIV#;RdO<ggm<EcZ8OSVkIZQec7mm:]AdISlIVN:"
A$ = A$ + ";NEG7E7:kl#iHfmZdYElCF\I`EaOZjXMP_Bo`<SDE_EHDmAfmDb1TOI[1FL<"
A$ = A$ + "LQZfW5;[nWA[D=kPV]L=UN1ZnDib9R1[N<c7\cO>im4FeN4Vlb1O7=k>cOG>"
A$ = A$ + "[CnOBcMngU_#l7bHj1k6k9RO6o=5o_NFVceAo<emGci\M1kZoEi?Vc[P7aA:"
A$ = A$ + "JG5OXP=[GhVkC?7fM6LjiGVI]Z[eAoE=g`>oda7M`SdKZaG]fAnJJ\XI8VH?"
A$ = A$ + "Q?Ncio:n<=_2^eI>WhFU;^i=C]Ph]ZHG=C<1NfcjbMMcOFMGUOjf?gY5YaSd"
A$ = A$ + "jEcc:eDeiSd5\LOGlIJ7fHOZlWA[SdoImjZnNF>dm<Mk1EL23_W5Ofcj`oAm"
A$ = A$ + "jXcRjM^mm8oG];3Q=[Oo6goeeZjW:mj^hEd?IJJVm?Am_\mD\nX3n\cXPGeW"
A$ = A$ + "IjP8^WI7V2f:ng5o_#n[>SFE7XkcV3Mgoi^_<RkDmC4N5oXP?[OkDkk8oAjS"
A$ = A$ + "\LgYGgYVMhXXOSVmSddZ6K?CA;D=[a<K[V_Ch3VJVU;#cG<a7aOEc58m3:?Z"
A$ = A$ + "h#VNh4m0g[YVK:i<K=Ti?VIPXcVM=VJC]o[`3<LLE>`fOHbMD?5MFeNodhSd"
A$ = A$ + ">8]EemMlA7lXjQ1oDeFEN5M6E\k0OglWYW\kl_bDgK`L>VlXJFE9_M[3D?B9"
A$ = A$ + "gISM7l:HHdc>nRQ[MiP:OTUWEk\WFO_Z[Gc3F=OFNc`K[hHZoY`G=_fYWcZm"
A$ = A$ + "IcO6o`>W\fW[V7b>?K=XhKDocI?R:7De;AhAi6S^Am<XLEao>cAMaSd2:mNV"
A$ = A$ + "iaY`RViImYRnQ9FXncdjoXI=5>lDhIZme_Sd]:gW5KFlkR_KncXIAaOJl\c4"
A$ = A$ + "^H[^N5FD^`^g0=W[D_IagQ?Mac\KRAof9nEhk`aXlO=gZ>?Jf?KFY2GVOZdR"
A$ = A$ + "\jGei#6]OE_P5OFmc\o4Y9FeBZn#]nAiZb>3Vngdmo\L]JVDI74C^SbKVm7E"
A$ = A$ + "c#IW;jj8^_K=Ph=6m9[fEinEl8K>>A?<CgUQEEkDYEHV_AhId?Ie0KlAk?Dm"
A$ = A$ + "a9agEgoIlcd4XcbPmcJLBlMbO5MFDlkRoKbDVc[j58oh43VlKWgWmNIJ8TV]"
A$ = A$ + ":6XMS<l;Jg#EnGUSAke#c_AHAi8C>[PcECjRGYgc\?[jgIa?;F\nH:nC=gI_"
A$ = A$ + "?[?RfScDgEjMfIWZNMU?jXODeX\JHT>2am\gCASahS\JAEodQ3LZ1fHSd>\n"
A$ = A$ + "^Zgdi\^e0bOAWE=W#akDhE`Qh?TiR]K\AjCWlOMfVIfLBl:c_ZLTR?HaYjSX"
A$ = A$ + "[kD7:HHe1CSgEkZL6eHPnmWmdYd^[n<CC4U3Xh]KmCF<Hi8GlELGfe#mHVN?"
A$ = A$ + "bW<a;[6cboMaoIi^kNW\J0UkXNAU6X:oAn0]cUQ7HRm^a[bKAhSjUMe?ZHE^"
A$ = A$ + "7JfRi<8oSVWIe?\kK#l:[VQYG`h_<=PB>YXcNBl:hf1oaRM7hkToOZ]GoTU["
A$ = A$ + "jP_JnHBn?:?DS]Z?RdKZLRZaD[k4OGOFMF7l<J0dn1E>Y:f[c9k\?hTcAh#c"
A$ = A$ + "Ok2_blO5_RVOcfQYLV>io4hEV?Dd\\L<:gEeb^JoYSoDHO:lEWea?^iOVFBE"
A$ = A$ + "SZXo[R=JffaN;hIV?Gi5UNPS?DaSnM5NfJGAcYLO5\k0OWlOUgDSOGl>fdnC"
A$ = A$ + "9^ZabINCI^OjL=2_bnGDNd9oEfi4]g?3OeeEcOUNm4nJ:=0jIB8ONJlIhHOF"
A$ = A$ + "ETF9b7InDI>OGlG5?PdEXJGM6Xc^[XJE5_KLAk9HdN^gORl_Z7XPEij:JPMg"
A$ = A$ + "3LdOEWWMNhThEdF\k?DmaDcH>hW#OgQoj6oCVo>kHW4oZODemCP_K\Ila4jN"
A$ = A$ + "ES9_EdD^L0C\jF3^eHfmD>[SFP=GMe;[m=FN>[6#JPCS_RoMi?eiWO1n3]SE"
A$ = A$ + "AgajgY<D^kd7ElaDg_ZoRb]9>SCo=jnEJ#7l<nhcmVAHg]6l=HIj75<ZnX;n"
A$ = A$ + "9Z1FLXmWEn8JfQ5Ke_kP_CnG=Sa4o^h[lCVUegMag=f8O\NO7O`V7>6JghTa"
A$ = A$ + "L7kQIlYBLIWSV6K4Ok`mIchoE`o96eIVM?[][j_BcXXWL_gDhkbI<?OH7nX["
A$ = A$ + "oGkAILG5N4?S>SZ>c1?Z6DWCW<okVK^nN:mie^fe^fe^feng=VWOodalJGkJ"
A$ = A$ + "GkJGkJGkJGkJGkJGkJGkGa>mOCe9[SCW3Wfjd3OJ=`YdLWF[oFWgjT;<o=^g"
A$ = A$ + "M><ElOBmoKaW_E=YCnOjLiYijZo]Yl4h?Mmg97>]FhKR3kn_a\KOmmI[j8Uo"
A$ = A$ + "M>=]nK2Om]fkWZfMmcC_?iTkoO3aN7mooa??9^E\?ekNGm_EcCaQ?=OUaOZn"
A$ = A$ + "<jO[^WP_j\kj9jOI?kS=_ge\ojk_kfoHakn\R8<MmcYNFG7OdmmWbd#^j7el"
A$ = A$ + "fmn?Um4k_?mom[C`kMfUUQO2>mYiQCK^k]WRon4gC`QIjVWZgeEg?A_NJN_k"
A$ = A$ + "cbZn]Bm<A?a]VkfojlnC:_3hDm]YbMV[]C[k<#ggoeUWD>Cfkl>QnMRgWT1O"
A$ = A$ + "eNCD<AHMWODi]8>gimMD^7C^bbO8>HW?7KRj?C?<En]Sj^Z6ObgMXZVMOfId"
A$ = A$ + "kP\cWo=]FXk^?7^K:\[m_>nHRJoYh_<]gCfcWZfEa6=[eMgAgnOe_IaVmME>"
A$ = A$ + "YCo[;7jVo\JPZWmOZM8C5g9lcDhIOGZ9VKIdP8\Mf3Vig>jV8lXL75g9a[L?"
A$ = A$ + "6]V2>D>``OMZ_ZWODaUEj\8lZc<:j?eN_RFf9^:JW>hgUi\k8BcjD;Ca3^ko"
A$ = A$ + "Rda>LP;Fgh>1n9bOdN=eNPCMWmI5f8]GGng]FLNnC6gg9nMdPC5k>JQ>e#G>"
A$ = A$ + "\jg<a6Q3M_C]3IRWKeQkcdA^hINg37>8CWbDkIkIR`bjS8oDa18lXLX:F8^?"
A$ = A$ + "S_bn=C\I^g>koEeOdn46lAl1K=R>C5?Ge?ZVgLaXFo:mCFncMfA]g?]E=3<Q"
A$ = A$ + "?MlSK_;[om4HchBWJfUckZGjVoMjKIj6gn_S6DMg?37lDa?:^^jQ^kLVHoa4"
A$ = A$ + "mn^a^COX3G<9okZQjfk>U=an_>l5;7^N^XN6kk>4Q?C3PR1BokP?SWI]:lIm"
A$ = A$ + ">ehcL?Fm2S>:SWSR=37TYWLOfSjlBV6QUoD`[X;EZ9TV>jk<jFUI4VNoDFDN"
A$ = A$ + "EUg:lWR>R=ODagQoLd<Zc>8MWB\EaWae^i?k<?3Ok\;:[GdI7XClkhS9SKFO"
A$ = A$ + "FAChd3W0OWM7^j_elg]oeQCHggPN6WS6HRWg<YnaM7Bghkf_Dil\N8ZGD]S;"
A$ = A$ + "K?#U^>;6EkCjPG]?QVY#kK[b_\n6c^4fjGA_Qn=:7c^F4ocZSHb3T61EoZhc"
A$ = A$ + "dg8m^R>3egEd_C[oWbDgM<1oYFW^a_3?kdSMSW3fXld5oZ>`5[3_Uag\k?#j"
A$ = A$ + "?GlMhS>i_CL[hm>lW[FjDhkXoVFohDG>jT?aE=7bn\_>mPCfokdgk4oZWIX`"
A$ = A$ + "iInYjIJXWMWi7fcDEW8]CF<Z^?Z6ZjEXHEYG#lOeLMD<EgS[FkIl>jCDmWE3"
A$ = A$ + "El#G>`5OGo[XWHl9keVZgkFWEeMeN1T?ERY:NfIX^aGUkR`kFgMbo>aN]?g9"
A$ = A$ + "^Mc3gnAGlIe^2Fd>fMZoZZm>eOWLhK7oDlWR6^CnG5GVMgMfmm6jOMmAWmn["
A$ = A$ + "hEhmEnWIWL4^XNNVOHOOSZ[GU7Ai=cneZHUYIIj?XMcE?7KGhEcAfhGY5jXi"
A$ = A$ + "[b?Dncb1ZiGU>6Y]IdQ8^_Jn2EoXIOd>PWTk#a#A7aVoCNOVhc^?93[K^d9^"
A$ = A$ + "AjXW\fGSk4lWC>e9oW#ode7MeOW<g_h?go_;#aEIni]bOO[hEjk>?k?KoO4f"
A$ = A$ + "Zm[^k^AhA_oEW[]NM4oan^#XHRR?cmDd1>jXZnnTL8:G[Z96=D4N6]8BgUaM"
A$ = A$ + "IiD6?f=gAj35=#T_#lU:o5QQEOZ`oW0?S>1Q_KN[jW>iLEOg9nMhP>e`DL`9"
A$ = A$ + "SoTJXW^n_hmO7lM_oTECmVi__1l[l]cNd\N6cc`MOf]Kn>1nXJeiLAe9ckNE"
A$ = A$ + "i3F\E?oCmISImB6mijibndYWbbMIa1a1MageZV;Z>73oa6KfIl9kMEk9#kBb"
A$ = A$ + "h=7^_C?M:=a^dF?ALkhS9gG4mKULX;7L2\CiS^m__aLoG7?JF#MFC=?DO6dK"
A$ = A$ + "SonF`?UEmnS\i?kcZcd;>i[c>oM`K\_g2b7EGK7m_En?kMbHSMdW>??WmM8I"
A$ = A$ + "d?IW[;nYd?XNn^df<mGUWCX>?FE_<jP^?3[kNSCSoKfVXgMB>LRhn6d>ggmo"
A$ = A$ + "k4Ofn#Wg7J7og0\kgmo=\klK?oW:_ZNn<jM;LiQWjMTDc7UgK^R[LO_i>L[c"
A$ = A$ + "o];[eNeWk8nZ_[idhWFghZ1jV3Ef^SO7>odcmk^nnE]_moKWn[7o9bo;nnmo"
A$ = A$ + "^kZgicdNRjOjLoY\_ml_ZVNRJk=mN:IicCUCMOgfMEkClO3b9kYW#gLjliJG"
A$ = A$ + "kJGkJGkJGkJGkJGkJGkJGkJGkJGkJGkJGkJoo]Wl_ifWaCm_1GGloRfO]jUU"
A$ = A$ + ";>AL?MmO:^fYn?=n[QieMhkW0cgVil_eTojLf>in;oM=FkKnI#?mk<oY_MN7"
A$ = A$ + "n^hOSmo^oK>Tmj?]Vj9ib8MBWNQR?bdWobFgi]CSo9h5G^LRNAWl_jg\H[V9"
A$ = A$ + "nLn:[nGoLBnK2mA7>?k\\_GOE<k\g];7\SHmTkOknL[>eWJ_\J>EI6ndkQ?="
A$ = A$ + "n^Fe^[W:fMmQR^SU3HR9ZgUicElAGGUSjn\G7oD]3Wii0>mf\NfT?CDE7=m>"
A$ = A$ + "PYjWMRo_^E=Kb`5W6odm`ZmD8L<GC1_Z?VdG[kPAn\Jo9c>#gm6MVEA?oZSN"
A$ = A$ + "AAgcL^9jo:L_:n>iOecMMNVOWWUgajX3k`QIm>WM`CXUEeDMa?AOK=>>k^jZ"
A$ = A$ + "IjDSW#c7aAE?W8kiZIclZeCG^dMo_kIDgcRZg^c;EhHinX?IcWM<_o4c0?mn"
A$ = A$ + ":VL`QK#?3h]Q_BoUM]MYKjZ1VH7Q[_bh9DM<EmeiIoC>_ido#JFVL?;n[WA9"
A$ = A$ + "OjXIMma4m6WN9RcDfOTeG#hHfoPV1LiT\nVk<DVODb?d_gAo[klKDN`fgjXK"
A$ = A$ + "Ih8Foij[Yf1h\CI2lIjMF=P3NemJCR7]_EI6>kNZl#e^WM=oFi7VJWU;HRUJ"
A$ = A$ + "=T]WAEGX>_DYiAJXg2NUI9fM0Il6KOaEkj<KVYe[bCF>ZBGcRCY_E=[j\kPU"
A$ = A$ + "gWbOEm17OhF;McKghWecEg1Qn>SfSAOYV?MeC:nY;oc<?ZZmDaWY]DS_BnkN"
A$ = A$ + "_\hTmIU_[VSZdQ\e?cN#EmFeiEfQPlKfIZhLElCLO5]_27ga7\m6eIhZMVIL"
A$ = A$ + "QBoEEkZ\[6iSXMA:nXK\DfMQdOZlV2ggMg3ciHa[d[E[34F6nT1_bmFi65mK"
A$ = A$ + "gO7M_:=TC^c<oa\CbIN\SFbaO<cQMd^kP3b>_3?VY3Dij>i`:?ab1\hEWQF_"
A$ = A$ + "Ff^a:ocD?<mA5mG7lEoFYo[X3HVODa5YYIe><iB5?kD;>Jo8^8kg^L?:gchk"
A$ = A$ + "Zi:WJL7hIm1cN3gL?K^3=oYZ?Dh0eHQfoXZQIWGHda8^Xk^c>F4?We[IVoLc"
A$ = A$ + "Q<m6k>;VmVZJ8enHUnYJ74B;XTg:gWI6[SnSYf[VESn]R66EK<mOG==3oY`g"
A$ = A$ + "<J#GMO7mGELDd`<ncYoYfgAJA6^Pmj<iTSNSiJZjW^j?5^;BoiROmJ\L7[n9"
A$ = A$ + "BSc^W:;_kXCj\cbEkP>7;_k<KYXmjDOMi7gjCM7V:_UY1IVODhMdlDU6VM6d"
A$ = A$ + "Mg3b?\mFWJVUgcVcMo<ZocTo<Jh>m06m`dc18]6kn[Zn8[fAiN>cQEeU2?kf"
A$ = A$ + "oZRITFK:]WZna1KWn[bigEmkREASeaG<J]:>EYoTmK6o`NM6N`A[aZIHhMfn"
A$ = A$ + "aDhAmEE][SFFQooll<i8[nCQo#kGIio\cSh1Vn]kN;VJ?:>\m5UI<gI;Ucb`"
A$ = A$ + "ICQWA_a\C\BgDQ?CoEeOkXQLlQ2_kXMcnTQkDj?ELIgI`<m4jg8N\jJ:JJeh"
A$ = A$ + "k<7ibI8l<c0IcPAnQQ_EVkbh<eiVZlW=ORlQJn<U?HhH6nGY7\;=H7N7Yo#n"
A$ = A$ + "#IWCTFAI>^bW\W7Q?C34mIfeDcGfji]YQNJlAJF5m2J?;[obl=C_cYgc^oU="
A$ = A$ + "7E`SjIXng4hEk5CRO2mGUFQM_A5OVUGXcQ`_NfZjQQ_j<ok^[PYgRd^AeJgM"
A$ = A$ + "HZin4k>SViIeRMhATVa=nCYoj`o[j4T>ZcIZhP^m<fnJe^SMfgAm4El:lOFL"
A$ = A$ + "j<oiR]jkMea\HEZo:>;jN<J?D_SE_?eN_CXMkZkofak4?6=fKdRNN]bc^kP_"
A$ = A$ + ";g<e^i>WIbiKeWm6QGM_K6FfgY8K_=S?[>[2gbHCaICZ?RZEF^;2SjmALXSf"
A$ = A$ + "KeO[gK7lh4hcdM>c2:l7J_YZneI68SWDd^>khEdH\n9JOTR>>SKMm1S62]O4"
A$ = A$ + "=kG]3E9nZi]R^fQSAhEbIUL#M6\S6<Ko?jN>j;UNWC?oG1OWH>e^WCTgE?7j"
A$ = A$ + "DhAkAjRoC\\GOJlMa4a3\j?F>R5[;g?ecINbH_bmZgCY6Hd;IkPNRm#I?_DQ"
A$ = A$ + "SS>kCQ?2W2o]kIXMYOHhR^JOfcTYKkFoMeeC<oXD3:aWmnZna]^gEn_[kcDk"
A$ = A$ + "?e>D7McDLPBlnUag=fC]giYck>lI7lA_WPb^l^hW\oMjnOdk_l=HMi;gNnT?"
A$ = A$ + "KOG_o1C_V]VfYV8jin^afE77ai^cn?i\lDaf5[C=niNGG]ET?FcMFo_knFgm"
A$ = A$ + "CMk3^?7n9OnGE^Dm\k9h`9koMa>EmaXm[hi>kP_fO;K7?kQIV]2;bGMaO]O;"
A$ = A$ + "kTmkojJ^9WoVN74[On[f3?elbCPiKdLo_5k=eOo6]^ogXL][M][M][M][M]["
A$ = A$ + "M][M][M][M][m;KAokf#5oZONJlMboWV[kliYcMdOGGVk_NfClk8m6k_kFoC"
A$ = A$ + "MOWo>I^J[gPnkJGkJafYnK1?ao^1^fe^fi\kkooLlLW?W`7MN_i\l0UWIm6e"
A$ = A$ + "O?1ogmmoWZn[^6cm[dFkjofP:MPjm[dUIgOB]`en]\Cm>W_QgmUM71K=h4GU"
A$ = A$ + "k=El_fo>7N:loJ6R?DNVjKgjnncA_[cCSoKim4jnnk_93]g6mOkPc_SNo#UO"
A$ = A$ + "7YcHomD_oODniLOfgC^[VZcN`MOo[M]^_okoPcii?EcKk>fO6[>?34]oU=f>"
A$ = A$ + "iPK\_F\nY[nodeBWjFU7Z`anN=IlOgna9haoik>hkXQV0OWlo9ii_m?IW;HN"
A$ = A$ + "^Xj_GSQc_SdI\oNRjO2nK=gZjEXIR<lImS8^ain8]EENM][m?6cN6EoXP_Kl"
A$ = A$ + "MSkWW_J^92Ce\VblVCl[`Sb_MYOj4_Yc?ghgU_f=?_[nFWjQM61M6Ukm6=ei"
A$ = A$ + "f<N\Sf[;n_UgCXjmeHnl=I<__:jI=:of5GFNZnk^eo4lgZFXB_dA;55S[M]g"
A$ = A$ + "TQV=[^7jMVHelIc]>HENG^ZmKEci\l2CMTU3^HMjUIaWUo[fkbRObmSZnDAc"
A$ = A$ + "h`5CMnYc5eWQYN?fL8kM6nVNVYbLK5GfAke5OWlo9ii>O>Q?RfCklkZl:knX"
A$ = A$ + "Wajn<H7MRc_kFoIGSmn<?_=kiIZJAT6>BKXLo\WIQ^oe^fo[eiio\J9gHdmM"
A$ = A$ + "CHmOd<BflT:Fdn4VmAIc]CT3[iBf_IifZmHEa5Ukkf7>eMGlkNW<Sok>SU53"
A$ = A$ + "fJ3YQSR?CoNW6C_gYW^b5ZjMUN:C_N:NI2mKVV`mcCJ8NCA_ilkENDmgAjMe"
A$ = A$ + "OGiCgkSl_2WbXmHWUZZ3fNkdgoJGkoeHd9IWAASEi3VmPk8nXImZINF\<n8Z"
A$ = A$ + "NEgUk4OFnQUKMfEZTok0OVoDWSDacVg\c7^L#gio\HhXkZlUKoH:^GA;jVc["
A$ = A$ + "cAkDoe1oDcJMj?[legdWXjUQ?bVQHomZFCigIJ5eOkFoC`OMe_Zmh<lAL\bm"
A$ = A$ + "IV=VNnlJo>6kLC6FUhhjSM5o\mR:kHEfYhjSM5OEn1QE=V:J#4FE][ZoV6_j"
A$ = A$ + "cTfecej>o=Y^;;OAcYC`3CHZjNdLT[fIZj`ao?ilCW??YY>GSdIWlgAm<fOg"
A$ = A$ + "]nM_o>eo_M]ge^FTU=7YRAmL:cCCW3EkfZfgmYo#k:ZVmImAGl<kO#k\Iif8"
A$ = A$ + "o`j3dcjV4WZof1n>?SJ:ogMn;;N\J0T6>2?SNOW6C_gEkYXiIc[9d?:lBgi7"
A$ = A$ + "Vh_bG:Of1KTNEmgIi1:?[V7DnmDjR>oNZj_jJIg7=3QVm#J;UI:T^WI^8CGF"
A$ = A$ + "=[L][mY5Y;#J5VW3aXgHVgD`cTGAhEf5PlWcnT^kSH[CfnYRf9CodMO3C==i"
A$ = A$ + ">=GoYZifEn[jkYW?A?k2aMEGk]K\c\8^lK[^W:oEh?dkQemmd>Q^1]75=GYl"
A$ = A$ + "kXWaXlkXn<k_SZQ\NOemSb?VkWY3b`kl\HE=GgmdC\WoJoM]Zi1GoXn>TMR_"
A$ = A$ + "KLoll:ckE__Wjk1h^_93?:ofUnI7a3iWY[[^_kbCag?EmjLoZg1XRgD^gKdD"
A$ = A$ + "WKS`c`I_E[Kn?ekIm=l9[^WiiRZoN=6>o>Z?clkYZo>g?C[Vm9kmDV=bhV:^"
A$ = A$ + "^ZnblOENO][m?6cN6FodIoo9RMe\YR_HfkbV3?I\_fo^6Z3f>nhTeLV];lE_"
A$ = A$ + "SAekMlF=gIg?agE3Njj_Cn[`OXgISiMjN;VjkcF=O`lKGLE_kZb_kFoCLoZW"
A$ = A$ + "g6YEbd?EWi=Ze^feR<gWm_[lhYSYcm#LHWlXcc?oFOoQgPeUk^L_>O=aIN3f"
A$ = A$ + "mmoOVgoORgm_[?Vhm`AiEfm[N7DVO?AO^kkogYnc^Vkm[d4Eog=X>CDUOAL6"
A$ = A$ + "cmcNW=dm_fe^foW5=SLZiUk<je^fgYMOookoooEZc<NRmi?^og1dmo^UXnUj"
A$ = A$ + "_WhmocNGGUkGm^c8>_S6SEO_[kO][M][M][M]I\kkooMloooCoIFMcnO?Pkk"
A$ = A$ + "mWacWhmokDoCOO6nfa7\JQ8obNOdo=<>inen]]o7JMYZ%%%0"
btemp$ = ""
For i& = 1 To Len(A$) Step 4: B$ = Mid$(A$, i&, 4)
If InStr(1, B$, "%") Then
For C% = 1 To Len(B$): F$ = Mid$(B$, C%, 1)
If F$ <> "%" Then C$ = C$ + F$
Next: B$ = C$: End If: For j = 1 To Len(B$)
If Mid$(B$, j, 1) = "#" Then
Mid$(B$, j) = "@": End If: Next
For t% = Len(B$) To 1 Step -1
B& = B& * 64 + Asc(Mid$(B$, t%)) - 48
Next: X$ = "": For t% = 1 To Len(B$) - 1
X$ = X$ + Chr$(B& And 255): B& = B& \ 256
Next: btemp$ = btemp$ + X$: Next
btemp$ = _Inflate$(btemp$)
_MemPut m, m.OFFSET, btemp$: _MemFree m
Loadtileset1& = _CopyImage(v&): _FreeImage v&
End Function
RE: DeathTestvDungeon - James D Jarvis - 09-29-2022
Here's a list of the tiles in the tileset I'm using, just in case you want them for reference.
Tile list of tiles in "DTDtiles.bi"
0 - blank
=== PATHS ===
1 - Leafy path
2- rocky path
3- stone path
4 - big stone path
5 - sparse grass
6 - heather (leaves and tiny flowers)
7 - raked earth (variegated pattern)
=== INERIORS ===
8 - Wall
9 - Wall with center column
10 - Wall with edge column
11 - Wall2
12 - Wall3
13 - Wall4
14 - Wall5 - Big Masonry
15 - wall6 - big rock wall
16 - OPEN DOOR
17 - Closed Wooded door
18 - Closed Locked door
19 - Magical Door
20 - Iron Door
21 - Cell Door
22 - Barred Door
23 - Panel Door
24 - STAIRS UP
25 - Stairs down
26 - Ladder up
27 - ladder down
28 - Rope up (through hole)
29 - Rope down (through hole)
30 - Shaft in ceiling
31 - PIT, Hole, Or Shaft in floor
32 - Mirror
33 - stool
34 - table
35 - Bed
36 - Cauldron or Urn--- pot
37 - Treasure Chest
38 - Shelves
39 - Crate
40 - Torch in sconce 1
41 - Torch in sconce 2
42 - candles
43 - Fire --campfire
44 - Blazing Fire
45 - Hunting Trophy
46 - SWITCH LEFT
47 - SWITCH RIGHT
=== OUTDOOR ===
48 - Tree 1 (pine)
49 - Tree 2 (alt pine)
50 - Tree 3
51 - Tree Pair
52 - Tree 4
53 - Tree 5
54 - Cactus
55 - Cactus Pair
56 - Mushroom
57 - Mushroom Pair
58 - VINE or beanstalk
59 - Tree Pair 2 (pine)
60 - Tree 6 (mighty oak)
61 - BIG ROCKS (boulders)
62 - Bramble
63 - Palm
64 - plowed field
65 - seeded field
66 - sprouts in field
67 - Crop A
68 - Crop B
69 - Crop C (Cabbages?)
70 - Crop D
71 - Crop E (tall grain or corn)
72 - SIGN POST
73 - grave 1
74 - grave 2
75 - grave 3
76 - grave 4
77 - grave 5 or Mound of Dirt
78 - Sealed Crypt door
79 - Open Crypt Door
80 - OPEN FENCE GATE
81 - Closed Fence Gate
82 - Closed Metal Gate
83 - Low Fence
84 - High Fence 1
85 - High Fence 2
86 - Metal Fence
87 - Broken Metal Fence
88 - WELL
89 - Puddle
90 - Fountain
91 - Geyser
92 - BONES - People
93 - BONES - cowskull
94 - Bones - generic bone
95 - Bones - Dino Skull
=== TOWN ===
96 - Roof 1
97 - Roof 2
98 - Roof 3
99 - Roof up from left - BRIDGE LEFT
100 - roof flat top - BRIDGE CENTER
101 - Roof up from right - BRIDGE RIGHT
102 - chimney top
103 - steeple top
104 - Window 1 - barred window 1
105 - Window 2
106 - Window 3
107 - Window 4 - barred window 2
108 - Window 5 - cross window
109 - Window 6 - modern house window
110 - Window 7 - arrow slit 1
111 - Window 8 - arrow slit 2
112 - HOLE IN WALL
113 - boarded up hole in wall or window
114 - Old Archway (open door 2)
115 - Crumbling Doorway (open door 3)- crumbled door
116 - ruin wall left(low on left)
117 - ruined wall 2 (low on right)
118 - ruined wall 3 (low in middle)
119 - rubble
120 - SIGN - generic
121 - Sign- tavern
122 - sign- Inn
123 - Sign - food or provisons
124 - Sign - Alchemy
125 - Sign - gambling-casino
126 - Sign - armorer
127 - sign - weaponeer or weapon trainer
== PIPES ==
128 - PIPE - ground left
129 - pipe - horizontal
130 - pipe - horizontal with CONTROL VALVE
131 - pipe - horizontal with support
132 - pipe ground right
133 - pipe vertical
134 - pipe left to vertical up
135 - pipe right to vertical up
== ADDITONAL TERRAIN ==
136 - SHALLOW WATER
137 - DEEP WATER
138 - WEB
139 - Mosaic 1
140 - Mosaic 2
141 - Grass
142 - big LOCK
143 - Machinery
=== MONSTERS ====
144 - Generic Goon1
145 - Goon2 - spear
146 - Goon3 - polearm
147 - Goon4 - sword and shield
148 - trooper1 - sword and shield
149 - trooper2 - spear and shield
150 - Knight- unarmed
151 - Knight - armed
152 - Brute
153 - Brute2
154 - Brute3 - Bugabear
155 - Brute4- Cyclops
156 - Brute5
157 - Brute6- Gump
158 - Devilkin with fork
159 - Devlikin with sword
===Cultists and Thugs ===
160 - cultist
161 - cultist with staff
162 - cultist with sword
163 - cultist with spear
164 - faceless cultist
165 - faceless cultist with staff
166 - faceless cultist with sword
167 - faceless cultist with spear
168 - mystery cultist
169 - mystery cultist with staff
170 - mystery cultist with sword
171 - mystery cultist with spear
172 - Hooded Cultist
173 - Hooded cultist with Staff
174 - Hooded cultist with sword
175 - Hooded Cultists with spear
=== Mants ===
176 - Mant Drone
177 - Mant with sword
178 - Mant with sword and shield-mansns
179 - mant with polearm
180 - mant Brute
181 - mant Brain
182 - mant noble
183 - mant mutant
(191 - Mant Scout)
=== Bugs ===
184 - Scorpion
185 - Crab
186 - Wasp or Bee
187 - Claw bug
188 - Spider
189 - Beetle
190 - Ant
191 - Bug Sprite or Mant Scout
=== Dwarves ===
192 - dwarf
193 - dwarf with sword
194 - dwarf with spear
195 - dwarf with polearm
196 - armored dwarf with sword
197 - armored dwarf with spear
198 - armored dwarf with polearm
199 - dwarf with staff
200 - dwarf king
201 - dwarf queen
=== pixies ===
202 - Pixie
203 - pixie stick , sword or wand
204 - pixie with two swords
205 - pixie sparkling
=== brownies ===
206 - Brownie
207 - Brownie with sword
208 - Brownie with Axe
209 - brownie with spear
210 - armored brownie with spear
211 - armored brownie with polearm
212 - armored brownie with sword
213 - brownie lord
=== Octons ===
214 - Octon with sword
215 - octon with trident
216 - octon with sword and trident
217 - octon with two swords
218 - armored octon with two swords
219 - armored octon with sword and trident
220 - octon wizard
221 - octon noble
== bats ===
222 - bat
223 - Razor-clawed bat
224 - stingbat
225 - Gallows Bat
226 - Sickle Bat
227 - Flail Bat
=== batkin ===
228 - batkin with blade
229 - batkin with fork
230 - batkin with 2 blades
231 - batkin with battle axe
=== boggarts ===
232 - boggart
233 - boggart with spear
234 - boggart with blade
235 - boggart with axe (or hammer)
236 - boggart with staff
237 - armored boggart with spear
238 - armored boggart with blade
239 - armored boggart with axe (or hammer)
=== Undead ===
240 - skeleton
241 - skeleton with spear
242 - skeleton with sword
243 - skeleton with 2 swords
244 - spook 1
245 - spook 2
246 - spook 3
247 - spook 4
248 - wraith 1
249 - wraith 2
250 - wraith king
251 - hopping skull
252 - skull bat
253 - Zombie
254 - spine snake
255 - Necron 1
256 - Necron 2
257 - Necron Lord
258 - Ghoul
259 - Mummy
260 - Mummy Guardian
261 - Noble Mummy
262 - Mummy Champion
263 - Anubian Mummy
264 - Magi 1
265 - Magi 2
266 - Magi 3
267 - Magi 4
268 - Magi 5
269 - Magi 6
270 - Magi 7
271 - Magi 8
=== freaks ===
272 - Flying eye
273 - Cactus Creep
274 - Mad Tree
275 - Shroomian
276 - Trifid or giant flytrap
277 - Blob
278 - Bigger Blob
279 - unicycle golem
280 - golem 2
281 - golem 3
282 - golem 4
283 - golem 5
284 - mermaid, merrow or undine
285 - mysterious visitor
286 - mysterious visitor 2
287 - mysterious visitor 3
=== beasts ===
288 - Big Rat
289 - Giant Rat
290 - Giant Worm
291 - Crocigator
292 - Bear
293 - Octopus or Kraken
294 - Duck
295 - Chicken
296 - Cow
297 - Horse
298 - Hog
299 - Cat
300 - Dog
301 - Stag or Moose
302 - Moof or Donkey
303 - Monoceros or Unicorn
304 - Person 1
305 - person 2
306 - person 3
307 - person 4
308 - person 5
309 - person 6
310 - Lord
311 - Lady
312 - boy
313 - girl
314 - person 7
315 - person 8
316 - person 9
317 - person 10
318 - person 11
319 - person 12
=== Catkin ===
320 - Catkin
321 - catkin spear and shield
322 - catkin sword and shield in shirt
323 - catkin sword and shield
324 - catkin halberd
325 - catkin with spear
=== Doggen === (or Wolfen)
326 - doggen
327 - doggen with spear
328 - doggen with halberd
329 - doggen with sword and shield
=== Piglin ===
330 - Piglin
331 - Piglin with sword
332 - piglin with spear
333 - piglin with polearm
334 - piglin Lord
335 - piglin Lady
===Trolde===
336 - Trolde
337 - Trolde with spear
338 - Trolde with Polearm
339 - Trolde with sword
340 - Trolde with Staff
=== Trollkin ===
341 - Trollkin
342 - Trollkin with spear
343 - trollkin polearm
344 - trollkin wizard
345 - armored trollkin with spear
346 - armored torllkin with polearm
=== serpents and dragons ===
347 - giant snake
348 - Fire Serpent
349 - Sword Snake
350 - Two-headed giant snake
351 - Snake
352 - Winged Serpent
353 - Wyvern
354 - Dragon
355 - Wyrmme
356 - Drake
357 - Two Headed Drake
358 - Giant Turtle
=== Creeps ===
359 - Grat
360 - Giant Grat
=== Demons ===
361 - Least Demon
362 - Minor Demon
363 - Lesser Demon
364 - Demon
365 - Demon Greater
366 - Demon Major
367 - Demon Oracle
368 - Demon Prince
== elementals ==
369 - notion 1
370 - notion 2
371 - notion 3
372 - angry fundemental
373 - happy fundemental
374 - sad fundemental
375 - angry elemental
376 - happy elemental
377 - sad elemental
378 - angry elemental noble
379 - happy elemental noble
380 - sad elemental noble
381 - Angry Primal
382 - happy primal
383 - sad primal
== goods, gear, and loot===
384 - coin
385 - piles of coins
386 - shovel
387 - pickaxe
388 - hoe
389 - torch
390 - Dagger
391 - short sword
392 - sword
393 - Long Sword
394 - Great Sword
395 - axe
396 - battle axe
397 - Hammer
398 - war hammer
399 - club
400 - mace
401 - spear
402 - fork
403 - trident
404 - Glaive
405 - Halberd
406 - self bow
407 - arrow
408 - crossbow
409 - quarter staff
410 - Staff-2 -krook
411 - wand
412 - rod
413 - Staff -3- wizardstaff
414 - Buckler
415- Shield
416 - Large Shield
417 - gloves
418 - gauntlets
419 - helmet
420 - Full helm
421 - Jacket
422 - Robes
423 - cuirass, leather armor
424 - hauberk, chainmail
425 - Heavy Armor
426 - boots
427 - saboton (armored boots)
428 - Hat
429 - quiver
430 - belt
431 - pack
432 - gem
433 - huge gem
434 - key 1
435 - key 2
436 - potion 1
437 - potion 2
438 - scroll 1
439 - scroll 2
440 - ring 1
441 - ring 2
442 - amulet 1
443 - amulet 2
444 - meat
445 - cheese
446 - fish
447 - fruit
448 - vegetable
449 - drink,flask
450 - bread
451 - grain, corn, or seeds
452 - leafy veg or herb
453 - soporifc herb
454 - medicinal herb
455 - toxic herb
456 - medicine, phial
457 - bomb
458 - sack
459 - jar
==== splashes and effects===
460 - bubbles 1
461 - sparkles
462 - flash
463 - death
464 - slash
465 - slash 2
466 - slash 3
467 - orbs
468 - flames
469 - comet
470 - blam
471 - bloom
472 - blosom
473 - frost 1
474 - frost 2
475 - flash 2
=== talkies===
476 - excited
477 - curious
478 - sleeping
479 - unhappy
=== ui ===
480 - open up
481 - open left
482 - open down
483 - open left
484 - filled up
485 - filled right
486 - filled down
487 filled left
488 - unchecked radio button
489 - checked radio button
490 - turn left
491 - turn right
492 - up (or straight)
493 - down (or back)
494 - left
495 - right
496 - open checkbox
497 - checked box
498 - marked box
499 - frame, horizontal bottom
500 - frame, horizontal top
501 - frame, vertical left
502 - frame, vertical right
503 - frame, bottom right corner
504 - frame, bottom left corner
505 - frame, top right corner
506 - frame, top left corner
=== fill patterns ===
507 -519 fill patterns
RE: DeathTestvDungeon - Pete - 09-29-2022
WOW. So this is what you've been up to while wandering around in that cave. If I ever get out, I'll give this a try. Probably my fault. I keep turning left. I used to drive for NASCAR in my younger days.
Pete
RE: DeathTestvDungeon - mnrvovrfc - 09-29-2022
This is ingenious source code from Dav. I was going to say, "Why doesn't he just use the new functions based on zlib?" Then I took another look and noticed that "_INFLATE$" for example was being used, but something had to be done to guard against those troublesome control characters. Otherwise something like this would have involved base-64. As base-64 the string would have been much larger. One of my requests for QB64PE used to be support for multiline strings. It's because all that concatenation could be very slow, even on 64-bit and quad-core CPU and so on.
RE: DeathTestvDungeon - Pete - 09-29-2022
The trick to speeding up string evolution is to use replacement instead of concatenation. Of course this requires some idea of the magnitude of the final string, so a template string can be dimensioned.
Pete
RE: DeathTestvDungeon - James D Jarvis - 10-30-2022
This is a modification and expansion of the original programs level generation, really just a test so I'm including it here in this thread.
The fungus can be harvested with "h" and eaten with "e".
The monsters are just for show currently and don't do much beyond jumping into lava.
The file "DTDtiles.bi" in this thread is required to be in the folder to compile.
Code: (Select All) 'ruingen
'By James D. Jarvis
'testing combination indoor/outdoor roguelike level generation.
'need to have the file 'DTDtiles.bi' in the same folder to compile
'$dynamic
Screen _NewImage(800, 500, 32)
_Title "ruinedcity v0.0"
_Define K As _UNSIGNED LONG
Dim Shared dmap As _Unsigned Long
Dim Shared ms As _Unsigned Long
Dim Shared Kblack, Kwhite, Kdgrey, Klgrey, kredm, kwater, kslime, klava, krubble, kcrystal, kexit, kfungus, kwaste
Dim Shared kfloor2, kfloor3, kfloor4, cornerrubblechance, kgrass, ktree1, ktree2, ktree3, ktree4, kcactus1, kcactus2
Dim Shared mp(1000, 1000) As Integer
Dim Shared tiles&
Dim Shared rect_count As Integer
Type rect_type
xx As Integer
yy As Integer
ww As Integer
hh As Integer
lk As _Unsigned Long
fk As _Unsigned Long
notes As String
End Type
Type monster_type
tile As Integer
mx As Integer
my As Integer
End Type
Dim Shared monst(300) As monster_type
Dim Shared tilespot(0 To 528, 2) As Integer
Dim Shared rect(0) As rect_type
Dim Shared min_rectd
Dim Shared fillcell, openwallchance, pillarchance, puddleno, slimechance, lavachance, cactuschance, funcguschance
Dim Shared phealth, pstamina, pwounds, ptemp, ppx, ppy, lastx, lasty, prads, rwid, rht, pshrooms
Randomize Timer
Kblack = _RGB32(0, 0, 0) 'this is visible black as 0,0,0 will be "nothing is here" eventually
Kwhite = _RGB32(250, 250, 250) 'this is cooled paper white
kwaste = _RGB32(240, 200, 100)
kcactus1 = _RGB32(240, 201, 101): kcactus2 = _RGB32(240, 201, 102)
Kdgrey = _RGB32(40, 40, 40)
Klgrey = _RGB32(150, 150, 150)
kgrass = _RGB32(170, 200, 50): ktree1 = _RGB32(170, 201, 50): ktree2 = _RGB32(170, 202, 50): ktree3 = _RGB32(170, 203, 50): ktree4 = _RGB32(170, 204, 50)
kfloor2 = _RGB32(151, 151, 151): kfloor3 = _RGB32(152, 152, 152): kfloor4 = _RGB32(153, 153, 153)
kred = _RGB32(250, 0, 0)
kwater = _RGB32(10, 30, 240): kslime = _RGB32(20, 240, 100): klava = _RGB32(200, 5, 5)
krubble = _RGB32(120, 120, 120): kcrystal = _RGB32(250, 250, 0): kexit = _RGB32(255, 0, 255)
kfungus = _RGB32(200, 50, 150)
dmap = _NewImage(1000, 1000, 32)
ms = _NewImage(800, 500, 32)
tiles& = Loadtileset1& 'loads the tileset in the file DTDtiles.bi
Const tilemaxx = 48
Const tilemaxy = 11
t = 0
For y = 0 To tilemaxy - 1
For x = 0 To tilemaxx - 1
tilespot(t, 1) = x * 16
tilespot(t, 2) = y * 16
t = t + 1
Next x
Next y
maxtiles = t - 1
fh = _FontHeight
fw = _FontWidth
restartdungeon:
walltile = getwalltile
Screen dmap
_Dest dmap
_Source dmap
_PrintMode _KeepBackground
Color Kdgrey, Kdgrey
rwid = 980
rht = 980
Do
ReDim rect(0) As rect_type
makemonsters
rect_count = 0
Cls
newrect 10, 10, rwid, rht, Kdgrey, kwaste
min_rectd = 40
'If min_rectd < 4 Then min_rectd = 4
fillcell = 85
cornerrubblechance = Int(10 + Rnd * 35)
puddleno = Int(Rnd * 30)
slimechance = Int(2 + Rnd * 28)
lavachance = Int(Rnd * 25)
funguschance = Int(Rnd * 15)
cactuschance = Int(10 + Rnd * 30)
drawrect 1
bisectrect 1
n = 0
min_rectd = Int(1 + Rnd * 30)
If min_rectd < 10 Then min_rectd = 10
Do
'Cls
For r = 1 To rect_count
bisectrect r
Next r
For r = 1 To rect_count
drawrect r
Next r
_Limit 5
kk$ = InKey$
n = n + Int(1 + Rnd * 8)
Loop Until kk$ <> "" Or n > 90
kk$ = Chr$(27)
Loop Until kk$ = Chr$(27)
For r = 1 To rect_count
If Int(1 + Rnd * 100) < fillcell Then
rect(r).fk = kwaste
rect(r).lk = kwaste
Else
rect(r).fk = Klgrey
End If
drawrect r
Next r
For treps = 2 To 4
current_rect = rect_count
For r = 1 To current_rect
min_rectd = 10
If rect(r).fk = Klgrey Then bisectrect r
Next r
Next treps
For r = 1 To rect_count 'if there's an open space across a wall open a space in the wall
If rect(r).fk <> Kdgrey Then
mx = rect(r).xx + Int(rect(r).ww / 2)
my = rect(r).yy + Int(rect(r).hh / 2)
If Point(mx, my + Int(rect(r).hh / 2) + 2) = Klgrey Then
Line (mx, my)-(mx, my + Int(rect(r).hh / 2) + 2), Klgrey
End If
If Point(mx, my - Int(rect(r).hh / 2) - 2) = Klgrey Then
Line (mx, my)-(mx, my - Int(rect(r).hh / 2) - 2), Klgrey
End If
If Point(mx - Int(rect(r).ww / 2) - 2, my) = Klgrey Then
Line (mx - Int(rect(r).ww / 2) - 2, my)-(mx, my), Klgrey
End If
If Point(mx + Int(rect(r).ww / 2) + 2, my) = Klgrey Then
Line (mx + Int(rect(r).ww / 2) + 2, my)-(mx, my), Klgrey
End If
End If
Next r
For y = 11 To rht - 1
For x = 11 To rwid - 2
If Point(x, y) = Klgrey And Point(x + 1, y) = Kdgrey And Point(x + 2, y) = Klgrey Then
PSet (x + 1, y), kred
End If
If Point(x, y) = Klgrey And Point(x + 1, y) = kred And Point(x + 2, y) = Kdgrey And Point(x + 3, y) = Klgrey Then
PSet (x + 2, y), kred
End If
If Point(x, y) = kdrgey And Point(x + 1, y) = Klgrey And Point(x + 2, y) = Kdgrey And Point(x + 3, y) = Kdgrey And Point(x + 4, y) = Klgrey And Point(x + 5, y) = Kdgrey Then
PSet (x + 2, y), Klgrey
PSet (x + 3, y), Klgrey
End If
Next x
Next y
For x = 11 To rwid - 2
For y = 11 To rht - 2
If Point(x, y) = Klgrey And Point(x, y + 1) = Kdgrey And Point(x, y + 2) = Klgrey Then
PSet (x, y + 1), kred
End If
If Point(x, y) = Klgrey And Point(x, y + 1) = kred And Point(x, y + 2) = Kdgrey And Point(x, y + 3) = Klgrey Then
PSet (x, y + 2), kred
End If
If Point(x, y) = kdrgey And Point(x, y + 1) = Klgrey And Point(x, y + 2) = Kdgrey And Point(x, y + 3) = Kdgrey And Point(x, y + 4) = Klgrey And Point(x, y + 5) = Kdgrey Then
PSet (x, y + 2), Klgrey
PSet (x, y + 3), Klgrey
End If
Next
Next
aa$ = Input$(1)
For y = 10 To rht
For x = 10 To rwid
If Point(x, y) = kred Then PSet (x, y), Klgrey
Next
Next
Color Kblack, Kwhite
'check to open walls
For r = 1 To rect_count
If rect(r).fk <> Kdgrey And Int(1 + Rnd * 100) <= openwallchance Then
Select Case Int(1 + Rnd * 4)
Case 1
rect(r).xx = rect(r).xx - 2
rect(r).ww = rect(r).ww + 2
Case 2
rect(r).xx = rect(r).xx + 2
rect(r).ww = rect(r).ww + 2
Case 3
rect(r).yy = rect(r).yy - 2
rect(r).hh = rect(r).hh + 2
Case 4
rect(r).yy = rect(r).yy + 2
rect(r).hh = rect(r).hh + 2
End Select
Line (rect(r).xx, rect(r).yy)-(rect(r).xx + rect(r).ww, rect(r).yy + rect(r).hh), Klgrey, BF
End If
Next r
'straysspaces
sp = Int(Rnd * 12)
For ss = 1 To sp
sx = Int(10 + Rnd * rwid - 30)
sy = Int(10 + Rnd * rht - 30)
sw = 10 + Int(Rnd * 20)
sh = 10 + Int(Rnd * 20)
Line (sx, sy)-(sx + sw, sy + sh), Klgrey, BF
Next
'add wanderingpaths
nwt = Int(Rnd * (12 + fillcell))
For ww = 1 To nwt
wsx = Int(20 + Rnd * rwid - 50)
wsy = Int(20 + Rnd * rht - 50)
wtx = Int(20 + Rnd * rwid - 50)
wty = Int(20 + Rnd * rht - 50)
If wsx < wtx Then xtrend = 1
If wsx > wtx Then xtrend = -1
If wsy < wty Then ytrend = 1
If wsy > wty Then ytrend = -1
sx = wsx
sy = wsy
rl = 0
Do
nx = sx + Int(xtrend + Rnd * 2 - Rnd * 2)
ny = sy + Int(ytrend + Rnd * 2 - Rnd * 2)
If nx < 11 Then
nx = 11
xtrend = xtrend * -1
End If
If ny < 11 Then
ny = 11
ytrend = ytrend * -1
End If
If nx > rwid Then
nx = rwid
xtrend = xtrend * -1
End If
If ny > rht Then
ny = rht
ytrend = ytrend * -1
End If
dx = Abs(nx - wtx)
dy = Abs(ny - wty)
Line (sx, sy)-(nx, ny), Klgrey
sx = nx
sy = ny
rl = rl + 1
Loop Until dx < 5 And dy < 5 Or rl > rwid + 40
Line (sx, sy)-(wtx, wty), Klgrey
Next ww
For r = 1 To rect_count 'add pillars
pillarspread = 2 + Int(Rnd * 7)
If rect(r).fk <> Kdgrey And Int(1 + Rnd * 100) <= pillarchance Then
For y = rect(r).yy + pillarspread To rect(r).yy + rect(r).hh - pillarspread Step pillarspread
For x = rect(r).xx + pillarspread To rect(r).xx + rect(r).ww - pillarspread Step pillarspread
PSet (x, y), Kdgrey
Next
Next
End If
Next
For pr = 1 To rect_count
If Int(1 + Rnd * 100) < 35 Then addgrass pr, Int(rect(pr).xx + 1 + Rnd * (rect(pr).ww - 2)), Int(rect(pr).yy + 1 + Rnd * (rect(pr).hh - 2)), Int(1 + Rnd * 3)
If rect(pr).fk <> Kdgrey And Int(1 + Rnd * 100) <= cornerrubblechance Then
addcornerrubble pr
End If
If rect(pr).fk <> Kdgrey And Int(1 + Rnd * 100) <= puddleno Then
addwater pr, Int(rect(pr).xx + 1 + Rnd * (rect(pr).ww - 2)), Int(rect(pr).yy + 1 + Rnd * (rect(pr).hh - 2)), Int(1 + Rnd * 3)
End If
If rect(pr).fk <> Kdgrey And Int(1 + Rnd * 100) <= slimechance Then
addslime pr, Int(rect(pr).xx + 1 + Rnd * (rect(pr).ww - 2)), Int(rect(pr).yy + 1 + Rnd * (rect(pr).hh - 2)), Int(1 + Rnd * 3)
End If
If rect(pr).fk <> Kdgrey And Int(1 + Rnd * 100) <= lavachance Then
addlava pr, Int(rect(pr).xx + 1 + Rnd * (rect(pr).ww - 2)), Int(rect(pr).yy + 1 + Rnd * (rect(pr).hh - 2)), Int(1 + Rnd * 3)
End If
If rect(pr).fk <> Kdgrey And Int(1 + Rnd * 100) <= funguschance Then
addfungus pr, Int(rect(pr).xx + 1 + Rnd * (rect(pr).ww - 2)), Int(rect(pr).yy + 1 + Rnd * (rect(pr).hh - 2)), Int(1 + Rnd * 3)
End If
If Int(1 + Rnd * 100) < 65 Then addtrees pr, Int(rect(pr).xx + 1 + Rnd * (rect(pr).ww - 2)), Int(rect(pr).yy + 1 + Rnd * (rect(pr).hh - 2)), Int(1 + Rnd * 3)
If Int(1 + Rnd * 100) < cactuschance Then addcactus pr, Int(rect(pr).xx + 1 + Rnd * (rect(pr).ww - 2)), Int(rect(pr).yy + 1 + Rnd * (rect(pr).hh - 2)), Int(1 + Rnd * 3)
Next pr
'dress floor to make it more interesting
For y = 1 To rht
For x = 1 To rwid
kpp = Point(x, y)
If kpp = kgrass Then
Select Case Int(1 + Rnd * 100)
Case 1, 2
PSet (x, y), _RGB32(171, 200, 50)
Case 3, 4
PSet (x, y), _RGB32(172, 200, 50)
Case 5
PSet (x, y), _RGB32(173, 200, 50)
End Select
End If
If kpp = Klgrey Then
Select Case Int(1 + Rnd * 100)
Case 1, 2
PSet (x, y), kfloor2
Case 3
PSet (x, y), kfloor3
Case 4
PSet (x, y), kfloor4
End Select
End If
If kpp = Kdgrey Then 'convert some wall near lava inot rubble
If Point(x - 1, y) = klava And Int(1 + Rnd * 100) < 30 Then PSet (x, y), krubble
If Point(x + 1, y) = klava And Int(1 + Rnd * 100) < 30 Then PSet (x, y), krubble
If Point(x, y + 1) = klava And Int(1 + Rnd * 100) < 30 Then PSet (x, y), krubble
If Point(x, y - 1) = klava And Int(1 + Rnd * 100) < 30 Then PSet (x, y), krubble
If Point(x - 2, y) = klava And Int(1 + Rnd * 100) < 10 Then PSet (x, y), krubble
If Point(x + 2, y) = klava And Int(1 + Rnd * 100) < 10 Then PSet (x, y), krubble
If Point(x, y + 2) = klava And Int(1 + Rnd * 100) < 10 Then PSet (x, y), krubble
If Point(x, y - 2) = klava And Int(1 + Rnd * 100) < 10 Then PSet (x, y), krubble
End If
If kpp = kwaste Then
whl = Int(1 + Rnd * 10)
Select Case whl
Case 1
PSet (x, y), _RGB32(250, 200, 100)
Case 2
PSet (x, y), _RGB32(245, 205, 100)
Case 3
PSet (x, y), _RGB32(245, 200, 105)
Case 4
PSet (x, y), _RGB32(240, 205, 105)
End Select
End If
Next
Next
For e = 0 To 9 'clean edge
Line (e, e)-(_Width - e, e), Kdgrey: Line (e, e)-(e, _Height - e), Kdgrey: Line (_Width - e, e)-(_Width - e, _Height - e), Kdgrey
Next e
Screen ms
_Source dmap
pick = 0
Do
pick = pick + 1
ppx = rect(pick).xx + Int(rect(pick).ww / 2): ppy = rect(pick).yy + Int(rect(pick).hh / 2)
kk = Point(ppx, ppy)
Loop Until kk <> Kdgrey
lightradius = 10: pstamina = 100: phealth = 100: pwounds = 0: ptemp = 98: prads = 0: pshrooms = 0
turn = 0
Do
If rec_count > 12 Then
exitspot = Int(6 + Rnd * (rect_count - 7))
Else
exitspot = Int(1 + Rnd * rect_count)
End If
exitX = rect(exitspot).xx + Int(rect(exitspot).ww / 2)
exitY = rect(exitspot).yy + Int(rect(exitspot).hh / 2)
startX = Abs(exitX - ppx)
startY = Abs(exitY - ppy)
start_dx = Sqr(startX * startX + startY * startY)
Loop Until Point(exitX, exitY) <> Kdgrey And exitspot <> pick
_Dest dmap
PSet (exitX, exitY), kexit
_Dest ms
_PrintMode _KeepBackground
View Print 25 To 30
Cls
Do
'draw location
rsqrd = (lightradius + .4) * (lightradius + .4)
y = -lightradius
While y <= lightradius
x = Int(Sqr(rsqrd - y * y))
For x2 = ppx - x To ppx + x
vx = x2 - ppx + 12
kk = Point(x2, ppy + y)
Line (vx * 16, (y + 12) * 16)-(vx * 16 + 15, (y + 12) * 16 + 15), kk, BF
If kk = ktree1 Then
coltileat 48, _RGB32(10, 100, 10), vx * 16, (y + 12) * 16
End If
If kk = ktree2 Then
coltileat 49, _RGB32(10, 105, 10), vx * 16, (y + 12) * 16
End If
If kk = ktree3 Then
coltileat 50, _RGB32(15, 105, 10), vx * 16, (y + 12) * 16
End If
If kk = ktree4 Then
coltileat 51, _RGB32(20, 110, 10), vx * 16, (y + 12) * 16
End If
If kk = _RGB32(171, 200, 50) Then
coltileat 5, _RGB32(100, 80, 80), vx * 16, (y + 12) * 16
End If
If kk = _RGB32(172, 200, 50) Then
coltileat 5, _RGB32(90, 110, 80), vx * 16, (y + 12) * 16
End If
If kk = _RGB32(173, 200, 50) Then
coltileat 6, _RGB32(200, 0, 150), vx * 16, (y + 12) * 16
End If
If kk = _RGB32(250, 200, 100) Then
coltileat 2, _RGB32(200, 180, 80), vx * 16, (y + 12) * 16
End If
If kk = _RGB32(245, 205, 100) Then
coltileat 5, _RGB32(140, 150, 10), vx * 16, (y + 12) * 16
End If
If kk = _RGB32(245, 200, 105) Then
coltileat 7, _RGB32(120, 150, 80), vx * 16, (y + 12) * 16
End If
If kk = _RGB32(240, 205, 105) Then
coltileat 3, _RGB32(180, 180, 180), vx * 16, (y + 12) * 16
End If
If kk = kcactus1 Then
coltileat 54, _RGB32(15, 105, 10), vx * 16, (y + 12) * 16
End If
If kk = kcactus2 Then
coltileat 55, _RGB32(15, 105, 10), vx * 16, (y + 12) * 16
End If
If kk = Kdgrey Then
coltileat walltile, _RGB32(100, 100, 100), vx * 16, (y + 12) * 16
End If
If kk = kfloor2 Then
coltileat 2, _RGB32(160, 160, 160), vx * 16, (y + 12) * 16
End If
If kk = kfloor3 Then
coltileat 3, _RGB32(165, 165, 170), vx * 16, (y + 12) * 16
End If
If kk = kfloor4 Then
coltileat 4, _RGB32(175, 165, 165), vx * 16, (y + 12) * 16
End If
If kk = kexit Then
coltileat 24, _RGB32(40, 40, 40), vx * 16, (y + 12) * 16
End If
If kk = kfungus Then
Color _RGB32(250, 100, 200)
' _PrintString (vx * 16, (y + 12) * 16), Chr$(234)
coltileat 57, _RGB32(250, 100, 200), vx * 16, (y + 12) * 16
Color _RGB32(255, 255, 255)
End If
If kk = kcrystal Then
'_PrintString (vx * 16, (y + 12) * 16), Chr$(127)
coltileat 433, _RGB32(10, 0, 10), vx * 16, (y + 12) * 16
End If
If kk = krubble Then
Color _RGB32(150, 150, 150)
'_PrintString (vx * 16, (y + 12) * 16), Chr$(177)
'61
coltileat 119, _RGB32(220, 200, 180), vx * 16, (y + 12) * 16
Color _RGB32(255, 255, 255)
End If
If kk = kslime Then
Color _RGB32(250, 250, 150)
sb = Int(Rnd * 4)
'If sb = 1 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(247)
If sb = 1 Then coltileat 61, _RGB32(250, 250, 150), vx * 16, (y + 12) * 16
' If sb = 2 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(126)
If sb = 2 Then coltileat 61, _RGB32(150, 250, 150), vx * 16, (y + 12) * 16
Color _RGB32(255, 255, 255)
End If
If kk = klava Then
Color _RGB32(250, 250, 150)
lb = Int(Rnd * 7)
'If lb = 1 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(249)
If lb = 1 Then coltileat 61, _RGB32(250, 250, 150), vx * 16, (y + 12) * 16
'If lb = 2 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(9)
If lb = 2 Then coltileat 468, _RGB32(250, 250, 150), vx * 16, (y + 12) * 16
'If lb = 3 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(176)
If lb = 3 Then coltileat 461, _RGB32(250, 250, 150), vx * 16, (y + 12) * 16
'If lb = 4 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(248)
If lb = 4 Then coltileat 61, _RGB32(250, 0, 0), vx * 16, (y + 12) * 16
'If lb = 5 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(46)
If lb = 5 Then coltileat 468, _RGB32(250, 100, 0), vx * 16, (y + 12) * 16
Color _RGB32(255, 255, 255)
End If
If kk = kwater Then
Color _RGB32(40, 120, 250)
wb = Int(Rnd * 6)
'If wb = 1 Then _PrintString (vx * 16, (y + 12) * 16), Chr$(45)
If wb = 1 Then coltileat 136, _RGB32(40, 120, 250), vx * 16, (y + 12) * 16
If wb = 2 Then coltileat 136, _RGB32(40, 120, 250), vx * 16, (y + 12) * 16
If wb = 3 Then _PrintString (vx * 16 + 4, (y + 12) * 16), Chr$(240)
Color _RGB32(255, 255, 255)
End If
If mp(x2, ppy + y) >= 1 Then
coltileat monst(mp(x2, ppy + y)).tile, _RGB32(10, 10, 10), (vx) * 16, (y + 12) * 16
End If
Next
y = y + 1
Wend
Line (598, 18)-(795, 144), Kdgrey, BF
'_PrintString ((12) * 8, (12) * 16), "@"
If ptemp > 199 Then coltileat 470, _RGB32(40, 0, 0), (12) * 16, (12) * 16
coltileat 304, _RGB32(250, 250, 250), (12) * 16, (12) * 16
o$ = "Stamina " + Str$(pstamina)
_PrintString (600, 20), o$
o$ = "Health " + Str$(phealth)
_PrintString (600, 40), o$
o$ = "Wounds " + Str$(pwounds)
_PrintString (600, 60), o$
dptemp = 0.1 * (Int(ptemp * 10))
o$ = "Temperature " + Str$(dptemp)
_PrintString (600, 80), o$
o$ = "Radiation " + Str$(prads)
_PrintString (600, 100), o$
edd = Int(Sqr((ppx - exitX) * (ppx - exitX) + (ppy - exitY) * (ppy - exitY)))
o$ = "Distance to Exit " + Str$(edd)
_PrintString (600, 120), o$
Print "Turn", turn
handlemonsters
minimap
Do
_Limit 60
kk$ = InKey$
Loop Until kk$ <> ""
turn = turn + 1
lastx = ppx
lasty = ppy
Select Case kk$
Case "e", "E"
eatshrooms
Case "h", "H"
pshrooms = pshrooms + harvestfungus
Case "w", "8"
If pstamina > 0 And Point(ppx, ppy - 1) <> Kdgrey Then ppy = ppy - 1
Case "s", "2"
If pstamina > 0 And Point(ppx, ppy + 1) <> Kdgrey Then ppy = ppy + 1
Case "a", "4"
If pstamina > 0 And Point(ppx - 1, ppy) <> Kdgrey Then ppx = ppx - 1
Case "d", "6"
If pstamina > 0 And Point(ppx + 1, ppy) <> Kdgrey Then ppx = ppx + 1
Case "7"
If pstamina > 0 And Point(ppx - 1, ppy - 1) <> Kdgrey Then
ppy = ppy - 1
ppx = ppx - 1
End If
Case "9"
If pstamina > 0 And Point(ppx + 1, ppy - 1) <> Kdgrey Then
ppy = ppy - 1
ppx = ppx + 1
End If
Case "1"
If pstamina > 0 And Point(ppx - 1, ppy + 1) <> Kdgrey Then
ppy = ppy + 1
ppx = ppx - 1
End If
Case "3"
If pstamina > 0 And Point(ppx + 1, ppy + 1) <> Kdgrey Then
ppy = ppy + 1
ppx = ppx + 1
End If
Case "5", "."
If Int(1 + Rnd * 50) < phealth And pstamina < 100 Then pstamina = pstamina + Int(1.5 + Rnd * (phealth / 25))
End Select
If Point(ppx, ppy) = krubble Then pwounds = pwounds + checkrubble(ppx, ppy)
If Point(ppx, ppy) = kcrystal Then pwounds = pwounds + checkcrystal(ppx, ppy)
If Point(ppx, ppy) = ktree1 Then
ppx = lastx: ppy = lasty
End If
If Point(ppx, ppy) = ktree2 Then
ppx = lastx: ppy = lasty
End If
If Point(ppx, ppy) = ktree3 Then
ppx = lastx: ppy = lasty
End If
If Point(ppx, ppy) = ktree4 Then
ppx = lastx: ppy = lasty
End If
If Point(ppx, ppy) = kcactus1 Or Point(ppx, ppy) = kcactus2 Then
Print "Ouch... that hurts.."
dmg = Int(Rnd * 5) - 2: If dmg < 0 Then dmg = 0
If dmg > 1 Then Print "You got poked for "; dmg; " pt(s) of damage"
pwounds = pwounds + dmg
ppx = lastx: ppy = lasty
End If
If Point(ppx, ppy) = kwaste And Int(1 + Rnd * 102) > phealth Then
tinc = (Int(1 + Rnd * 5) - 2) / 20: If tinc < .05 Then tinc = 0
ptemp = ptemp + tinc
End If
If Int(1 + Rnd * 80 + pwounds) > phealth Then pstamina = pstamina - 1
If Point(ppx, ppy) = kslime Then
Print "The slime is nauseating...";
If Int(Rnd * 120) > phealth Then phealth = phealth - Int(Rnd * 4)
If Int(Rnd * 120) > phealth Then
Select Case Int(1 + Rnd * 6)
Case 1, 2, 3
Print " it's making you itch."
Case 4, 5, 6
Print " it's feel's like it is burning you."
wounds = wounds + Abs(Int(Rnd * 2 - Rnd * 2))
pexpo = Int(Rnd * 5) - 2: If pexpo < 1 Then pexpo = 0
prads = prads + pexpo
If pexpo > 0 Then phealth = phealth - 1
End Select
End If
End If
If Point(ppx, ppy) = kwater Then ptemp = ptemp - Int(Abs(Rnd * 2 - Rnd * 2))
If Point(ppx, ppy) = klava Then
ptemp = ptemp + 100
dmg = 10 + Int(Rnd * 20)
pwounds = pwounds + dmg
Print "YOU ARE STANDING IN LAVA !!!"
Print "....suffering "; dmg; " points of damage !"
End If
If ptemp < 0 Then
Print "You are dangerously COLD .... brrrrr"
pstamina = pstamina - Int(Rnd * 2)
If Int(1 + Rnd * (50 + Abs(ptemp))) > pstamina Then
pwounds = pwounds + Int(1 + Rnd * 2)
phealth = phealth - Int(Rnd * 2)
End If
End If
tcheck = ptemp + Rnd * 10
If tcheck > 108 Then
pstamina = pstamina - 1
Print "You are dangerously warm!"
If Int(1 + Rnd * ptemp) > pstamina Then
pwounds = pwounds + 1
phealth = phealth - Int(Rnd * 2)
End If
End If
If ptemp < 98 Then ptemp = ptemp + 1
If ptemp > 107 Then ptemp = Int((ptemp + 107) / 2)
If Point(ppx, ppy) = Klgrey Then
If ptemp > 98 Then ptemp = ptemp - 0.1
End If
If Int(1 + Rnd * (100 + prads)) > phealth * 1.5 Then
phealth = phealth - 1
pstamina = pstamina - 1
dmg = Int(Rnd * 5) - 2: If dmg < 1 Then dmg = 0
If Int(1 + Rnd * 100) > phealth Then pwounds = pwounds + dmg
End If
If pstamina < 20 Then
Print "You are ";
If pstamina < 1 Then
Print "exhausted."
Else
Print "fatigued."
End If
End If
If wounds > phealth Then
Print "You are in intense pain !"
pstamina = pstamina - Int(Rnd * 2)
End If
If pstamina < 1 Then pstamina = 0
If Point(ppx, ppy) = kexit Then
Print
Print "YOU HAVE FOUND THE EXIT"
Print
Print "it took you "; turn; " turns after starting "; start_dx; " spaces away from the exit."
Print
kk$ = Chr$(27)
End If
If phealth < 1 Or pwounds > 99 Then
Print "YOU HAVE PERISHED DUE TO YOUR POOR CONDITION."
Print
Print "(press any key to continue)"
any$ = Input$(1)
kk$ = Chr$(27)
End If
Loop Until kk$ = Chr$(27)
Print "GAME OVER"
Print "play again?"
Print "Y or N?"
Do
ask$ = Input$(1)
ask$ = UCase$(ask$)
Loop Until ask$ = "Y" Or ask$ = "N"
If ask$ = "Y" Then
Screen cmap
GoTo restartdungeon
End If
System
'SUBS======================================================================
'$INCLUDE: 'DTDtiles.bi'
'==========================================================================
Sub bisectrect (r)
If r > 0 Or r < rect_count + 1 Then
Select Case Int(1 + Rnd * 6)
Case 1, 2, 3 'vertical split
tries = 0
Do
tries = tries + 1
vpercent = (Int(1 + Rnd * 4) + Int(1 + Rnd * 4)) * .1
Loop Until vpercent * rect(r).ww >= min_rectd And vpercent * rect(r).hh >= min_rectd Or tries > 7
If tries < 8 Then
oldWW = Int(rect(r).ww * vpercent)
newX = rect(r).xx + oldWW
newWW = rect(r).ww - oldWW
If oldWW >= min_rectd And newWW >= min_rectd Then
rect(r).ww = oldWW
newrect newX, rect(r).yy, newWW, rect(r).hh, rect(r).lk, rect(r).fk
End If
End If
Case 4, 5, 6 'horizontal split
tries = 0
Do
tries = tries + 1
vpercent = (Int(1 + Rnd * 4) + Int(1 + Rnd * 4)) * .1
Loop Until vpercent * rect(r).ww >= min_rectd And vpercent * rect(r).hh >= min_rectd Or tries > 7
If tries < 8 Then
oldHH = Int(rect(r).hh * vpercent)
newYY = (rect(r).yy + oldHH)
newHH = rect(r).hh - oldHH
If oldHH >= min_rectd And newHH >= min_rectd Then
rect(r).hh = oldHH
newrect rect(r).xx, newYY, rect(r).ww, newHH, rect(r).lk, rect(r).fk
End If
End If
End Select
End If
End Sub
Sub wrect (rx, ry, ww, hh, line_klr As _Unsigned Long, fill_klr As _Unsigned Long)
If fill_klr > 0 Then Line (rx, ry)-(rx + ww - 1, ry + hh - 1), fill_klr, BF
If line_klr > 0 Then Line (rx, ry)-(rx + ww - 1, ry + hh - 1), line_klr, B
End Sub
Sub drawrect (r)
wrect rect(r).xx, rect(r).yy, rect(r).ww, rect(r).hh, rect(r).lk, rect(r).fk
End Sub
Sub newrect (XX, YY, WW, HH, klk, kfl)
rect_count = rect_count + 1
ReDim _Preserve rect(rect_count) As rect_type
rect(rect_count).xx = XX
rect(rect_count).yy = YY
rect(rect_count).ww = WW
rect(rect_count).hh = HH
rect(rect_count).lk = klk
rect(rect_count).fk = kfl
rect(rect_count).notes = "newrect"
End Sub
Sub addwater (rno, pcx, pcy, scale)
prr = Int(6 + Rnd * (12 * scale))
preps = (3 + Int(Rnd * prr))
For wr = 1 To preps
pcxx = pcx + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
pcyy = pcy + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = pcxx - x To pcxx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If pcyy + y >= rect(rno).yy And pcyy + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, pcyy + y)
If kk = kwaste Or kk = kgrass Or kk = Klgrey Then
PSet (x2, pcyy + y), kwater
End If
End If
End If
Next
y = y + 1
Wend
prr = Int((prr + Int(6 + Rnd * (12 * scale))) / 2)
Next
End Sub
Sub addgrass (rno, pcx, pcy, scale)
prr = Int(6 + Rnd * (12 * scale))
preps = (3 + Int(Rnd * prr))
For wr = 1 To preps
pcxx = pcx + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
pcyy = pcy + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = pcxx - x To pcxx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If pcyy + y >= rect(rno).yy And pcyy + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, pcyy + y)
If kk = kwaste Then
PSet (x2, pcyy + y), kgrass
End If
End If
End If
Next
y = y + 1
Wend
prr = Int((prr + Int(6 + Rnd * (12 * scale))) / 2)
Next
End Sub
Sub addtrees (rno, pcx, pcy, scale)
prr = Int(6 + Rnd * (12 * scale))
preps = (3 + Int(Rnd * prr))
For wr = 1 To preps
pcxx = pcx + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
pcyy = pcy + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = pcxx - x To pcxx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If pcyy + y >= rect(rno).yy And pcyy + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, pcyy + y)
If kk = kgrass Then
If Int(1 + Rnd * 100) < 20 Then
tc = Int(1 + Rnd * 4)
Select Case tc
Case 1
PSet (x2, pcyy + y), ktree1
Case 2
PSet (x2, pcyy + y), ktree2
Case 3
PSet (x2, pcyy + y), ktree3
Case 4
PSet (x2, pcyy + y), ktree4
End Select
End If
End If
End If
End If
Next
y = y + 1
Wend
prr = Int((prr + Int(6 + Rnd * (12 * scale))) / 2)
Next
End Sub
Sub addcactus (rno, pcx, pcy, scale)
prr = Int(6 + Rnd * (12 * scale))
preps = (3 + Int(Rnd * prr))
For wr = 1 To preps
pcxx = pcx + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
pcyy = pcy + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = pcxx - x To pcxx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If pcyy + y >= rect(rno).yy And pcyy + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, pcyy + y)
If kk = kwaste Then
If Int(1 + Rnd * 100) < 15 Then
tc = Int(1 + Rnd * 2)
Select Case tc
Case 1
PSet (x2, pcyy + y), kcactus1
Case 2
PSet (x2, pcyy + y), kcactus2
End Select
End If
End If
End If
End If
Next
y = y + 1
Wend
prr = Int((prr + Int(6 + Rnd * (12 * scale))) / 2)
Next
End Sub
Sub addslime (rno, pcx, pcy, scale)
prr = Int(5 + Rnd * (10 * scale))
preps = (3 + Int(Rnd * prr))
For wr = 1 To preps
pcxx = pcx + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
pcyy = pcy + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = pcxx - x To pcxx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If pcyy + y >= rect(rno).yy And pcyy + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, pcyy + y)
If kk = Klgrey Or kk = kwater Or kk = kgrass Then
PSet (x2, pcyy + y), kslime
End If
If kk = kwaste And Int(Rnd * 100) < 75 Then
PSet (x2, pcyy + y), kslime
End If
End If
End If
Next
y = y + 1
Wend
prr = Int((prr + Int(6 + Rnd * (12 * scale))) / 2)
Next
End Sub
Sub addlava (rno, pcx, pcy, scale)
prr = Int(5 + Rnd * (10 * scale))
preps = (3 + Int(Rnd * prr))
For wr = 1 To preps
pcxx = pcx + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
pcyy = pcy + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = pcxx - x To pcxx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If pcyy + y >= rect(rno).yy And pcyy + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, pcyy + y)
If kk = Klgrey Or kk = kwater Or kk = kslime Or kk = kgrass Or kk = kwaste Then
If kk = kwater Then
If Abs(y) < prr / 2 Then
PSet (x2, pcyy + y), klava
Else
Select Case Int(1 + Rnd * 12)
Case 1, 2, 3, 4, 5
PSet (x2, pcyy + y), klava
Case 6, 7, 8
PSet (x2, pcyy + y), krubble
Case 9, 10
PSet (x2, pcyy + y), Klgrey
Case 11
PSet (x2, pcyy + y), Kdgrey
Case 12
PSet (x2, pcyy + y), kcrystal
End Select
End If
Else
PSet (x2, pcyy + y), klava
End If
End If
End If
End If
Next
y = y + 1
Wend
prr = Int((prr + Int(6 + Rnd * (12 * scale))) / 2)
Next
End Sub
Sub addfungus (rno, pcx, pcy, scale)
prr = Int(2 + Rnd * (2 * scale))
preps = (3 + Int(Rnd * prr))
For wr = 1 To preps
pcxx = pcx + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
pcyy = pcy + Int(Rnd * (prr / 2)) - Int(Rnd * (prr / 2))
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = pcxx - x To pcxx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If pcyy + y >= rect(rno).yy And pcyy + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, pcyy + y)
If kk = Klgrey Or kk = kwater Then
If Int(1 + Rnd * 100) <= 30 Then PSet (x2, pcyy + y), kfungus
End If
If kk = kgrass Then
If Int(1 + Rnd * 100) <= 65 Then PSet (x2, pcyy + y), kfungus
End If
If kk = kwaste Then
If Int(1 + Rnd * 100) <= 15 Then PSet (x2, pcyy + y), kfungus
End If
End If
End If
Next
y = y + 1
Wend
prr = Int((prr + Int(6 + Rnd * (12 * scale))) / 2)
Next
End Sub
Function checkrubble (xx, yy)
stumblecheck = Int(1 + Rnd * 120)
dmg = 0
If stumblecheck > health Then
Print "whooops.... you stumbled on the rubble...";
Select Case Int(1 + Rnd * 20)
Case 1
If Point(ppx - 1, ppy - 1) <> Kdgrey Then
ppx = ppx - 1: ppy = ppy - 1
End If
Case 2
If Point(ppx, ppy - 1) <> Kdgrey Then
ppy = ppy - 1
End If
Case 3
If Point(ppx + 1, ppy + 1) <> Kdgrey Then
ppx = ppx + 1: ppy = ppy + 1
End If
Case 4
If Point(ppx - 1, ppy) <> Kdgrey Then
ppx = ppx - 1
End If
Case 6
If Point(ppx + 1, ppy) <> Kdgrey Then
ppx = ppx + 1
End If
Case 7
If Point(ppx - 1, ppy + 1) <> Kdgrey Then
ppx = ppx - 1: ppy = ppy + 1
End If
Case 8
If Point(ppx, ppy + 1) <> Kdgrey Then
ppy = ppy + 1
End If
Case 9
If Point(ppx + 1, ppy + 1) <> Kdgrey Then
ppy = ppy + 1: ppx = ppx + 1
End If
Case 10, 11, 12, 13, 14
Print " knocking the wind out of you... ";
pstamina = Int(pstamina / 4)
Case 15, 16, 17, 18, 19, 20
ppx = lastx: ppy = lasty
Print "you tumble back...";
End Select
dmg = Abs(Int((Rnd * 3) - (Rnd * 3)))
If dmg > 0 Then
Print "you suffer "; dmg; " points of damage!"
Else
Print "."
End If
End If
checkrubble = dmg
End Function
Sub addcornerrubble (rno)
numcorn = Int(1 + Rnd * 4)
For crr = 1 To numcorn
Select Case Int(Rnd * 5)
Case 1
crx = rect(rno).xx + 1
cry = rect(rno).yy + 1
Case 2
crx = rect(rno).xx + 1
cry = rect(rno).yy + rect(rno).hh - 2
Case 3
crx = rect(rno).xx + rect(rno).ww - 2
cry = rect(rno).yy + 1
Case 4
crx = rect(rno).xx + rect(rno).ww - 2
cry = rect(rno).yy + rect(rno).hh - 2
End Select
prr = Int((rect(rno).hh + rect(rno).ww) / 12)
rsqrd = prr * prr
y = -prr
While y <= prr
x = Int(Sqr(rsqrd - y * y))
For x2 = crx - x To crx + x
If x2 >= rect(rno).xx And x2 <= rect(rno).xx + rect(rno).ww Then
If cry + y >= rect(rno).yy And cry + y <= rect(rno).yy + rect(rno).hh Then
kk = Point(x2, cry + y)
If kk = kwaste And Int(1 + Rnd * 100) < (cornerrubblechance * 2.5) Then
PSet (x2, cry + y), krubble
End If
End If
End If
Next
y = y + 1
Wend
Next crr
End Sub
Function checkcrystal (xx, yy)
climbcheck = Int(1 + Rnd * 100)
If climbcheck > phealth Then
Print "You just can't gain any purchase to climb the crystal."
Else
stumblecheck = Int(1 + Rnd * 120)
dmg = 0
If stumblecheck > health Then
Print ".... you fell from the crytsal...";
Select Case Int(1 + Rnd * 9)
Case 1
If Point(ppx - 1, ppy - 1) <> Kdgrey Then
ppx = ppx - 1: ppy = ppy - 1
End If
Case 2
If Point(ppx, ppy - 1) <> Kdgrey Then
ppy = ppy - 1
End If
Case 3
If Point(ppx + 1, ppy + 1) <> Kdgrey Then
ppx = ppx + 1: ppy = ppy + 1
End If
Case 4
If Point(ppx - 1, ppy) <> Kdgrey Then
ppx = ppx - 1
End If
Case 5
ppx = lastx: ppy = lasty
Case 6
If Point(ppx + 1, ppy) <> Kdgrey Then
ppx = ppx + 1
End If
Case 7
If Point(ppx - 1, ppy + 1) <> Kdgrey Then
ppx = ppx - 1: ppy = ppy + 1
End If
Case 8
If Point(ppx, ppy + 1) <> Kdgrey Then
ppy = ppy + 1
End If
Case 9
If Point(ppx + 1, ppy + 1) <> Kdgrey Then
ppy = ppy + 1: ppx = ppx + 1
End If
End Select
dmg = Abs(Int((Rnd * 4) - (Rnd * 4)))
If dmg > 0 Then
Print "you suffer "; dmg; " points of damage!"
Else
Print "."
End If
End If
End If
checkcrystal = dmg
End Function
Sub coltileat (tn, ktc, xx, yy)
Dim kc As _Unsigned Long
_Source tiles&
_Dest ms
tx = tilespot(tn, 1): ty = tilespot(tn, 2)
For px = 0 To 16
For py = 0 To 15
kc = Point(tx + px, ty + py)
If kc <> Kblack Then
PSet (xx + px, yy + py), ktc
End If
Next py
Next px
_Source dmap
End Sub
Function getwalltile
wt = Int(1 + Rnd * 8)
Select Case wt
Case 1, 2, 3
wt = 8
Case 4, 5
wt = 15
Case 6
wt = 14
Case 7
wt = 11
Case 8
wt = 12
End Select
getwalltile = wt
End Function
Sub makemonsters
ReDim mp(1000, 1000) As Integer
For m = 1 To 300
monst(m).tile = 144 + Int(Rnd * 239)
monst(m).mx = Int(11 + Rnd * 980)
monst(m).my = Int(11 + Rnd * 980)
mp(monst(m).mx, monst(m).my) = m
Next m
End Sub
Sub handlemonsters
ReDim mp(1000, 1000)
For m = 1 To 300
If monst(m).my <> 0 Then
If Int(Rnd * 100) < 30 Then
If ppx < monst(m).mx Then monst(m).mx = monst(m).mx - 1
If ppx > monst(m).mx Then monst(m).mx = monst(m).mx + 1
If ppy < monst(m).my Then monst(m).my = monst(m).my - 1
If ppy > monst(m).my Then monst(m).my = monst(m).my + 1
mk = Point(monst(m).mx, monst(m).my)
If mk = klava Then
Print "Monster Falls in lava! ";
monst(m).my = 0
monst(m).mx = 0
End If
End If
End If
mp(monst(m).mx, monst(m).my) = m
Next m
End Sub
Function harvestfungus
If Point(ppx, ppy) = kfungus And pstamina > 0 Then
nf = Int(Rnd * 3)
Print "You root among the fungus and harvest "; nf; " decent mushrooms";
_Dest cmap
PSet (ppx, ppy), kfloor
_Dest ms
pstamina = pstamina - Int(Rnd * 3)
If Int(1 + Rnd * 100) > phealth Then
Print " getting a face full of toxic spores."
phealth = phealth - Int(Rnd * 4)
Else
Print "."
End If
If Int(Rnd * 100) < 67 Then
_Dest dmap
Select Case Int(Rnd * 3)
Case 0
PSet (ppx, ppy), kfloor2
Case 1
PSet (ppx, ppy), kfloor3
Case 2
PSet (ppx, ppy), kfloor4
_Dest ms
End Select
End If
harvestfungus = nf
Else
Print "No mushrooms to pick here."
End If
End Function
Sub eatshrooms
If pshrooms < 1 Then Print "You don't have any mushrooms."
If pshrooms > 0 Then
pshrooms = pshrooms - 1
eat = Int(1 + Rnd * 100)
If eat > phealth Then
Select Case eat
Case 1 To 50
Print "Oh.... that was horrible, it makes you terribly ill."
phealth = Int(phealth * .7)
pstamina = Int(pstamina / 2)
pwounds = pwounds + Int(1 + Rnd * 3)
Case 51 To 75
Print "Oh..That was awful, it tasted like dirt."
pstamina = Int(pstamina * .9)
phealth = Int(phealth * .9)
Case 76 To 100
Print "That didn't go down right."
pstamina = Int(pstamina * .9)
End Select
Else
Select Case eat
Case 1 To 25
Print "You've eatem worse."
phealth = phealth + Int(Rnd * 2)
pstamina = pstamina + 2
Case 26 To 75
Print "That tasted great!"
pwounds = pwounds - Int(Rnd * 2)
phealth = phealth + Int(1 + Rnd * 6)
pstamina = pstamina + 3
Case 76 To 100
pwounds = pwounds - Int(Rnd * 3)
Print "Munch, munch... well that hit the spot."
pstamina = pstamina + 4
End Select
End If
If pstamina < 1 Then pstamina = 0
If phealth < 1 Then phealth = 0
If phealth > 100 Then phealth = 100
If pwounds < 1 Then pwounds = 0
If pstamina > 100 Then pstamina = pstamina - 1
End If
End Sub
Sub minimap
minx = ppx - 50
maxx = ppx + 50
miny = ppy - 50
maxy = ppy + 50
mvx = 51
mvy = 51
If minx < 10 Then
minx = 10
maxx = 111
End If
If miny < 10 Then
miny = 10
maxy = 111
End If
If maxx > 990 Then
maxx = 990
minx = 879
End If
If maxy > 990 Then
maxy = 990
miny = 879
End If
miniy = 0
For ly = miny To maxy
miniy = miniy + 1
minix = 0
For lx = minx To maxx
minix = minix + 1
km = Point(lx, ly)
PSet (minix + 400, miniy + 200), km
Next
Next
End Sub
RE: DeathTestvDungeon - justsomeguy - 10-30-2022
This is very cool!
Your procedural generation is a lot further along than my experiments. Not sure if you are using it or not, but "wave function collapse" is a cool technique, if you are interested in procedural generation.
I love using the Kenny 1-bit tile set. I used it in my own rouge-like which you have already seen.
Something I found early on, was that having full brightness on every visible tile made it kinda, bleh. Fog of war can really increase the tension of a level.
So, I had decided to bake in lighting on my static components of the map. I was/will add pre-computed lighting for my sprites. Having a cache of say 8 lighting levels for each non-static tile in my level. Then based on distance from each light source you render a light to dark sprite. This would be make for easy and computationally inexpensive feature what can really set the mood for each level. I believe this is how Minecraft did it.
Now you have inspired me to go back and work on my own rouge-like.
RE: DeathTestvDungeon - James D Jarvis - 10-30-2022
That Kenney tile set was just extensive enough and easy to edit I couldn't keep away from using it.
As for lighting I was figuring on eventually just dropping a lighting mask over the play area image on the mainscreen with a varying alpha channel, that would cut out a lot of computation and wouldn't require keeping track of any extra data elsewhere.
|