diff --git a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm index 5f8ad3de9d..083e610587 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm @@ -47,8 +47,8 @@ icon_state = "teleport" duration = 80 -/obj/effect/overlay/temp/teleport_abductor/New() +/obj/effect/overlay/temp/teleport_abductor/Initialize() + . = ..() var/datum/effect_system/spark_spread/S = new S.set_up(10,0,loc) - S.start() - ..() \ No newline at end of file + S.start() \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 6ce04bed14..c6248b03cc 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -527,9 +527,9 @@ icon_state = "disintegrate" duration = 10 -/obj/effect/overlay/temp/swarmer/disintegration/New() - playsound(src.loc, "sparks", 100, 1) - ..() +/obj/effect/overlay/temp/swarmer/disintegration/Initialize() + . = ..() + playsound(loc, "sparks", 100, 1) /obj/effect/overlay/temp/swarmer/dismantle icon_state = "dismantle" diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index a3cd947b81..137514d1e3 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -1,643 +1,635 @@ - -//Apprenticeship contract - moved to antag_spawner.dm - -///////////////////////////Veil Render////////////////////// - -/obj/item/weapon/veilrender - name = "veil render" - desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast city." - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - item_state = "render" - force = 15 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - var/charges = 1 - var/spawn_type = /obj/singularity/wizard - var/spawn_amt = 1 - var/activate_descriptor = "reality" - var/rend_desc = "You should run now." - var/spawn_fast = 0 //if 1, ignores checking for mobs on loc before spawning - -/obj/item/weapon/veilrender/attack_self(mob/user) - if(charges > 0) - new /obj/effect/rend(get_turf(user), spawn_type, spawn_amt, rend_desc, spawn_fast) - charges-- - user.visible_message("[src] hums with power as [user] deals a blow to [activate_descriptor] itself!") - else - to_chat(user, "The unearthly energies that powered the blade are now dormant.") - -/obj/effect/rend - name = "tear in the fabric of reality" - desc = "You should run now." - icon = 'icons/obj/biomass.dmi' - icon_state = "rift" - density = 1 - anchored = 1 - var/spawn_path = /mob/living/simple_animal/cow //defaulty cows to prevent unintentional narsies - var/spawn_amt_left = 20 - var/spawn_fast = 0 - -/obj/effect/rend/New(loc, var/spawn_type, var/spawn_amt, var/desc, var/spawn_fast) - src.spawn_path = spawn_type - src.spawn_amt_left = spawn_amt - src.desc = desc - src.spawn_fast = spawn_fast - START_PROCESSING(SSobj, src) - return - -/obj/effect/rend/process() - if(!spawn_fast) - if(locate(/mob) in loc) - return - new spawn_path(loc) - spawn_amt_left-- - if(spawn_amt_left <= 0) - qdel(src) - -/obj/effect/rend/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/nullrod)) - user.visible_message("[user] seals \the [src] with \the [I].") - qdel(src) - return - else - return ..() - -/obj/item/weapon/veilrender/vealrender - name = "veal render" - desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm." - spawn_type = /mob/living/simple_animal/cow - spawn_amt = 20 - activate_descriptor = "hunger" - rend_desc = "Reverberates with the sound of ten thousand moos." - -/obj/item/weapon/veilrender/honkrender - name = "honk render" - desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast circus." - spawn_type = /mob/living/simple_animal/hostile/retaliate/clown - spawn_amt = 10 - activate_descriptor = "depression" - rend_desc = "Gently wafting with the sounds of endless laughter." - icon_state = "clownrender" - -////TEAR IN REALITY - -/obj/singularity/wizard - name = "tear in the fabric of reality" - desc = "This isn't right." - icon = 'icons/effects/224x224.dmi' - icon_state = "reality" - pixel_x = -96 - pixel_y = -96 - grav_pull = 6 - consume_range = 3 - current_size = STAGE_FOUR - allowed_size = STAGE_FOUR - -/obj/singularity/wizard/process() - move() - eat() - return -/////////////////////////////////////////Scrying/////////////////// - -/obj/item/weapon/scrying - name = "scrying orb" - desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means." - icon = 'icons/obj/projectiles.dmi' - icon_state ="bluespace" - throw_speed = 3 - throw_range = 7 - throwforce = 15 - damtype = BURN - force = 15 - hitsound = 'sound/items/welder2.ogg' - -/obj/item/weapon/scrying/attack_self(mob/user) - to_chat(user, "You can see...everything!") - visible_message("[user] stares into [src], their eyes glazing over.") - user.ghostize(1) - return - -/////////////////////////////////////////Necromantic Stone/////////////////// - -/obj/item/device/necromantic_stone - name = "necromantic stone" - desc = "A shard capable of resurrecting humans as skeleton thralls." - icon = 'icons/obj/wizard.dmi' - icon_state = "necrostone" - item_state = "electronic" - origin_tech = "bluespace=4;materials=4" - w_class = WEIGHT_CLASS_TINY - var/list/spooky_scaries = list() - var/unlimited = 0 - -/obj/item/device/necromantic_stone/unlimited - unlimited = 1 - -/obj/item/device/necromantic_stone/attack(mob/living/carbon/human/M, mob/living/carbon/human/user) - if(!istype(M)) - return ..() - - if(!istype(user) || !user.canUseTopic(M,1)) - return - - if(M.stat != DEAD) - to_chat(user, "This artifact can only affect the dead!") - return - - if(!M.mind || !M.client) - to_chat(user, "There is no soul connected to this body...") - return - - check_spooky()//clean out/refresh the list - if(spooky_scaries.len >= 3 && !unlimited) - to_chat(user, "This artifact can only affect three undead at a time!") - return - - M.set_species(/datum/species/skeleton, icon_update=0) - M.revive(full_heal = 1, admin_revive = 1) - spooky_scaries |= M - to_chat(M, "You have been revived by [user.real_name]!") - to_chat(M, "[user.p_they(TRUE)] [user.p_are()] your master now, assist them even if it costs you your new life!") - - equip_roman_skeleton(M) - - desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]" - -/obj/item/device/necromantic_stone/proc/check_spooky() - if(unlimited) //no point, the list isn't used. - return - - for(var/X in spooky_scaries) - if(!ishuman(X)) - spooky_scaries.Remove(X) - continue - var/mob/living/carbon/human/H = X - if(H.stat == DEAD) - spooky_scaries.Remove(X) - continue - listclearnulls(spooky_scaries) - -//Funny gimmick, skeletons always seem to wear roman/ancient armour -/obj/item/device/necromantic_stone/proc/equip_roman_skeleton(mob/living/carbon/human/H) - for(var/obj/item/I in H) - H.dropItemToGround(I) - - var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) - H.equip_to_slot_or_del(new hat(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) - H.put_in_hands_or_del(new /obj/item/weapon/shield/riot/roman(H)) - H.put_in_hands_or_del(new /obj/item/weapon/claymore(H)) - H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) - - - -/////////////////////Multiverse Blade//////////////////// - -/obj/item/weapon/multisword - name = "multiverse sword" - desc = "A weapon capable of conquering the universe and beyond. Activate it to summon copies of yourself from others dimensions to fight by your side." - icon = 'icons/obj/weapons.dmi' - icon_state = "multiverse" - item_state = "multiverse" - hitsound = 'sound/weapons/bladeslice.ogg' - flags = CONDUCT - slot_flags = SLOT_BELT - sharpness = IS_SHARP - force = 20 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - var/faction = list("unassigned") - var/cooldown = 0 - var/assigned = "unassigned" - var/static/list/multiverse = list() - -/obj/item/weapon/multisword/New() - ..() - multiverse += src - - -/obj/item/weapon/multisword/Destroy() - multiverse.Remove(src) - return ..() - -/obj/item/weapon/multisword/attack_self(mob/user) - if(user.mind.special_role == "apprentice") - to_chat(user, "You know better than to touch your teacher's stuff.") - return - if(cooldown < world.time) - var/faction_check = 0 - for(var/F in faction) - if(F in user.faction) - faction_check = 1 - break - if(faction_check == 0) - faction = list("[user.real_name]") - assigned = "[user.real_name]" - user.faction = list("[user.real_name]") - to_chat(user, "You bind the sword to yourself. You can now use it to summon help.") - if(!is_gangster(user)) - var/datum/gang/multiverse/G = new(src, "[user.real_name]") - SSticker.mode.gangs += G - G.bosses += user.mind - G.add_gang_hud(user.mind) - user.mind.gang_datum = G - to_chat(user, "With your new found power you could easily conquer the station!") - var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone - hijack_objective.owner = user.mind - user.mind.objectives += hijack_objective - hijack_objective.explanation_text = "Ensure only [user.real_name] and their copies are on the shuttle!" - to_chat(user, "Objective #[1]: [hijack_objective.explanation_text]") - SSticker.mode.traitors += user.mind - user.mind.special_role = "[user.real_name] Prime" - else - var/list/candidates = get_candidates(ROLE_WIZARD) - if(candidates.len) - var/client/C = pick(candidates) - spawn_copy(C, get_turf(user.loc), user) - to_chat(user, "The sword flashes, and you find yourself face to face with...you!") - cooldown = world.time + 400 - for(var/obj/item/weapon/multisword/M in multiverse) - if(M.assigned == assigned) - M.cooldown = cooldown - - else - to_chat(user, "You fail to summon any copies of yourself. Perhaps you should try again in a bit.") - else - to_chat(user, "[src] is recharging! Keep in mind it shares a cooldown with the swords wielded by your copies.") - - -/obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T, mob/user) - var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) - C.prefs.copy_to(M, icon_updates=0) - M.key = C.key - M.mind.name = user.real_name - to_chat(M, "You are an alternate version of [user.real_name] from another universe! Help them accomplish their goals at all costs.") - SSticker.mode.add_gangster(M.mind, user.mind.gang_datum, FALSE) - M.real_name = user.real_name - M.name = user.real_name - M.faction = list("[user.real_name]") - if(prob(50)) - var/list/all_species = list() - for(var/speciestype in subtypesof(/datum/species)) - var/datum/species/S = speciestype - if(!initial(S.dangerous_existence)) - all_species += speciestype - M.set_species(pick(all_species), icon_update=0) - M.update_body() - M.update_hair() - M.update_body_parts() - M.dna.update_dna_identity() - equip_copy(M) - -/obj/item/weapon/multisword/proc/equip_copy(var/mob/living/carbon/human/M) - - var/obj/item/weapon/multisword/sword = new /obj/item/weapon/multisword - sword.assigned = assigned - sword.faction = list("[assigned]") - - var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet", "officer", "gladiator") - - switch(randomize) - if("mobster") - M.equip_to_slot_or_del(new /obj/item/clothing/head/fedora(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform) - M.put_in_hands_or_del(sword) - - if("roman") - var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) - M.equip_to_slot_or_del(new hat(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/under/roman(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(M), slot_shoes) - M.put_in_hands_or_del(new /obj/item/weapon/shield/riot/roman(M)) - M.put_in_hands_or_del(sword) - - if("wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(M), slot_head) - M.put_in_hands_or_del(sword) - if("cyborg") - for(var/X in M.bodyparts) - var/obj/item/bodypart/affecting = X - affecting.change_bodypart_status(BODYPART_ROBOTIC, FALSE, TRUE) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) - M.put_in_hands_or_del(sword) - - if("syndicate") - M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M),slot_wear_mask) - M.put_in_hands_or_del(sword) - - if("assistant") - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) - M.put_in_hands_or_del(sword) - - if("animu") - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl/red(M), slot_w_uniform) - M.put_in_hands_or_del(sword) - - if("cultist") - M.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.put_in_hands_or_del(sword) - - if("highlander") - M.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/head/beret(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) - M.put_in_hands_or_del(sword) - - if("clown") - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_l_store) - M.put_in_hands_or_del(sword) - - if("killer") - M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store) - M.put_in_hands_or_del(sword) - for(var/obj/item/carried_item in M.get_equipped_items()) - carried_item.add_mob_blood(M) - for(var/obj/item/I in M.held_items) - I.add_mob_blood(M) - if("pirate") - M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.put_in_hands_or_del(sword) - - if("soviet") - M.equip_to_slot_or_del(new /obj/item/clothing/head/pirate/captain(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/pirate/captain(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) - M.put_in_hands_or_del(sword) - - if("officer") - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/beret(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/jacket/miljacket(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) - M.put_in_hands_or_del(sword) - - if("gladiator") - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/gladiator(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/under/gladiator(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) - M.put_in_hands_or_del(sword) - - - else - return - - M.update_body_parts() - - var/obj/item/weapon/card/id/W = new /obj/item/weapon/card/id - W.icon_state = "centcom" - W.access += GLOB.access_maint_tunnels - W.assignment = "Multiverse Traveller" - W.registered_name = M.real_name - W.update_label(M.real_name) - M.equip_to_slot_or_del(W, slot_wear_id) - - -/obj/item/voodoo - name = "wicker doll" - desc = "Something creepy about it." - icon = 'icons/obj/wizard.dmi' - icon_state = "voodoo" - item_state = "electronic" - var/mob/living/carbon/human/target = null - var/list/mob/living/carbon/human/possible = list() - var/obj/item/link = null - var/cooldown_time = 30 //3s - var/cooldown = 0 - obj_integrity = 10 - max_integrity = 10 - resistance_flags = FLAMMABLE - -/obj/item/voodoo/attackby(obj/item/I, mob/user, params) - if(target && cooldown < world.time) - if(I.is_hot()) - to_chat(target, "You suddenly feel very hot") - target.bodytemperature += 50 - GiveHint(target) - else if(is_pointed(I)) - to_chat(target, "You feel a stabbing pain in [parse_zone(user.zone_selected)]!") - target.Weaken(2) - GiveHint(target) - else if(istype(I,/obj/item/weapon/bikehorn)) - to_chat(target, "HONK") - target << 'sound/items/AirHorn.ogg' - target.adjustEarDamage(0,3) - GiveHint(target) - cooldown = world.time +cooldown_time - return - - if(!link) - if(I.loc == user && istype(I) && I.w_class <= WEIGHT_CLASS_SMALL) - user.drop_item() - I.loc = src - link = I - to_chat(user, "You attach [I] to the doll.") - update_targets() - -/obj/item/voodoo/check_eye(mob/user) - if(loc != user) - user.reset_perspective(null) - user.unset_machine() - -/obj/item/voodoo/attack_self(mob/user) - if(!target && possible.len) - target = input(user, "Select your victim!", "Voodoo") as null|anything in possible - return - - if(user.zone_selected == "chest") - if(link) - target = null - link.loc = get_turf(src) - to_chat(user, "You remove the [link] from the doll.") - link = null - update_targets() - return - - if(target && cooldown < world.time) - switch(user.zone_selected) - if("mouth") - var/wgw = sanitize(input(user, "What would you like the victim to say", "Voodoo", null) as text) - target.say(wgw) - log_game("[user][user.key] made [target][target.key] say [wgw] with a voodoo doll.") - if("eyes") - user.set_machine(src) - user.reset_perspective(target) - spawn(100) - user.reset_perspective(null) - user.unset_machine() - if("r_leg","l_leg") - to_chat(user, "You move the doll's legs around.") - var/turf/T = get_step(target,pick(GLOB.cardinal)) - target.Move(T) - if("r_arm","l_arm") - target.click_random_mob() - GiveHint(target) - if("head") - to_chat(user, "You smack the doll's head with your hand.") - target.Dizzy(10) - to_chat(target, "You suddenly feel as if your head was hit with a hammer!") - GiveHint(target,user) - if("groin") - if(target.canbearoused) - to_chat(user, "You rub the groin on [src]. You're weird.") - target.adjustArousalLoss(5) - to_chat(target, "You suddenly feel hot... and quite good") - if(prob(33)) - target.emote(pick("moan","blush")) - GiveHint(target, user) - cooldown = world.time + cooldown_time - -/obj/item/voodoo/proc/update_targets() - possible = list() - if(!link) - return - for(var/mob/living/carbon/human/H in GLOB.living_mob_list) - if(md5(H.dna.uni_identity) in link.fingerprints) - possible |= H - -/obj/item/voodoo/proc/GiveHint(mob/victim,force=0) - if(prob(50) || force) - var/way = dir2text(get_dir(victim,get_turf(src))) - to_chat(victim, "You feel a dark presence from [way]") - if(prob(20) || force) - var/area/A = get_area(src) - to_chat(victim, "You feel a dark presence from [A.name]") - -/obj/item/voodoo/fire_act(exposed_temperature, exposed_volume) - if(target) - target.adjust_fire_stacks(20) - target.IgniteMob() - GiveHint(target,1) - return ..() - - -//Provides a decent heal, need to pump every 6 seconds -/obj/item/organ/heart/cursed/wizard - pump_delay = 60 - heal_brute = 25 - heal_burn = 25 - heal_oxy = 25 - -//Warp Whistle: Provides uncontrolled long distance teleportation. - -/obj/item/warpwhistle - name = "warp whistle" - desc = "One toot on this whistle will send you to a far away land!" - icon = 'icons/obj/wizard.dmi' - icon_state = "whistle" - var/on_cooldown = 0 //0: usable, 1: in use, 2: on cooldown - var/mob/living/carbon/last_user - -/obj/item/warpwhistle/proc/interrupted(mob/living/carbon/user) - if(!user || QDELETED(src)) - on_cooldown = FALSE - return TRUE - return FALSE - -/obj/item/warpwhistle/attack_self(mob/living/carbon/user) - if(!istype(user) || on_cooldown) - return - on_cooldown = TRUE - last_user = user - var/turf/T = get_turf(user) - playsound(T,'sound/magic/WarpWhistle.ogg', 200, 1) - user.canmove = 0 - new /obj/effect/overlay/temp/tornado(T) - sleep(20) - if(interrupted(user)) - return - user.invisibility = INVISIBILITY_MAXIMUM - user.status_flags |= GODMODE - sleep(20) - if(interrupted(user)) - return - var/breakout = 0 - while(breakout < 50) - var/turf/potential_T = find_safe_turf() - if(T.z != potential_T.z || abs(get_dist_euclidian(potential_T,T)) > 50 - breakout) - user.forceMove(potential_T) - user.canmove = 0 - T = potential_T - break - breakout += 1 - new /obj/effect/overlay/temp/tornado(T) - sleep(20) - if(interrupted(user)) - return - user.invisibility = initial(user.invisibility) - user.status_flags &= ~GODMODE - user.canmove = 1 - on_cooldown = 2 - sleep(40) - on_cooldown = 0 - -/obj/item/warpwhistle/Destroy() - if(on_cooldown == 1 && last_user) //Flute got dunked somewhere in the teleport - last_user.invisibility = initial(last_user.invisibility) - last_user.status_flags &= ~GODMODE - last_user.canmove = 1 - return ..() - -/obj/effect/overlay/temp/tornado - icon = 'icons/obj/wizard.dmi' - icon_state = "tornado" - name = "tornado" - desc = "This thing sucks!" - layer = FLY_LAYER - randomdir = 0 - duration = 40 - pixel_x = 500 - -/obj/effect/overlay/temp/tornado/New(loc) - ..() - animate(src, pixel_x = -500, time = 40) + +//Apprenticeship contract - moved to antag_spawner.dm + +///////////////////////////Veil Render////////////////////// + +/obj/item/weapon/veilrender + name = "veil render" + desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast city." + icon = 'icons/obj/wizard.dmi' + icon_state = "render" + item_state = "render" + force = 15 + throwforce = 10 + w_class = WEIGHT_CLASS_NORMAL + hitsound = 'sound/weapons/bladeslice.ogg' + var/charges = 1 + var/spawn_type = /obj/singularity/wizard + var/spawn_amt = 1 + var/activate_descriptor = "reality" + var/rend_desc = "You should run now." + var/spawn_fast = 0 //if 1, ignores checking for mobs on loc before spawning + +/obj/item/weapon/veilrender/attack_self(mob/user) + if(charges > 0) + new /obj/effect/rend(get_turf(user), spawn_type, spawn_amt, rend_desc, spawn_fast) + charges-- + user.visible_message("[src] hums with power as [user] deals a blow to [activate_descriptor] itself!") + else + to_chat(user, "The unearthly energies that powered the blade are now dormant.") + +/obj/effect/rend + name = "tear in the fabric of reality" + desc = "You should run now." + icon = 'icons/obj/biomass.dmi' + icon_state = "rift" + density = 1 + anchored = 1 + var/spawn_path = /mob/living/simple_animal/cow //defaulty cows to prevent unintentional narsies + var/spawn_amt_left = 20 + var/spawn_fast = 0 + +/obj/effect/rend/New(loc, var/spawn_type, var/spawn_amt, var/desc, var/spawn_fast) + src.spawn_path = spawn_type + src.spawn_amt_left = spawn_amt + src.desc = desc + src.spawn_fast = spawn_fast + START_PROCESSING(SSobj, src) + return + +/obj/effect/rend/process() + if(!spawn_fast) + if(locate(/mob) in loc) + return + new spawn_path(loc) + spawn_amt_left-- + if(spawn_amt_left <= 0) + qdel(src) + +/obj/effect/rend/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/nullrod)) + user.visible_message("[user] seals \the [src] with \the [I].") + qdel(src) + return + else + return ..() + +/obj/item/weapon/veilrender/vealrender + name = "veal render" + desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm." + spawn_type = /mob/living/simple_animal/cow + spawn_amt = 20 + activate_descriptor = "hunger" + rend_desc = "Reverberates with the sound of ten thousand moos." + +/obj/item/weapon/veilrender/honkrender + name = "honk render" + desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast circus." + spawn_type = /mob/living/simple_animal/hostile/retaliate/clown + spawn_amt = 10 + activate_descriptor = "depression" + rend_desc = "Gently wafting with the sounds of endless laughter." + icon_state = "clownrender" + +////TEAR IN REALITY + +/obj/singularity/wizard + name = "tear in the fabric of reality" + desc = "This isn't right." + icon = 'icons/effects/224x224.dmi' + icon_state = "reality" + pixel_x = -96 + pixel_y = -96 + grav_pull = 6 + consume_range = 3 + current_size = STAGE_FOUR + allowed_size = STAGE_FOUR + +/obj/singularity/wizard/process() + move() + eat() + return +/////////////////////////////////////////Scrying/////////////////// + +/obj/item/weapon/scrying + name = "scrying orb" + desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means." + icon = 'icons/obj/projectiles.dmi' + icon_state ="bluespace" + throw_speed = 3 + throw_range = 7 + throwforce = 15 + damtype = BURN + force = 15 + hitsound = 'sound/items/welder2.ogg' + +/obj/item/weapon/scrying/attack_self(mob/user) + to_chat(user, "You can see...everything!") + visible_message("[user] stares into [src], their eyes glazing over.") + user.ghostize(1) + return + +/////////////////////////////////////////Necromantic Stone/////////////////// + +/obj/item/device/necromantic_stone + name = "necromantic stone" + desc = "A shard capable of resurrecting humans as skeleton thralls." + icon = 'icons/obj/wizard.dmi' + icon_state = "necrostone" + item_state = "electronic" + origin_tech = "bluespace=4;materials=4" + w_class = WEIGHT_CLASS_TINY + var/list/spooky_scaries = list() + var/unlimited = 0 + +/obj/item/device/necromantic_stone/unlimited + unlimited = 1 + +/obj/item/device/necromantic_stone/attack(mob/living/carbon/human/M, mob/living/carbon/human/user) + if(!istype(M)) + return ..() + + if(!istype(user) || !user.canUseTopic(M,1)) + return + + if(M.stat != DEAD) + to_chat(user, "This artifact can only affect the dead!") + return + + if(!M.mind || !M.client) + to_chat(user, "There is no soul connected to this body...") + return + + check_spooky()//clean out/refresh the list + if(spooky_scaries.len >= 3 && !unlimited) + to_chat(user, "This artifact can only affect three undead at a time!") + return + + M.set_species(/datum/species/skeleton, icon_update=0) + M.revive(full_heal = 1, admin_revive = 1) + spooky_scaries |= M + to_chat(M, "You have been revived by [user.real_name]!") + to_chat(M, "[user.p_they(TRUE)] [user.p_are()] your master now, assist them even if it costs you your new life!") + + equip_roman_skeleton(M) + + desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]" + +/obj/item/device/necromantic_stone/proc/check_spooky() + if(unlimited) //no point, the list isn't used. + return + + for(var/X in spooky_scaries) + if(!ishuman(X)) + spooky_scaries.Remove(X) + continue + var/mob/living/carbon/human/H = X + if(H.stat == DEAD) + spooky_scaries.Remove(X) + continue + listclearnulls(spooky_scaries) + +//Funny gimmick, skeletons always seem to wear roman/ancient armour +/obj/item/device/necromantic_stone/proc/equip_roman_skeleton(mob/living/carbon/human/H) + for(var/obj/item/I in H) + H.dropItemToGround(I) + + var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) + H.equip_to_slot_or_del(new hat(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) + H.put_in_hands_or_del(new /obj/item/weapon/shield/riot/roman(H)) + H.put_in_hands_or_del(new /obj/item/weapon/claymore(H)) + H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) + + + +/////////////////////Multiverse Blade//////////////////// + +/obj/item/weapon/multisword + name = "multiverse sword" + desc = "A weapon capable of conquering the universe and beyond. Activate it to summon copies of yourself from others dimensions to fight by your side." + icon = 'icons/obj/weapons.dmi' + icon_state = "multiverse" + item_state = "multiverse" + hitsound = 'sound/weapons/bladeslice.ogg' + flags = CONDUCT + slot_flags = SLOT_BELT + sharpness = IS_SHARP + force = 20 + throwforce = 10 + w_class = WEIGHT_CLASS_NORMAL + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + var/faction = list("unassigned") + var/cooldown = 0 + var/assigned = "unassigned" + var/static/list/multiverse = list() + +/obj/item/weapon/multisword/New() + ..() + multiverse += src + + +/obj/item/weapon/multisword/Destroy() + multiverse.Remove(src) + return ..() + +/obj/item/weapon/multisword/attack_self(mob/user) + if(user.mind.special_role == "apprentice") + to_chat(user, "You know better than to touch your teacher's stuff.") + return + if(cooldown < world.time) + var/faction_check = 0 + for(var/F in faction) + if(F in user.faction) + faction_check = 1 + break + if(faction_check == 0) + faction = list("[user.real_name]") + assigned = "[user.real_name]" + user.faction = list("[user.real_name]") + to_chat(user, "You bind the sword to yourself. You can now use it to summon help.") + if(!is_gangster(user)) + var/datum/gang/multiverse/G = new(src, "[user.real_name]") + SSticker.mode.gangs += G + G.bosses += user.mind + G.add_gang_hud(user.mind) + user.mind.gang_datum = G + to_chat(user, "With your new found power you could easily conquer the station!") + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = user.mind + user.mind.objectives += hijack_objective + hijack_objective.explanation_text = "Ensure only [user.real_name] and their copies are on the shuttle!" + to_chat(user, "Objective #[1]: [hijack_objective.explanation_text]") + SSticker.mode.traitors += user.mind + user.mind.special_role = "[user.real_name] Prime" + else + var/list/candidates = get_candidates(ROLE_WIZARD) + if(candidates.len) + var/client/C = pick(candidates) + spawn_copy(C, get_turf(user.loc), user) + to_chat(user, "The sword flashes, and you find yourself face to face with...you!") + cooldown = world.time + 400 + for(var/obj/item/weapon/multisword/M in multiverse) + if(M.assigned == assigned) + M.cooldown = cooldown + + else + to_chat(user, "You fail to summon any copies of yourself. Perhaps you should try again in a bit.") + else + to_chat(user, "[src] is recharging! Keep in mind it shares a cooldown with the swords wielded by your copies.") + + +/obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T, mob/user) + var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) + C.prefs.copy_to(M, icon_updates=0) + M.key = C.key + M.mind.name = user.real_name + to_chat(M, "You are an alternate version of [user.real_name] from another universe! Help them accomplish their goals at all costs.") + SSticker.mode.add_gangster(M.mind, user.mind.gang_datum, FALSE) + M.real_name = user.real_name + M.name = user.real_name + M.faction = list("[user.real_name]") + if(prob(50)) + var/list/all_species = list() + for(var/speciestype in subtypesof(/datum/species)) + var/datum/species/S = speciestype + if(!initial(S.dangerous_existence)) + all_species += speciestype + M.set_species(pick(all_species), icon_update=0) + M.update_body() + M.update_hair() + M.update_body_parts() + M.dna.update_dna_identity() + equip_copy(M) + +/obj/item/weapon/multisword/proc/equip_copy(var/mob/living/carbon/human/M) + + var/obj/item/weapon/multisword/sword = new /obj/item/weapon/multisword + sword.assigned = assigned + sword.faction = list("[assigned]") + + var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet", "officer", "gladiator") + + switch(randomize) + if("mobster") + M.equip_to_slot_or_del(new /obj/item/clothing/head/fedora(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform) + M.put_in_hands_or_del(sword) + + if("roman") + var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) + M.equip_to_slot_or_del(new hat(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/roman(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(M), slot_shoes) + M.put_in_hands_or_del(new /obj/item/weapon/shield/riot/roman(M)) + M.put_in_hands_or_del(sword) + + if("wizard") + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(M), slot_head) + M.put_in_hands_or_del(sword) + if("cyborg") + for(var/X in M.bodyparts) + var/obj/item/bodypart/affecting = X + affecting.change_bodypart_status(BODYPART_ROBOTIC, FALSE, TRUE) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) + M.put_in_hands_or_del(sword) + + if("syndicate") + M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M),slot_wear_mask) + M.put_in_hands_or_del(sword) + + if("assistant") + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) + M.put_in_hands_or_del(sword) + + if("animu") + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl/red(M), slot_w_uniform) + M.put_in_hands_or_del(sword) + + if("cultist") + M.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.put_in_hands_or_del(sword) + + if("highlander") + M.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/head/beret(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.put_in_hands_or_del(sword) + + if("clown") + M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_l_store) + M.put_in_hands_or_del(sword) + + if("killer") + M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store) + M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store) + M.put_in_hands_or_del(sword) + for(var/obj/item/carried_item in M.get_equipped_items()) + carried_item.add_mob_blood(M) + for(var/obj/item/I in M.held_items) + I.add_mob_blood(M) + if("pirate") + M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.put_in_hands_or_del(sword) + + if("soviet") + M.equip_to_slot_or_del(new /obj/item/clothing/head/pirate/captain(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/pirate/captain(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) + M.put_in_hands_or_del(sword) + + if("officer") + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/beret(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/jacket/miljacket(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) + M.put_in_hands_or_del(sword) + + if("gladiator") + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/gladiator(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/gladiator(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) + M.put_in_hands_or_del(sword) + + + else + return + + M.update_body_parts() + + var/obj/item/weapon/card/id/W = new /obj/item/weapon/card/id + W.icon_state = "centcom" + W.access += GLOB.access_maint_tunnels + W.assignment = "Multiverse Traveller" + W.registered_name = M.real_name + W.update_label(M.real_name) + M.equip_to_slot_or_del(W, slot_wear_id) + + +/obj/item/voodoo + name = "wicker doll" + desc = "Something creepy about it." + icon = 'icons/obj/wizard.dmi' + icon_state = "voodoo" + item_state = "electronic" + var/mob/living/carbon/human/target = null + var/list/mob/living/carbon/human/possible = list() + var/obj/item/link = null + var/cooldown_time = 30 //3s + var/cooldown = 0 + obj_integrity = 10 + max_integrity = 10 + resistance_flags = FLAMMABLE + +/obj/item/voodoo/attackby(obj/item/I, mob/user, params) + if(target && cooldown < world.time) + if(I.is_hot()) + to_chat(target, "You suddenly feel very hot") + target.bodytemperature += 50 + GiveHint(target) + else if(is_pointed(I)) + to_chat(target, "You feel a stabbing pain in [parse_zone(user.zone_selected)]!") + target.Weaken(2) + GiveHint(target) + else if(istype(I,/obj/item/weapon/bikehorn)) + to_chat(target, "HONK") + target << 'sound/items/AirHorn.ogg' + target.adjustEarDamage(0,3) + GiveHint(target) + cooldown = world.time +cooldown_time + return + + if(!link) + if(I.loc == user && istype(I) && I.w_class <= WEIGHT_CLASS_SMALL) + user.drop_item() + I.loc = src + link = I + to_chat(user, "You attach [I] to the doll.") + update_targets() + +/obj/item/voodoo/check_eye(mob/user) + if(loc != user) + user.reset_perspective(null) + user.unset_machine() + +/obj/item/voodoo/attack_self(mob/user) + if(!target && possible.len) + target = input(user, "Select your victim!", "Voodoo") as null|anything in possible + return + + if(user.zone_selected == "chest") + if(link) + target = null + link.loc = get_turf(src) + to_chat(user, "You remove the [link] from the doll.") + link = null + update_targets() + return + + if(target && cooldown < world.time) + switch(user.zone_selected) + if("mouth") + var/wgw = sanitize(input(user, "What would you like the victim to say", "Voodoo", null) as text) + target.say(wgw) + log_game("[user][user.key] made [target][target.key] say [wgw] with a voodoo doll.") + if("eyes") + user.set_machine(src) + user.reset_perspective(target) + spawn(100) + user.reset_perspective(null) + user.unset_machine() + if("r_leg","l_leg") + to_chat(user, "You move the doll's legs around.") + var/turf/T = get_step(target,pick(GLOB.cardinal)) + target.Move(T) + if("r_arm","l_arm") + target.click_random_mob() + GiveHint(target) + if("head") + to_chat(user, "You smack the doll's head with your hand.") + target.Dizzy(10) + to_chat(target, "You suddenly feel as if your head was hit with a hammer!") + GiveHint(target,user) + cooldown = world.time + cooldown_time + +/obj/item/voodoo/proc/update_targets() + possible = list() + if(!link) + return + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) + if(md5(H.dna.uni_identity) in link.fingerprints) + possible |= H + +/obj/item/voodoo/proc/GiveHint(mob/victim,force=0) + if(prob(50) || force) + var/way = dir2text(get_dir(victim,get_turf(src))) + to_chat(victim, "You feel a dark presence from [way]") + if(prob(20) || force) + var/area/A = get_area(src) + to_chat(victim, "You feel a dark presence from [A.name]") + +/obj/item/voodoo/fire_act(exposed_temperature, exposed_volume) + if(target) + target.adjust_fire_stacks(20) + target.IgniteMob() + GiveHint(target,1) + return ..() + + +//Provides a decent heal, need to pump every 6 seconds +/obj/item/organ/heart/cursed/wizard + pump_delay = 60 + heal_brute = 25 + heal_burn = 25 + heal_oxy = 25 + +//Warp Whistle: Provides uncontrolled long distance teleportation. + +/obj/item/warpwhistle + name = "warp whistle" + desc = "One toot on this whistle will send you to a far away land!" + icon = 'icons/obj/wizard.dmi' + icon_state = "whistle" + var/on_cooldown = 0 //0: usable, 1: in use, 2: on cooldown + var/mob/living/carbon/last_user + +/obj/item/warpwhistle/proc/interrupted(mob/living/carbon/user) + if(!user || QDELETED(src)) + on_cooldown = FALSE + return TRUE + return FALSE + +/obj/item/warpwhistle/attack_self(mob/living/carbon/user) + if(!istype(user) || on_cooldown) + return + on_cooldown = TRUE + last_user = user + var/turf/T = get_turf(user) + playsound(T,'sound/magic/WarpWhistle.ogg', 200, 1) + user.canmove = 0 + new /obj/effect/overlay/temp/tornado(T) + sleep(20) + if(interrupted(user)) + return + user.invisibility = INVISIBILITY_MAXIMUM + user.status_flags |= GODMODE + sleep(20) + if(interrupted(user)) + return + var/breakout = 0 + while(breakout < 50) + var/turf/potential_T = find_safe_turf() + if(T.z != potential_T.z || abs(get_dist_euclidian(potential_T,T)) > 50 - breakout) + user.forceMove(potential_T) + user.canmove = 0 + T = potential_T + break + breakout += 1 + new /obj/effect/overlay/temp/tornado(T) + sleep(20) + if(interrupted(user)) + return + user.invisibility = initial(user.invisibility) + user.status_flags &= ~GODMODE + user.canmove = 1 + on_cooldown = 2 + sleep(40) + on_cooldown = 0 + +/obj/item/warpwhistle/Destroy() + if(on_cooldown == 1 && last_user) //Flute got dunked somewhere in the teleport + last_user.invisibility = initial(last_user.invisibility) + last_user.status_flags &= ~GODMODE + last_user.canmove = 1 + return ..() + +/obj/effect/overlay/temp/tornado + icon = 'icons/obj/wizard.dmi' + icon_state = "tornado" + name = "tornado" + desc = "This thing sucks!" + layer = FLY_LAYER + randomdir = 0 + duration = 40 + pixel_x = 500 + +/obj/effect/overlay/temp/tornado/Initialize() + . = ..() + animate(src, pixel_x = -500, time = 40) diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index bc9251d9fc..3935b86c92 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -31,8 +31,8 @@ . = ..() deltimer(timerid) -/obj/effect/overlay/temp/New() - ..() +/obj/effect/overlay/temp/Initialize() + . = ..() if(randomdir) setDir(pick(GLOB.cardinal)) @@ -44,10 +44,10 @@ /obj/effect/overlay/temp/dir_setting randomdir = FALSE -/obj/effect/overlay/temp/dir_setting/New(loc, set_dir) +/obj/effect/overlay/temp/dir_setting/Initialize(mapload, set_dir) if(set_dir) setDir(set_dir) - ..() + . = ..() /obj/effect/overlay/temp/dir_setting/bloodsplatter icon = 'icons/effects/blood.dmi' @@ -56,12 +56,12 @@ layer = BELOW_MOB_LAYER var/splatter_type = "splatter" -/obj/effect/overlay/temp/dir_setting/bloodsplatter/New(loc, set_dir) +/obj/effect/overlay/temp/dir_setting/bloodsplatter/Initialize(mapload, set_dir) if(set_dir in GLOB.diagonals) icon_state = "[splatter_type][pick(1, 2, 6)]" else icon_state = "[splatter_type][pick(3, 4, 5)]" - ..() + . = ..() var/target_pixel_x = 0 var/target_pixel_y = 0 switch(set_dir) @@ -93,6 +93,13 @@ /obj/effect/overlay/temp/dir_setting/bloodsplatter/xenosplatter splatter_type = "xsplatter" +/obj/effect/overlay/temp/dir_setting/speedbike_trail + name = "speedbike trails" + icon_state = "ion_fade" + layer = BELOW_MOB_LAYER + duration = 10 + randomdir = 0 + /obj/effect/overlay/temp/dir_setting/firing_effect icon = 'icons/effects/effects.dmi' icon_state = "firing_effect" @@ -189,8 +196,8 @@ desc = "It's a decoy!" duration = 15 -/obj/effect/overlay/temp/decoy/New(loc, atom/mimiced_atom) - ..() +/obj/effect/overlay/temp/decoy/Initialize(mapload, atom/mimiced_atom) + . = ..() alpha = initial(alpha) if(mimiced_atom) name = mimiced_atom.name @@ -198,8 +205,8 @@ setDir(mimiced_atom.dir) mouse_opacity = 0 -/obj/effect/overlay/temp/decoy/fading/New(loc, atom/mimiced_atom) - ..() +/obj/effect/overlay/temp/decoy/fading/Initialize(mapload, atom/mimiced_atom) + . = ..() animate(src, alpha = 0, time = duration) /obj/effect/overlay/temp/decoy/fading/fivesecond @@ -324,15 +331,15 @@ var/mob/user var/damage = 20 -/obj/effect/overlay/temp/ratvar/volt_hit/New(loc, caster, multiplier) +/obj/effect/overlay/temp/ratvar/volt_hit/Initialize(mapload, caster, multiplier) if(multiplier) damage *= multiplier duration = max(round(damage * 0.2), 1) - ..() + . = ..() set_light(1.5, 2, LIGHT_COLOR_ORANGE) -/obj/effect/overlay/temp/ratvar/volt_hit/true/New(loc, caster, multiplier) - ..() +/obj/effect/overlay/temp/ratvar/volt_hit/true/Initialize(mapload, caster, multiplier) + . = ..() user = caster if(user) var/matrix/M = new @@ -376,8 +383,8 @@ icon_state = "warden_gaze" duration = 3 -/obj/effect/overlay/temp/ratvar/ocular_warden/New() - ..() +/obj/effect/overlay/temp/ratvar/ocular_warden/Initialize() + . = ..() pixel_x = rand(-8, 8) pixel_y = rand(-10, 10) animate(src, alpha = 0, time = 3, easing = EASE_OUT) @@ -401,8 +408,8 @@ layer = ABOVE_MOB_LAYER duration = 10 -/obj/effect/overlay/temp/ratvar/component/New() - ..() +/obj/effect/overlay/temp/ratvar/component/Initialize() + . = ..() transform = matrix()*0.75 pixel_x = rand(-10, 10) pixel_y = rand(-10, -2) @@ -432,9 +439,8 @@ light_power = 2 light_color = "#FAE48C" -/obj/effect/overlay/temp/ratvar/sigil/transgression/New() - ..() - update_light() +/obj/effect/overlay/temp/ratvar/sigil/transgression/Initialize() + . = ..() var/oldtransform = transform animate(src, transform = matrix()*2, time = 5) animate(transform = oldtransform, alpha = 0, time = 65) @@ -447,10 +453,6 @@ light_power = 0.5 light_color = "#1E8CE1" -/obj/effect/overlay/temp/ratvar/sigil/vitality/New() - ..() - update_light() - /obj/effect/overlay/temp/ratvar/sigil/accession color = "#AF0AAF" layer = ABOVE_MOB_LAYER @@ -493,9 +495,9 @@ icon = 'icons/mob/mob.dmi' duration = 15 -/obj/effect/overlay/temp/gib_animation/New(loc, gib_icon) +/obj/effect/overlay/temp/gib_animation/Initialize(mapload, gib_icon) icon_state = gib_icon // Needs to be before ..() so icon is correct - ..() + . = ..() /obj/effect/overlay/temp/gib_animation/ex_act(severity) return //so the overlay isn't deleted by the explosion that gibbed the mob. @@ -507,9 +509,9 @@ icon = 'icons/mob/mob.dmi' duration = 15 -/obj/effect/overlay/temp/dust_animation/New(loc, dust_icon) +/obj/effect/overlay/temp/dust_animation/Initialize(mapload, dust_icon) icon_state = dust_icon // Before ..() so the correct icon is flick()'d - ..() + . = ..() /obj/effect/overlay/temp/mummy_animation icon = 'icons/mob/mob.dmi' @@ -521,12 +523,12 @@ icon_state = "heal" duration = 15 -/obj/effect/overlay/temp/heal/New(loc, colour) - ..() - pixel_x = rand(-12, 12) - pixel_y = rand(-9, 0) +/obj/effect/overlay/temp/heal/Initialize(mapload, colour) if(colour) color = colour + . = ..() + pixel_x = rand(-12, 12) + pixel_y = rand(-9, 0) /obj/effect/overlay/temp/kinetic_blast name = "kinetic explosion" @@ -558,14 +560,14 @@ icon_state = "impact_bullet" duration = 5 -/obj/effect/overlay/temp/impact_effect/New(loc, atom/target, obj/item/projectile/P) +/obj/effect/overlay/temp/impact_effect/Initialize(mapload, atom/target, obj/item/projectile/P) if(target == P.original) //the projectile hit the target originally clicked pixel_x = P.p_x + target.pixel_x - 16 + rand(-4,4) pixel_y = P.p_y + target.pixel_y - 16 + rand(-4,4) else pixel_x = target.pixel_x + rand(-4,4) pixel_y = target.pixel_y + rand(-4,4) - ..() + . = ..() /obj/effect/overlay/temp/impact_effect/red_laser icon_state = "impact_laser" diff --git a/code/game/objects/effects/overlays.dm.rej b/code/game/objects/effects/overlays.dm.rej new file mode 100644 index 0000000000..f25f8f24e9 --- /dev/null +++ b/code/game/objects/effects/overlays.dm.rej @@ -0,0 +1,21 @@ +diff a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm (rejected hunks) +@@ -31,8 +31,8 @@ + . = ..() + deltimer(timerid) + +-/obj/effect/overlay/temp/New() +- ..() ++/obj/effect/overlay/temp/Initialize() ++ . = ..() + if(randomdir) + setDir(pick(GLOB.cardinal)) + flick("[icon_state]", src) //Because we might be pulling it from a pool, flick whatever icon it uses so it starts at the start of the icon's animation. +@@ -214,7 +221,7 @@ + icon = 'icons/effects/fire.dmi' + icon_state = "3" + duration = 20 +- ++ + /obj/effect/overlay/temp/cult + randomdir = 0 + duration = 10 diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 496702aa4d..6955872c27 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -100,8 +100,8 @@ icon_state = "medi_holo" duration = 30 -/obj/effect/overlay/temp/medical_holosign/New(loc, creator) - ..() +/obj/effect/overlay/temp/medical_holosign/Initialize(mapload, creator) + . = ..() playsound(loc, 'sound/machines/ping.ogg', 50, 0) //make some noise! if(creator) visible_message("[creator] created a medical hologram!") diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm index 41f3bbc001..9411917c39 100644 --- a/code/modules/VR/vr_sleeper.dm +++ b/code/modules/VR/vr_sleeper.dm @@ -17,8 +17,8 @@ var/allow_creating_vr_humans = TRUE //So you can have vr_sleepers that always spawn you as a specific person or 1 life/chance vr games var/outfit = /datum/outfit/vr_basic -/obj/machinery/vr_sleeper/New() - ..() +/obj/machinery/vr_sleeper/Initialize() + . = ..() sparks = new /datum/effect_system/spark_spread() sparks.set_up(2,0) sparks.attach(src) diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index 95d561abeb..159e6df5f4 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -16,7 +16,7 @@ var/toggle = FALSE /mob/living/simple_animal/hostile/guardian/healer/Initialize() - ..() + . = ..() var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] medsensor.add_hud_to(src) diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm index 2829bf574e..951589daaf 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm @@ -149,8 +149,8 @@ duration = 18 randomdir = FALSE -/obj/effect/overlay/temp/paperwiz_dying/New() - ..() +/obj/effect/overlay/temp/paperwiz_dying/Initialize() + . = ..() visible_message("The wizard cries out in pain as a gate appears behind him, sucking him in!") playsound(get_turf(src),'sound/magic/MandSwap.ogg', 50, 1, 1) playsound(get_turf(src),'sound/hallucinations/wail.ogg', 50, 1, 1) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm.rej b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm.rej new file mode 100644 index 0000000000..3dab6ff0a6 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm.rej @@ -0,0 +1,10 @@ +diff a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm (rejected hunks) +@@ -106,7 +106,7 @@ Difficulty: Very Hard + var/target + + /obj/effect/overlay/temp/at_shield/Initialize(mapload, new_target) +- ..() ++ . = ..() + target = new_target + INVOKE_ASYNC(src, /atom/movable/proc/orbit, target, 0, FALSE, 0, 0, FALSE, TRUE) + diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm.rej b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm.rej new file mode 100644 index 0000000000..84c2ab0b38 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm.rej @@ -0,0 +1,23 @@ +diff a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm (rejected hunks) +@@ -96,8 +96,8 @@ Difficulty: Medium + duration = 12 + pixel_z = 500 + +-/obj/effect/overlay/temp/fireball/Initialize(loc) +- ..() ++/obj/effect/overlay/temp/fireball/Initialize() ++ . = ..() + animate(src, pixel_z = 0, time = 12) + + /obj/effect/overlay/temp/target +@@ -121,8 +121,8 @@ Difficulty: Medium + /obj/effect/overlay/temp/target/ex_act() + return + +-/obj/effect/overlay/temp/target/Initialize(loc) +- ..() ++/obj/effect/overlay/temp/target/Initialize() ++ . = ..() + INVOKE_ASYNC(src, .proc/fall) + + /obj/effect/overlay/temp/target/proc/fall() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index f0c1a7ec04..03f8ce63cf 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -426,8 +426,8 @@ Difficulty: Hard layer = BELOW_MOB_LAYER var/mob/living/caster //who made this, anyway -/obj/effect/overlay/temp/hierophant/New(loc, new_caster) - ..() +/obj/effect/overlay/temp/hierophant/Initialize(mapload, new_caster) + . = ..() if(new_caster) caster = new_caster @@ -437,13 +437,13 @@ Difficulty: Hard light_range = 1 randomdir = FALSE -/obj/effect/overlay/temp/hierophant/squares/New(loc, new_caster) - ..() +/obj/effect/overlay/temp/hierophant/squares/Initialize(mapload, new_caster) + . = ..() if(ismineralturf(loc)) var/turf/closed/mineral/M = loc M.gets_drilled(caster) -/obj/effect/overlay/temp/hierophant/wall //smoothing and pooling are not friends. TODO: figure this out +/obj/effect/overlay/temp/hierophant/wall //smoothing and pooling were not friends, but pooling is dead. name = "vortex wall" icon = 'icons/turf/walls/hierophant_wall_temp.dmi' icon_state = "wall" @@ -451,15 +451,14 @@ Difficulty: Hard duration = 100 smooth = SMOOTH_TRUE -/obj/effect/overlay/temp/hierophant/wall/New(loc, new_caster) - ..() +/obj/effect/overlay/temp/hierophant/wall/Initialize(mapload, new_caster) + . = ..() queue_smooth_neighbors(src) queue_smooth(src) /obj/effect/overlay/temp/hierophant/wall/Destroy() queue_smooth_neighbors(src) - ..() - return QDEL_HINT_QUEUE + return ..() /obj/effect/overlay/temp/hierophant/wall/CanPass(atom/movable/mover, turf/target, height = 0) if(mover == caster) @@ -480,8 +479,8 @@ Difficulty: Hard var/currently_seeking = FALSE var/friendly_fire_check = FALSE //if blasts produced apply friendly fire -/obj/effect/overlay/temp/hierophant/chaser/New(loc, new_caster, new_target, new_speed, is_friendly_fire) - ..() +/obj/effect/overlay/temp/hierophant/chaser/Initialize(mapload, new_caster, new_target, new_speed, is_friendly_fire) + . = ..() target = new_target friendly_fire_check = is_friendly_fire if(new_speed) @@ -558,8 +557,8 @@ Difficulty: Hard var/friendly_fire_check = FALSE var/bursting = FALSE //if we're bursting and need to hit anyone crossing us -/obj/effect/overlay/temp/hierophant/blast/New(loc, new_caster, friendly_fire) - ..() +/obj/effect/overlay/temp/hierophant/blast/Initialize(mapload, new_caster, friendly_fire) + . = ..() friendly_fire_check = friendly_fire if(new_caster) hit_things += new_caster diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index b5c2a93996..f5df46cb7b 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -204,7 +204,8 @@ dismemberment = 20 impact_effect_type = /obj/effect/overlay/temp/impact_effect/purple_laser -/obj/item/projectile/plasma/New() +/obj/item/projectile/plasma/Initialize() + . = ..() var/turf/proj_turf = get_turf(src) if(!isturf(proj_turf)) return @@ -215,7 +216,6 @@ name = "full strength [name]" damage *= 4 range *= 2 - ..() /obj/item/projectile/plasma/on_hit(atom/target) . = ..() @@ -254,9 +254,10 @@ var/power = 4 var/list/thrown_items = list() -/obj/item/projectile/gravityrepulse/New(var/obj/item/ammo_casing/energy/gravityrepulse/C) - ..() - if(C) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items +/obj/item/projectile/gravityrepulse/Initialize() + . = ..() + var/obj/item/ammo_casing/energy/gravityrepulse/C = loc + if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items power = min(C.gun.power, 15) /obj/item/projectile/gravityrepulse/on_hit() @@ -284,9 +285,10 @@ var/power = 4 var/list/thrown_items = list() -/obj/item/projectile/gravityattract/New(var/obj/item/ammo_casing/energy/gravityattract/C) - ..() - if(C) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items +/obj/item/projectile/gravityattract/Initialize() + . = ..() + var/obj/item/ammo_casing/energy/gravityattract/C = loc + if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items power = min(C.gun.power, 15) /obj/item/projectile/gravityattract/on_hit() @@ -313,9 +315,10 @@ var/power = 4 var/list/thrown_items = list() -/obj/item/projectile/gravitychaos/New(var/obj/item/ammo_casing/energy/gravitychaos/C) - ..() - if(C) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items +/obj/item/projectile/gravitychaos/Initialize() + . = ..() + var/obj/item/ammo_casing/energy/gravitychaos/C = loc + if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items power = min(C.gun.power, 15) /obj/item/projectile/gravitychaos/on_hit() diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index f8989a2304..da1eb90685 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -52,8 +52,8 @@ "toxin" ) -/obj/machinery/chem_dispenser/New() - ..() +/obj/machinery/chem_dispenser/Initialize() + . = ..() recharge() dispensable_reagents = sortList(dispensable_reagents) @@ -244,8 +244,8 @@ ) ) -/obj/machinery/chem_dispenser/constructable/New() - ..() +/obj/machinery/chem_dispenser/constructable/Initialize() + . = ..() var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/chem_dispenser(null) B.apply_default_parts(src) diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 2c6f7712e4..da728fea89 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -12,8 +12,8 @@ var/heater_coefficient = 0.10 var/on = FALSE -/obj/machinery/chem_heater/New() - ..() +/obj/machinery/chem_heater/Initialize() + . = ..() var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/chem_heater(null) B.apply_default_parts(src) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index a94a1c01ff..93628a9cc1 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -17,12 +17,12 @@ var/useramount = 30 // Last used amount layer = BELOW_OBJ_LAYER -/obj/machinery/chem_master/New() +/obj/machinery/chem_master/Initialize() create_reagents(100) add_overlay("waitlight") var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/chem_master(null) B.apply_default_parts(src) - ..() + . = ..() /obj/item/weapon/circuitboard/machine/chem_master name = "ChemMaster 3000 (Machine Board)" diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index cfc8198b38..5a73c5dcf4 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -13,8 +13,8 @@ var/wait = null var/obj/item/weapon/reagent_containers/beaker = null -/obj/machinery/computer/pandemic/New() - ..() +/obj/machinery/computer/pandemic/Initialize() + . = ..() update_icon() /obj/machinery/computer/pandemic/proc/GetVirusByIndex(index) diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 6b02e1ed24..2dbc0ff1c2 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -91,10 +91,9 @@ var/list/holdingitems = list() -/obj/machinery/reagentgrinder/New() - ..() +/obj/machinery/reagentgrinder/Initialize() + . = ..() beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - return /obj/machinery/reagentgrinder/Destroy() if(beaker) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 92662600d8..11b38d1e65 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -12,9 +12,9 @@ var/disease_amount = 20 var/spillable = 0 -/obj/item/weapon/reagent_containers/New(location, vol = 0) - ..() - if (isnum(vol) && vol > 0) +/obj/item/weapon/reagent_containers/Initialize(mapload, vol) + . = ..() + if(isnum(vol) && vol > 0) volume = vol create_reagents(volume) if(spawned_disease) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 09fae5ff90..2571e3573d 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -7,8 +7,8 @@ var/blood_type = null var/labelled = 0 -/obj/item/weapon/reagent_containers/blood/New() - ..() +/obj/item/weapon/reagent_containers/blood/Initialize() + . = ..() if(blood_type != null) reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) update_icon() @@ -40,9 +40,9 @@ if(51 to INFINITY) icon_state = "full" -/obj/item/weapon/reagent_containers/blood/random/New() +/obj/item/weapon/reagent_containers/blood/random/Initialize() blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-", "L") - ..() + . = ..() /obj/item/weapon/reagent_containers/blood/APlus blood_type = "A+" diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index ee6da85de0..ee0cc3c8b4 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -30,8 +30,8 @@ Borg Hypospray //Used as list for input() in shakers. -/obj/item/weapon/reagent_containers/borghypo/New() - ..() +/obj/item/weapon/reagent_containers/borghypo/Initialize() + . = ..() for(var/R in reagent_ids) add_reagent(R) diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index fc08ebdbe8..a92c52abf4 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -9,8 +9,8 @@ volume = 30 -/obj/item/weapon/reagent_containers/glass/bottle/New() - ..() +/obj/item/weapon/reagent_containers/glass/bottle/Initialize() + . = ..() if(!icon_state) icon_state = "bottle" update_icon() @@ -139,8 +139,8 @@ icon_state = "bottle16" var/extra_reagent = null -/obj/item/weapon/reagent_containers/glass/bottle/traitor/New() - ..() +/obj/item/weapon/reagent_containers/glass/bottle/traitor/Initialize() + . = ..() extra_reagent = pick("polonium", "histamine", "formaldehyde", "venom", "neurotoxin2", "cyanide") reagents.add_reagent("[extra_reagent]", 3) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 726a21c58a..6ea2673004 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -122,8 +122,8 @@ item_state = "beaker" materials = list(MAT_GLASS=500) -/obj/item/weapon/reagent_containers/glass/beaker/New() - ..() +/obj/item/weapon/reagent_containers/glass/beaker/Initialize() + . = ..() update_icon() /obj/item/weapon/reagent_containers/glass/beaker/on_reagent_change() @@ -176,8 +176,8 @@ origin_tech = "materials=2;engineering=3;plasmatech=3" flags = OPENCONTAINER -/obj/item/weapon/reagent_containers/glass/beaker/noreact/New() - ..() +/obj/item/weapon/reagent_containers/glass/beaker/noreact/Initialize() + . = ..() reagents.set_reacting(FALSE) /obj/item/weapon/reagent_containers/glass/beaker/bluespace diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 11d4303ce8..b6bc9b2ccf 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -11,8 +11,8 @@ var/roundstart = 0 var/self_delay = 0 //pills are instant, this is because patches inheret their aplication from pills -/obj/item/weapon/reagent_containers/pill/New() - ..() +/obj/item/weapon/reagent_containers/pill/Initialize() + . = ..() if(!icon_state) icon_state = "pill[rand(1,20)]" if(reagents.total_volume && roundstart) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index eea1fe7a2b..f4f6d3a521 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -16,8 +16,8 @@ materials = list(MAT_METAL=10, MAT_GLASS=20) container_type = TRANSPARENT -/obj/item/weapon/reagent_containers/syringe/New() - ..() +/obj/item/weapon/reagent_containers/syringe/Initialize() + . = ..() if(list_reagents) //syringe starts in inject mode if its already got something inside mode = SYRINGE_INJECT update_icon() @@ -242,7 +242,7 @@ volume = 20 origin_tech = "materials=3;engineering=3" -/obj/item/weapon/reagent_containers/syringe/noreact/New() +/obj/item/weapon/reagent_containers/syringe/noreact/Initialize() . = ..() reagents.set_reacting(FALSE) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index f3bc94c4e6..1844dc53ab 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -23,10 +23,10 @@ else return ..() -/obj/structure/reagent_dispensers/New() +/obj/structure/reagent_dispensers/Initialize() create_reagents(tank_volume) reagents.add_reagent(reagent_id, tank_volume) - ..() + . = ..() /obj/structure/reagent_dispensers/examine(mob/user) ..() @@ -129,8 +129,8 @@ density = 0 reagent_id = "condensedcapsaicin" -/obj/structure/reagent_dispensers/peppertank/New() - ..() +/obj/structure/reagent_dispensers/peppertank/Initialize() + . = ..() if(prob(1)) desc = "IT'S PEPPER TIME, BITCH!" diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 68190f5e45..28e8550b45 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -24,8 +24,8 @@ // Auto conveyour is always on unless unpowered -/obj/machinery/conveyor/auto/New(loc, newdir) - ..(loc, newdir) +/obj/machinery/conveyor/auto/Initialize(mapload, newdir) + . = ..() operating = 1 update_move_direction() @@ -43,8 +43,8 @@ icon_state = "conveyor[operating * verted]" // create a conveyor -/obj/machinery/conveyor/New(loc, newdir) - ..(loc) +/obj/machinery/conveyor/Initialize(mapload, newdir) + . = ..() if(newdir) setDir(newdir) update_move_direction() @@ -327,8 +327,8 @@ w_class = WEIGHT_CLASS_BULKY var/id = "" //inherited by the switch -/obj/item/conveyor_switch_construct/New() - ..() +/obj/item/conveyor_switch_construct/Initialize() + . = ..() id = rand() //this couldn't possibly go wrong /obj/item/conveyor_switch_construct/afterattack(atom/A, mob/user, proximity) diff --git a/code/modules/recycling/disposal-structures.dm b/code/modules/recycling/disposal-structures.dm index 531af92238..6ea1d958b3 100644 --- a/code/modules/recycling/disposal-structures.dm +++ b/code/modules/recycling/disposal-structures.dm @@ -147,8 +147,8 @@ var/obj/structure/disposalconstruct/stored // new pipe, set the icon_state as on map -/obj/structure/disposalpipe/New(loc,var/obj/structure/disposalconstruct/make_from) - ..() +/obj/structure/disposalpipe/Initialize(mapload, obj/structure/disposalconstruct/make_from) + . = ..() if(make_from && !QDELETED(make_from)) base_icon_state = make_from.base_state @@ -176,7 +176,6 @@ stored.ptype = DISP_SORTJUNCTION if("pipe-j2s") stored.ptype = DISP_SORTJUNCTION_FLIP - return // pipe is deleted @@ -359,15 +358,14 @@ /obj/structure/disposalpipe/segment icon_state = "pipe-s" -/obj/structure/disposalpipe/segment/New() - ..() +/obj/structure/disposalpipe/segment/Initialize() + . = ..() if(stored.ptype == DISP_PIPE_STRAIGHT) dpdir = dir | turn(dir, 180) else dpdir = dir | turn(dir, -90) update() - return @@ -376,8 +374,8 @@ /obj/structure/disposalpipe/junction icon_state = "pipe-j1" -/obj/structure/disposalpipe/junction/New() - ..() +/obj/structure/disposalpipe/junction/Initialize() + . = ..() switch(stored.ptype) if(DISP_JUNCTION) dpdir = dir | turn(dir, -90) | turn(dir,180) @@ -386,7 +384,6 @@ if(DISP_YJUNCTION) dpdir = dir | turn(dir,90) | turn(dir, -90) update() - return // next direction to move @@ -452,8 +449,8 @@ dpdir = sortdir | posdir | negdir -/obj/structure/disposalpipe/sortjunction/New() - ..() +/obj/structure/disposalpipe/sortjunction/Initialize() + . = ..() // Generate a list of soring tags. if(sortType) @@ -468,7 +465,6 @@ updatedir() update() - return /obj/structure/disposalpipe/sortjunction/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/device/destTagger)) @@ -516,8 +512,8 @@ var/negdir = 0 var/sortdir = 0 -/obj/structure/disposalpipe/wrapsortjunction/New() - ..() +/obj/structure/disposalpipe/wrapsortjunction/Initialize() + . = ..() posdir = dir if(stored.ptype == DISP_SORTJUNCTION) sortdir = turn(posdir, -90) @@ -529,7 +525,6 @@ dpdir = sortdir | posdir | negdir update() - return // next direction to move // if coming in from negdir, then next is primary dir or sortdir @@ -557,14 +552,13 @@ icon_state = "pipe-t" var/obj/linked // the linked obj/machinery/disposal or obj/disposaloutlet -/obj/structure/disposalpipe/trunk/New() - ..() +/obj/structure/disposalpipe/trunk/Initialize() + . = ..() dpdir = dir spawn(1) getlinked() update() - return /obj/structure/disposalpipe/trunk/Destroy() if(linked) @@ -631,8 +625,8 @@ // i.e. will be treated as an empty turf desc = "A broken piece of disposal pipe." -/obj/structure/disposalpipe/broken/New() - ..() +/obj/structure/disposalpipe/broken/Initialize() + . = ..() update() // the disposal outlet machine @@ -655,9 +649,8 @@ var/start_eject = 0 var/eject_range = 2 -/obj/structure/disposaloutlet/New(loc, var/obj/structure/disposalconstruct/make_from) - ..() - +/obj/structure/disposaloutlet/Initialize(mapload, obj/structure/disposalconstruct/make_from) + . = ..() if(make_from) setDir(make_from.dir) make_from.loc = src diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm index 5013d9d879..d3d630a766 100644 --- a/code/modules/recycling/disposal-unit.dm +++ b/code/modules/recycling/disposal-unit.dm @@ -26,9 +26,8 @@ // create a new disposal // find the attached trunk (if present) and init gas resvr. -/obj/machinery/disposal/New(loc, var/obj/structure/disposalconstruct/make_from) - ..() - +/obj/machinery/disposal/Initialize(mapload, obj/structure/disposalconstruct/make_from) + . = ..() if(make_from) setDir(make_from.dir) make_from.loc = 0 @@ -445,8 +444,8 @@ icon_state = "intake" pressure_charging = FALSE // the chute doesn't need charging and always works -/obj/machinery/disposal/deliveryChute/New(loc,var/obj/structure/disposalconstruct/make_from) - ..() +/obj/machinery/disposal/deliveryChute/Initialize(mapload, obj/structure/disposalconstruct/make_from) + . = ..() stored.ptype = DISP_END_CHUTE spawn(5) trunk = locate() in loc diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 7b40e91bc8..76c7a22f60 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -27,8 +27,8 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). "Computer Parts" ) -/obj/machinery/r_n_d/circuit_imprinter/New() - ..() +/obj/machinery/r_n_d/circuit_imprinter/Initialize() + . = ..() materials = new(src, list(MAT_GLASS, MAT_GOLD, MAT_DIAMOND, MAT_METAL, MAT_BLUESPACE)) create_reagents(0) var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/circuit_imprinter(null) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index ab2ee3e9b2..15d8e5e80c 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -54,10 +54,10 @@ other types of metals and chemistry for reagents). var/list/blueprints = list() var/max_blueprints = 1 -/obj/item/weapon/disk/design_disk/New() - ..() - src.pixel_x = rand(-5, 5) - src.pixel_y = rand(-5, 5) +/obj/item/weapon/disk/design_disk/Initialize() + . = ..() + pixel_x = rand(-5, 5) + pixel_y = rand(-5, 5) for(var/i in 1 to max_blueprints) blueprints += null diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 8ec99809bf..5adfb14f88 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -13,8 +13,8 @@ Note: Must be placed within 3 tiles of the R&D Console icon_state = "d_analyzer" var/decon_mod = 0 -/obj/machinery/r_n_d/destructive_analyzer/New() - ..() +/obj/machinery/r_n_d/destructive_analyzer/Initialize() + . = ..() var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/destructive_analyzer(null) B.apply_default_parts(src) diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index c8f580cc34..fba7f241d2 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -79,8 +79,8 @@ critical_items += I -/obj/machinery/r_n_d/experimentor/New() - ..() +/obj/machinery/r_n_d/experimentor/Initialize() + . = ..() var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/experimentor(null) B.apply_default_parts(src) @@ -589,8 +589,8 @@ var/cooldownMax = 60 var/cooldown -/obj/item/weapon/relic/New() - ..() +/obj/item/weapon/relic/Initialize() + . = ..() icon_state = pick("shock_kit","armor-igniter-analyzer","infra-igniter0","infra-igniter1","radio-multitool","prox-radio1","radio-radio","timer-multitool0","radio-igniter-tank") realName = "[pick("broken","twisted","spun","improved","silly","regular","badly made")] [pick("device","object","toy","illegal tech","weapon")]" diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index f0d563b1ff..46bfab3788 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -78,12 +78,11 @@ GLOBAL_LIST_INIT(message_servers, list()) var/active = 1 var/decryptkey = "password" -/obj/machinery/message_server/New() +/obj/machinery/message_server/Initialize() GLOB.message_servers += src decryptkey = GenerateKey() send_pda_message("System Administrator", "system", "This is an automated message. The messaging system is functioning correctly.") - ..() - return + . = ..() /obj/machinery/message_server/Destroy() GLOB.message_servers -= src diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index f6cbe90299..c6e742cbba 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -31,8 +31,8 @@ Note: Must be placed west/left of and R&D console to function. ) -/obj/machinery/r_n_d/protolathe/New() - ..() +/obj/machinery/r_n_d/protolathe/Initialize() + . = ..() create_reagents(0) materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE)) var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/protolathe(null) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 2541d67d65..eb1aed1a1f 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -100,8 +100,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, C.files.RefreshResearch() -/obj/machinery/computer/rdconsole/New() - ..() +/obj/machinery/computer/rdconsole/Initialize() + . = ..() files = new /datum/research(src) //Setup the research data holder. matching_designs = list() if(!id) @@ -1065,8 +1065,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, req_access = null req_access_txt = "29" -/obj/machinery/computer/rdconsole/robotics/New() - ..() +/obj/machinery/computer/rdconsole/robotics/Initialize() + . = ..() if(circuit) circuit.name = "R&D Console - Robotics (Computer Board)" circuit.build_path = /obj/machinery/computer/rdconsole/robotics diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 4dfcf3ff85..ea7f5e727b 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -16,8 +16,8 @@ var/obj/machinery/computer/rdconsole/linked_console var/obj/item/loaded_item = null //the item loaded inside the machine (currently only used by experimentor and destructive analyzer) -/obj/machinery/r_n_d/New() - ..() +/obj/machinery/r_n_d/Initialize() + . = ..() wires = new /datum/wires/r_n_d(src) /obj/machinery/r_n_d/Destroy() diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 674825b9f7..25b3a98980 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -328,10 +328,10 @@ research holder datum. var/list/tech_stored = list() var/max_tech_stored = 1 -/obj/item/weapon/disk/tech_disk/New() - ..() - src.pixel_x = rand(-5, 5) - src.pixel_y = rand(-5, 5) +/obj/item/weapon/disk/tech_disk/Initialize() + . = ..() + pixel_x = rand(-5, 5) + pixel_y = rand(-5, 5) for(var/i in 1 to max_tech_stored) tech_stored += null @@ -354,8 +354,8 @@ research holder datum. materials = list() max_tech_stored = 0 -/obj/item/weapon/disk/tech_disk/debug/New() - ..() +/obj/item/weapon/disk/tech_disk/debug/Initialize() + . = ..() var/list/techs = subtypesof(/datum/tech) max_tech_stored = techs.len for(var/V in techs) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 42143f6e3a..468185e615 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -14,8 +14,8 @@ var/delay = 10 req_access = list(GLOB.access_rd) //Only the R&D can change server settings. -/obj/machinery/r_n_d/server/New() - ..() +/obj/machinery/r_n_d/server/Initialize() + . = ..() var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/rdserver(null) B.apply_default_parts(src) diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index 74b5bc0121..0c32efbb64 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -72,10 +72,10 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi w_class = WEIGHT_CLASS_SMALL var/rating = 1 -/obj/item/weapon/stock_parts/New() - ..() - src.pixel_x = rand(-5, 5) - src.pixel_y = rand(-5, 5) +/obj/item/weapon/stock_parts/Initialize() + . = ..() + pixel_x = rand(-5, 5) + pixel_y = rand(-5, 5) //Rating 1 diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 04c5c63989..28e3cbb760 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -25,9 +25,9 @@ qdel(O) ..() -/obj/item/slime_extract/New() - ..() - create_reagents(100) +/obj/item/slime_extract/Initialize() + . = ..() + create_reagents(100) /obj/item/slime_extract/grey name = "grey slime extract" @@ -559,8 +559,8 @@ var/duration = 140 alpha = 125 -/obj/effect/timestop/New() - ..() +/obj/effect/timestop/Initialize() + . = ..() for(var/mob/living/M in GLOB.player_list) for(var/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop/T in M.mind.spell_list) //People who can stop time are immune to timestop immune |= M diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index c0dae175f3..ecc1398137 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -24,8 +24,8 @@ icon_state = "datadisk1" max_blueprints = 1 -/obj/item/weapon/disk/design_disk/golem_shell/New() - ..() +/obj/item/weapon/disk/design_disk/golem_shell/Initialize() + . = ..() var/datum/design/golem_shell/G = new blueprints[1] = G diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm index c5aacadecb..349d716d2d 100644 --- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm @@ -45,7 +45,7 @@ anchored = FALSE density = TRUE -/obj/structure/cursed_money/New() +/obj/structure/cursed_money/Initialize() . = ..() addtimer(CALLBACK(src, .proc/collapse), 600) diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 6f6533326b..66f29b28d0 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -18,7 +18,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) var/mob/triggerer = null var/waiting = 0 -/obj/machinery/keycard_auth/New() +/obj/machinery/keycard_auth/Initialize() . = ..() ev = GLOB.keycard_events.addEvent("triggerEvent", CALLBACK(src, .proc/triggerEvent)) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 18aa94998e..0475a28068 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -10,8 +10,8 @@ var/admin_controlled var/no_destination_swap = 0 -/obj/machinery/computer/shuttle/New(location, obj/item/weapon/circuitboard/computer/shuttle/C) - ..() +/obj/machinery/computer/shuttle/Initialize(mapload, obj/item/weapon/circuitboard/computer/shuttle/C) + . = ..() if(istype(C)) possible_destinations = C.possible_destinations shuttleId = C.shuttleId diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index a4cf449b85..aa9c81bd02 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -421,8 +421,8 @@ to_chat(usr, "Escape pods will only launch during \"Code Red\" security alert.") return 1 -/obj/docking_port/mobile/pod/New() - ..() +/obj/docking_port/mobile/pod/Initialize() + . = ..() if(id == "pod") WARNING("[type] id has not been changed from the default. Use the id convention \"pod1\" \"pod2\" etc.") @@ -501,8 +501,7 @@ icon_state = "safe" var/unlocked = FALSE -/obj/item/weapon/storage/pod/New() - ..() +/obj/item/weapon/storage/pod/PopulateContents() new /obj/item/clothing/head/helmet/space/orange(src) new /obj/item/clothing/head/helmet/space/orange(src) new /obj/item/clothing/suit/space/orange(src) @@ -542,13 +541,13 @@ dir = EAST roundstart_move = "backup_away" -/obj/docking_port/mobile/emergency/backup/New() +/obj/docking_port/mobile/emergency/backup/Initialize() // We want to be a valid emergency shuttle // but not be the main one, keep whatever's set // valid. // backup shuttle ignores `timid` because THERE SHOULD BE NO TOUCHING IT var/current_emergency = SSshuttle.emergency - ..() + . = ..() SSshuttle.emergency = current_emergency SSshuttle.backup_shuttle = src diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm index 594a6855da..0ec4709301 100644 --- a/code/modules/shuttle/manipulator.dm +++ b/code/modules/shuttle/manipulator.dm @@ -20,7 +20,7 @@ var/obj/docking_port/mobile/preview_shuttle var/datum/map_template/shuttle/preview_template -/obj/machinery/shuttle_manipulator/New() +/obj/machinery/shuttle_manipulator/Initialize() . = ..() update_icon() diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index f214d018b4..de9338d55d 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -145,8 +145,8 @@ var/area_type = /area/space var/last_dock_time -/obj/docking_port/stationary/New() - ..() +/obj/docking_port/stationary/Initialize() + . = ..() SSshuttle.stationary += src if(!id) id = "[SSshuttle.stationary.len]" @@ -168,8 +168,8 @@ var/area/shuttle/transit/assigned_area var/obj/docking_port/mobile/owner -/obj/docking_port/stationary/transit/New() - ..() +/obj/docking_port/stationary/transit/Initialize() + . = ..() SSshuttle.transit += src /obj/docking_port/stationary/transit/proc/dezone() @@ -223,8 +223,8 @@ var/list/ripples = list() -/obj/docking_port/mobile/New() - ..() +/obj/docking_port/mobile/Initialize() + . = ..() if(!timid) register() diff --git a/code/modules/shuttle/shuttle.dm.rej b/code/modules/shuttle/shuttle.dm.rej new file mode 100644 index 0000000000..5dc3c5a13a --- /dev/null +++ b/code/modules/shuttle/shuttle.dm.rej @@ -0,0 +1,10 @@ +diff a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm (rejected hunks) +@@ -316,7 +316,7 @@ + if(!check_dock(S)) + testing("check_dock failed on request for [src]") + return +- ++ + if(mode == SHUTTLE_IGNITING && destination == S) + return + diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index b78d0efd84..78732d82e4 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -14,7 +14,7 @@ var/tables_required = 2 active = FALSE -/obj/machinery/power/emitter/energycannon/magical/New() +/obj/machinery/power/emitter/energycannon/magical/Initialize() . = ..() if(prob(50)) desc = "Oh no, not again." diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 22a408ec6c..83ef7f06eb 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -31,9 +31,9 @@ var/challenge = FALSE var/moved = FALSE -/obj/item/weapon/circuitboard/computer/syndicate_shuttle/New() +/obj/item/weapon/circuitboard/computer/syndicate_shuttle/Initialize() + . = ..() GLOB.syndicate_shuttle_boards += src - ..() /obj/item/weapon/circuitboard/computer/syndicate_shuttle/Destroy() GLOB.syndicate_shuttle_boards -= src diff --git a/code/modules/shuttle/transit.dm b/code/modules/shuttle/transit.dm index c03d4a2645..7bf217d1ff 100644 --- a/code/modules/shuttle/transit.dm +++ b/code/modules/shuttle/transit.dm @@ -5,7 +5,7 @@ icon = 'icons/effects/effects.dmi' icon_state = "at_shield1" -/obj/effect/landmark/transit/New() +/obj/effect/landmark/transit/Initialize() . = ..() GLOB.transit_markers += src diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index bdab8b6c22..cc3f2c1ab9 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -223,8 +223,8 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th /obj/effect/proc_holder/spell/proc/playMagSound() playsound(get_turf(usr), sound,50,1) -/obj/effect/proc_holder/spell/New() - ..() +/obj/effect/proc_holder/spell/Initialize() + . = ..() action = new(src) still_recharging_msg = "[name] is still recharging." diff --git a/code/modules/spells/spell_types/forcewall.dm b/code/modules/spells/spell_types/forcewall.dm index 6579171738..8b2a40fe59 100644 --- a/code/modules/spells/spell_types/forcewall.dm +++ b/code/modules/spells/spell_types/forcewall.dm @@ -26,8 +26,8 @@ /obj/effect/forcefield/wizard var/mob/wizard -/obj/effect/forcefield/wizard/New(atom/loc, mob/summoner) - ..() +/obj/effect/forcefield/wizard/Initialize(mapload, mob/summoner) + . = ..() wizard = summoner QDEL_IN(src, 300) diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index 20d223354b..26c543537e 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -14,9 +14,9 @@ throw_range = 0 throw_speed = 0 -/obj/item/weapon/melee/touch_attack/New(var/spell) - attached_spell = spell - ..() +/obj/item/weapon/melee/touch_attack/Initialize() + attached_spell = loc + . = ..() /obj/item/weapon/melee/touch_attack/attack(mob/target, mob/living/carbon/user) if(!iscarbon(user)) //Look ma, no hands diff --git a/code/modules/spells/spell_types/trigger.dm b/code/modules/spells/spell_types/trigger.dm index 4cd8107b6a..d219a22fca 100644 --- a/code/modules/spells/spell_types/trigger.dm +++ b/code/modules/spells/spell_types/trigger.dm @@ -5,8 +5,8 @@ var/list/linked_spells = list() //those are just referenced by the trigger spell and are unaffected by it directly var/list/starting_spells = list() //those are added on New() to contents from default spells and are deleted when the trigger spell is deleted to prevent memory leaks -/obj/effect/proc_holder/spell/targeted/trigger/New() - ..() +/obj/effect/proc_holder/spell/targeted/trigger/Initialize() + . = ..() for(var/spell in starting_spells) var/spell_to_add = text2path(spell) diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 53a7198302..5f808035fd 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -161,8 +161,8 @@ return locate(world.maxx,y,z) return get_turf(src) -/obj/machinery/bsa/full/New(loc,cannon_direction = WEST) - ..() +/obj/machinery/bsa/full/Initialize(mapload, cannon_direction = WEST) + . = ..() top_layer = top_layer || mutable_appearance(icon, layer = ABOVE_MOB_LAYER) switch(cannon_direction) if(WEST) diff --git a/code/modules/station_goals/bsa.dm.rej b/code/modules/station_goals/bsa.dm.rej new file mode 100644 index 0000000000..d252acd18d --- /dev/null +++ b/code/modules/station_goals/bsa.dm.rej @@ -0,0 +1,12 @@ +diff a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm (rejected hunks) +@@ -161,8 +161,8 @@ + return locate(world.maxx,y,z) + return get_turf(src) + +-/obj/machinery/bsa/full/New(loc,cannon_direction = WEST) +- ..() ++/obj/machinery/bsa/full/Initialize(mapload,cannon_direction = WEST) ++ . = ..() + switch(cannon_direction) + if(WEST) + dir = WEST diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 863d7d4bde..b89ed4bde0 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -99,8 +99,8 @@ var/static/gid = 0 var/id = 0 -/obj/machinery/satellite/New() - ..() +/obj/machinery/satellite/Initialize() + . = ..() id = gid++ /obj/machinery/satellite/interact(mob/user) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 1a0932f6e0..4fc22ec2c2 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -14,8 +14,8 @@ var/obj/item/holder = null // You can use this var for item path, it would be converted into an item on New() -/obj/item/organ/cyberimp/arm/New() - ..() +/obj/item/organ/cyberimp/arm/Initialize() + . = ..() if(ispath(holder)) holder = new holder(src) @@ -207,8 +207,8 @@ contents = newlist(/obj/item/device/assembly/flash/armimplant) origin_tech = "materials=4;combat=3;biotech=4;magnets=4;powerstorage=3" -/obj/item/organ/cyberimp/arm/flash/New() - ..() +/obj/item/organ/cyberimp/arm/flash/Initialize() + . = ..() if(locate(/obj/item/device/assembly/flash/armimplant) in items_list) var/obj/item/device/assembly/flash/armimplant/F = locate(/obj/item/device/assembly/flash/armimplant) in items_list F.I = src @@ -225,8 +225,8 @@ contents = newlist(/obj/item/weapon/melee/energy/blade/hardlight, /obj/item/weapon/gun/medbeam, /obj/item/borg/stun, /obj/item/device/assembly/flash/armimplant) origin_tech = "materials=5;combat=7;biotech=5;powerstorage=5;syndicate=6;programming=5" -/obj/item/organ/cyberimp/arm/combat/New() - ..() +/obj/item/organ/cyberimp/arm/combat/Initialize() + . = ..() if(locate(/obj/item/device/assembly/flash/armimplant) in items_list) var/obj/item/device/assembly/flash/armimplant/F = locate(/obj/item/device/assembly/flash/armimplant) in items_list F.I = src diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 7b4f98693c..ff2a3f0312 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -155,8 +155,7 @@ /obj/item/device/autosurgeon/reviver) var/amount = 5 -/obj/item/weapon/storage/box/cyber_implants/bundle/New() - ..() +/obj/item/weapon/storage/box/cyber_implants/PopulateContents() var/implant while(contents.len <= amount) implant = pick(boxed) diff --git a/code/modules/surgery/organs/organ_internal.dm.rej b/code/modules/surgery/organs/organ_internal.dm.rej new file mode 100644 index 0000000000..51db3e41ea --- /dev/null +++ b/code/modules/surgery/organs/organ_internal.dm.rej @@ -0,0 +1,10 @@ +diff a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm (rejected hunks) +@@ -655,7 +655,7 @@ + var/phomeme_type = "sans" + var/list/phomeme_types = list("sans", "papyrus") + +-/obj/item/organ/tongue/bone/New() ++/obj/item/organ/tongue/bone/Initialize() + . = ..() + phomeme_type = pick(phomeme_types) + diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index d4e49215ad..5d85cde569 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -10,8 +10,8 @@ active_power_usage = 5000 var/efficiency -/obj/machinery/telepad/New() - ..() +/obj/machinery/telepad/Initialize() + . = ..() var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telesci_pad(null) B.apply_default_parts(src) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index a6c909438e..9a0fdf55fc 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -30,9 +30,9 @@ var/list/crystals = list() var/obj/item/device/gps/inserted_gps -/obj/machinery/computer/telescience/New() +/obj/machinery/computer/telescience/Initialize() recalibrate() - ..() + . = ..() /obj/machinery/computer/telescience/Destroy() eject() diff --git a/code/modules/uplink/uplink.dm b/code/modules/uplink/uplink.dm index 8a72bd0566..f3379b9110 100644 --- a/code/modules/uplink/uplink.dm +++ b/code/modules/uplink/uplink.dm @@ -20,8 +20,8 @@ GLOBAL_LIST_EMPTY(uplinks) var/purchase_log = "" var/list/uplink_items -/obj/item/device/uplink/New() - ..() +/obj/item/device/uplink/Initialize() + . = ..() GLOB.uplinks += src uplink_items = get_uplink_items(gamemode) @@ -133,24 +133,24 @@ GLOBAL_LIST_EMPTY(uplinks) return hidden_uplink.attackby(I, user, params) // A collection of pre-set uplinks, for admin spawns. -/obj/item/device/radio/uplink/New() - ..() +/obj/item/device/radio/uplink/Initialize() + . = ..() icon_state = "radio" hidden_uplink = new(src) hidden_uplink.active = TRUE hidden_uplink.lockable = FALSE -/obj/item/device/radio/uplink/nuclear/New() - ..() +/obj/item/device/radio/uplink/nuclear/Initialize() + . = ..() hidden_uplink.set_gamemode(/datum/game_mode/nuclear) -/obj/item/device/multitool/uplink/New() - ..() +/obj/item/device/multitool/uplink/Initialize() + . = ..() hidden_uplink = new(src) hidden_uplink.active = TRUE hidden_uplink.lockable = FALSE -/obj/item/weapon/pen/uplink/New() - ..() +/obj/item/weapon/pen/uplink/Initialize() + . = ..() hidden_uplink = new(src) traitor_unlock_degrees = 360 diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm index 5f663b85f8..35aff0867f 100644 --- a/code/modules/vehicles/atv.dm +++ b/code/modules/vehicles/atv.dm @@ -9,8 +9,8 @@ . = ..() riding_datum = new/datum/riding/atv -/obj/vehicle/atv/New() - ..() +/obj/vehicle/atv/Initialize() + .=..() atvcover = atvcover || mutable_appearance(icon, "atvcover", ABOVE_MOB_LAYER) @@ -34,7 +34,7 @@ density = 0 -/obj/vehicle/atv/turret/New() +/obj/vehicle/atv/turret/Initialize() . = ..() turret = new(loc) turret.base = src diff --git a/code/modules/vehicles/atv.dm.rej b/code/modules/vehicles/atv.dm.rej new file mode 100644 index 0000000000..4595beddc4 --- /dev/null +++ b/code/modules/vehicles/atv.dm.rej @@ -0,0 +1,12 @@ +diff a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm (rejected hunks) +@@ -9,8 +9,8 @@ + . = ..() + riding_datum = new/datum/riding/atv + +-/obj/vehicle/atv/New() +- ..() ++/obj/vehicle/atv/Initialize() ++ . = ..() + if(!atvcover) + atvcover = image("icons/obj/vehicles.dmi", "atvcover") + atvcover.layer = ABOVE_MOB_LAYER diff --git a/code/modules/vehicles/bicycle.dm b/code/modules/vehicles/bicycle.dm index 184b03a6bf..d51de5809c 100644 --- a/code/modules/vehicles/bicycle.dm +++ b/code/modules/vehicles/bicycle.dm @@ -7,8 +7,8 @@ var/static/list/bike_music = list('sound/misc/bike1.mid', 'sound/misc/bike2.mid', 'sound/misc/bike3.mid') -/obj/vehicle/bicycle/New() - ..() +/obj/vehicle/bicycle/Initialize() + . = ..() riding_datum = new/datum/riding/bicycle /obj/vehicle/bicycle/buckle_mob(mob/living/M, force = 0, check_loc = 1) diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm index 21d8cff1be..15337d8a28 100644 --- a/code/modules/vehicles/speedbike.dm +++ b/code/modules/vehicles/speedbike.dm @@ -15,20 +15,11 @@ overlay = overlay || mutable_appearance(icon, overlay_state, ABOVE_MOB_LAYER) add_overlay(overlay) -/obj/effect/overlay/temp/speedbike_trail - name = "speedbike trails" - icon_state = "ion_fade" - layer = BELOW_MOB_LAYER - duration = 10 - randomdir = 0 -/obj/effect/overlay/temp/speedbike_trail/New(loc,move_dir) - ..() - setDir(move_dir) /obj/vehicle/space/speedbike/Move(newloc,move_dir) if(has_buckled_mobs()) - new /obj/effect/overlay/temp/speedbike_trail(loc,move_dir) + new /obj/effect/overlay/temp/dir_setting/speedbike_trail(loc,move_dir) . = ..() /obj/vehicle/space/speedbike/red diff --git a/code/modules/vehicles/speedbike.dm.rej b/code/modules/vehicles/speedbike.dm.rej new file mode 100644 index 0000000000..26fe1428c9 --- /dev/null +++ b/code/modules/vehicles/speedbike.dm.rej @@ -0,0 +1,23 @@ +diff a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm (rejected hunks) +@@ -16,20 +16,9 @@ + overlay.layer = ABOVE_MOB_LAYER + add_overlay(overlay) + +-/obj/effect/overlay/temp/speedbike_trail +- name = "speedbike trails" +- icon_state = "ion_fade" +- layer = BELOW_MOB_LAYER +- duration = 10 +- randomdir = 0 +- +-/obj/effect/overlay/temp/speedbike_trail/New(loc,move_dir) +- ..() +- setDir(move_dir) +- + /obj/vehicle/space/speedbike/Move(newloc,move_dir) + if(has_buckled_mobs()) +- new /obj/effect/overlay/temp/speedbike_trail(loc,move_dir) ++ new /obj/effect/overlay/temp/dir_setting/speedbike_trail(loc,move_dir) + . = ..() + + /obj/vehicle/space/speedbike/red diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index 295d774595..f254ef6337 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -13,7 +13,7 @@ var/revive_time_max = 700 var/timer_id -/obj/item/organ/zombie_infection/New(loc) +/obj/item/organ/zombie_infection/Initialize() . = ..() if(iscarbon(loc)) Insert(loc)