ID:2679682
 
world/fps=60

object
var list/params = new

engine
var/tmp
mob/user
list/VARS = new
list/STRS = new
list/ARGS = new
list/SETS = new
list/CLAS = new

proc

Compare(s)
var a,b
. = findtext(s,">"); if(.){a=text2num(Fix(copytext(s,1,.)));b=text2num(Fix(copytext(s,. + 1)));if(a > b){return TRUE}}
. = findtext(s,"<"); if(.){a=text2num(Fix(copytext(s,1,.)));b=text2num(Fix(copytext(s,. + 1)));if(a < b){return TRUE}}
. = findtext(s,"_EQU")
if(.)
a=Fix(copytext(s,1,.))
b=Fix(copytext(s,. + 4))
if(isnum(a)) {b = text2num(b)}
else if(isnum(b)) {a = text2num(a)}
if(a == b){return TRUE}
. = findtext(s,">="); if(.){a=text2num(Fix(copytext(s,1,.)));b=text2num(Fix(copytext(s,. + 1)));if(a >= b){return TRUE}}
. = findtext(s,"<="); if(.){a=text2num(Fix(copytext(s,1,.)));b=text2num(Fix(copytext(s,. + 1)));if(a <= b){return TRUE}}
. = findtext(s,"_NEQ")
if(.)
a=Fix(copytext(s,1,.))
b=Fix(copytext(s,. + 4))
if(isnum(a)) {b = text2num(b)}
else if(isnum(b)) {a = text2num(a)}
if(a != b){return TRUE}
. = findtext(s,"<>"); if(.){a=text2num(Fix(copytext(s,1,.)));b=text2num(Fix(copytext(s,. + 1)));if(a != b){return TRUE}}
return FALSE

Fix(string,clean)
var a,b,c,d,e,f
for()
a = findtext(string,"\"")
b = findtext(string,"\"",a+1)
if(!a||!b){break}
STRS["STRS_[STRS.len+1]"] = copytext(string,a+1,b)
string = copytext(string,1,a) + "STRS_[STRS.len]" + copytext(string,b+1)
if(clean)
for()
a = findtext(string,"//")
b = findtext(string,"\n",a)
if(!a||!b){break}
string = copytext(string,1,a) + copytext(string,b+1)
for()
a = findtext(string,"/*")
b = findtext(string,"*/",a)
if(!a||!b){break}
string = copytext(string,1,a) + copytext(string,b+2)
string = replacetext(string,"==", " _EQU ")
string = replacetext(string,"!=", " _NEQ ")
string = replacetext(string," ", " ")
string = replacetext(string,"\n", " ")
string = replacetext(string," ", " ")
string = replacetext(string," ", " ")
var list/l = splittext(string," ")
for(. in l){if(!.){l -= .}}
l = jointext(l," ")
while(l in VARS){l = VARS[l]}
while(l in ARGS){l = ARGS[l]}
while(l in STRS){l = STRS[l]}
for()
a = findlasttext(l,"(")
b = findtext(l,")",a+1)
if(!a||!b){break}
c = copytext(l,a+1,b)
c = replacetext(c,",","&")
ARGS["ARGS_[ARGS.len+1]"] = params2list(c)
l = copytext(l,1,a) + " ARGS_[ARGS.len] " + copytext(l,b+1)
for()
a = findtext(l,"\[")
b = findtext(l,"]",a+1)
if(!a||!b){break}
c = copytext(l,a+1,b)
d = findtext(c,".")
if(d)
e = copytext(c,1,d)
f = copytext(c,d+1)
c = Fix(e)
if(f in c:vars)
c = c:vars[f]
else if(("params" in c:vars))
c = c:vars["params"][f]
else
c = Fix(c)
if(findtext(c,"ARGS_"))
l = copytext(l,1,a) + "[Run(c)]" + copytext(l,b+1)
else
l = copytext(l,1,a) + "[c]" + copytext(l,b+1)
return l

