PWADGlocal function FinalDemoLifeIcon(v, stplyr) if not stplyr.mo return end if not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) local face = v.getSprite2Patch(stplyr.mo.skin, SPR2_XTRA, (stplyr.powers[pw_super] != 0), 0, 0) v.drawScaled(16*FRACUNIT, 161*FRACUNIT, 1*FRACUNIT, face, V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS, v.getColormap(stplyr.mo.skin, stplyr.mo.color)) end end hud.add(FinalDemoLifeIcon) local function FinalDemoLifeX(v, stplyr) if not stplyr.mo return end if not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) local livex = v.cachePatch("STFINLX") v.draw(57, 185, livex, V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) end end hud.add(FinalDemoLifeX) // Skin names. // Please note that not all of them are available, since those // names are shown as patches and not in-font texts. local function CharNames(v, stplyr) if not stplyr.mo return end if stplyr.mo.skin == "sonic" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STSONIC"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "tails" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STTAILSN"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "knuckles" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STKNUXNM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "amy" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("AMYNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "fang" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("FANGNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "metalsonic" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("METALNME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "modernsonic" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STSONIC"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "silver" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("SILVERNM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "shadow" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("SHDWNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "bean" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("BEANNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "tangle" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("TANGLENM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "spongebob" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("SPONGEBO"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "milne" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("MILNENME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "flare" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("FLRENAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "feels" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("FEELSNME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "cacee" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("CACEENME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "wido" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("WIDONAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "nasya" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("NASYANME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "flame" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("FLMENAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "spyro" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("SPYRONME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "sparks" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("SPARKSNM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "aether" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("AETHERNM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "inazuma" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("INAZUMAN"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "skip" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("SKIPNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "samus" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("SAMUSNME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "honey" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("HONEYNME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "hinote" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("HINONAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "pierre" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("PIERRENM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "robe" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("ROBENAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "ivory" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("IVORYNME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "derp" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("DERPNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "kanade" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("KANADENM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "dirk" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("DIRKNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "whirl" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("WHIRLNME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "werehog" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STSONIC"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "gemma" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("GEMMANME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "cyan" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("CYANNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "eggpack" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("EGGMNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "jasper" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("JSPRNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "daniel" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("DANIELNM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "corvus" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("CORVUSNM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "hms123311" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("HMSHNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "ericsson" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("ERICSONM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "handdrawn" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STSONIC"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "lessunique" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STTAILSN"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "chrispymarriage" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STKNUXNM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "more_like_amy" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("AMYNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "mighty" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("MGHTNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "msonic" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STSONIC"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "vesola" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("VESOLANM"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "espio" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("ESPIONME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "cacodemon" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("CACONAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "ssnsonichd" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STSONIC"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "ssntailshd" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STTAILSN"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "maimy" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("MAIMYNME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "roy" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("ROYFNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "blaze" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("BLAZENME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "marine" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("MARINAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "ronald" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STRONALD"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "astroboy" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("ASTRONME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "hybridsonic" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("STSONIC"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) elseif stplyr.mo.skin == "sms" and not (stplyr.powers[pw_carry] == CR_NIGHTSMODE) and not (maptol & TOL_NIGHTS) v.draw(53, 161, v.cachePatch("SMSNAME"),V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS) end end hud.add(CharNames)-- == Custom HUD Functions by TehRealSalt == -- Global script that contains extra functions for any HUD-related scripts. -- USAGE: Main part of customhud is the ability to creating and overwriting existing HUD items, and adding support for other HUD modifications. -- customhud.SetupItem(itemname, modname) lets you create a new HUD item. "itemname" is the identifier for a HUD item, while "modname" is the identifier for what it belongs to so it can be overwritten. Please run only once on script load. -- Examples: customhud.SetupItem("bossmeter", "ktdbossmeter") registers the HUD item "bossmeter" to the mod "ktdbossmeter" -- (If bossmeter already exists, then the modname of bossmeter will be changed to ktdbossmeter anyways.) -- customhud.SetupItem("rings", "coolrings") overwrites the ring counter that's loaded (typically vanilla's), and registers it to the mod "coolrings". -- customhud.SetupItem("lives", "vanilla") changes the lives counter back to normal. ("vanilla" is the modname reserved for HUD items that exist in normal SRB2, and cannot be set to new HUD items.) -- After a new HUD item is set up, it can be enabled or disabled with customhud.enable(itemname) and customhud.disable(itemname), respectively. -- You can determine if your HUD item should be rendered by checking if customhud.CheckEnabled(itemname) is true and customhud.CheckType(itemname) is your modname. -- Other people can also support your HUD replacements by checking for the same things. -- Beyond that, customhud.FindItem can also be used to check if a HUD item already exists or not. -- This also comes with some extra drawing functions. -- customhud.CustomFontString(v, x, y, str, name, space, width, flags, align, scale, color) draws a string using a different font. -- "v" is the drawer variable supplied by a HUD hook. "x" and "y" are the coordinates to draw at. "str" is the string to draw. -- "name" is the font name prefix to use (must be between 1-5 characters long). Each lump should be stored in a WAD as "YYYYYxxx", with the Y's being the font name and the x's being the byte of the character. -- "space" is the spacing to use when a character doesn't exist. Defaults to 4 if omitted. -- "width" is the spacing between characters that do exist. Set to nil to use each individual patch's width instead. -- "flags" are the flags used for each patch. "align" is how it should be aligned (can be "left", "center", or "right"). -- "scale" rescales the string if set. "color" is the SKINCOLOR_ constant to remap the text to. -- Examples: customhud.CustomFontString(v, 8, 16, "Hello World!", "CRFNT") draws a string using SRB2's credits font -- customhud.CustomFontString(v, 16*FRACUNIT, 8*FRACUNIT, "World, Hello!", "LTFNT", nil, nil, 0, "left", 2*FRACUNIT) draws a rescaled string using SRB2's level title font -- customhud.CustomFontString(v, 16, 8, "Ayy, The World!", "COOLF", 8, 8, 0, "left", nil, SKINCOLOR_BLUE) draws a recolored, monospaced string using a custom font -- NOTE: customhud.CustomFontString technically just draws patches for you. This means string-only flags will not work, patch-only flags will work, and green instead of white is remapped to the color. -- customhud.CustomFontStringWidth(v, str, name, space, width, scale) returns the width of a custom font string. Each variable is identical to customhud.CustomFontString's. -- customhud.CustomNum(v, x, y, str, name, space, width, padding, flags, align, scale, color) is similar to customhud.CustomFontString, except draws a font made of only numbers. -- The font's lumps should be stored in a WAD as "YYYYYYYx", with the Y's being the font name and the x being the number (0-9). -- padding is the number of zeroes to pad with. -- customhud.CustomNumWidth(v, str, name, space, width, padding, scale) returns the width of a custom font number. Each variable is identical to customhud.CustomNum's. -- Lastly, customhud.GetVersionNum() grabs the version number of this library, in table format. Usually, if you need to check this, you'll only need to check the first entry. -- DO NOT EDIT THIS FILE! Don't add your custom HUD elements in here! Do it with the customhud.SetupItem function in another script instead. -- If you want to add a feature to this, please share your changes with TehRealSalt so it can be put in the main file. local VERSIONNUM = {1} if (rawget(_G, "customhud")) then local oldnum = customhud.GetVersionNum() local numlength = max(#VERSIONNUM, #oldnum) local loadednum = "" local newnum = "" local oldvers = false for i = 1,numlength local num1 = oldnum[i] local num2 = VERSIONNUM[i] if (num1 == nil) num1 = 0 end if (num2 == nil) num2 = 0 end if (loadednum == "") loadednum = "v"..num1 else loadednum = $1.."."..num1 end if (newnum == "") newnum = "v"..num2 else newnum = $1.."."..num2 end if (num1 < num2) oldvers = true end end if (oldvers) print("An old version of customhud was detected. (Loaded version is "..loadednum..", newer version is "..newnum..") Please make sure all of the mods loaded are using the latest version.") end return end rawset(_G, "customhud", {}) function customhud.GetVersionNum() local tempnum = {} -- Make sure you cannot overwrite the version number, that would be dumb :V for i = 1,#VERSIONNUM tempnum[i] = VERSIONNUM[i] end return tempnum end local huditems = { stagetitle = { type = "vanilla", -- Current mod name for the hud item ("vanilla" is a reserved mod name for reverting a modded hud item back to its original state, cannot be set for custom hud items) enabled = true, -- Is this hud item supposed to be visible? orighuditem = true -- Should not EVER be true for hud items that are custom }, textspectator = { type = "vanilla", enabled = true, orighuditem = true }, score = { type = "vanilla", enabled = true, orighuditem = true }, time = { type = "vanilla", enabled = true, orighuditem = true }, rings = { type = "vanilla", enabled = true, orighuditem = true }, lives = { type = "vanilla", enabled = true, orighuditem = true }, weaponrings = { type = "vanilla", enabled = true, orighuditem = true }, powerstones = { type = "vanilla", enabled = true, orighuditem = true }, nightslink = { type = "vanilla", enabled = true, orighuditem = true }, nightsdrill = { type = "vanilla", enabled = true, orighuditem = true }, nightsrings = { type = "vanilla", enabled = true, orighuditem = true }, nightsscore = { type = "vanilla", enabled = true, orighuditem = true }, nightstime = { type = "vanilla", enabled = true, orighuditem = true }, nightsrecords = { type = "vanilla", enabled = true, orighuditem = true }, rankings = { type = "vanilla", enabled = true, orighuditem = true }, coopemeralds = { type = "vanilla", enabled = true, orighuditem = true }, tokens = { type = "vanilla", enabled = true, orighuditem = true }, tabemblems = { type = "vanilla", enabled = true, orighuditem = true } } local function warn(str) print("\131WARNING: \128"..str) end local function finditem(item) for k,_ in pairs(huditems) if (k == item) then return huditems[k] end end return false end function customhud.FindItem(item) if (finditem(item) != nil) then return true else return false end end function customhud.enable(item) local x = finditem(item) if not (x) return false end x.enabled = true if (x.orighuditem) then if (x.type == "vanilla") then hud.enable(item) else hud.disable(item) end end return true end function customhud.disable(item) local x = finditem(item) if not (x) return false end x.enabled = false if (x.orighuditem) then hud.disable(item) end return true end function customhud.CheckEnabled(item) local x = finditem(item) if not (x) return false end return x.enabled end function customhud.CheckType(item) local x = finditem(item) if not (x) return nil end return x.type end function customhud.SetupItem(item, t) if not (tostring(t)) warn("Invalid type string \""..t.."\" in customhud.SetupItem") end local x = finditem(item) if (x) if (x.type != t) then if (t == "vanilla") and not (x.orighuditem) then warn("Type string \"vanilla\" is reserved for specific hud items in customhud.SetupItem") return false else x.type = t if (x.orighuditem) if (t == "vanilla") hud.enable(item) else hud.disable(item) end end return true end else return false end else huditems[item] = { type = t, enabled = true, orighuditem = false } return true end end local function pname(name, wb) return name..string.format("%03d", wb) end function customhud.CustomFontStringWidth(v, str, name, space, width, scale) if not (type(str) == "string") then warn("No string given in customhud.CustomFontStringWidth") return end if not (type(name) == "string") then warn("No font given in customhud.CustomFontStringWidth") return end if (name:find(" ")) then warn("Font name \""..name.."\" cannot have spaces in customhud.CustomFontStringWidth") return end if (name:len() > 5) or (name:len() < 1) then warn("Incorrect font name length in customhud.CustomFontStringWidth") return end local strwidth = 0 if (str == "") then return strwidth end if not (type(space) == "number") then space = 4 if (type(scale) == "number") then space = $ * scale end end local nextx = x local capsoffset = 32 for i = 1,str:len() do local nextbyte = str:byte(i,i) local patchn = pname(name,nextbyte) if (nextbyte >= 65 and nextbyte <= 90) and not v.patchExists(patchn) nextbyte = $ + capsoffset patchn = pname(name,nextbyte) elseif (nextbyte >= 97 and nextbyte <= 122) and not v.patchExists(patchn) nextbyte = $ - capsoffset patchn = pname(name,nextbyte) end if (v.patchExists(patchn)) then if (type(width) == "number") then strwidth = $ + width else strwidth = $ + v.cachePatch(patchn).width end else strwidth = $ + space end end if (type(scale) == "number") then strwidth = $ * scale end return strwidth end function customhud.CustomFontString(v, x, y, str, name, space, width, flags, align, scale, color) if not (type(str) == "string") then warn("No string given in customhud.CustomFontString") return end if not (type(name) == "string") then warn("No font given in customhud.CustomFontString") return end if (name:find(" ")) then warn("Font name \""..name.."\" cannot have spaces in customhud.CustomFontString") return end if (name:len() > 5) or (name:len() < 1) then warn("Incorrect font name length in customhud.CustomFontString") return end if (str == "") then return end -- I don't think blank strings would render anything in any case, so let's just silently return if not (type(space) == "number") then space = 4 if (type(scale) == "number") then space = $ * scale end end local wc if (color) then wc = v.getColormap(-1, color) end local nextx = x local capsoffset = 32 if (align == "right" or align == "center") then local strwidth = customhud.CustomFontStringWidth(v, str, name, space, width, align, scale) if (align == "right") then nextx = x - strwidth elseif (align == "center") then nextx = x - (strwidth / 2) end end for i = 1,str:len() do local nextbyte = str:byte(i,i) local patchn = pname(name,nextbyte) local patch if ((nextbyte >= 65 and nextbyte <= 90) and v.patchExists(pname(name, nextbyte + 32))) and not (v.patchExists(patchn)) nextbyte = $ + capsoffset patchn = pname(name,nextbyte) elseif ((nextbyte >= 97 and nextbyte <= 122) and v.patchExists(pname(name, nextbyte - 32))) and not (v.patchExists(patchn)) nextbyte = $ - capsoffset patchn = pname(name,nextbyte) end if (v.patchExists(patchn)) then patch = v.cachePatch(patchn) if (type(scale) == "number") then v.drawScaled(nextx, y, scale, patch, flags, wc) else v.draw(nextx, y, patch, flags, wc) end end if (patch and patch.valid) then -- If the character exists, move the next patch over to the right by... if (type(width) == "number") then if (type(scale) == "number") then nextx = $ + (width * scale) else nextx = $ + width end else if (type(scale) == "number") then nextx = $ + (patch.width * scale) else nextx = $ + patch.width end end else nextx = $ + space end end end function customhud.CustomNumWidth(v, num, name, width, pad, scale) if not (type(num) == "number") then warn("No number given in customhud.CustomNumWidth") return end if not (type(name) == "string") then warn("No font given in customhud.CustomNumWidth") return end if (name:find(" ")) then warn("Font name \""..name.."\" cannot have spaces in customhud.CustomNumWidth") return end if (name:len() > 7) or (name:len() < 1) then warn("Incorrect font name length in customhud.CustomNumWidth") return end local numwidth = 0 num = tostring($1) if (tonumber(pad)) then num = string.format("%0"..pad.."d", $1) end if (num == "") then return numwidth end for i = 1,num:len() do local nextnum = num:sub(i,i) if (v.patchExists(name..nextnum)) then if (type(width) == "number") then numwidth = $ + width else numwidth = $ + v.cachePatch(name..nextnum).width end end end if (type(scale) == "number") then numwidth = $ * scale end return numwidth end function customhud.CustomNum(v, x, y, num, name, width, pad, flags, align, scale, color) if not (type(num) == "number") then warn("No number given in customhud.CustomNum") return end if not (type(name) == "string") then warn("No font given in customhud.CustomNum") return end if (name:find(" ")) then warn("Font name \""..name.."\" cannot have spaces in customhud.CustomNum") return end if (name:len() > 7) or (name:len() < 1) then warn("Incorrect font name length in customhud.CustomNum") return end local wc if (color) then wc = v.getColormap(-1, color) end local nextx = x if (align == "right" or align == "center") then local numwidth = customhud.CustomNumWidth(v, num, name, width, pad, scale) if (align == "right") then nextx = x - numwidth elseif (align == "center") then nextx = x - (numwidth / 2) end end num = tostring($1) if (tonumber(pad)) then num = string.format("%0"..pad.."d", $1) end for i = 1,num:len() do local nextnum = num:sub(i,i) local patch if (v.patchExists(name..nextnum)) then patch = v.cachePatch(name..nextnum) if (type(scale) == "number") then v.drawScaled(nextx, y, scale, patch, flags, wc) else v.draw(nextx, y, patch, flags, wc) end end if (patch and patch.valid) then -- If the character exists, move the next patch over to the right by... if (type(width) == "number") then if (type(scale) == "number") then nextx = $ + (width * scale) else nextx = $ + width end else if (type(scale) == "number") then nextx = $ + (patch.width * scale) else nextx = $ + patch.width end end else nextx = $ + width end end end // Original code from the Sonic Adventure style HUD mod by TehRealSalt if not (rawget(_G, "customhud")) return end local modname = "revhud" customhud.SetupItem("lives", modname) local function stupidGarbage() -- Because some mods like to reset hud enables/disables every tic instead of once (Boss Mayhem... though I'm kinda guilty of it too ^^;) if (customhud.CheckType("lives") == modname) hud.disable("lives") end end addHook("ThinkFrame", function() stupidGarbage() end) local screenwidth = 320 local screenheight = 200 local function maniaLives(v, player) if (customhud.CheckType("lives") != modname) return end if (customhud.CheckEnabled("lives") != true) return end if not (G_GametypeUsesLives()) return end if not ((player and player.valid) and (player.mo and player.mo.valid)) return end if not (skins[player.mo.skin] and skins[player.mo.skin].valid) return end local face = v.getSprite2Patch(player.mo.skin, SPR2_XTRA, (player.powers[pw_super] != 0), 0, 0) local xicon = v.cachePatch("STTXICON") local startx = 81 local starty = 182 customhud.CustomNum(v, 89, 182, player.lives, "STTNUM", 8, 1, V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER|V_HUDTRANS, "right") end local clientplayer hud.add(function(v, player) stupidGarbage() if (player.bot) return end if not (splitscreen and player != players[0]) clientplayer = player end if not (maptol & TOL_NIGHTS) maniaLives(v, player) end end, "game") #IIIIIII ,3=IVfr|IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII $/<JYhwIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIII $1?M\jwIIIIIIIIII IIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIII $1?M[l{IIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIII $1?MXfnIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIII !/IIIIIIIIII IIIIIIIII '/7ESIIIIIIIIIIII IIIIIIIII IIIIIIII $1?LWdtIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIII $1?LT\dIIIIIIIIII IIIIIIIIIIIIIIIIIIII ,9GT]gp}IIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII $/<JYgtIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIII $1?M\hsIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIII $1?M\ivIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIII $2CQ_m~IIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIII $+3@N\dIIIIIIIIIIIIIIIII IIIIIIIII IIIIII $0=JR`nIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIII(6FR\fr! )7DO\jw '6IIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIII! #,3@N[hvIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIII!  '5=DKSZguIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIII ls} &4AJT`kyIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII $-4AO\eoxIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIII'(E_w1K^n5QjIIIIIIIIII IIIIIIIII IIIIIIIII IIIIIIIIIIIII IIIIIIIIIIIIII IIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIII  IIIIIIIII IIIIIIII IIIIIIIIIIIIIIIIIIII IIIII IIIIIIIII IIIIII IIIIIII IIIIIIIII IIIIIII IIIIIIIIIIII IIIIII IIIIIIIIII IIIIIIIIIIIII IIIIII IIIIIIIIIIIIIIII IIIII IIIIIIIIIII III IIIIIIIIIIIII IIIIIIIII IIII IIIIIIIIIIIIIII IIIIIIIIIIIIIII IIIIII IIIIIIIIIIIIIII IIIIIIIIIIIIIII IIIIIIIIII IIIIIIII IIIIII IIIIIIIIIIIIIIIII  IIIIIIIIIIIIIIIIIIII% ,9GT\dl{$1?M\ivIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIII0 "0=KX`n|"0=HS`n}IIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIII IIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIII "3BOV`lyIIIIIIIIII IIIIIIIII IIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII. $1AMW`gt /=JXemu}IIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIA +9GUft'4BOXbkx &4ETan|,:H\jwIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIII IIIIIIIIIIIIIII# $1>LYaiqx ,;IIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIII% %-4;EQ^nz,=LIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIII# -<IVdr!/=NIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIII%  &6BLU\gt -;IWhwIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIII x -;IXfs~IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIII) )5BR^hqx #,3=IVfr|IIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII' %-5<CMYfv,:HYhIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIII# %4@KT]gs~ '6DQIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIII,  -;IXdox*9FTalyIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIII, %3AO`o|(6DRcrIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIII5 ,5?HUcpw *8DQ^ft  -=IS\IIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIII IIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII hv +8FS`n|IIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIII' )6FR\ely+7EVdrIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIII% )7DO\jw(2>IWbIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII(  .;IV_ir-5<IWes IIIIIIIII IIIIIIIII IIII IIIIIIIII IIIIIIIII IIIIIIIIII IIIIIIIII IIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIII0 #*4@M]is| )5?HO\jxIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIII x -:GUcrIIIIIIIIII IIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIII  /=JUbp~IIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII x)4AO]qIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIII&  -;IWhw*7FSao}IIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIII0 ,7DRfw (4@MZhu|&4IIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII) #1?M^mz #/<IWdkuIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII# !/<DQ_ly%-5IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIII, !/=N]jx"-:HU]emt{IIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII hu &3@O\jwIIIIIIIIII IIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIII, "2>K[gqz!-8AN\jxIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIII* +8HT^gn{+9JYfsIIIIIIIIII IIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIII2 *8ER`mx+2:GUckr{IIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII* (6ES`kx&3@HVdp~IIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIII6 (7DQ_m| -;LZhv#2@MXesIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII #1BP]ky IIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIE '4BQ`o| /<GTbq,=LYft)6DQZdmzIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIA  %+1=>?KRY`gnz{|*+,7BRbopq|. !,9GVdq|".8AHUcpxIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIII%4H[n%7Ic{ '6DQIIII IIIIIIIIIIIIIII IIIIIIIIIIIIIII IIIIIIIIIII II IIIIIIIIIIII IIIIIIIIIIIIII IIIIIIIIIII II IIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIII IIIIII IIIIIII IIIIIIIII IIIIIII IIIIIII IIIIIIII IIIIIII IIIIII IIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIII IIIIII IIIIIIIII IIIII III IIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII IIIIIIIIIIIIIIII% ".;KWajq~!-8FQIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIII% '/7?FMWcp*8FWfIIIIIIIIII IIIIIIIII IIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIII )7?FMU\gtIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII,  -4>JWgs} #1>GQZguIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII IIIIIIIII IIIIIII IIIIIIIIIIIIIIIIII 8LUA_HUD8>LUA_CUSTvLUA_LIVEq|*FDCFN046|FDCFN065'}FDCFN067}FDCFN068-~FDCFN069~uFDCFN070*<FDCFN073f_FDCFN074FDCFN075DkFDCFN076FDCFN078GFDCFN079Ɓ|FDCFN080BFDCFN082ǂFDCFN083SkFDCFN084zFDCFN0858STFINLXȄCSTSONIC STTAILSNSTKNUXNMAMYNAMEy FANGNAMEMETALNMESILVERNM #SHDWNAME,BEANNAMEGTANGLENM/SPONGEBOHMILNENMEYFLRENAMER\FEELSNMECACEENME2WIDONAME NASYANMuFLMENAME \SPYRONMEhSPARKSNMdAETHERNMDcINAZUMANSKIPNAMEPSAMUSNMEkHONEYNMEZHINONAMEKANADENM DERPNAMEIVORYNMEROBENAMEPIERRENMAEGGMNAMEGEMMANME<WHIRLNMEVESOLANMDIRKNAMEbJSPRNAMEhDANIELNMMGHTNAMECORVUSNMERICSONMy+ESPIONMECACONAME9HMSHNAME/STRONALD\ASTRONMExZMAIMYNMEsBLAZENMEEROYFNAMEMARINAME