ID:144245
 
Code:
/*mob/verb/PVP()
set src in oview(2)
set category="Battle"
switch(alert("Would you Like to Battle?","Bayshue System","Yes","No"))
if("Yes")
var/list/players = list()
for(var/mob/player/P)
if(P != src)players += P
var/mob/player/M = input(usr,"mmm") in players
if(!M)
usr << "No one to battle"
return
if(M == src)return
if(client.battle)
usr << "You're already battling"
return
if(M.client.battle)
usr << "[M] is battling already."
return
if(client.pkmn.active)return
if(client.quests.mainc)return
if(M.client.pkmn.active)
usr << "[M] is busy"
return
if(M.client.quests.mainc)
usr << "[M] is busy"
return

client.battle = new(src)
M.client.battle = new(M)
client.battle.PVP_start(M)
if("No")
usr<<"<font color=red><B>Bayshue System</B> You Have Chosen not to Battle!"*/



battlehandler
proc
PVP_ability(mob/pokemon/A)
switch(A.ability)
if("Drizzle")
rainy = -1
sunny = 0
sandstorm = 0
hail = 0
C.pack.draw_give_text(C,"A downpour started.")
PVP_draw_text("A downpour started.")
sleep(10)
return 1
if("Drought")
sunny = -1
rainy = 0
sandstorm = 0
hail = 0
C.pack.draw_give_text(C,"The sunlight got bright!")
PVP_draw_text("The sunlight got bright!")
sleep(10)
return 1
if("Sand Stream")
sandstorm = -1
rainy = 0
sunny = 0
hail = 0
C.pack.draw_give_text(C,"A sandstorm brews.")
PVP_draw_text("A sandstorm brews.")
sleep(10)
return 1
if("Trace")
if(A == P)
A.ability = E.ability
C.pack.draw_give_text(C,"[P.name] copied Enemy [E.name]'*ability.")
PVP_draw_text("Enemy [P.name] copied [E.name]'*ability.")
else
A.ability = P.ability
C.pack.draw_give_text(C,"Enemy [E.name] copied [P.name]'*ability.")
PVP_draw_text("[E.name] copied Enemy [P.name]'*ability.")

sleep(10)
return 1
if("Intimidate")
if(A == P)
if(E.ability == "Hyper Cutter" || E.ability == "Clear Body" || E.ability == "White Smoke")return
E.strmod--
C.pack.draw_give_text(C,"Intimidate cuts Enemy [E.name]'*ATTACK!")
PVP_draw_text("Intimidate cuts [E.name]'*ATTACK!")
sleep(10)
else
if(P.ability == "Hyper Cutter" || P.ability == "Clear Body" || P.ability == "White Smoke")return
P.strmod--
C.pack.draw_give_text(C,"Intimidate cuts [P.name]'*ATTACK!")
PVP_draw_text("Intimidate cuts Enemy [P.name]'*ATTACK!")
sleep(10)

return 1
return 0
PVP_draw_level(mob/pokemon/P)
if(!pvp)return
pvp.battle.draw_level(P)
PVP_draw_text(text,layer)
if(!pvp)return
pvp.pack.draw_give_text(pvp,text,layer)
PVP_draw_hp(mob/pokemon/P)
if(!pvp)return
pvp.battle.draw_hp(P)
PVP_add_player_pic()
if(!pvp)return
pvp.screen += pvp.battle.ppic
PVP_rem_player_pic()
if(!pvp)return
pvp.screen -= pvp.battle.ppic
PVP_add_enemy_pic()
if(!pvp)return
pvp.screen += pvp.battle.epic
PVP_rem_enemy_pic()
if(!pvp)return
pvp.screen -= pvp.battle.epic

PVP_player_turn(obj/attack/A,mob/pokemon/At,mob/pokemon/D)
//The "batle runner" needs to have lastpmove and lastemove set
var/flinch
var/able = 1
if(!At.recharge)
able = check_able_status(At)
At.bond = null
if(At.lockedon)At.lockedon--
if(At.charged)At.charged--
if(!able && At.HP <= 0)
//deathcheck(P)
//Return 1, attacker died
return 1

if(able)
if(At.recharge)
At.recharge = 0
C.pack.draw_give_text(C,"[At.name] needs to recharge!")
pvp.pack.draw_give_text(pvp,"Enemy [At.name] needs to recharge!")
sleep(10)
else
if(At.encore && (lastpmove || lastemove))
A = (At==P)?(lastpmove):(lastemove)
if(At==P)
lastpmove = A
else
lastemove = A

flinch = A.effect(C,At,D)
//We died from recoil
//if(flinch == 2)
//deathcheck(At)



//deathcheck(D)

//Return 2 as both have died
if(At.HP <= 0 && D.HP > 0)return 1
if(At.HP <= 0 && D.HP <= 0)return 2
if(At.HP > 0 && D.HP <= 0)return 3
//Return 3 the opponent only is dead

status_effects(At)

At.subbroken = 0

if(At.HP <= 0)//deathcheck(At))
//We need to force a switch
return 1

else
//No action, but didn't die from confusion
if(At.digging || At.flying)
if(At==P)
C.screen += C.battle.ppic
pvp.screen += pvp.battle.epic
else
C.screen += C.battle.epic
pvp.screen += pvp.battle.ppic
At.digging = 0
At.flying = 0
status_effects(At)

At.subbroken = 0

if(At.HP <= 0)//deathcheck(At))
return 1
//We need to force a switch


