TGC Codebase Backup



Sprite Text by Orion1024

11th Sep 2009 2:05
Summary

Function to paste sprite based characters to the screen



Description



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    global display_xmax as integer: global display_ymax as integer
global display_xmid as integer: global display_ymid as integer

dim character_widths_40pt(44) as integer

#Constant CHARACTER_SET_IMAGE_NUMBER 1
#Constant CHARACTER_SET_SPRITE_NUMBER 1

#Constant FALSE 0: #Constant TRUE 1

Rem -------------------------------------------------------

Set_Display_Mode()
Load_Character_Set()
Initialize_Character_Widths_Array()

Rem =======================================================

repeat

   Paste_Sprite_Text("abcdefghijklmnopqrstuvwxyz", 0, display_ymid, 100, 255, 0, 0)
   Paste_Sprite_Text("0123456789! @ & * - . ?", 0, display_ymid + 50, 100, 0, 255, 0)
   Paste_Sprite_Text("orion1024", 0, display_ymid + 200, 50, 0, 0, 255)

   text 0, display_ymax - 20, "FPS: " + str$(screen fps())
   sync

until mouseclick()
end

Rem =======================================================

function Set_Display_Mode()

   display_xmax = desktop width()
   display_ymax = desktop height()

   display_xmid = display_xmax / 2: display_ymid = display_ymax / 2

   set display mode display_xmax, display_ymax, 16
   sync on: sync rate 60

   color backdrop rgb(92, 92, 92)
   hide mouse

endfunction

Rem -------------------------------------------------------
Rem - The character set is stored in an animated sprite
Rem - Change the path to where the image 'Character_Set_40Pt.bmp" is located

function Load_Character_Set()

   create animated sprite CHARACTER_SET_SPRITE_NUMBER, "Character_Set_40Pt.bmp", 1, 43, CHARACTER_SET_IMAGE_NUMBER
   hide sprite CHARACTER_SET_SPRITE_NUMBER

endfunction

Rem -------------------------------------------------------
Rem - Based on a 40Pt font, upper case only
Rem - Characters not included in the character set (sprite_frame = 0) are treated as spaces

function Paste_Sprite_Text(message as string, screen_x as integer, screen_y as integer, scale as float, red as integer, green as integer, blue as integer)

local index as integer
local message_length as integer
local character as string: local character_value as integer
local sprite_frame as integer: local sprite_scale as float
local character_offset as integer
local default_spacing as integer


   default_spacing = 5

   sprite_scale = scale / 100
   scale sprite CHARACTER_SET_SPRITE_NUMBER, sprite_scale * 100
   set sprite diffuse CHARACTER_SET_SPRITE_NUMBER, red, green, blue

   message = upper$(message)
   message_length = len(message)

   for index = 1 to message_length
      character = mid$(message, index)
      character_value = asc(character)

      if character >= "A" and character <= "Z"
         sprite_frame = (character_value - 64)   Rem - frames 1 to 26
         set sprite frame CHARACTER_SET_SPRITE_NUMBER, sprite_frame
         paste sprite CHARACTER_SET_SPRITE_NUMBER, screen_x + character_offset, screen_y
         inc character_offset, character_widths_40pt(sprite_frame) * sprite_scale + default_spacing * sprite_scale
      else
         if character >= "0" and character <= "9"
            sprite_frame = (character_value - 21)   Rem - frames 27 to 36
            set sprite frame CHARACTER_SET_SPRITE_NUMBER, sprite_frame
            paste sprite CHARACTER_SET_SPRITE_NUMBER, screen_x + character_offset, screen_y
            inc character_offset, character_widths_40pt(sprite_frame) * sprite_scale + default_spacing * sprite_scale
         else
            if character = "-" then sprite_frame = 37
            if character = "." then sprite_frame = 38
            if character = "!" then sprite_frame = 39
            if character = "?" then sprite_frame = 40
            if character = "*" then sprite_frame = 41
            if character = "&" then sprite_frame = 42
            if character = "@" then sprite_frame = 43

            if sprite_frame >= 37 and sprite_frame <=43
               set sprite frame CHARACTER_SET_SPRITE_NUMBER, sprite_frame
               paste sprite CHARACTER_SET_SPRITE_NUMBER, screen_x + character_offset, screen_y
               inc character_offset, character_widths_40pt(sprite_frame) * sprite_scale + default_spacing * sprite_scale
            endif

            if character = " " or sprite_frame = 0 then inc character_offset, 20 * sprite_scale
         endif
      endif

      sprite_frame = 0

   next index

endfunction

Rem -------------------------------------------------------

function Initialize_Character_Widths_Array()

local index as integer

   for index = 1 to 43
      read character_widths_40pt(index)
   next index

   data 36, 32, 33, 35, 30, 27, 38, 35, 16, 19, 37, 30, 45, 36, 36, 28, 35, 35, 25, 30, 36, 36, 50, 37, 38, 30
   data 25, 19, 25, 22, 25, 23, 25, 25, 24, 25
   data 15, 8, 10, 20, 23, 39, 48

endfunction

Rem -------------------------------------------------------