Challenge: 
Winner?: 
No
Code Snippet: 
`Rpg challenge by Ric

`display settings
if check display mode(1024,768,32)=1 then set display mode 1024,768,32
sync on
sync rate 30
hide mouse

global name$
titles()

`camera and light settings
autocam off
set camera range 0.01,10000
color backdrop 0
hide light 0
set ambient light 20
make light 1


`creat sounds

createsound("wave",1,6200,10000,2000,30,0.01,10,5,0,0,0.05)
createsound("foot steps",2,200,20,8000,.1,4.0,2.1,10,9.2,9.2,10)
createsound("ding",3,800,1000,6000,0,0.2,0.1,.5,1.2,0.2,10)
createsound("vibrato1",4,500,8000,8000,-0.0001,0.03,0.1,0.4,0,0,.1)
createsound("vibrato2",5,400,8000,8000,-0.0002,0.03,0.1,0.4,0,0,.1)
createsound("vibrato3",6,600,8000,8000,-0.0003,0.03,0.1,0.4,0,0,.1)



`set the randomize seed to the timer, so random events are different each time
randomize timer()

`set size of terrain
global matrixsize
matrixsize=100

`fog settings
fog on
fog color rgb(180,180,250)
fog distance matrixsize*0.6

`set initial value for object numbers
global object_seed
object_seed=1000000

`set initial value for image numbers
global image_seed
image_seed=1000000

create bitmap 1,screen width(),screen height()
set current bitmap 1

`function calls for creating world
global wallpaper
global light
make_wallpaper()
global internaldoor
global dim table(2000000)
global dim collisiondummy(2000000)
global room
global safe
make_room()


`position light for world illumination
position light 1,200,100,200
set light range 1,100000

global grassimage
create_grass()
global doortexture
make_door_texture()
global housetexture
make_house_texture()
global skyimage
create_sky()
global waterimage
global water
global water2
global theta#
create_water_image()
create_water()
global terrainimage
terraform()
global sphere1
global sphere2
global sphere3
create_skysphere()
global boat
global inboat
global jetty
make_boat()



`set house variables
global inroom
global numberofhouseentered
global number_of_houses
number_of_houses=15
`set up an array to store house numbers
global dim house(number_of_houses)
global dim door(number_of_houses)
global dim roof(number_of_houses)


global internaltowerdoor
global tower
global towerdoor
global key
global keyshaft
global navigator
global safeunlocked
global bomb
global bombdummy
global bomboutofhouse
global bombcollected
global bombwet
global boatunlocked
global runningshoes
global flippers

make_tower()
`make houses with numbers from 1 to max number of houses
for house_number=1 to number_of_houses
  make_house(house_number)
next house_number

make_tower_room()
make_bomb()

`make dummy for camera to follow
make object cube 1,0.01
hide object 1
make object collision box 1,-0.05,-0.05,-0.05,0.05,0.05,0.05,0

global collision
global flying
global introover
global footsteptimer
global info
global unlocked
global blob
global sealevel#
global inwater
global loopnumber


ink 0,0
set text size 20

set current bitmap 0

`set initial player position
position object 1,matrixsize/2,get ground height(1,50,50)+2,matrixsize/2

`set initial camera position before intro
position camera object position x(1),1.5,-100

global map
global mapimage
global pointer
setup_navigator()

gosub beginning

loop sound 1

`****************************************

`main program loop
do

`if returnkey()=1 then flying=1

`message subroutines
gosub display_message


`function calls for continuous events
if introover=0 then intro()
if introover=1 then move_camera()
if introover=1 then collision()
move_boat()
move_water()

if gotnavigator=1 then navigate()

`text 0,0,str$(screen fps())
`text 0,100,"house number: "+str$(numberofhouseentered)
`text 0,500,str$(table(tower))
sync
loop

`****************************************

`functions

function terraform

`set size of terrain
rows=60
columns=60

`create terrain
make matrix 1,matrixsize,matrixsize,columns,rows

`set mountain peaks
number_of_peaks=rnd(35)+10
max_height=15