//Still alive at this point
if(A.two_turn_timer)
A.two_turn_timer = 0
if(At.recharge)
At.recharge = 0
if(A.turn_counter)
if((A.name in list("OUTRAGE","THRASH","PETAL DANCE")) && At.ability != "Own Tempo")
if(!(At.sstatus&CONF))
A.do_effect(C,At,"conf")
sleep(10)
A.turn_counter = 0
A.power = A.initpow
//First won't necessarily be P;baton pass changes this...
//So... if first is in our pokemon, then we went first

//Still alive here
//Need to check for Focus punch
if(first in owner.pokemon && emove.name == "FOCUS PUNCH" && !flinch && emove.flinch)
C.pack.draw_give_text(C,"Enemy [E.name] flinched!")
pvp.pack.draw_give_text(pvp,"[E.name] flinched!")
sleep(10)
C.screen -= C.pack.text_window_text
//Return 4, flinch
flinch = 1

if(!(first in owner.pokemon) && pmove.name == "FOCUS PUNCH" && !flinch && pmove.flinch)
C.pack.draw_give_text(C,"[P.name] flinched!")
pvp.pack.draw_give_text(pvp,"Enemy [P.name] flinched!")
sleep(10)
C.screen -= C.pack.text_window_text
//Return 4, flinch
status_effects(D)
flinch = 1

if(!flinch)return 0

//Flinch so the second one won't get a turn
//Check for status effects
status_effects(D)
D.subbroken = 0
if(D.HP <= 0)/*deathcheck(D))*/return 3 //Opponent dead

return 4

PVP_process_turn()
//Process the turn;see whether it's an attack, poke switch or item use

var/status
if(istype(PVP_option,/obj/attack) && istype(pvp.battle.PVP_option,/obj/attack))
//Start attacking
//Here's the thing, the "battle runner" needs to have certain info set
pmove = PVP_option
emove = pvp.battle.PVP_option
turn_order()
if(first in owner.pokemon)
status = PVP_player_turn(pmove,P,E)
else
status = PVP_player_turn(emove,E,P)

//Check the status
switch(status)
if(0)
//No problem, do the other turn
if(first in owner.pokemon)
status = PVP_player_turn(emove,E,P)
else
status = PVP_player_turn(pmove,P,E)
if(1,2,3)
//P,E or both dead
PVP_deathcheck()
//I suppose start over
spawn()PVP_damage_start()
return


if(4) //Flinch, no one dead
//Start the turn over again
spawn()PVP_damage_start()
return

//Status for the other turn
switch(status)
if(1,2,3)
//P,E or both dead
PVP_deathcheck()
//I suppose start over
spawn()PVP_damage_start()
return

if(istype(PVP_option,/mob/pokemon) && istype(pvp.battle.PVP_option,/obj/attack))
//P is pokemon
//E is attack
//Do switch then attack
//Also consider pursuit
var/do_turn = 1
emove = pvp.battle.PVP_option
if(emove.name == "PURSUIT")
//Do the puruit attack and then switch if still alive
status = PVP_player_turn(emove,E,P)
switch(status)
if(0) //Nothing wrong, do the switch
do_turn = 0
if(3) //Opponent dead
PVP_deathcheck()
spawn()PVP_damage_start()
return
var/old_pok = P
reset_stats(P)
P = PVP_option
pvp.battle.E = PVP_option
P.turn_in = turn+1
PVP_poke_switch(old_pok)
//Check for spikes
PVP_spikes(P)
if(P.HP <= 0)
deathcheck(P)
C.screen -= C.pack.text_window_text
if(PVP_pokemon_active(owner))
baton_switch()
while(forced)sleep(2)
PVP_ability(P)
spawn()PVP_damage_start()
return
else
PVP_end()
//Enemy turn

PVP_ability(P)
if(do_turn)
PVP_player_turn(emove,E,P)
PVP_deathcheck()
spawn()PVP_damage_start()
return

if(istype(PVP_option,/obj/attack) && istype(pvp.battle.PVP_option,/mob/pokemon))
//P is attack
//E is pokemon
//Switch then attack
//Need to consider pursuit
var/do_turn = 1
pmove = PVP_option
if(pmove.name == "PURSUIT")
status = PVP_player_turn(pmove,P,E)
switch(status)
if(0) //Nothing wrong, do the switch
do_turn = 0
if(3) //Opponent dead
PVP_deathcheck()
spawn()PVP_damage_start()
return
var/old_pok = E
reset_stats(E)
E = pvp.battle.PVP_option
E.turn_in = turn+1
pvp.battle.P = pvp.battle.PVP_option
pvp.battle.PVP_poke_switch(old_pok)
//Check for spikes
PVP_spikes(E)

if(E.HP <= 0)
deathcheck(E)
pvp.screen -= pvp.pack.text_window_text
if(PVP_pokemon_active(pvp.mob))
pvp.battle.baton_switch()
while(pvp.battle.forced)sleep(2)
PVP_ability(E)
spawn()PVP_damage_start()
return
else
PVP_end()

//Player turn
PVP_ability(E)
if(do_turn)
PVP_player_turn(pmove,P,E)
PVP_deathcheck()
spawn()PVP_damage_start()
return

if(istype(PVP_option,/mob/pokemon) && istype(pvp.battle.PVP_option,/mob/pokemon))
//P is pok
//E is pok
//Switch em up
pmove = pstrug
emove = estrug
var/old1 = P
var/old2 = E
reset_stats(P)
reset_stats(E)
P = PVP_option
E = pvp.battle.PVP_option
pvp.battle.P = E
pvp.battle.E = P
PVP_poke_switch(old1)
pvp.battle.PVP_poke_switch(old2)
PVP_spikes(E)
PVP_spikes(P)
if(E.HP <= 0)
deathcheck(E)
pvp.screen -= pvp.pack.text_window_text
if(PVP_pokemon_active(pvp.mob))
pvp.battle.baton_switch()
while(pvp.battle.forced)sleep(2)
PVP_ability(E)
spawn()PVP_damage_start()
return
else
PVP_end()

