(Spell)
turf Enter(atom/a) if(istype(a,/obj/projectile)) if(projectile_wall) if(istype(a,/obj/projectile/spell/beam))return 0 else a:Done() else .=..() else .=..()
mob var/list/spells=list() player/proc removeSustain() if(sustain_mana)for(var/spell/Sp in spells)if(Sp.cast_sustain) var/sustained/S=hasSustained(Sp.spell_ID) if(S) Sp.button.overlays-=image('icons/interface/button/hotbar.dmi',"Use",HUD_LAYER+0.02) S.Done() if(client)client.HUD.updateSustain(sustain_mana,calcManaMax()) spell var upgrade=0 obj/hud/spellbutton/button button_state="" purchased=0
tmp cooldown=0 ready=1 channel_time=0 cast_time=0 can_queue=1 channel=0 busy_walk=1 busy_cast=1 cast_animate="" spell_ID="" Descr=""
cast_mana=0 cast_sustain=0
melee_dmg=0 spell_dmg=0
dot_dmg=0 dot_duration=0 dot_tick=0 dot_stack=0
tile_dmg=0 tile_duration=0 tile_tick=0 tile_stack=0
aoe_dmg=0 aoe_range=0
beam_knockback=0
proj_speed=0
chain_bounce=0 chain_loss=0
targeted=0
spell_range=0 dmg_color="" New() ..() buildButton() proc Fire(mob/player/m) if(cast_sustain) var/sustained/S=m.hasSustained(spell_ID) if(S) button.overlays-=image('icons/interface/button/hotbar.dmi',"Use",HUD_LAYER+0.02) S.Done() if(m.client)m.client.HUD.updateSustain(m.sustain_mana,m.calcManaMax()) return 1 else if(m.mana>=cast_mana&&m.mana_max-(m.sustain_mana+cast_sustain)>=0) m.sustain_mana+=cast_sustain if(!targeted)m.useMana(cast_mana) if(m.client)m.client.HUD.updateSustain(m.sustain_mana,m.calcManaMax()) button.overlays+=image('icons/interface/button/hotbar.dmi',"Use",HUD_LAYER+0.02) Use(m) return 1 else if(targeted&&!m.lockon_target)return if(m.mana>=cast_mana) if(!targeted)m.useMana(cast_mana) if(m.run)if(!m.spell_run)m.run=0 Use(m) return 1 Use(mob/player/m) Channel(mob/player/m) Spell_Cooldown() ready=0 if(cooldown) var/image/I=image(button.icon,"Cooldown") button.overlays+=I spawn(cooldown) ready=1 button.overlays-=I else sleep(1) ready=1
CreatureCooldown() ready=0 spawn(cooldown)ready=1
removeSpell(mob/player/m) if(!m.isBusy()) if(ready) if(cast_sustain) var/sustained/S=m.hasSustained(spell_ID) if(S) S.Done() if(m.client)m.client.HUD.updateSustain(m.sustain_mana,m.calcManaMax()) m.spells-=src return 1 else m.spells-=src return 1
buildButton() button=new/obj/hud/spellbutton button.icon_state=button_state button.name=button_state button.underlays+=image(button.icon,"Empty") button.spell=src
updateButton(position,mob/player/m) var/newpos="" switch(position) if(0) newpos="" if(m.HotBar1==src)m.HotBar1=null if(m.HotBar2==src)m.HotBar2=null if(m.HotBar3==src)m.HotBar3=null if(m.HotBar4==src)m.HotBar4=null if(m.HotBar5==src)m.HotBar5=null if(m.HotBar6==src)m.HotBar6=null if(m.HotBar7==src)m.HotBar7=null if(m.HotBar8==src)m.HotBar8=null if(m.HotBar9==src)m.HotBar9=null if(m.HotBar10==src)m.HotBar10=null if(m.HotBar11==src)m.HotBar11=null if(m.HotBar12==src)m.HotBar12=null if(1) newpos="Center-6:16,SOUTH" m.HotBar1=src if(2) newpos="Center-5:16,SOUTH" m.HotBar2=src if(3) newpos="Center-4:16,SOUTH" m.HotBar3=src if(4) newpos="Center-3:16,SOUTH" m.HotBar4=src if(5) newpos="Center-2:16,SOUTH" m.HotBar5=src if(6) newpos="Center-1:16,SOUTH" m.HotBar6=src if(7) newpos="Center:16,SOUTH" m.HotBar7=src if(8) newpos="Center+1:16,SOUTH" m.HotBar8=src if(9) newpos="Center+2:16,SOUTH" m.HotBar9=src if(10) newpos="Center+3:16,SOUTH" m.HotBar10=src if(11) newpos="Center+4:16,SOUTH" m.HotBar11=src if(12) newpos="Center+5:16,SOUTH" m.HotBar12=src if(button.screen_loc!=newpos) for(var/spell/s in m.spells) if(s.button.screen_loc==newpos)s.delScreen(m) if(button.screen_loc)m.client.screen-=button button.screen_loc=newpos button.button=position addScreen(m)
addScreen(mob/player/m) m.client.screen+=button m.client.HUD.spellbuttons+=button delScreen(mob/player/m) m.client.screen-=button m.client.HUD.spellbuttons-=button button.screen_loc="" mob/player/proc getButton(button,wipe) var/X switch(button) if(1) X=HotBar1 if(wipe)HotBar1=null if(2) X=HotBar2 if(wipe)HotBar2=null if(3) X=HotBar3 if(wipe)HotBar3=null if(4) X=HotBar4 if(wipe)HotBar4=null if(5) X=HotBar5 if(wipe)HotBar5=null if(6) X=HotBar6 if(wipe)HotBar6=null if(7) X=HotBar7 if(wipe)HotBar7=null if(8) X=HotBar8 if(wipe)HotBar8=null if(9) X=HotBar9 if(wipe)HotBar9=null if(10) X=HotBar10 if(wipe)HotBar10=null if(11) X=HotBar11 if(wipe)HotBar11=null if(12) X=HotBar12 if(wipe)HotBar12=null return X swapButton(pos1,pos2,spell/S) if(pos2) var/spell S1=getButton(pos1,1) S2=getButton(pos2,1) if(S1)S1.updateButton(pos2,src) if(S2)S2.updateButton(pos1,src) else if(S) var/spell/S1=getButton(pos1,1) if(S1)S1.updateButton(pos2,src) S.updateButton(pos1,src) return
useMana(take_mana) mana-=take_mana if(client)client.HUD.updateMana(mana,mana_max) Cast(spell/S) if(cast)if(cast==S&&S.channel) S.Use(src) else if(S.ready) if(isBusy())Command_Queue_Add(S) else if(canCast())S.Fire(src) else Command_Queue_Add(S) else Command_Queue_Add(S)
mob/var/In="" mob/player proc learnSpell(ID) if(spell_points>=1) if(!spells)spells=list() var/spell/N for(var/spell/S in spells) if(S.button_state==ID) N=S if(!N) N=newSpell(ID) switch(alert("Are you sure you wish to purchase [ID]?","Purchase Spell","Yes","No")) if("Yes") spells+=N addSpell2Hotbar(N) spell_points-- SaveCharacter(ckey) return 1 if("No") for(var/obj/hud/talents/T) if(T.selected==1) T.selected=0 return
upgradeSpell(ID) if(spell_points>=1) if(!spells)spells=list() var/spell/N for(var/spell/S in spells) if(S.button_state==ID&&!S.upgrade) N=S if(N) switch(alert("Are you sure you wish to upgrade [ID]?","Upgrade Spell","Yes","No")) if("Yes") if(N.removeSpell(src)) N.updateButton(0,src) N=newSpell("[ID]2") spells+=N addSpell2Hotbar(N) spell_points-- SaveCharacter(ckey) return 1 if("No") for(var/obj/hud/talents/T) if(T.selected==1) T.selected=0 return N.updateButton(0,src)
remSpellHotbar(spell/S) for(var/spell/sa in spells) if(HotBar1==sa)HotBar1=null
addSpell2Hotbar(spell/S) if(!HotBar1)S.updateButton(1,src) else if(!HotBar2)S.updateButton(2,src) else if(!HotBar3)S.updateButton(3,src) else if(!HotBar4)S.updateButton(4,src) else if(!HotBar5)S.updateButton(5,src) else if(!HotBar6)S.updateButton(6,src) else if(!HotBar7)S.updateButton(7,src) else if(!HotBar8)S.updateButton(8,src) else if(!HotBar9)S.updateButton(9,src) else if(!HotBar10)S.updateButton(10,src) else if(!HotBar11)S.updateButton(11,src) else if(!HotBar12)S.updateButton(12,src) proc newSpell(spell)switch(spell) if("Fireball")return new/spell/Fireball if("FireStream")return new/spell/FireStream if("BlazingWave")return new/spell/BlazingWave if("FlameShroud")return new/spell/FlameShroud if("EarthBomb")return new/spell/EarthBomb if("Spike")return new/spell/Spike if("MudSlide")return new/spell/MudSlide if("StoneFist")return new/spell/StoneFist if("RockWall")return new/spell/RockWall if("AirBlast")return new/spell/AirBlast if("Flurry")return new/spell/Flurry if("Whirlwind")return new/spell/Whirlwind if("RazorWind")return new/spell/RazorWind if("BubbleBullets")return new/spell/BubbleBullets if("WaterWhip")return new/spell/WaterWhip if("AquaBeam")return new/spell/AquaBeam if("AquaticAegis")return new/spell/AquaticAegis if("Smite")return new/spell/Smite if("Benediction")return new/spell/Benediction if("Heal")return new/spell/Heal if("RighteousAura")return new/spell/RighteousAura if("Torment")return new/spell/Torment if("Corruption")return new/spell/Corruption if("DrainLife")return new/spell/DrainLife if("ShadowFlame")return new/spell/ShadowFlame if("Shock")return new/spell/Shock if("Bolt")return new/spell/Bolt if("SparkBomb")return new/spell/SparkBomb if("StaticCharge")return new/spell/StaticCharge
if("Fireball2")return new/spell/Fireball2 if("FireStream2")return new/spell/FireStream2 if("BlazingWave2")return new/spell/BlazingWave2 if("FlameShroud2")return new/spell/FlameShroud2 if("EarthBomb2")return new/spell/EarthBomb2 if("Spike2")return new/spell/Spike2 if("MudSlide2")return new/spell/MudSlide2 if("StoneFist2")return new/spell/StoneFist2 if("RockWall2")return new/spell/RockWall2 if("AirBlast2")return new/spell/AirBlast2 if("Flurry2")return new/spell/Flurry2 if("Whirlwind2")return new/spell/Whirlwind2 if("RazorWind2")return new/spell/RazorWind2 if("BubbleBullets2")return new/spell/BubbleBullets2 if("WaterWhip2")return new/spell/WaterWhip2 if("AquaBeam2")return new/spell/AquaBeam2 if("AquaticAegis2")return new/spell/AquaticAegis2 if("Heal2")return new/spell/Heal2 if("RighteousAura2")return new/spell/RighteousAura2 if("DrainLife2")return new/spell/DrainLife2 if("ShadowFlame2")return new/spell/ShadowFlame2 if("Shock2")return new/spell/Shock2 if("Bolt2")return new/spell/Bolt2 if("SparkBomb2")return new/spell/SparkBomb2 if("StaticCharge2")return new/spell/StaticCharge2
For spells when you click on them in the purchase menu
Click(location,control,params) var/list/p=params2list(params) if(p["right"]) var/spell/S for(var/spell/sp in usr.spells) if(sp.button_state==icon_state) S=sp break if(S)usr.grabClick(S.button) else usr.unClick() else if(p["left"]) if(usr.Clicking)usr.unClick() else if(selected==1) return else selected=1 usr.In = "[src.info]" switch(alert("[usr.In]","Spell Description","Ok")) if("Ok") if(upgrade) if(usr:upgradeSpell(icon_state)) overlays+=image(icon,"Use",layer=layer+0.01) usr.client.HUD.updatePoints() else if(usr:learnSpell(icon_state)) overlays+=image(icon,"Use",layer=layer+0.01) usr.client.HUD.updatePoints() selected=0
How it saves and loads
F["spells"]<<spells
spells=list() F["spells"]>>spells
|