dim peakx(number_of_peaks)
dim peakz(number_of_peaks)
dim height(number_of_peaks)
for peak=1 to number_of_peaks
  `set x,z coordinates for peak
  peakx(peak)=rnd(columns-10)+5
  peakz(peak)=rnd(rows-10)+5
  `set height of peak
  height(peak)=rnd(max_height)+10
  `create peak
  set matrix height 1,peakx(peak),peakz(peak),height(peak)
next peak

num=rows*columns
dim obnum(rows+1,columns+1)
dim v#(rows,columns)

`give each tile an x,z coordinate for use later
for x=1 to rows
for z=1 to columns
obnum(x,z)=ob
ob=ob+1
next z
next x

`texture matrix
prepare matrix texture 1,grassimage,rows,columns
tile=1
for x=rows-1 to 0 step -1
for z=0 to columns-1
set matrix tile 1,z,x,tile
inc tile
next z
next x


`adjust height of points between peaks
elasticity#=0.3
damping#=0

for time=1 to 100

for peak=1 to number_of_peaks
  set matrix height 1,peakx(peak),peakz(peak),height(peak)
next peak

for x=1+1 to rows-1
for z=1+1 to columns-1
if x<rows
distxp1#=get matrix height(1,x+1,z)-get matrix height (1,x,z)
endif
if x>1
distxm1#=get matrix height(1,x-1,z)-get matrix height (1,x,z)
endif
if z<columns
distzp1#=get matrix height(1,x,z+1)-get matrix height (1,x,z)
endif
if z>1
distzm1#=get matrix height(1,x,z-1)-get matrix height (1,x,z)
endif
vectorsum#=distxp1#+distxm1#+distzp1#+distzm1#
a#=vectorsum#*elasticity#
v#(obnum(x,z))=v#(obnum(x,z))+a#
set matrix height 1,x,z,get matrix height(1,x,z)+v#(obnum(x,z))
v#(obnum(x,z))=v#(obnum(x,z))*damping#
next z
next x
update matrix 1
next time



endfunction




function check_free_object_number

`this handy function means that you never have to worry about
`remembering object numbers.  You just give them names you can remember,
`and this function will find the next available number to assosciate
`with that name.  Just call the function by, for example, writing:
`
`ball=check_free_object_number
`make object sphere ball,1

object=object_seed
repeat
inc object
until object exist(object)=0

endfunction object

function check_free_image_number()

`this functionworks in the same way as the check_free_object function,
`except it works for images.

image=image_seed
repeat
inc image
until image exist(image)=0

endfunction image

function create_grass

`make a shaded box
box 0,0,100,100,rgb(100,150,100),rgb(50,200,20),rgb(80,0,10),rgb(150,200,0)

`and speckle it with random dots
for x=0 to 100
  for y=0 to 100
    if rnd(5)=0
      r=rnd(150)
      g=rnd(250)
      b=rnd(100)
      ink rgb(r,g,b),0
      dot x,y
    endif
  next x
next y


grassimage=check_free_image_number()
get image grassimage,0,0,100,100

endfunction

function create_skysphere

`get image for sphere by taking snapshot of terrain
terrainimage=check_free_image_number()
set camera fov 90
position camera matrixsize/2.0,3,-matrixsize*0.3
sync
get image terrainimage,0,0,screen width(),screen height()
set camera fov 60