if(P.HP <= 0)
deathcheck(P)
C.screen -= C.pack.text_window_text
if(PVP_pokemon_active(owner))
baton_switch()
while(forced)sleep(2)
else
PVP_end()
PVP_deathcheck()
spawn()PVP_damage_start()
return
//Then the other mixes
//Uggh, kind of complicated
PVP_move_check()
//Check to see whether or not we need to give the menu
PVP_poke_switch(mob/pokemon/Pok)
//Remove old stuff and add the new stuff
C.pack.draw_give_text(C,"[Pok.name], that'*enough! Come back!")
PVP_draw_text("[Pok.name], that'*enough! Come back!")
sleep(10)
C.pack.draw_give_text(C,"Go! [P.name]!")
PVP_draw_text("Go! [P.name]!")
sleep(10)
draw_player_hp()
draw_player_name()
draw_exp_bar()
draw_player_pic()
draw_player_level()

pvp.battle.draw_enemy_hp()
pvp.battle.draw_enemy_name()
pvp.battle.draw_enemy_pic()
pvp.battle.draw_enemy_level()


PVP_deathcheck()
if(P.HP <= 0 && E.HP > 0)
//Need to force a switch
deathcheck(P)
C.screen -= C.pack.text_window_text
if(PVP_pokemon_active(owner))
baton_switch()
while(forced)sleep(2)
PVP_spikes(P)
if(P.HP <= 0)
deathcheck(P)
C.screen -= C.pack.text_window_text
if(PVP_pokemon_active(owner))
baton_switch()
while(forced)sleep(2)
else
PVP_end()
//Do ability stuff here
PVP_ability(P)
else
PVP_end()

return 1

else if(E.HP <= 0 && P.HP > 0)
deathcheck(E)
pvp.screen -= pvp.pack.text_window_text
if(PVP_pokemon_active(pvp.mob))
pvp.battle.baton_switch()
while(pvp.battle.forced)sleep(2)
PVP_spikes(E)
if(E.HP <= 0)
deathcheck(E)
pvp.screen -= pvp.pack.text_window_text
if(PVP_pokemon_active(pvp.mob))
pvp.battle.baton_switch()
while(pvp.battle.forced)sleep(2)
else
PVP_end()
//Do ability stuff
PVP_ability(E)
else
PVP_end()

return 1
else if(P.HP <= 0 && E.HP <= 0)
deathcheck(P)
deathcheck(E)
C.screen -= C.pack.text_window_text
pvp.screen -= pvp.pack.text_window_text
if((!PVP_pokemon_active(owner) && PVP_pokemon_active(pvp.mob)) || (PVP_pokemon_active(owner) && !PVP_pokemon_active(pvp.mob)))
PVP_end()
return
else if(!PVP_pokemon_active(owner) && !PVP_pokemon_active(pvp.mob))
PVP_end("draw")

baton_switch()
pvp.battle.baton_switch()
while(1)
if(!forced && !pvp.battle.forced)break
sleep(2)
PVP_spikes(E)
PVP_spikes(P)

if(E.HP <= 0)
deathcheck(E)
pvp.screen -= pvp.pack.text_window_text
if(PVP_pokemon_active(pvp.mob))
pvp.battle.baton_switch()
while(pvp.battle.forced)sleep(2)
else
PVP_end()


if(P.HP <= 0)
deathcheck(P)
C.screen -= C.pack.text_window_text
if(PVP_pokemon_active(owner))
baton_switch()
while(forced)sleep(2)
else
PVP_end()
//Do ability stuff for both
PVP_ability(P)
PVP_ability(E)
//If we're here, then things are still going
return 1
return 0
PVP_pokemon_active(var/mob/player/P)
for(var/mob/pokemon/Pok in P.pokemon)
if(Pok.HP > 0)return 1
return 0

//The other start won't be called
PVP_spikes(mob/pokemon/A)
if(A == P)
if(espikes)
if(P.type1 != FLYING && P.type2 != FLYING && P.ability != "Levitate")
P.HP = max(P.HP - round(0.125*espikes*P.MAX_HP),0)
draw_player_hp()
pvp.battle.draw_enemy_hp()
C.pack.draw_give_text(C,"The spikes hurt [P.name]!")
pvp.pack.draw_give_text(pvp,"The spikes hurt Enemy [P.name]!")
espikes = 0
sleep(10)
else
if(pspikes)
if(E.type1 != FLYING && E.type2 != FLYING && E.ability != "Levitate")
E.HP = max(E.HP - round(0.125*pspikes*E.MAX_HP),0)
draw_enemy_hp()
pvp.battle.draw_player_hp()
C.pack.draw_give_text(C,"The spikes hurt Enemy [P.name]!")
pvp.pack.draw_give_text(pvp,"The spikes hurt [P.name]!")
pspikes = 0
sleep(10)

PVP_start(var/mob/player/O)
O << "BATTLE"
for(var/mob/pokemon/Pok in owner.pokemon)
if(Pok.HP > 0 && !P)
P = Pok

Pok.itype1 = Pok.type1
Pok.itype2 = Pok.type2
Pok.iability = Pok.ability
if(Pok.held)
Pok.istore = Pok.held.type

for(var/mob/pokemon/Pok in O.pokemon)
if(Pok.HP > 0 && !E)
E = Pok

Pok.itype1 = Pok.type1
Pok.itype2 = Pok.type2
Pok.iability = Pok.ability
if(Pok.held)
Pok.istore = Pok.held.type

