/*mob
var
XLoc
YLoc
ZLoc
inbattle=0
textonscreenlist
south=0
KSmod = 0
HP = 50
THP = 50
strength = 5
tarmor
speed = 5
cexp = 0
texp = 0
Dodge = 1
/mob/monsters/Goblin
icon = 'Enemies.dmi'
icon_state = "Goblin"
Name = "Goblin"
name = "Goblin"
ATK_minimum = 2
ATK_maximum = 2
TATK_minimum = 2
TATK_maximum = 2
HP = 10
THP = 10
strength = 1
body = 1
agility = 2
mind = 1
willpower = 1
spirit = 1
speed = 10
Dodge = 1
mob/monsters/Slave
icon = 'Enemies.dmi'
icon_state = "Slave"
Name = "Slave"
name = "Slave"
ATK_minimum = 2
ATK_maximum = 2
TATK_minimum = 2
TATK_maximum = 2
HP = 7
THP = 7
strength = 1
body = 1
agility = 2
mind = 1
willpower = 1
spirit = 1
speed = 10
Dodge = 1*/
turf
Battle_Grass
icon = 'Turfs.dmi'
icon_state = "grass"
Enter()
if (!usr.client){return}
if(!usr.Bnum)
var/C=rand(1,20)
if(C<5)
var{M;M1;M2;R}
M=new/mob/monsters/Goblin
R=rand(1,2)
if(R<1){M1=new/mob/monsters/Slave}
else{..()}
R=rand(1,3)
if(R==1){M2=new/mob/monsters/Slave}
else{..()}
usr.Rbattle(M,M1,M2)
obj
back
icon='back.dmi'
layer=MOB_LAYER+4
New(client/C) C.screen+=src
text
icon='font.dmi'
layer=MOB_LAYER+5
New(client/C) C.screen+=src
BattleGrounds
icon = 'Turfs.dmi'
icon_state = "grass"
invisibility = 101
Background
icon = 'turfs.dmi'
icon_state = "grass"
density = 1
client
Northeast(){return}
Northwest(){return}
Southwest(){return}
Southeast(){return}
North()
if(usr.inbattle==1)
if(usr.south == 0){return}
for(var/obj/menu/I in usr.client.screen){del I}
if(usr.south == 1){usr.south = 0;new/obj/menu/Curser(usr.client);return}
else ..()
South()
if (usr.inbattle==1)
if(usr.south == 1){return}
for(var/obj/menu/I in usr.client.screen){del I}
if(usr.south == 0){usr.south = 1;new/obj/menu/Curser1(usr.client);return}
else ..()
East()
if(usr.inbattle==1){return}
else ..()
West()
if (usr.inbattle==1){return}
else ..()
Center()
if(usr.south==0)
if (usr.Turn)usr.Attack()
else{usr<<"Not your turn."}
if(usr.south==1)
if (usr.Turn)usr.Run()
else{usr<<"Not your turn."}
obj/menu
icon = 'arrow.dmi'
Curser
layer = MOB_LAYER+58
New(client/C) screen_loc = "1,3", C.screen += src
Curser1
layer = MOB_LAYER+58
New(client/C) screen_loc = "1,2", C.screen += src
mob/proc
//starts the random battle
Rbattle(mob/Enemy,mob/Enemy2,mob/Enemy3)
var/turf/Map
for (var/turf/BattleGrounds/BatLoc in world)
var/Taken=0
for (var/atom/A in BatLoc)
if(A.density==1){Taken=1}
if(!Taken){Map=BatLoc}
if (!Map){return}
usr.XLoc=usr.x
usr.YLoc=usr.y
usr.ZLoc=usr.z
usr.inbattle=1
usr.south=0
usr.Move(Map)
usr.dir=WEST
usr<<"You are under attack!<br>To attack hit Numpad 5 with numlock off."
usr.client.lazy_eye = 5
textonscreenbackground(1,1,5,3)
textonscreenTEXT(1.5,12,3,1.3," Attack")
textonscreenTEXT(1.5,12,2,1.3," Run")
new/obj/menu/Curser(usr.client)
if(Enemy!=null)Enemy.Move(locate(usr.x-4,usr.y,usr.z))
if(Enemy2!=null)Enemy2.Move(locate(usr.x-4,usr.y + 1,usr.z))
if(Enemy3!=null)Enemy3.Move(locate(usr.x-4,usr.y-1,usr.z))
var/list/WhichTurn=new()
var/list/ppl=new()
for(var/mob/Aa in world)ppl+=Aa
var/nextturn,PlayerOrder
do
for (var/aa=0;aa<=length(ppl);aa++)
PlayerOrder=0
for(var/mob/ppp in ppl)
if (ppp.speed>PlayerOrder){nextturn=ppp;PlayerOrder=ppp.speed}
else if (ppp.speed==PlayerOrder)nextturn=ppp
WhichTurn+=nextturn
ppl-=nextturn
while (length(ppl)>0)
do
for(var/mob/pp in WhichTurn)
if (pp.HP>0)
if (pp.client)
if(usr.inbattle==1){pp<<"It is now your turn!";pp.Turn = 1}
else return
while(pp.Turn)sleep(5)
else{pp.MonsterAttack()}
while(1)
//You Attack
Attack()
var/list/MonsterList=new()
for (var/mob/M in view())
if(M!=null)
if (M.HP > 0){MonsterList += M}
MonsterList-=usr
MonsterList += "Cancel"
var/mob/enemy = input("Attack who?") in MonsterList
if (enemy == "Cancel")
return
var/hitpercent=50+usr.Dodge
var/hitpercent2=hitpercent-enemy.KSmod
if(hitpercent2>100) hitpercent2=100
if(hitpercent2<0) hitpercent=0
var/hitpercent3=rand(1,100)
var/damagefirst=rand(usr.strength)
var/damagecount=damagefirst-enemy.tarmor
sleep(2)
if(hitpercent3 <= hitpercent2)
if(damagecount > 0)
enemy.HP -= damagecount
view()<<"<font size = 1>[usr] Attacks [enemy] for [damagecount]"
if (enemy != null)
if (enemy.HP < 1)
if (istype(enemy,/mob/monsters)){enemy.icon = null}
usr.Victory()
usr.Turn = 0
else{view() << "<font size = 1>[usr]'s attack bounced off [enemy].";usr.Turn = 0}
else{view() << "<font size = 1>[usr] attacks [enemy], but misses.";usr.Turn = 0}
//Monster Attack
MonsterAttack()
for (var/mob/Player in view())
if (Player.client && Player.HP > 0)
for (var/mob/M in view())
if (M.Bnum == Bnum && M.client)
var/hitpercent=50+usr.Dodge
var/hitpercent2=hitpercent - M.KSmod
if(hitpercent2>100) hitpercent2 = 100
if(hitpercent2<0) hitpercent = 0
var/hitpercent3=rand(1,100)
var/damagefirst=rand(src.strength)
var/damagecount=damagefirst-M.tarmor
sleep(2)
if(hitpercent3 <= hitpercent2)
if(damagecount > 0){M.HP -= damagecount;view()<<"<font size = 1>[src] Attacks [M] for [damagecount]";M.DeathCheck()}
else{view() << "<font size = 1>[src]'s attack bounced off [M]."}
else{view() << "<font size = 1>[src] attacks [M], but misses."}
//Run, Run RUN!!
Run()
switch(rand(1,3))
if(3)
usr<<"<font size = 1>You tryed to run, And Succeeded!"
usr.inbattle=0
usr.client.lazy_eye = 0
usr.Bnum = 0
usr.Turn=0
usr.close_menu()
for(var/mob/monsters/M in oview(5)) del M
usr.Move(locate(usr.XLoc,usr.YLoc,usr.ZLoc))
else{usr<<"<font size = 1>You tryed to run, but failed.";usr.Turn=0}
//When you die, aww
DeathCheck()
if(istype(src,/mob/player))
if(src.HP<=0)
src.icon_state = null
src.client.lazy_eye = 0
src.Move(locate(usr.XLoc, usr.YLoc, usr.ZLoc))
src.Bnum = 0
src.inbattle=0
src.close_menu()
src<<"you died"
//Victory proc, when you win! DING DING
Victory()
var/mm=0
for(var/mob/monsters/M in oview(5))
if(M!=null)
if (M.HP > 0)
mm++
if(mm==0)
var/Gained_Exp
for(var/mob/monsters/M in oview(5))
Gained_Exp+=M.cexp
del M
usr<<"Victory is at hand"
usr<<"You Gained [Gained_Exp] Experience!"
usr.close_menu()
usr.cexp+=Gained_Exp
usr.texp+=Gained_Exp
usr.inbattle=0
usr.client.lazy_eye = 0
usr.Bnum = 0
usr.Move(locate(usr.XLoc,usr.YLoc,usr.ZLoc))
close_menu()
for(var/obj/text/O in client.screen)del O
for(var/obj/back/O in client.screen)del O
for(var/obj/menu/O in client.screen)del O
textonscreenbackground(var/Xcoord1, var/Ycoord1, var/Xcoord2, var/Ycoord2)
for(var/Xcoord=Xcoord1,Xcoord<=Xcoord2,Xcoord++)
for(var/Ycoord=Ycoord1,Ycoord<=Ycoord2,Ycoord++)
var/obj/back/background=new(client)
if(Xcoord==Xcoord1)background.icon_state="l"
if(Xcoord==Xcoord2)background.icon_state="r"
if(Ycoord==Ycoord1)background.icon_state="b"
if(Ycoord==Ycoord2)background.icon_state="t"
if(Xcoord==Xcoord1&&Ycoord==Ycoord1)background.icon_state="ll"
if(Xcoord==Xcoord2&&Ycoord==Ycoord2)background.icon_state="ur"
if(Xcoord==Xcoord1&&Ycoord==Ycoord2)background.icon_state="ul"
if(Xcoord==Xcoord2&&Ycoord==Ycoord1)background.icon_state="lr"
background.screen_loc="[Xcoord],[Ycoord]"
textonscreenTEXT(var/Xcoord1, var/Xcoord2, var/Ycoord1, var/Ycoord2,var/T)
var Xcoord=Xcoord1,Ycoord=Ycoord1
Textonscreenproc(T)
for(var/Y in textonscreenlist)
var/obj/text/characters=new(client)
if(Xcoord==round(Xcoord)&&Ycoord==round(Ycoord)) characters.screen_loc="[Xcoord],[Ycoord]"
else if(Xcoord!=round(Xcoord)&&Ycoord==round(Ycoord)) characters.screen_loc="[Xcoord-0.5]:16,[Ycoord]"
else if(Xcoord==round(Xcoord)&&Ycoord!=round(Ycoord)) characters.screen_loc="[Xcoord],[Ycoord-0.5]:+16"
else if(Xcoord!=round(Xcoord)&&Ycoord!=round(Ycoord)) characters.screen_loc="[Xcoord-0.5]:16,[Ycoord-0.5]:+16"
characters.icon_state="[Y]"
Xcoord+=0.5
if(Xcoord==Xcoord2)
Xcoord=Xcoord1;Ycoord-=0.5
if(Ycoord==Ycoord2-0.5)
break
Textonscreenproc(var/textonscreen)
textonscreenlist=list()
for(var/a=1,a<=length(textonscreen),a++)
textonscreenlist+=copytext(textonscreen,a,a+1)
Problem description: I am starting to modify Raekwon's Random Battle system these errors keep appearing:
Combat.dm:100:error:BatLoc:undefined type: BatLoc
Combat.dm:102:error:BatLoc:undefined type: BatLoc
Combat.dm:104:error:BatLoc:undefined type: BatLoc
Combat.dm:100:BatLoc :warning: variable defined but not used
Any ideas why?
The error is saying: 'You haven't told me what a /turf/BattleGrounds is, so I don't know what to do'. Like I said, if you copied-and-pasted, try and see if you've missed a bit. If not, try to create your own using the information you've got about them (i.e. 'var X is used here, so it must have a var X').