`sphere 1 (mountains near) - just a sphere textured with the captured image
sphere1=check_free_object_number()
make object sphere sphere1,matrixsize*4
set object collision off sphere1
set object cull sphere1,0
texture object sphere1,terrainimage
set object texture sphere1,2,1
scale object texture sphere1,3,1
set object fog sphere1,0
set object light sphere1,0
set object transparency sphere1,4
position object sphere1,matrixsize/2,0,matrixsize/2

`sphere 2 (mountains far) - and another one further out. The inner sphere must be
`transparent, though, to see this one.
sphere2=check_free_object_number()
make object sphere sphere2,matrixsize*5
set object collision off sphere2
yrotate object sphere2,30
set object cull sphere2,0
texture object sphere2,terrainimage
set object texture sphere2,2,1
scale object texture sphere2,3,1
set object fog sphere2,0
set object transparency sphere2,4
ghost object on sphere2,4
set object emissive sphere2,rgb(180,150,250)
fade object sphere2,70
position object sphere2,matrixsize/2,0,matrixsize/2

`sphere 3 (sky) - a third, outer sphere for the sky
sphere3=check_free_object_number()
make object sphere sphere3,matrixsize*6
set object collision off sphere3
set object cull sphere3,0
texture object sphere3,skyimage
scale object texture sphere3,1,1.8
set object light sphere3,0
set object fog sphere3,0
position object sphere3,matrixsize/2,0,matrixsize/2

endfunction

function create_sky()
`creates a dark to light bluish gradient
cls
for n=0 to 250
  ink rgb(n,n,250),0
  line 0,n,250,n
next n

skyimage=check_free_image_number()
get image skyimage,0,0,250,250

endfunction


function create_water_image

`creates a shaded box
box 0,0,100,100,rgb(150,150,200),rgb(50,200,200),rgb(80,0,200),rgb(150,100,200)

`and speckles with white bits
for x=0 to 100
  for y=0 to 100
    if rnd(5)=0
      r=(250)
      g=(250)
      b=(250)
      ink rgb(r,g,b),0
      dot x,y
    endif
  next x
next y


waterimage=check_free_image_number()
get image waterimage,0,0,100,100



endfunction


function create_water

`just 2 planes textured with the water image
`top layer
water=check_free_object_number()
make object plain water,matrixsize*8,matrixsize*8
set object collision off water
texture object water,waterimage
set object texture water,2,1
scale object texture water,8,8
xrotate object water,90
set object fog water,0
set object emissive water,rgb(220,220,200)
ghost object on water
set alpha mapping on water,20
`bottom layer
water2=check_free_object_number()
make object plain water2,matrixsize*8,matrixsize*8
set object collision off water2
texture object water2,waterimage
xrotate object water2,90
position object water2,0,1,0
set object texture water2,2,1
scale object texture water2,8,8
set object light water2,0
set object fog water2,0

endfunction

function move_water