O.client.battle.P = E
O.client.battle.E = P

//C.view = "15x15"
//O.client.view = "15x15"

//Set the opponent for an easy reference
//If either logout, just delete the battle
//*Should* be no problems
tpokemon = O.pokemon
pvp = O.client
O.client.battle.pvp = C
//Set up the screen
var/xmax = 14
var/ymax = 9
for(var/_y=0;_y<=ymax;_y++)
for(var/_x=0;_x<=xmax;_x++)
backing += new/obj/bbacking(null,_x,_y,"[_x],[_y]",'battle/backingnew.dmi')
C.screen += backing
O.client.battle.backing = backing.Copy()
O.client.screen += O.client.battle.backing
//world << O.client.screen.len
/*var/_x = 9
var/_y = 7

for(var/i=1;i<=7;i++)
var/obj/I = new/obj/hpmeter(null,_x++,8,-16,-8,"meter[i]",MOB_LAYER+2)
backing += I

O.client.battle.backing = backing.Copy()

//Enemy swoosh
var/list/states = icon_states('battle/eswoosh.dmi')
for(var/state in states)
var/pos = findtext(state,",")
_x = text2num(copytext(state,1,pos))
_y = text2num(copytext(state,pos+1))

var/obj/I = new/obj/eswoosh(null,_x+2,_y+13,-5,-29,state)
swoosh += I
O.client.battle.swoosh = swoosh.Copy()

partic += P
O.client.battle.partic += E

C.screen.Add(backing,swoosh)
O.client.screen.Add(O.client.battle.backing,O.client.battle.swoosh)*/

C.screen -= C.pack.text_window_text
draw_enemy_pic()
O.client.battle.draw_enemy_pic()
draw_battle_screen()
O.client.battle.draw_battle_screen()
//All right, everything looks good so far
//Now the tricky parts. :|
P.turn_in = 1
E.turn_in = 1
//I don't know what happens if there are conflicting "weathers"
sleep(10)
if(P.ability == "Intimidate" && !(E.ability == "Hyper Cutter" || E.ability == "Clear Body" || E.ability == "White Smoke"))
E.strmod--
C.pack.draw_give_text(C,"Enemy [E.name]'*ATTACK fell!")
PVP_draw_text("[E.name]'*ATTACK fell!")
sleep(10)
if(E.ability == "Intimidate" && !(P.ability == "Hyper Cutter" || P.ability == "Clear Body" || P.ability == "White Smoke"))
P.strmod--
C.pack.draw_give_text(C,"[P.name]'*ATTACK fell!")
PVP_draw_text("Enemy [P.name]'*ATTACK fell!")
sleep(10)
//Trace also
if(P.ability == "Trace")
P.ability = E.ability
C.pack.draw_give_text(C,"[P.name] copied*Enemy [E.name]'")
PVP_draw_text("Enemy [P.name]*copied [E.name]'")
sleep(5)
C.pack.draw_give_text(C,"ability.")
PVP_draw_text("ability.")
sleep(10)
if(E.ability == "Trace")
E.ability = P.ability
C.pack.draw_give_text(C,"Enemy [E.name]*copied [P.name]'")
PVP_draw_text("[E.name] copied*Enemy [P.name]'")
sleep(5)
C.pack.draw_give_text(C,"ability.")
PVP_draw_text("ability.")
sleep(10)
if(P.ability == "Drizzle" || E.ability == "Drizzle")
rainy = -1
C.pack.draw_give_text(C,"A downpour started.")
PVP_draw_text("A downpour started.")
sleep(10)
spawn()PVP_turn_start()
return
if(P.ability == "Drought" || E.ability == "Drought")
sunny = -1
C.pack.draw_give_text(C,"The sunlight got bright!")
PVP_draw_text("The sunlight got bright!")
sleep(10)
spawn()PVP_turn_start()
return
if(P.ability == "Sand Stream" || E.ability == "Sand Stream")
sandstorm = -1
C.pack.draw_give_text(C,"A sandstorm brews.")
PVP_draw_text("A sandstorm brews.")
sleep(10)
spawn()PVP_turn_start()
return
spawn()PVP_turn_start()

PVP_end()
//Perhaps that is an "end" turn thing...
C.noinput = 0
C.noscroll = 0
pvp.noinput = 0
pvp.noscroll = 0
for(var/mob/pokemon/P in (owner.pokemon+pvp.mob:pokemon))
reset_stats(P)
owner.invisibility = 0
owner.density = 1
pvp.mob.invisibility = 0
pvp.mob.density = 1
C.screen.Cut()
pvp.screen.Cut()
//C.view = "15x14"
//pvp.view = "15x14"
del pvp.battle
del src

PVP_damage_start()
turn++


/************Perish song;plus need to check for death afterwards*********/
//I suppose all of these happen after the turns as well
if(E.perish)
E.perish--
C.pack.draw_give_text(C,"Enemy [E.name]'*perish count is [E.perish].")
PVP_draw_text("[E.name]'*perish count is [E.perish].")
sleep(10)
if(!E.perish)
E.HP = 0
sleep(10)

if(P.perish)
P.perish--
C.pack.draw_give_text(C,"[P.name]'*perish count is [P.perish].")
PVP_draw_text("Enemy [P.name]'*perish count is [P.perish].")
sleep(10)
if(!P.perish)
P.HP = 0
sleep(10)

//P dead E not
//Also switch into spikes
PVP_deathcheck()



