From 5bd725af4487aa4f52accee535722801a13b0163 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Wed, 16 Jul 2014 02:48:54 -0400 Subject: [PATCH] More work on spell action buttons. --- code/_onclick/hud/human.dm | 10 ++ code/_onclick/hud/screen_objects.dm | 2 +- code/datums/disease.dm | 209 ---------------------------- code/datums/spell.dm | 2 + code/datums/spells/knock.dm | 2 + code/datums/spells/wizard.dm | 12 +- icons/mob/screen1_action.dmi | Bin 3789 -> 7354 bytes 7 files changed, 26 insertions(+), 211 deletions(-) delete mode 100644 code/datums/disease.dm diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index f7441c928f0..af1be7798e9 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -571,6 +571,16 @@ var/obj/screen/power_action/P = new(hud_used) P.icon = 'icons/mob/screen1_action.dmi' P.icon_state = S.icon_power_button + if(S.charge_counter != S.charge_max) + P.icon = 'icons/mob/screen1_action.dmi' + P.icon_state = S.icon_power_button + var/icon/newicon = new(P.icon, P.icon_state) + newicon.GrayScale() + P.icon = newicon + else + P.icon = 'icons/mob/screen1_action.dmi' + P.icon_state = S.icon_power_button + if(S.power_button_name) P.name = S.power_button_name diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 6ecd8ec509e..bebe49ecdbd 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -45,7 +45,7 @@ var/obj/effect/proc_holder/spell/owner /obj/screen/power_action/Click() - + owner.Click() /obj/screen/item_action var/obj/item/owner diff --git a/code/datums/disease.dm b/code/datums/disease.dm deleted file mode 100644 index 6f02043a072..00000000000 --- a/code/datums/disease.dm +++ /dev/null @@ -1,209 +0,0 @@ -#define SPECIAL -1 -#define NON_CONTAGIOUS 0 -#define BLOOD 1 -#define CONTACT_FEET 2 -#define CONTACT_HANDS 3 -#define CONTACT_GENERAL 4 -#define AIRBORNE 5 - -#define SCANNER 1 -#define PANDEMIC 2 - -/* - -IMPORTANT NOTE: Please delete the diseases by using cure() proc or del() instruction. -Diseases are referenced in a global list, so simply setting mob or obj vars -to null does not delete the object itself. Thank you. - -*/ - -var/list/diseases = typesof(/datum/disease) - /datum/disease - - -/datum/disease - var/form = "Virus" //During medscans, what the disease is referred to as - var/name = "No disease" - var/stage = 1 //all diseases start at stage 1 - var/max_stages = 0.0 - var/cure = null - var/cure_id = null// reagent.id or list containing them - var/cure_list = null // allows for multiple possible cure combinations - var/cure_chance = 8//chance for the cure to do its job - var/spread = null //spread type description - var/initial_spread = null - var/spread_type = AIRBORNE - var/contagious_period = 0//the disease stage when it can be spread - var/list/affected_species = list() - var/mob/living/carbon/affected_mob = null //the mob which is affected by disease. - var/holder = null //the atom containing the disease (mob or obj) - var/carrier = 0.0 //there will be a small chance that the person will be a carrier - var/curable = 0 //can this disease be cured? (By itself...) - var/list/strain_data = list() //This is passed on to infectees - var/stage_prob = 4 // probability of advancing to next stage, default 4% per check - var/agent = "some microbes"//name of the disease agent - var/permeability_mod = 1//permeability modifier coefficient. - var/desc = null//description. Leave it null and this disease won't show in med records. - var/severity = null//severity descr - var/longevity = 150//time in "ticks" the virus stays in inanimate object (blood stains, corpses, etc). In syringes, bottles and beakers it stays infinitely. - var/list/hidden = list(0, 0) - var/can_carry = 1 // If the disease allows "carriers". - var/age = 0 // age of the disease in the current mob - var/stage_minimum_age = 0 // how old the disease must be to advance per stage - // if hidden[1] is true, then virus is hidden from medical scanners - // if hidden[2] is true, then virus is hidden from PANDEMIC machine - -/datum/disease/proc/stage_act() - age++ - var/cure_present = has_cure() - //world << "[cure_present]" - - if(carrier&&!cure_present) - //world << "[affected_mob] is carrier" - return - - spread = (cure_present?"Remissive":initial_spread) - if(stage > max_stages) - stage = max_stages - - if(!cure_present && prob(stage_prob) && age > stage_minimum_age) //now the disease shouldn't get back up to stage 4 in no time - stage = min(stage + 1, max_stages) - age = 0 - - else if(cure_present && prob(cure_chance)) - stage = max(stage - 1, 1) - - if(stage <= 1 && ((prob(1) && curable) || (cure_present && prob(cure_chance)))) - cure() - return - return - -/datum/disease/proc/has_cure()//check if affected_mob has required reagents. - if(!cure_id) return 0 - var/result = 1 - if(cure_list == list(cure_id)) - if(istype(cure_id, /list)) - for(var/C_id in cure_id) - if(!affected_mob.reagents.has_reagent(C_id)) - result = 0 - else if(!affected_mob.reagents.has_reagent(cure_id)) - result = 0 - else - for(var/C_list in cure_list) - if(istype(C_list, /list)) - for(var/C_id in cure_id) - if(affected_mob.reagents != null) - result = 0 - else if(!affected_mob.reagents.has_reagent(C_id)) - result = 0 - else if(affected_mob.reagents != null) - if(!affected_mob.reagents.has_reagent(C_list)) - result = 0 - - return result - -/datum/disease/proc/spread_by_touch() - switch(spread_type) - if(CONTACT_FEET, CONTACT_HANDS, CONTACT_GENERAL) - return 1 - return 0 - -/datum/disease/proc/spread(var/atom/source=null, var/airborne_range = 2, var/force_spread) - //world << "Disease [src] proc spread was called from holder [source]" - - // If we're overriding how we spread, say so here - var/how_spread = spread_type - if(force_spread) - how_spread = force_spread - - if(how_spread == SPECIAL || how_spread == NON_CONTAGIOUS || how_spread == BLOOD)//does not spread - return - - if(stage < contagious_period) //the disease is not contagious at this stage - return - - if(!source)//no holder specified - if(affected_mob)//no mob affected holder - source = affected_mob - else //no source and no mob affected. Rogue disease. Break - return - - if(!affected_mob) return - - if(affected_mob.reagents != null) - if(affected_mob) - if(affected_mob.reagents.has_reagent("spaceacillin")) - return // Don't spread if we have spaceacillin in our system. - - var/check_range = airborne_range//defaults to airborne - range 2 - - if(how_spread != AIRBORNE && how_spread != SPECIAL) - check_range = 1 // everything else, like infect-on-contact things, only infect things on top of it - - if(isturf(source.loc)) - for(var/mob/living/carbon/M in oview(check_range, source)) - if(isturf(M.loc)) - if(AStar(source.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, check_range)) - M.contract_disease(src, 0, 1, force_spread) - - return - - -/datum/disease/proc/process() - if(!holder) - active_diseases -= src - return - if(prob(65)) - spread(holder) - - if(affected_mob) - for(var/datum/disease/D in affected_mob.viruses) - if(D != src) - if(IsSame(D)) - //error("Deleting [D.name] because it's the same as [src.name].") - del(D) // if there are somehow two viruses of the same kind in the system, delete the other one - - if(holder == affected_mob) - if(affected_mob.stat != DEAD) //he's alive - stage_act() - else //he's dead. - if(spread_type!=SPECIAL) - spread_type = CONTACT_GENERAL - affected_mob = null - if(!affected_mob) //the virus is in inanimate obj -// world << "[src] longevity = [longevity]" - - if(prob(70)) - if(--longevity<=0) - cure(0) - return - -/datum/disease/proc/cure(var/resistance=1)//if resistance = 0, the mob won't develop resistance to disease - if(affected_mob) - if(resistance && !(type in affected_mob.resistances)) - var/saved_type = "[type]" - affected_mob.resistances += text2path(saved_type) - /*if(istype(src, /datum/disease/alien_embryo)) //Get rid of the infection flag if it's a xeno embryo. - affected_mob.status_flags &= ~(XENO_HOST)*/ - affected_mob.viruses -= src //remove the datum from the list - del(src) //delete the datum to stop it processing - return - - -/datum/disease/New(var/process=1, var/datum/disease/D)//process = 1 - adding the object to global list. List is processed by master controller. - cure_list = list(cure_id) // to add more cures, add more vars to this list in the actual disease's New() - if(process) // Viruses in list are considered active. - active_diseases += src - initial_spread = spread - -/datum/disease/proc/IsSame(var/datum/disease/D) - if(istype(src, D.type)) - return 1 - return 0 - -/datum/disease/proc/Copy(var/process = 0) - return new type(process, src) - -/* -/datum/disease/Destroy() - active_diseases.Remove(src) -*/ diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 9b4349a04eb..539019ce96d 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -185,6 +185,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin var/datum/effect/effect/system/bad_smoke_spread/smoke = new /datum/effect/effect/system/bad_smoke_spread() smoke.set_up(smoke_amt, 0, location) //no idea what the 0 is smoke.start() + if(ishuman(usr)) + usr.update_power_buttons() /obj/effect/proc_holder/spell/proc/cast(list/targets) return diff --git a/code/datums/spells/knock.dm b/code/datums/spells/knock.dm index ccca6237877..344e3d13a2d 100644 --- a/code/datums/spells/knock.dm +++ b/code/datums/spells/knock.dm @@ -10,6 +10,8 @@ range = 3 cooldown_min = 20 //20 deciseconds reduction per rank + icon_power_button = "spell_knock" + /obj/effect/proc_holder/spell/aoe_turf/knock/cast(list/targets) for(var/turf/T in targets) for(var/obj/machinery/door/door in T.contents) diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm index 34ddd01c87a..39f8ec3c121 100644 --- a/code/datums/spells/wizard.dm +++ b/code/datums/spells/wizard.dm @@ -24,6 +24,8 @@ proj_trail_lifespan = 5 proj_trail_icon_state = "magicmd" + icon_power_button = "spell_missile" + /obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile amt_weakened = 5 amt_dam_fire = 10 @@ -118,6 +120,8 @@ centcom_cancast = 0 //prevent people from getting to centcom + icon_power_button = "spell_blink" + /obj/effect/proc_holder/spell/targeted/area_teleport/teleport name = "Teleport" desc = "This spell teleports you to a type of area of your selection." @@ -134,6 +138,8 @@ smoke_spread = 1 smoke_amt = 5 + icon_power_button = "spell_teleport" + /obj/effect/proc_holder/spell/aoe_turf/conjure/forcewall name = "Forcewall" desc = "This spell creates an unbreakable wall that lasts for 30 seconds and does not need wizard garb." @@ -206,6 +212,8 @@ starting_spells = list("/obj/effect/proc_holder/spell/targeted/inflict_handler/blind","/obj/effect/proc_holder/spell/targeted/genetic/blind") + icon_power_button = "spell_blind" + /obj/effect/proc_holder/spell/targeted/inflict_handler/blind amt_eye_blind = 10 amt_eye_blurry = 20 @@ -248,6 +256,8 @@ proj_lifespan = 200 proj_step_delay = 1 + icon_power_button = "spell_fireball" + /obj/effect/proc_holder/spell/turf/fireball/cast(var/turf/T) explosion(T, -1, 0, 2, 3, 0, flame_range = 2) @@ -260,4 +270,4 @@ ex_severe = -1 ex_heavy = -1 ex_light = 2 - ex_flash = 5 + ex_flash = 5 diff --git a/icons/mob/screen1_action.dmi b/icons/mob/screen1_action.dmi index e051125fd01b63f5852f35300eb2a5c3b5255816..1d749f561cd7950f36ca4d51f66d49730aede8a9 100644 GIT binary patch literal 7354 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%0D0o9|3?vhYmrn z*Q2PY2ms*o`QUcD(b3UC06>8vz9F*RKOrm6gvI!$T@G^S&>;YT-EN0H(mEMz!vH`> zM+Yf4n4+{H8~qcq{!ADELZLeZ0LI715eP^dx7qD>D3wY8Y=be3I;oSiRNmj~bqhRa z^l|x9(tzfA6#$^y=8r3zihcgH%YiL*b#S}gk|$0a+-^6v)Yaj;{{FChQuPn8j}G${ zTfJ_5RK;@f!Z`crFyWrl?jO+pKm|Vd%W(j}(HEb`h5t>(Ns*d=fVM<*^9le^DwScH z!O4c_lRQ7e_=&JL3mb#yT#6T_)oS(BJu^i@Ar(!Ve}Im$EPZ<@EWFmx4FK?j+9cB^ z+XKJ3WWo0B+Ytx^;C9Ei6;vvfuv)Enur<6a$?&^prii|*f=0y49@^Y9Q!(w564HQL zLpRQRdX#<8?ZeR*p9cVZ@ZL)RUIGB@f9wE;T+MRJCkiqCKp=oimsk^Y&Jsv$zUj^Vf3+NsNJm;1w9)RcE zlF&Y!`S(fef9!y$CM2r?TeoiIzyIuy|HP*^{{{evTnGK)p677-jVC4Z*=cquuR7)P zbG_d^GerPk_wL;x0I=C?a5|k~n&F@yo!K zonhGVo)Cie_IBL3v21f%US1KJo}MCGW+WKJV)-5X^Z!($Sa5(t%QuQHA19Xf9 zzd6i)9~mCNUF$bV7Jg)S03W^zyzo|clorU*fRiUb57ga#_rgx|5b5{T(z>D{a_iP| z{2Na`DVg?k#B;x|mhLnU5$-$ieL~jJ04SxD0KmC-6K9|91Qu3=HN-0bx6N16$;}UlD<0p}EN+knIsc3#e zB(w^;^#k`gAYFO@4I9PtNn{S__pvJt!?L3}Iy*bj*w`2|ZEtUHSU$<}3%*nP=r9=^ z9K?nV8~85na5x~C1L*Yh6fp_Lx52?d0O9+Bq&2{WX1w=FH$MzDY!pcZ@I%x7Ukxm+ zgi>FHL}FxQBrW+Ql1{7DQ?J)exJu>1!sS$SaBz@Brc1kjfK=rJ;q!x79;xg^@66A~ z+>FV|Cl!7t}=hYKOn;>SVw0VqH{n#p}oC5 zqx=O8$S?}`2V@v|e}6!xhoHj!0U1W&{(ualaDPCCk(2%bE6u-}$SMDT)#6`G)s#DGjiCfvrXnIW1sy0xqps`qb|a&?sD_t+5u@hQ`BWjHSRM zEt_HK9U==sgTyeDo!XJy9Kd!s_$RuFxt{IqlQs*1ghd>OR5f7U<3hEm4A+Lnqcot} zR2H}FIjsS0+HPWX0;99Qx+O26rVxXgfr|tHZig6P=~#NwW+CfJSuL@6n^U{PMF3-| z8mF$<;GES)c${eIsVg>8Leyb%LoPs;1~mCB#OeeV*R@eI0E}9Avyj`q=tDGfeH&c_ zU>&uPHe)y8=7dx=AOIbmn&=}Hl~qx3lM@rDsN772wxp5BSq-py0f)AkVkw+6LA6!g z8`itc=q6$5wapaHZX!M>NF&x9piozeTD&RLm2}=SL|jz8P+Y8)bx%MxAg%^9`7Gr8 z1Ylmb95y<^4lhwX)yED|k+KghX+f$QpbU6Xtdt((l>sk`bybp;pOYG3^#ZEOXgf=b zx0%8l5r$?8bQ7Vhs+^qQ)G(1Mj>KW@9OS zeqTL0zPu4*C6s-LKL>c()y|_T1sb*NPXq5p$_Owy0sMNQhX6pYH-xkPAW)k89WETW z^?$PIfgIHUXq)Lebd%d2cCu~MGFVp%I3&htZiUqA4e`&y`9luGH2|2;3ZsqF71eAt%4TyZ4{ob3Af@|+|)*;yp|UAZM2tLn)*UvvZ>7hI%?@1 zBE`B|(Und>5FdTnNn-q~3Hkm3ODi55fOx(6zvbI#{rHXW6;T3^PGg`8G4qQTpM6-l z`vb<=5AMGmveiC6(^xV809Vz$w0`^snVp@@YWw_5V@3S~MoV{7?!Qg4)jmJdDBK^A zVHEBU$S?}`2V@v|e}6!xE#vauKOoZ$kezF@Ji`A0