Run(syntax)
var list/t = splittext(Fix(syntax)," ")
//world << jointext(t," ")
var p,len = t.len, list/l, ret, v, f, a, b, c, d
for()
p++
if(p >= len){break}
switch(t[p])
if("var")
l = ARGS[t[p+1]]
if(findtext(l[2]," ")){VARS[l[1]] = Run(Fix(l[2]))}
else{VARS[l[1]] = Fix(l[2])}
ret = VARS[l[1]]
if("print")
l = ARGS[t[p+1]]
if(findtext(l[1]," ")){world << Run(Fix(l[1]))}
else{world << Fix(l[1])}
if("add")
l = ARGS[t[p+1]];ret = 0
for(. in l){if(. in VARS){. = VARS[.]};ret += text2num(.)}
return ret
if("mul")
l = ARGS[t[p+1]]
if(findtext(l[1],"ARGS_"))
ret = Run(l[1])
else
ret = 1
for(. in (l-l[1])){if(. in VARS){. = VARS[.]};ret *= text2num(.)}
return ret
if("input")
l = ARGS[t[p+1]]
f = Fix(l[1])
switch(f)
if("text") {ret = input(user,Fix(l[3]),Fix(l[2])) as text}
if("num") {ret = input(user,Fix(l[3]),Fix(l[2])) as num}
else
v = list()
if(islist(f)){for(. in f){v += (. in STRS) ? STRS[.] : .}}
ret = input(user,Fix(l[3]),Fix(l[2])) in v
if("list"){return ARGS[t[p+1]]}
if("if")
l = ARGS[t[p+1]]
if(Compare(l[1])){Run(Fix(l[2]))}
else if(l.len > 2){Run(Fix(l[3]))}
if("while") {l = ARGS[t[p+1]];while(Compare(Fix(l[1]))){Run(Fix(l[2]))}}
if("sleep") {l = ARGS[t[p+1]];sleep(text2num(Fix(l[1])))}
if("return") {l = ARGS[t[p+1]];return (l && l.len) ? Fix(l[1]) : null}
if("jointext")
l = ARGS[t[p+1]]
v = list(); a = Fix(l[1])
for(. in a){v += Fix(.)}
b = Fix(l[2]); ret = jointext(v,b)
if("rand")
l = ARGS[t[p+1]]
switch(l.len)
if(0){return rand()}
if(1){return rand(0,text2num(Fix(l[1])))}
if(2){return rand(text2num(Fix(l[1])),text2num(Fix(l[2])))}
if("len")
l = ARGS[t[p+1]]
return length(Fix(l[1]))
if("access")
l = ARGS[t[p+1]]
a = Fix(l[1])
if(istype(a,/object))
b = l[2]
if(b in a:params)
ret = a:params[b]
else
ret = a[text2num(Fix(l[2]))]
return ret
if("for")
l = ARGS[t[p+1]]
if(findtext(l[1],"ARGS_"))
a = Run(Fix(l[1]))
else
a = text2num(Fix(l[1]))
if(findtext(l[2],"ARGS_"))
b = text2num(Run(Fix(l[2])))
else
b = text2num(Fix(l[2]))
if(b > a)
Run(Fix(l[3]))
for(c = a to b-1)
Run(Fix(l[1]))
Run(Fix(l[3]))
if("call")
l = ARGS[t[p+1]]
a = Fix(l[1])
b = Fix(l[2])
var list/ll = new
if(l.len>2)
for(var/pp = 3 to l.len)
ll += Fix(l[pp])
ret = call(a,b)(ll)
if("object")
l = ARGS[t[p+1]]
. = text2path("/[Fix(l[1])]")
return new .
if("set")
l = ARGS[t[p+1]]
a = Fix(l[1])
b = Fix(l[2])
if(!(a in SETS))
SETS[a] = list()
if(!(b in SETS[a]))
SETS[a] += b
SETS[a][b] = Fix(l[3])
if("function")
return ARGS[t[p+1]]
if("run")
l = ARGS[t[p+1]]
a = Fix(l[1])[1]
ret = Run(a)
if("class")
l = ARGS[t[p+1]]
var list/ll = new
for(var/i = 2 to l.len)
ll += Fix(l[i])
CLAS[Fix(l[1])] = ll
else
a = findtext(t[p],".")
if(a)
b = copytext(t[p],1,a)
c = copytext(t[p],a+1)
b = Fix(b)
if(c in b:vars)
d = Fix(t[p+2])
if((b in SETS) && (c in SETS[b]))
call(b,SETS[b][c])(d)
b:vars[c] = d
else
a = Fix(t[p])
if(findtext(t[p+1],"ARGS_"))
l = ARGS[t[p+1]]
var list/ll = (a in CLAS) ? CLAS[a] : list(),pp=0
var object/o = new
for(. in ll)
pp++
if(pp > l.len){break}
o:vars["params"][.] = Fix(l[pp])
ret = o
return ret
New(USER,data){user=USER;data=Fix(data,1);Run(data);user=null}