//Done after the turns
if(efsight)
efsight--
if(!efsight)
C.pack.draw_give_text(C,"FUTURE SIGHT hit!")
PVP_draw_text("FUTURE SIGHT hit!")
if(prob(90) && !P.digging && !P.flying)
var/obj/attack/A = new
A.power = 80
var/smodhold = efsightpow.satkmod
efsightpow.satkmod = 0
var/dmg = damage(A,efsightpow,P,1,1,0,SATK)
do_damage(E,P,dmg,SING,SATK,0,1)
efsightpow.satkmod = smodhold
del A
draw_hp(P)
PVP_draw_hp(P)
efsightpow = null
sleep(10)
else
C.pack.draw_give_text(C,"But it failed!")
PVP_draw_text("But it failed!")
sleep(10)
if(efsight == 7)
//Doom desire
efsight = 0
C.pack.draw_give_text(C,"DOOM DESIRE hit!")
PVP_draw_text("DOOM DESIRE hit!")
if(prob(90) && !P.digging && !P.flying)
var/obj/attack/A = new
A.power = 150
var/modhold = efsightpow.strmod
efsightpow.strmod = 0
var/dmg = damage(A,efsightpow,P,1,1,0,ATK)
do_damage(E,P,dmg,SING,ATK,0,1)
efsightpow.strmod = modhold
del A
draw_hp(P)
PVP_draw_hp(P)
efsightpow = null
sleep(10)
else
C.pack.draw_give_text(C,"But it failed!")
PVP_draw_text("But it failed!")
sleep(10)



if(pfsight)
pfsight--
if(!pfsight)
C.pack.draw_give_text(C,"FUTURE SIGHT hit!")
PVP_draw_text("FUTURE SIGHT hit!")
if(prob(90) && !E.digging && !E.flying)
var/obj/attack/A = new
A.power = 80
var/smodhold = pfsightpow.satkmod
pfsightpow.satkmod = 0
var/dmg = damage(A,pfsightpow,E,1,1,0,SATK)
do_damage(P,E,dmg,SING,SATK,0,1)
pfsightpow.satkmod = smodhold
del A
draw_hp(E)
PVP_draw_hp(E)
pfsightpow = null
sleep(10)
else
C.pack.draw_give_text(C,"But it failed!")
PVP_draw_text("But it failed!")
sleep(10)
if(pfsight == 7)
//Doom desire
pfsight = 0
C.pack.draw_give_text(C,"DOOM DESIRE hit!")
PVP_draw_text("DOOM DESIRE hit!")
if(prob(85) && !E.digging && !E.flying)
var/obj/attack/A = new
A.power = 150
var/modhold = pfsightpow.strmod
pfsightpow.strmod = 0
var/dmg = damage(A,pfsightpow,E,1,1,0,ATK)
do_damage(P,E,dmg,SING,ATK,0,1)
pfsightpow.strmod = modhold
del A
draw_hp(E)
PVP_draw_hp(E)
pfsightpow = null
sleep(10)
else
C.pack.draw_give_text(C,"But it failed!")
PVP_draw_text("But it failed!")
sleep(10)

PVP_deathcheck()

if(sandstorm)
sandstorm--
if(!sandstorm)
C.pack.draw_give_text(C,"The sandstorm*subsided.")
PVP_draw_text("The sandstorm*subsided.")
sleep(10)

else
C.pack.draw_give_text(C,"The sandstorm*raged!")
PVP_draw_text("The sandstorm*raged!")
sleep(10)



if(E.type1 != ROCK && E.type1 != GROUND && E.type1 != STEEL && E.type2 != ROCK && E.type2 != GROUND && E.type2 != STEEL && E.ability != "Cloud Nine" && E.ability != "Sand Veil" && E.ability != "Air Lock")
var/dmg = max(round(1/16*E.MAX_HP),1)
E.HP = max(E.HP - dmg,0)
draw_hp(E)
PVP_draw_hp(E)
C.pack.draw_give_text(C,"The SANDSTORM hit*Enemy [E.name]!")
PVP_draw_text("The SANDSTORM hit*[E.name]!")
sleep(10)
if(P.type1 != ROCK && P.type1 != GROUND && P.type1 != STEEL && P.type2 != ROCK && P.type2 != GROUND && P.type2 != STEEL && P.ability != "Cloud Nine" && P.ability != "Sand Veil" && P.ability != "Air Lock")
var/dmg = max(round(1/16*P.MAX_HP),1)
P.HP = max(P.HP - dmg,0)
draw_hp(P)
PVP_draw_hp(P)
C.pack.draw_give_text(C,"The SANDSTORM hit*[P.name]!")
PVP_draw_text("The SANDSTORM hit*Enemy [P.name]!")
sleep(10)

if(hail)
hail--
if(!hail)
C.pack.draw_give_text(C,"The hail stopped*failing.")
PVP_draw_text("The hail stopped*failing.")
if(E.pname == "CASTFORM")
E.type1 = NORMAL
draw_enemy_pic()
if(pvp)pvp.battle.draw_player_pic()

if(P.pname == "CASTFORM")
P.type1 = NORMAL
if(pvp)pvp.battle.draw_enemy_pic()
draw_player_pic()

sleep(10)
else
C.pack.draw_give_text(C,"Hail continues*to fall!")
PVP_draw_text("Hail continues*to fall!")
if(E.pname == "CASTFORM" && E.type1 != ICE)
E.type1 = ICE
draw_enemy_pic()
if(pvp)pvp.battle.draw_player_pic()
sleep(10)
C.pack.draw_give_text(C,"Enemy [E.name]'*type is now ICE!")
PVP_draw_text("[E.name]'*type is now ICE!")

