TGC Codebase Backup



2D textbox following 3D object (FFVII style) by NE0

7th Nov 2003 20:30
Summary

Way awsome those Final Fantasy text dialogs... check it out ;)



Description

Ever wanted to create your own RPG but don`t know how to make textboxes? well here is an example...

features:
- Fully customizeable colours
- Track 3D object(s)
- Stop dialog from moving out of the screen when object is near the screen edge
- Flashing return pic when next dialog can apear
- Messy code (lol)
- Can easily be converted to a function
- typewriter text animation



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    Rem -------------------------------------------------
Rem -- Author : Vincent Hoogendam                  --
Rem -- Demo   : How to display a message box 3d/2d --
Rem -- E-mail : vincent.hoogendam@lycos.nl         --
Rem -------------------------------------------------

Rem First set the display mode (I`ve used 800,600,32) but it can be modified
set display mode 800,600,32
dispx# as integer
dispy# as integer
dispx#=800
dispy#=600
 
line1$="Enter sentance number   1"
line2$="Enter sentance number   2"
line3$="Enter sentance number   3"
line4$="Enter sentance number   4"
line5$="Enter sentance number   5"
line6$="Enter sentance number   6"
line7$="Enter sentance number   7"

Rem where must the dialog appear (wich object "says" something?)
Object#=1

Rem "Name of object"
Who$="Vincent"


set text font "lucida console"
currentline#=1
   make object cube 1,10
   scale object 1,10,10,10
   load image "dialog.png",1
   load image "arrow.png",2
      do
set cursor 0,0
print screen fps()
print dx#-mousex()," - ",dy#-mousey()
         dxtemp#=object screen x(object#)
         dytemp#=object screen y(object#)
            if dxtemp#+238>dispx# then dx#=dispx#-238 else dx#=dxtemp#
            if dytemp#+119>dispy# then dy#=dispy#-119 else dy#=dytemp#
         sprite 1,dx#,dy#,1
         y#=wrapvalue(y#+1)
            yrotate object 1,y#
            move object 1,0.1
rem --------------------------
rem - create the colored box -
rem --------------------------
         for a=1 to 115
            ink rgb((255/115)*a,0,0),1
            box dx#+6,dy#+2+(a),dx#+232,dy#+2+(a)+2
         next a
rem --------------------------
rem - place the disired text -
rem -  and do the animation  -
rem --------------------------
      if text_animation_complete#=0
         textcount#=textcount#+1 : if textcount#=5 then textcount#=0 : char#=char#+1
         ink rgb(255,255,255),1
         set cursor dx#+10,dy#+10
         print Who$+":"
         if currentline#=1
               set cursor dx#+10,dy#+10+12
               print left$(line1$,char#)
            if char#=len(line1$) then currentline#=2 : char#=0
         endif

         if currentline#=2
            set cursor dx#+10,dy#+10+12
               print line1$
            set cursor dx#+10,dy#+10+24
               print left$(line2$,char#)
            if char#=len(line2$) then currentline#=3: char#=0
         endif

         if currentline#=3
            set cursor dx#+10,dy#+10+12
               print line1$
            set cursor dx#+10,dy#+10+24
               print line2$
            set cursor dx#+10,dy#+10+36
               print left$(line3$,char#)
            if char#=len(line3$) then currentline#=4: char#=0
         endif

         if currentline#=4
            set cursor dx#+10,dy#+10+12
               print line1$
            set cursor dx#+10,dy#+10+24
               print line2$
            set cursor dx#+10,dy#+10+36
               print line3$
            set cursor dx#+10,dy#+10+48
               print left$(line4$,char#)
            if char#=len(line4$) then currentline#=5: char#=0
         endif

         if currentline#=5
            set cursor dx#+10,dy#+10+12
               print line1$
            set cursor dx#+10,dy#+10+24
               print line2$
            set cursor dx#+10,dy#+10+36
               print line3$
            set cursor dx#+10,dy#+10+48
               print line4$
            set cursor dx#+10,dy#+10+60
               print left$(line5$,char#)
            if char#=len(line5$) then currentline#=6: char#=0
         endif

         if currentline#=6
            set cursor dx#+10,dy#+10+12
               print line1$
            set cursor dx#+10,dy#+10+24
               print line2$
            set cursor dx#+10,dy#+10+36
               print line3$
            set cursor dx#+10,dy#+10+48
               print line4$
            set cursor dx#+10,dy#+10+60
               print line5$
            set cursor dx#+10,dy#+10+72
               print left$(line6$,char#)
            if char#=len(line6$) then currentline#=7: char#=0
         endif

         if currentline#=7
            set cursor dx#+10,dy#+10+12
               print line1$
            set cursor dx#+10,dy#+10+24
               print line2$
            set cursor dx#+10,dy#+10+36
               print line3$
            set cursor dx#+10,dy#+10+48
               print line4$
            set cursor dx#+10,dy#+10+60
               print line5$
            set cursor dx#+10,dy#+10+72
               print line6$
            set cursor dx#+10,dy#+10+84
               print left$(line7$,char#)
            if char#=len(line7$) then text_animation_complete#=1:char#=0
         endif
      else
         ink rgb(255,255,255),1
         set cursor dx#+10,dy#+10
            print Who$+":"
         set cursor dx#+10,dy#+10+12
            print line1$
         set cursor dx#+10,dy#+10+24
            print line2$
         set cursor dx#+10,dy#+10+36
            print line3$
         set cursor dx#+10,dy#+10+48
            print line4$
         set cursor dx#+10,dy#+10+60
            print line5$
         set cursor dx#+10,dy#+10+72
            print line6$
         set cursor dx#+10,dy#+10+84
            print line7$
      hide mouse
      if flash_returnkey#=0 then sprite 2,dx#+215,dy#+95,2 else sprite 2,9000,9000,2
      flashreturn#=flashreturn#+1
      if flashreturn#=30
         if flash_returnkey#=0
            flash_returnkey#=1
            flashreturn#=0
         else
            flash_returnkey#=0
            flashreturn#=0
         endif
      endif
   if returnkey()=1 then gosub textdone
   endif
loop
textdone:
show mouse
end