Definitions:
#define ILLEGAL 1
#define ALLOWED 2
#define ROUND 1
#define NOROUND 0
#define BACK 1
#define FRONT 2
#define NO_MAX null
#define NUMBERS list("0","1","2","3","4","5","6","7","8","9")
#define LALPHABET list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
#define UALPHABET list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
#define ALPHABET list("A","a","B","b","C","c","D","d","E","e","F","f","G","g","H","h","I","i","J","j","K","k","L","l",\
"M","m","N","n","O","o","P","p","Q","q","R","r","S","s","T","t","U","u","V","v","W","w","X","x","Y","y","Z","z")
String Datum:
String
var
text = ""
max_length = null
list/filter//only initialized when needed.
filter_mode = ILLEGAL
proc
append(Append as text, Direction=BACK)
if(max_length != null && length(Append)+text_length() <= max_length) {if(Direction==BACK){text+=Append;};else{text=Append+text;};filter();return 1}
else if(Append) {if(Direction==BACK){text+=Append;};else{text=Append+text;};filter();return 1}
return 0
set_max_length(new_max_length)
if(new_max_length && new_max_length > 0)
max_length = new_max_length
if(text_length() > max_length)
text = copytext( text, 1, max_length+1 )
return 0
insert(Insert as text, Place=text_length()+1)
return copytext(text, 1, Place)+Insert+copytext(text, Place+1)
set_filter(var/list/X)
if(X && length(X)){filter=list();filter=X;filter();return 1;}
return 0
set_filter_mode(NewMode = ILLEGAL)
if(NewMode != ILLEGAL && NewMode != ALLOWED) return 0
filter_mode = NewMode
return 1
filter()
if(filter && filter.len)
if(src.filter_mode == ILLEGAL)
for(var/v in filter){replace(v, filter[v]?filter[v]:"")}
return 1
if(src.filter_mode == ALLOWED)
var/t
var/new_text = text
for(var/i=1 to text_length())
t = copytext(text, i, i+1)
if(!filter.Find(t)) new_text = textreplaceEx(new_text, t, "")//replace all
text = new_text
return 1
else return 0
replace(Replace as text, Replacement as text)
text = textreplace(text, Replace, Replacement)
replaceEx(Replace as text, Replacement as text)
text = textreplaceEx(text, Replace, Replacement)
text_length()
return length(text)
get()//just in case
return text
set_text(Newtext as text)
if(max_length != null && max_length >= length(Newtext)){text=Newtext;filter();return 1;}
return 0
append_string(String/Append, Direction=BACK)
if(Append){append(Append.text, Direction);return 1;}
return 0
random_append(Characters=1, Direction=BACK, ascii_min=97, ascii_max=122)//stupid function...
while(Characters)
append( ascii2text(rand(ascii_min, ascii_max)), Direction )
Characters--
New( new_text as text, new_max_length as num, list/new_filter, new_filter_mode as num )
if(new_max_length) max_length = new_max_length
if(new_text) set_text(new_text)
if(new_filter_mode) set_filter_mode(new_filter_mode)
if(new_filter) set_filter(new_filter)
proc
String( new_text as text, new_max_length as num, list/new_filter, new_filter_mode as num )
return new/String (new_text, new_max_length, new_filter, new_filter_mode)
Points:
point//point, makes it easier for me...
var
x = 0
y = 0
New(_x, _y)
if(_x)
x = _x
if(_y)
y = _y
proc/SetPoints(_x, _y)
if(_x)
x = _x
if(_y)
y = _y
proc
point(_x_, _y_, should_round)//Creates a point
if(!should_round)
return new/point(_x_, _y_)
else
return new/point(round(_x_), round(_y_))
text_point(text, should_round)//Creates a point from text such as "1,1"
var/comma = findtext(text, ",")
var/_x_ = copytext(text, 1, comma)
var/_y_ = copytext(text, comma+1, length(text)+1)
return point(should_round?round(text2num(_x_)):text2num(_x_), should_round?round(text2num(_y_)):text2num(_y_))
point3
var
x = 0
y = 0
z = 0
New(_x, _y, _z)
if(_x) x = _x
if(_y) y = _y
if(_z) z = _z
proc
point3(_x_=0, _y_=_x_,_z_=1,should_round = NOROUND)//same as above
if(!should_round) new/point3(_x_, _y_, _z_)
else return new/point3(round(_x_),round(_y_),round(_z_))
Colors:
proc
getAlpha(hex)//Made by Kuraudo
if(length(hex) < 9)
return 255
else
hex = uppertext(hex)
var
hi = text2ascii(hex,8)
lo = text2ascii(hex,8)
return ( ((hi >= 65 ? hi-55 : hi-48)<<4) | (lo >= 65 ? lo-55 : lo-48) )
getRed(hex)//Made by Kuraudo
hex = uppertext(hex)
var
hi = text2ascii(hex, 2)
lo = text2ascii(hex, 3)
return ( ((hi >= 65 ? hi-55 : hi-48)<<4) | (lo >= 65 ? lo-55 : lo-48) )
getGreen(hex)//Made by Kuraudo
hex = uppertext(hex)
var
hi = text2ascii(hex, 4)
lo = text2ascii(hex, 5)
return ( ((hi >= 65 ? hi-55 : hi-48)<<4) | (lo >= 65 ? lo-55 : lo-48) )
getBlue(hex)//Made by Kuraudo
hex = uppertext(hex)
var
hi = text2ascii(hex, 6)
lo = text2ascii(hex, 7)
return ( ((hi >= 65 ? hi-55 : hi-48)<<4) | (lo >= 65 ? lo-55 : lo-48) )
GetColors(hex)//Made by Kuraudo
return list( getRed(hex), getGreen(hex), getBlue(hex), getAlpha(hex) )
Color//Easy shizzle
var
r = 0
g = 0
b = 0
a = 255
value = "#000000"
New(_R, _G, _B, _A)
..()
if(!_R&&!_G&&!_B&&!_A)
value = null
r = null
g = null
b = null
a = 0
else
if(_R&&istext(_R))
value = _R
make_rgb()
else
if(_R) r=_R
if(_G) g=_G
if(_B) b=_B
if(_A) a=_A
value = rgb(r, g, b, a)
proc
make_rgb()
r = getRed(value)
g = getGreen(value)
b = getBlue(value)
a = getAlpha(value)
make_color()//form_color() must be used or the value will not automatically change.
value = rgb(min(max(r, 0), 255), min(max(g, 0), 255), min(max(b, 0), 255), min(max(a, 0), 255))
set_rgba(new_r, new_g, new_b, new_a)
r = min(max(new_r, 0), 255)
g = min(max(new_g, 0), 255)
b = min(max(new_b, 0), 255)
a = min(max(new_a, 0), 255)
make_color()
set_r(val)
val = min(max(val, 0), 255)
r = val
make_color()
set_g(val)
val = min(max(val, 0), 255)
g = val
make_color()
set_b(val)
val = min(max(val, 0), 255)
b = val
make_color()
set_a(val)
val = min(max(val, 0), 255)
a = val
make_color()
Cset_value(val)//Does checks to make sure stuff is right.
if(length(val) > 8) val = copytext(val, 1, 9)
if(copytext(val, 1,2) != "#") val = "#[val]"
value = val
make_rgb()
set_value(val)
value = val
make_rgb()
proc
Color(_r, _g, _b, _a)
return new/Color(_r, _g, _b, _a)
necessary procs:
proc
textreplace(text as text, to_replace as text, replacement as text)
var/pos = findtext(text, to_replace)
var/replacement_length = length(replacement)
var/to_replace_length = length(to_replace)
while(pos)
text = copytext(text, 1, pos)+replacement+copytext(text, pos+to_replace_length)
pos = findtext(text, to_replace, pos+replacement_length)
return text
textreplaceEx(text as text, to_replace as text, replacement as text)
var/pos = findtextEx(text, to_replace)
var/replacement_length = length(replacement)
var/to_replace_length = length(to_replace)
while(pos)
text = copytext(text, 1, pos)+replacement+copytext(text, pos+to_replace_length)
pos = findtextEx(text, to_replace, pos+replacement_length)
return text
However on other hand, it's quite useless on BYOND. Compared to how slow new() proc is, it'd impossible to make anything decent.