if(P.pname == "CASTFORM" && E.type1 != ICE)
P.type1 = ICE
if(pvp)pvp.battle.draw_enemy_pic()
draw_player_pic()
sleep(10)
C.pack.draw_give_text(C,"[P.name]'*type is now ICE!")
PVP_draw_text("Enemy [P.name]'*type is now ICE!")
sleep(10)


if(E.type1 != ICE && E.type2 != ICE && E.ability != "Cloud Nine" && E.ability != "Air Lock")
var/dmg = max(round(1/16*E.MAX_HP),1)
E.HP = max(E.HP - dmg,0)
draw_hp(E)
PVP_draw_hp(E)
C.pack.draw_give_text(C,"Hail hits*Enemy [E.name]!")
PVP_draw_text("Hail hits*[E.name]!")
sleep(10)
if(P.type1 != ICE && P.type2 != ICE && E.ability != "Cloud Nine" && E.ability != "Air Lock")
var/dmg = max(round(1/16*P.MAX_HP),1)
P.HP = max(P.HP - dmg,0)
draw_hp(P)
PVP_draw_hp(P)
C.pack.draw_give_text(C,"Hail hits*[P.name]!")
PVP_draw_text("Hail hits*Enemy [P.name]!")
sleep(10)

PVP_deathcheck()

if(sunny)
sunny--
if(!sunny)
C.pack.draw_give_text(C,"The sunlight*faded.")
PVP_draw_text("The sunlight*faded.")
if(E.pname == "CASTFORM")
E.type1 = NORMAL
draw_enemy_pic()
if(pvp)pvp.battle.draw_player_pic()

if(P.pname == "CASTFORM")
P.type1 = NORMAL
if(pvp)pvp.battle.draw_enemy_pic()
draw_player_pic()
else
C.pack.draw_give_text(C,"The sunlight is*strong.")
PVP_draw_text("The sunlight is*strong.")
if(E.pname == "CASTFORM" && E.type1 != FIRE)
E.type1 = FIRE
draw_enemy_pic()
if(pvp)pvp.battle.draw_player_pic()
sleep(10)
C.pack.draw_give_text(C,"Enemy [E.name]'*type is now FIRE!")
PVP_draw_text("[E.name]'*type is now FIRE!")

if(P.pname == "CASTFORM" && P.type1 != FIRE)
P.type1 = FIRE
if(pvp)pvp.battle.draw_enemy_pic()
draw_player_pic()
sleep(10)
C.pack.draw_give_text(C,"[P.name]'*type is now FIRE!")
PVP_draw_text("Enemy [P.name]'*type is now FIRE!")

if(P.status&FROZE)
if(prob(9.8))
P.status = 0
draw_level(P)
PVP_draw_level(P)
sleep(10)
C.pack.draw_give_text(C,"The sun thawed*[P.name]!")
PVP_draw_text("The sun thawed*Enemy [P.name]!")

if(E.status&FROZE)
if(prob(9.8))
E.status = 0
draw_level(E)
PVP_draw_level(E)
sleep(10)
C.pack.draw_give_text(C,"The sun thawed*Enemy [E.name]!")
PVP_draw_text("The sun thawed*[E.name]!")



sleep(10)

if(rainy)
rainy--
if(!rainy)
C.pack.draw_give_text(C,"The rain stopped.")
PVP_draw_text("The rain stopped.")
if(E.pname == "CASTFORM")
E.type1 = NORMAL
draw_enemy_pic()
if(pvp)pvp.battle.draw_player_pic()

if(P.pname == "CASTFORM")
P.type1 = NORMAL
if(pvp)pvp.battle.draw_enemy_pic()
draw_player_pic()
else
C.pack.draw_give_text(C,"Rain continues*to fall.")
PVP_draw_text("Rain continues*to fall.")
if(E.pname == "CASTFORM" && E.type1 != WATER)
E.type1 = WATER
draw_enemy_pic()
if(pvp)pvp.battle.draw_player_pic()
sleep(10)
C.pack.draw_give_text(C,"Enemy [E.name]'*type is now WATER!")
PVP_draw_text("[E.name]'*type is now WATER!")

if(P.pname == "CASTFORM" && P.type1 != WATER)
P.type1 = WATER
if(pvp)pvp.battle.draw_enemy_pic()
draw_player_pic()
sleep(10)
C.pack.draw_give_text(C,"[P.name]'*type is now WATER!")
PVP_draw_text("Enemy [P.name]'*type is now WATER!")

if(P.ability == "Rain Dish")
P.HP = min(P.HP+round(1/16*P.MAX_HP),P.MAX_HP)
draw_hp(P)
PVP_draw_hp(P)
sleep(10)
C.pack.draw_give_text(C,"Rain Dish healed*[P.name]!")
PVP_draw_text("Rain Dish healed*Enemy [P.name]!")
if(E.ability == "Rain Dish")
E.HP = min(E.HP+round(1/16*E.MAX_HP),E.MAX_HP)
draw_hp(E)
PVP_draw_hp(E)
sleep(10)
C.pack.draw_give_text(C,"Rain Dish healed*Enemy [E.name]!")
PVP_draw_text("Rain Dish healed*[E.name]!")

sleep(10)

C.screen -= C.pack.text_window_text
if(pvp)pvp.screen -= pvp.pack.text_window_text
for(var/obj/attack/A in E.moves)
if(A.disabled)
A.disabled--
if(!A.disabled)
spawn()
C.pack.draw_give_text(C,"Enemy [E.name]'*[A.name]'")
sleep(5)
C.pack.draw_give_text(C,"no longer*disabled!")
sleep(10)
PVP_draw_text("[E.name]'*[A.name]'")
sleep(5)
PVP_draw_text("no longer*disabled!")
sleep(10)
break

