I've been talking about something I've been working on and off since I've joined the community using ASCII graphics, it seems like I cannot make my mind up about stuff and keep changing it.

This is the latest iteration

Experience directly effects core stats. Every level players are awarded HP and MP bonuses based on a dice roll and their stat at the time the player levels up. Death revokes 25% of the player's experience and gold earned.

Players can break down objects like trees and boulders to earn experience without having to worry about them fighting back.

Players also have access to a train() verb, which allows them to self train at a very slow rate. Some special equipment has weight that enchances training. Some special areas have gravity that enchances training. Weight and gravity stack.

There is also a meditate() verb that is even slower than train() but uses no stamina. Occasionally players have "breakthroughs" that award bonus experience. Each breakthrough makes the next one harder to have. Some quests or skills may require a specific number of breakthroughs.

Players can self heal by using the rest() verb, which slowly restores HP and stamina.

Players can restore MP by using the focus() verb to slowly restore their magic power.

Actual melee combat is handled kind of like a fusion of classic BYOND games and MUDs. Approach your target and use the attack() verb to enter combat, at that point, it enters in to a automatic system using rounds until someone either dies or runs away. If you can run far enough away, combat will shut itself down.

While not actually done yet, magic is planned for long range attacks. They will not force you in to melee combat, but will trigger your target's attention and they probably will give chase or respond with a long range attack themselves.

Damage delt is based on your STR and your damage dice. Bare handed starts off at 1D2, but can be upgraded. Weapons all have their own damage dice.

Equipment may be procedurally generated to include bonuses or enchantments.

Some parts of the game are procedurally generated to place junk and obstacles, plants, trees, boulders, change the color of tiles and more to give it a more varying effect (me being lazy not wanting to place every tree and boulder).

Verbs are planned to either have hotkeys or buttons eventually.

Started working on the interface of the game, still looks basic, but I feel like that fits with the overall feel of the game.

I also included special event screens for when the player dies and when they meet "God".

Looks really cool... but I would strongly discourage idle verbs. Just sitting and waiting for numbers to go up is a huge turn-off for me. Instead of just clicking meditate and waiting around, what if it started a mini-game? Something that requires focus, like push puzzles or something. Just to keep the player engaged...
In response to Magicsofa
Magicsofa wrote:
Looks really cool... but I would strongly discourage idle verbs. Just sitting and waiting for numbers to go up is a huge turn-off for me. Instead of just clicking meditate and waiting around, what if it started a mini-game? Something that requires focus, like push puzzles or something. Just to keep the player engaged...

I played with the idea of using some sort of mini game for the self training things, but honestly, I've never personally liked having to do that, because then it just adds another layer of repetition, whereas I'd rather watch numbers go up.

I don't know if anyone here has played DBZ FE, but it's a GMUD that has an altered combat system, so that you have to type in commands responding to specific kinds of attacks... And I hate it. I'd rather have had the normal mud turn based combat.

Although, I suppose one could argue there's a compromise to be had here, players could just watch their numbers go up, but they'd get bonuses for playing the game.
Source to the above parser.


obj/var/list/params = new

list/VARS = new
list/STRS = new
list/ARGS = new


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,. + 5));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,"!="); if(.){a=Fix(copytext(s,1,.));b=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}}
return FALSE

string = replacetext(string," ", " ")
string = replacetext(string,"\n", " ")
string = replacetext(string," ", " ")
string = replacetext(string," ", " ")
string = replacetext(string,"==", "_EQU_")
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]}
var a,b,c
a = findtext(l,"\"")
b = findtext(l,"\"",a+1)
STRS["STRS_[STRS.len+1]"] = copytext(l,a+1,b)
l = copytext(l,1,a) + "STRS_[STRS.len]" + copytext(l,b+1)
a = findlasttext(l,"(")
b = findtext(l,")",a+1)
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)
a = findtext(l,"\[")
b = findtext(l,"]",a+1)
c = Fix(copytext(l,a+1,b))
l = copytext(l,1,a) + "[Run(c)]" + copytext(l,b+1)
l = copytext(l,1,a) + "[c]" + copytext(l,b+1)
return l

var list/t = splittext(Fix(syntax)," ")
//world << jointext(t," ")
var p,len = t.len, list/l, ret, v, f, a, b
if(p > len){break}
l = ARGS[t[p+1]]
if(findtext(l[2]," ")){VARS[l[1]] = Run(Fix(l[2]))}
else{VARS[l[1]] = Fix(l[2])}
l = ARGS[t[p+1]]
if(findtext(l[1]," ")){world << Run(Fix(l[1]))}
else{world << Fix(l[1])}
l = ARGS[t[p+1]];ret = 0
for(. in l){if(. in VARS){. = VARS[.]};ret += text2num(.)}
l = ARGS[t[p+1]]
f = Fix(l[1])
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}
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]]}
l = ARGS[t[p+1]]
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}
l = ARGS[t[p+1]]
v = list(); a = Fix(l[1])
for(. in a){v += Fix(.)}
b = Fix(l[2]); ret = jointext(v,b)
l = ARGS[t[p+1]]
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])))}
l = ARGS[t[p+1]]
return length(Fix(l[1]))
l = ARGS[t[p+1]]
a = Fix(l[1])
ret = a[text2num(Fix(l[2]))]

return ret



var syntax = @{" var(a,5) var(b,3) var(f,"Hello, World!") print("5th character of [f] is [access(f,b)], blorp [333]") var(l,list(111,222,333,444,555)) print("length = [len(l)], 3rd value is [access(l,b)]") 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(50) ) 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) ) return() var i = 0 while(10>1) i++ world << i if(i == 10) world << "Finished!" sleep(1) return() 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") ) "}
Page: 1 2 3 ... 346 347 348

Login to reply.