mob/verb/DEMO()
new/engine(src,syntax)

mob/proc/DERP(list/l)
return text2num(l[1]) + text2num(l[2])

mob/proc/NAME(s)
world << "You changed your name to [s]"
return s



var syntax = @{" class(weapon,name,desc,damage) var(i,weapon("Knife","It's sharp.",12)) print("[i.name]'s damage = [access(i,damage)] or [i.damage]") var(a,123) var(b,321) print("[a] + [b] * 2 = [mul(add(a,b),2)]") return() var(c,mul(add(123,321),2)) print("c has a value of [c]") class(person,name,powerlevel) var(p,person("Koz",123)) set(p,name,NAME) print("p = [p]") print("p.name = [p.name]") print("p.powerlevel = [p.powerlevel]") var(MAIN,function( // This is a function, defined as MAIN print("Hello, This is an example!") for( var(pos,add(pos,1)), 3, if(pos==2,print("pos [pos] == 2"),print("pos [pos] != 2")) ) return("The function MAIN has ended, meow") )) print(run(MAIN)) if(i == 1, print("TRUE"), if(i == 2,print("TRUE"),print("i is neither 1 or 2")) ) var(i,object(mob)) set(i,name,NAME) // comment i.name = "Gary" print("i = [i.type]") // commont /*ohshitboi*/ print("i = [i.name] - [i.type] - [call(i,DERP,123,321)]") var(f,var(f,123)) print("f = [f]") for(var(s,add(s,1)),3,print(s)) print("Demo Finished!") print("Started!") for( var(start,add(start,1)), 7, print(start) if(start==7,print("End of Loop!"),print("No!")) if(start!=7,print("Not Yet!"),print("Yes!")) ) print("Finished lol") var(a,5) var(b,3) var(f,"Hello, World!") print("5th character of [f] is [access(f,a)], blorp [333] ? [a]") var(l,list(111,222,333,444,555)) print("length = [len(l)], 3rd value is [access(l,b)]") return() var(min,1) var(max,2) var(a,rand(min,max)) var(b,a) var(c,b) var(port,c) print("port = [port]") var(health,100) var(maxhealth,100) var(sword,object("Sword","")) var(bow,object("Bow","")) var(staff,object("Staff","")) var(classes,list("Warrior","Archer","Magician")) print(access(classes,2)) var(class,input(classes,"Class Selection","Select a Class")) print(class) if(class=="Warrior", var(weapon,sword), if(class=="Archer", var(weapon,bow), if(class=="Magician", var(weapon,staff) ) ) ) var(actions,list("Search Around","Check The Shops","Explore the Forest")) while(10 > 9, print("Loop!") var(choice,input(actions,"Actions","Health: [health] / [maxhealth] Weapon: [weapon]")) print("Choice [choice]") sleep(1) ) var(elements,list("Air","Water","Earth","Fire")) print(jointext(elements,"<br>")) var(i,0) while(10 > i, var(i,add(i,1)) print(i) if(i == 10, print("Finished!") ) sleep(1) ) var(a,5) var(b,4) var(c,6) if(a>b, print("A is bigger than B") if(a>c, print("A is bigger than C"), print("C is bigger than A!") ) , print("B is bigger than A") print("So is C") ) "}
Supports the following

var(var_name,value)
var(var_name,function(...))
var(var_name,"string go here")
var(var_name,list(1,2,"Hello!"))
var(var_name,object(mob))

print("string go here")
print(var_name)
print("string go here with [var_name]")

if(420==422,print("TRUE"),print("FALSE"))
while(var_name > 0,
print("[var_name] is bigger than 0!")
)

for(var(p,add(p,1)),3,print(p)) // outputs 1,2,3

class(path_id,var_a,var_b,var_c)
path_id(var_a,var_b)
set(var_object,variable,function)

var(MAIN,function(
print("Hello, This is an example!")
return("The function MAIN has ended, meow")
))

print(run(MAIN))

add(var_1,var_2,var_3)
mul(var_1,var_2,var_3)
list(var_1,var_2,"string go here")
sleep(var_number)
access(var_list,position)