for(var/obj/attack/A in P.moves)
if(A.disabled)
A.disabled--
if(!A.disabled)
spawn()
C.pack.draw_give_text(C,"[P.name]'*[A.name]'")
sleep(5)
C.pack.draw_give_text(C,"no longer*disabled!")
sleep(10)
PVP_draw_text("Enemy [P.name]'*[A.name]'")
sleep(5)
PVP_draw_text("no longer*disabled!")
sleep(10)
break
/************Reflect + Light Screen*************/
if(ereflect)
ereflect--
if(!ereflect)
C.pack.draw_give_text(C,"Enemy [E.name]'*REFLECT faded.")
PVP_draw_text("[E.name]'*REFLECT faded.")
sleep(10)
if(preflect)
preflect--
if(!preflect)
C.pack.draw_give_text(C,"[P.name]'*REFLECT faded.")
PVP_draw_text("Enemy [P.name]'*REFLECT faded.")
sleep(10)
if(elscreen)
elscreen--
if(!elscreen)
C.pack.draw_give_text(C,"Enemy [E.name]'*L.SCREEN faded.")
PVP_draw_text("[E.name]'*L.SCREEN faded.")
sleep(10)
if(plscreen)
plscreen--
if(!plscreen)
C.pack.draw_give_text(C,"[P.name]'*L.SCREEN faded.")
PVP_draw_text("Enemy [P.name]'*L.SCREEN faded.")
sleep(10)
/*********************************************/
if(psafe)
psafe--
if(!psafe)
C.pack.draw_give_text(C,"[P.name]'*SAFEGUARD faded.")
PVP_draw_text("Enemy [P.name]'*SAFEGUARD faded.")
sleep(10)

if(esafe)
esafe--
if(!esafe)
C.pack.draw_give_text(C,"Enemy [E.name]'*SAFEGUARD faded.")
PVP_draw_text("[E.name]'*SAFEGUARD faded.")
if(P.taunting)
P.taunting--
if(P.taunting)
C.pack.draw_give_text(C,"[P.name] is*taunting!")
PVP_draw_text("Enemy [P.name]*is taunting!")
else
C.pack.draw_give_text(C,"[P.name]*stopped taunting.")
PVP_draw_text("Enemy [P.name]*stopped taunting.")
sleep(10)
if(E.taunting)
E.taunting--
if(E.taunting)
C.pack.draw_give_text(C,"Enemy [E.name]*is taunting!")
PVP_draw_text("[E.name]*is taunting!")
else
C.pack.draw_give_text(C,"Enemy [E.name]*stopped taunting.")
PVP_draw_text("[E.name]*stopped taunting.")
sleep(10)

if(P.encore)
P.encore--
if(!P.encore)
C.pack.draw_give_text(C,"[P.name]'*encore ended.")
PVP_draw_text("Enemy [P.name]'s*encore ended.")
sleep(10)
if(E.encore)
E.encore--
if(!E.encore)
C.pack.draw_give_text(C,"Enemy [E.name]'*encore ended.")
PVP_draw_text("[E.name]'*encore ended.")
sleep(10)

if(pvp)spawn()PVP_turn_start()


//I have a feeling some of this stuff is "turn end", like the shields
//In reality, I have no idea what the order is
PVP_turn_end()

PVP_turn_start()
//Okay, I think there are some mods for this
//I was hoping to use most of the existing code, but this might be better
//than jury-rigging some of these procs
//No, no, E and P get cleared properly. Phew, this is kind of mind-numbing
E.endure = 0
P.endure = 0
P.detected = 0
E.detected = 0
if(P.ability == "Speed Boost" && P.aglmod != 6)
P.aglmod++
C.pack.draw_give_text(C,"[P.name]'*SPEED rose!")
PVP_draw_text("Enemy [P.name]'*SPEED rose!")
if(E.ability == "Speed Boost" && E.aglmod != 6)
E.aglmod++
C.pack.draw_give_text(C,"Enemy [E.name]'*SPEED rose!")
PVP_draw_text("[E.name]'*SPEED rose!")

if(P.ability == "Shed Skin" && P.status&31)
if(prob(30))
P.status = 0
C.pack.draw_give_text("Shed Skin healed*[P.name]!")
PVP_draw_text("Shed Skin healed*Enemy [P.name]!")
draw_level(P)
PVP_draw_level(P)
if(E.ability == "Shed Skin" && E.status&31)
if(prob(30))
E.status = 0
C.pack.draw_give_text("Shed Skin healed*Enemy [E.name]!")
PVP_draw_text("Shed Skin healed*[E.name]!")
draw_level(E)
PVP_draw_level(E)
//Need to do damaging things first
//Disabled moves
if(P.ingrain)
P.HP = min(P.HP+round(1/16*P.MAX_HP),P.MAX_HP)
draw_hp(P)
PVP_draw_hp(P)
sleep(10)
C.pack.draw_give_text(C,"Ingrain healed*[P.name]!")
pvp.pack.draw_give_text(pvp,"Ingrain healed*Enemy [P.name]!")
sleep(10)
if(E.ingrain)
E.HP = min(E.HP+round(1/16*E.MAX_HP),E.MAX_HP)
draw_hp(E)
PVP_draw_hp(E)
sleep(10)
C.pack.draw_give_text(C,"Ingrain healed*Enemy [E.name]!")
pvp.pack.draw_give_text(pvp,"Ingrain healed*[E.name]!")
sleep(10)
//Wish stuff
if(ewish)
ewish--
if(!ewish)
C.pack.draw_give_text(C,"Enemy [E.name]*got its wish!")
pvp.pack.draw_give_text(pvp,"[E.name]*got its wish!")
E.HP = min(E.HP + round(0.5*E.MAX_HP),E.MAX_HP)
draw_hp(E)
pvp.battle.draw_hp(E)
sleep(10)
if(pwish)
pwish--
if(!pwish)
C.pack.draw_give_text(C,"[P.name]*got its wish!")
pvp.pack.draw_give_text(pvp,"Enemy [P.name]*got its wish!")
P.HP = min(P.HP + round(0.5*P.MAX_HP),P.MAX_HP)
draw_hp(P)
pvp.battle.draw_hp(P)
sleep(10)