`moves the texture along a bit
scroll object texture water,0.001,0
scroll object texture water2,-0.001,0
`and moves the water up and down according to a sine wave
position object water,0,0.5*sin(theta#)+3+sealevel#,0
inc theta#,1

position object water2,0,sealevel#,0
inc sealevel#,0.0003

`position object jetty,object position x(jetty),sealevel#+3.3,object position z(jetty)

`adjust wave volume according to height above water
volume#=600/(object position y(1)+1)
if volume#>100 then volume#=100
if volume#<80 then volume#=80
set sound volume 1,volume#

endfunction

function move_camera

if returnkey()=1 then move object 1,-2

walkmode=1
if shiftkey()=1 and runningshoes=0 and inwater=0 then walkmode=2
if runningshoes=1 and inwater=0 then walkmode=4
if flippers=1 and inwater=1 then walkmode=3
if inboat=1 then walkmode=5
speed#=0
if upkey()=1 then speed#=0.05*walkmode
if downkey()=1 then speed#=-0.05
if rightkey()=1 then yrotate object 1,object angle y(1)+2
if leftkey()=1 then yrotate object 1,object angle y(1)-2
`if inkey$()="a" then position object 1,object position x(1),object position y(1)+0.1,object position z(1)
`if inkey$()="z" then position object 1,object position x(1),object position y(1)-0.11,object position z(1)

`reposition dummy object
position object 1,object position x(1)+speed#*sin(object angle y(1)),object position y(1),object position z(1)+speed#*cos(object angle y(1))

`set camera to dummy object's position and orientation
position camera object position x(1),object position y(1),object position z(1)
yrotate camera object angle y(1)

`play footstep sound
if inwater=0
  if speed#<>0 and footsteptimer=0 then play sound 2
  inc footsteptimer
  if  footsteptimer>20/walkmode then footsteptimer=0
endif

`move bomb with player if collected
if inroom=0
if bombcollected=1
  position object bomb,object position x(1),100,object position z(1)
  yrotate object bomb,object angle y(1)
  move object bomb,1
  position object bomb,object position x(bomb),get ground height(1,object position x(bomb),object position z(bomb)),object position z(bomb)
  position object bombdummy,object position x(bomb),object position y(bomb),object position z(bomb)
  if inkey$()="d" then bombcollected=0:move object 1,-0.5
endif
endif

endfunction

function make_house(house)

`give each house a numbered variable ( eg. house(1),house(2), etc,)
` and store the actual object number in that variable
house(house)=check_free_object_number()
make object box house(house),2,2,1
set object collision on house(house)
set object cull house(house),0
texture object house(house),housetexture
scale object texture house(house),20,40
roof(house)=check_free_object_number()
make object box roof(house),1.98,1,1
color object roof(house),rgb(130,130,130)
position object roof(house),0,1,0
xrotate object roof(house),45
glue object to limb roof(house),house(house),0
door(house)=check_free_object_number()
make object box door(house),0.2,0.4,0.02
texture object door(house),doortexture
position object door(house),0,0,0
glue object to limb door(house),house(house),0

repeat
x=rnd(matrixsize)
z=rnd(matrixsize)
goodlocation=1
position object house(house),x,get ground height(1,x,z),z
if object position y (house(house))<5 then goodlocation=5
if get ground height(1,object position x(house(house))+1,object position z(house(house)))>object position y(house(house))+0.4 or get ground height(1,object position x(house(house))+1,object position z(house(house)))<object position y(house(house))-0.4 then goodlocation=0
if get ground height(1,object position x(house(house)),object position z(house(house))+1)>object position y(house(house))+0.4 or get ground height(1,object position x(house(house))+1,object position z(house(house)))<object position y(house(house))-0.4 then goodlocation=0
if house>1
  for checkprevioushouses=1 to house-1
    if x<object position x(house(checkprevioushouses))+4 and x>object position x(house(checkprevioushouses))-4 and z<object position z(house(checkprevioushouses))+4 and z>object position z(house(checkprevioushouses))-4 then goodlocation=0
  next checkprevioushouses
endif
until goodlocation=1

`glue object to limb door(house),house(house),0
yrotate object house(house),rnd(360)
position object door(house),object position x(door(house)),get ground height(1,object position x(house(house))-0.5*sin(object angle y(house(house))),object position z(house(house))-0.5*cos(object angle y(house(house))))+0.2-object position y(house(house)),object position z(door(house))
position object door(house),object position x(door(house)),object position y(door(house)),object position z(door(house))-0.492

endfunction

function make_house_texture

cls
ink rgb(200,200,180),0
box 0,0,5,15
ink rgb(100,60,40),0
box 0,0,4,14
housetexture=check_free_image_number()
get image housetexture,0,0,5,15

endfunction

function make_door_texture

cls
colour=rgb(rnd(250),rnd(250),rnd(250))
ink colour,0
box 0,0,8,8
ink 0,0
box 1,1,3,3
box 5,1,7,3
ink colour-100,0
box 1,4,7,7
doortexture=check_free_image_number()
get image doortexture,0,0,8,8,1

endfunction

function make_wallpaper

cls
ink rgb(185,205,255),0
box 0,0,100,100
for x=0 to 100
  for y=0 to 100
    if rnd(5)=0
      ink rgb(rnd(200),rnd(200),rnd(200)),0
      dot x,y
    endif
  next y
next x

wallpaper=check_free_image_number()
get image wallpaper,0,0,100,100

endfunction

function make_room

`room is 20x10

wall1=check_free_object_number()
make object box wall1,20,10,0.1
position object wall1,0,1004.8,-5
texture object wall1,wallpaper
scale object texture wall1,10,10

wall2=check_free_object_number()
make object box wall2,20,10,0.1
position object wall2,0,1004.8,5
texture object wall2,wallpaper
scale object texture wall2,10,10

wall3=check_free_object_number()
make object box wall3,10,10,0.1
yrotate object wall3,90
position object wall3,-10,1004.8,0
texture object wall3,wallpaper
scale object texture wall3,10,10

wall4=check_free_object_number()
make object box wall4,10,10,0.1
yrotate object wall4,90
position object wall4,10,1004.8,0
texture object wall4,wallpaper
scale object texture wall4,10,10

floor=check_free_object_number()
make object box floor,20,10,0.1
xrotate object floor,90
position object floor,0,999.8,0
color object floor,rgb(200,10,20)

ceiling=check_free_object_number()
make object box ceiling,20,10,0.1
xrotate object ceiling,90
position object ceiling,0,1006,0

make light 2
position light 2,9,1004,4
set light range 2,15
lamp=check_free_object_number()
make object plain lamp,0.5,0.5
position object lamp,8.4,1004,3.4
yrotate object lamp,45
texture object lamp,light_image()
set object transparency lamp,5
lampshade=check_free_object_number()
make object cone lampshade,1
position object lampshade,8.4,1004,3.4
ghost object on lampshade,3
lampwire=check_free_object_number()
make object plain lampwire,0.02,4
yrotate object lampwire,45
position object lampwire,8.41,1006,3.41

make_table(room)
position object table(room),7,1002,3

entity=check_free_object_number()
make object cube entity,0.5
color object entity,rgb(0,250,50)
position object entity,7,1002.3,3

internaldoor=check_free_object_number()
make object plain internaldoor,2,4
position object internaldoor,0,1001.8,-4.89
color object internaldoor,rgb(220,20,50)

safe=check_free_object_number()
make object box safe,1,5,1
hide object safe
set object collision off safe
position object safe,-4,1003,4
color object safe,rgb(55,200,0)

endfunction

function enter_house(number)
if unlocked=1
  inroom=1
  show light 2
  hide light 1
  hide light 3
  if numberofhouseentered=1
    show object safe
    set object collision on safe
  else
    hide object safe
    set object collision off safe
  endif
  position object 1,0,1003,-4
  point object 1,0,1003,5
else
  play sound 3
  ink rgb(0,255,0),0
  text 0,20,"Door is locked"
  sync
  wait 1000
  ink 0,0
endif
endfunction

function exit_house()

position object 1,object position x(house(numberofhouseentered)),object position y(1),object position z(house(numberofhouseentered))
set object to object orientation 1,house(numberofhouseentered)
move object 1,-1
yrotate object 1,180
show light 1
inroom=0

endfunction

function light_image()


ink rgb(255,255,0),0
box 0,0,1,1
image=check_free_image_number()
get image image,0,0,1,1
cls
sphere1=check_free_object_number()
make object sphere sphere1,1,30,30
ghost object on sphere1
set object specular power sphere1,50
set object specular sphere1,rgb(200,200,200)
position light 1,0,-1,2
position object sphere1,0,0,3
texture object sphere1,image
a=int(screen width()/3.0)
b=int(screen height()/3.0)
c=int(screen width()*2/3.0)
d=int(screen height()*2/3.0)
sphere2=check_free_object_number()
make object sphere sphere2,0.3
position object sphere2,0,-0.2,3
ghost object on sphere2
sync
light=check_free_image_number()
get image light,a,b,c,d
delete object sphere1
delete object sphere2

endfunction light

function collision


collision=object collision(1,0)

`check collision with external doors
for number=1 to number_of_houses
  if collision=door(number)
    numberofhouseentered=number
    enter_house(number)
  endif
next number

`check collision between player and various objects
if collision=collisiondummy(room) then info=3
if collision=boat and boatunlocked=1 then inboat=1
if collision=boat and boatunlocked=1 and bombcollected=1 then info=7
if collision=boat and boatunlocked=0 then info=6
if collision=towerdoor then enter_tower()
if collision=safe and safeunlocked=1 then info=5
if collision=safe and safeunlocked=0 then info=4
if collision=bombdummy and bombcollected=0 then bombcollected=1



`check collision with internal door
if collision=internaldoor then exit_house()
if collision=internaltowerdoor then exit_tower()

`apply sliding collision
if collision>1
position object 1,object position x(1)-get object collision x(),object position y(1),object position z(1)-get object collision z()
endif

if collision=collisiondummy(tower)
  hide object key
  hide object keyshaft
  hide object navigator
  info=2
endif

`set dummy position to ground level
if inroom=0 and flying=0
  position object 1,object position x(1),get ground height(1,object position x(1),object position z(1))+0.2,object position z(1)
endif

`if in water, set dummy to water level and bob up and down
if object position y(1)<object position y(water)+0.25
  position object 1,object position x(1),object position y(water)+0.2,object position z(1)
  zrotate object 1,5*sin(theta#*4)
  inwater=1
else inwater=0
  zrotate object 1,0
endif

`check bomb isn't in the water
bombwet=0
if inroom=0
if object position y(bomb)<object position y(water) then bombwet=1:info=8
if object position y(house(1))<object position y(water) and bomboutofhouse=0 then bombwet=1:info=8
endif

endfunction

function intro

`camera zoom effect
position camera object position x(1),curvevalue(object position y(1),camera position y(),80),curvevalue(object position z(1),camera position z(),80)
camy#=get ground height(1,camera position x(),camera position z())+0.2
if camy#<object position y(water)+0.2 then camy#=object position y(water)+0.2
position camera camera position x(),camy#,camera position z()
if camera position z()>object position z(1)-0.2
  introover=1:info=1
  position camera object position x(1),object position y(1),object position z(1)
endif

endfunction

`subroutine for setting character options etc.
beginning:
play sound 4:play sound 5:play sound 6
fog color 0
fadein#=0
repeat
fog color rgb(fadein#*0.01*180,fadein#*0.01*180,fadein#*0.01*250)
for object=water to sphere3
set alpha mapping on object,fadein#
next object
inc fadein#,0.5
sync
until fadein#=>100
wait 1000
play sound 3
repeat
text 0,20,"This is an automated message from the Blue Island Central Information System."
text 0,40,"Please enter your user name:"
if keydown=0
  letter$=inkey$()
  name$=name$+letter$
  if keystate(14)=1 then name$=left$(name$,len(name$)-2)
  keydown=1
endif
if inkey$()="" and keystate(14)=0 then keydown=0
text 0,80,name$
sync
until returnkey()=1

repeat
ink 0,0
text 0,20,"Greetings, "+name$+". You are being scanned. Please wait......"
ink rgb(0,255,0),0
line 0,y,screen width(),y
line 0,screen height()-y,screen width(),screen height()-y
inc y,4
sync
until y>=screen height()
ink 0,0
text 0,20,"You have been cleared for access."
text 0,40,"Press any key to transport to shore."
sync
wait key
return

function createsound(name$,soundnumber,frequency#,length#,loudness#,bend#,decay#,vibratospeed#,vibratodepth#,tremelospeed#,tremelodepth#,attack#)

outWord as word
dword1 as dword: dword2 as dword: dword3 as dword: dword4 as dword
dword5 as dword: dword6 as dword: dword7 as dword

samples=int((length#/1000)*44100)

if memblock exist(1) then delete memblock 1
make memblock 1,samples*2+28

` write 28 memblock header bytes
dword1=1      ` gg query: is this the number of channels?
dword2=2      ` gg query: is this the number of bytes per sample?
dword3=22050  ` gg query: seems to be half the number of samples per second - why?
dword4=88200  ` gg query: is this the number of bytes per second?
dword5=4      ` gg query: what does this represent?
dword6=16     ` gg query:     (ditto)            ?
dword7=0      ` gg query:     (ditto)            ?

position=0
write memblock dword 1, position, dword1 : inc position,4
write memblock dword 1, position, dword2 : inc position,4
write memblock dword 1, position, dword3 : inc position,4
write memblock dword 1, position, dword4 : inc position,4
write memblock dword 1, position, dword5 : inc position,4
write memblock dword 1, position, dword6 : inc position,4
write memblock dword 1, position, dword7 : inc position,4

rem generate and write wave
riseinloudness#=loudness#
for x=1 to samples
  outInteger=int(sin((x/122.5)*(frequency#+vibratodepth#*sin(theta#)))*(loudness#-fallinloudness#-riseinloudness#+tremelodepth#*sin(phi#)))*3.0
  if outInteger <-32767 then outInteger=-32767  ` gg query: is this the valid range?
  if outInteger>32767 then outInteger=32767     ` gg query:       (ditto)          ?
  outWord=outInteger
  inc theta#,vibratospeed#
  inc phi#,tremelospeed#
  dec frequency#,bend#

  if fallinloudness#<loudness#
    inc fallinloudness#,decay#
  endif

  if riseinloudness#>0
    dec riseinloudness#,attack#
  endif

  write memblock word 1, position, outWord : inc position,2
next x

if sound exist(soundnumber)=1 then delete sound soundnumber

make sound from memblock 999, 1 ` assumes you won't need sound number 999!
clone sound soundnumber, 999
delete sound 999

` memblock no longer required
delete memblock 1

endfunction

display_message:

if info=1
if dingplayed=0 then play sound 3:dingplayed=1
text 0,20,"Transport complete.  Please proceed to the Information Building (the tallest building on the island)"
text 0,40,"to receive further instructions.  Use arrowkeys to move.  Shift key will make you walk faster"
text 0,60,"Note: If you get lodged anywhere, hit return to jump backwards."
inc messagetime
if messagetime>300 then info=0:messagetime=0:dingplayed=0
endif

if info=2
if dingplayed=0 then play sound 3:dingplayed=1:unlocked=1:gotnavigator=1
text 0,20,"We're glad you finally made it, "+name$+".  Your task is to find the weapon, and"
text 0,40,"move it clear of the rising water.  Unfortunately, it's location is unknown."
text 0,60,"This key will enable you to unlock the doors of all buildings on the island."
text 0,80,"And you might find this electronic navigation system useful too."
text 0,100,"One tip - check the buildings most liable to flooding first, before it's too late."
text 0,120,"Get searching, "+name$+", and good luck."
inc messagetime
if messagetime>800 then info=0:messagetime=0:dingplayed=0
endif

`message for collision with entity
if info=3
if dingplayed=0 then play sound 3:dingplayed=1:ink rgb(0,255,0),0
if numberofhouseentered=1
  text 0,20,"There is a safe in this room."
endif
if numberofhouseentered>8
  text 0,20,"Nothing in this box - try another building."
endif
if numberofhouseentered=2
  text 0,20,"You have collected a safe key"
  safeunlocked=1
endif
if numberofhouseentered=3
  text 0,20,"You have collected a boat key"
  boatunlocked=1
endif
if numberofhouseentered=4
  text 0,20,"You have collected some running shoes"
  runningshoes=1
endif
if numberofhouseentered=5
  text 0,20,"You have found an ice cream.  Yum yum."
endif
if numberofhouseentered=6
  text 0,20,"You have found radioisotope detection goggles.  Any building"
  text 0,40,"containing radioactive material will glow."
  color object roof(1),rgb(255,155,0)
endif
if numberofhouseentered=7
  text 0,20,"You have found a message.  It reads as follows:"
  text 0,40,"'There is a boat moored offshore to the north of the island."
  text 0,60,"You may use it to keep the weapon dry when the water rises."
  text 0,80,"You will need to swim out to it to bring it to shore.'"
endif
if numberofhouseentered=8
  text 0,20,"You have found some swimming flippers"
  flippers=1
endif
inc messagetime
if messagetime>200 then info=0:messagetime=0:dingplayed=0