//Yawning
if(P.yawn)
P.yawn--
if(!P.yawn)
//Sleep
if(!(E.status&31) && E.ability != "Insomnia" && E.ability != "Vital Spirit")
E.status = SLEEP
E.slpcount = rand(2,5)
draw_level(E)
pvp.battle.draw_level(E)
C.pack.draw_give_text(C,"Enemy [E.name]*fell asleep!")
pvp.pack.draw_give_text("[E.name]*fell asleep!")
sleep(10)

if(E.yawn)
E.yawn--
if(!E.yawn)
if(!(P.status&31) && P.ability != "Insomnia" && P.ability != "Vital Spirit")
P.status = SLEEP
P.slpcount = rand(2,5)
draw_level(P)
pvp.battle.draw_level(P)
C.pack.draw_give_text(C,"[P.name]*fell asleep!")
pvp.pack.draw_give_text("Enemy [P.name]*fell asleep!")
sleep(10)



if(P.biding)
P.biding--
if(!P.biding)
pmove.unbide = 1

if(E.biding)
E.biding--
if(!E.biding)
emove.unbide = 1


sleep(10)


//Okay, null out the options and give the menu if it needs to be given
//Now, find where the opions are processed
//Processed in get_option()
//Okay, that's the same, but need to figure out where the other stuff is
//use_move() is where the move select is processes
C.screen -= C.pack.text_window_text
pvp.screen -= pvp.pack.text_window_text
PVP_option = null
pvp.battle.PVP_option = null

//First turn
if(!pmove && !emove)
C.noscroll = 0
C.noinput = 0
first = null
C.screen -= C.pack.text_window
C.pack.text_window.Cut()
add_options()
//C.screen += boptions
ocurs = new(null,8,3,17,-17)
C.screen += ocurs

pvp.noscroll = 0
pvp.noinput = 0
pvp.screen -= pvp.pack.text_window
pvp.pack.text_window.Cut()
pvp.battle.add_options()
//C.screen += boptions
pvp.battle.ocurs = new(null,8,3,17,-17)
pvp.screen += pvp.battle.ocurs

//Need to wait until an action has been picked
//Some sort of loop here

else
//Guess, just do all of these twice
if(pmove.two_turn_timer)
PVP_option = pmove

else if(pmove.turn_counter && (pmove.name in list("UPROAR","ICE BALL","ROLLOUT","OUTRAGE","THRASH","PETAL DANCE")))

PVP_option = pmove
else if((P.biding || pmove.unbide))

PVP_option = pmove

else if(P.recharge)

PVP_option = pmove
else
C.noscroll = 0
C.noinput = 0
first = null

//world << boptions.len

//if(!boptions || !boptions.len)
C.screen -= C.pack.text_window
C.pack.text_window.Cut()
add_options()
//else
// C.screen += boptions
ocurs = new(null,8,3,17,-17)
C.screen += ocurs

//Perhaps I should just set to a move...
if(emove.two_turn_timer)
pvp.battle.PVP_option = emove

else if(emove.turn_counter && (emove.name in list("UPROAR","ICE BALL","ROLLOUT","OUTRAGE","THRASH","PETAL DANCE")))

pvp.battle.PVP_option = emove
else if((E.biding || emove.unbide))

pvp.battle.PVP_option = emove

else if(E.recharge)

pvp.battle.PVP_option = emove
else
pvp.noscroll = 0
pvp.noinput = 0


pvp.screen -= pvp.pack.text_window
pvp.pack.text_window.Cut()
pvp.battle.add_options()
//else
// C.screen += boptions
pvp.battle.ocurs = new(null,8,3,17,-17)
pvp.screen += pvp.battle.ocurs
//Give menus for the players
while(1)
if(PVP_option && pvp.battle.PVP_option)break
sleep(2)
//world << "<b>Both players chose an option</b>"
spawn()PVP_process_turn()


Problem description:
there are no errors, but when you go to the PvP area, it dosnt work (as in, it wont let you pvp)
plz help

I have no idea why that happens, and I'm not going to dig through the horribly crufty nature of that mass of crap in order to figure it out. Suggestion: Start again, and for the love of Eris, use a decent design.

Incidentally, there's a bug when I look at that code in Firefox 2.0.0.1 on Windows - the DM window goes all distorted at the end and doesn't display the code there, rather, it repeats previous code. It's probably an FF problem rather then a website problem, though.
sweet-ness, thats a lot to look through!
How can you have written all of that and not know what it does? If you actually knew what was going you'd surely be able to be more specific with your problem, rather than just saying "it doesn't work!! help!!!!"
In response to Midmarch (#3)
He surely hasn't written most of it. That code, while still horrible, apparently has (a limited amount of) above-average approaches.
Also; the most major thing - the grammer and punctuation in the text strings and comments in the code is OBVIOUSLY much better than Fautzo's. :P
In response to Kaioken (#4)
actually, most of the code i didnt write, i got it from a rip, but you guys are right, that IS a neverending whopper of a code, besides, i think i found the problem anyways