Merge pull request #5964 from Citadel-Station-13/upstream-merge-36459

[MIRROR] Clown Ops
This commit is contained in:
deathride58
2018-03-17 23:58:15 +00:00
committed by GitHub
30 changed files with 700 additions and 78 deletions
@@ -0,0 +1,59 @@
/obj/machinery/nuclearbomb/syndicate/bananium
name = "bananium fission explosive"
desc = "You probably shouldn't stick around to see if this is armed."
icon = 'icons/obj/machines/nuke.dmi'
icon_state = "bananiumbomb_base"
/obj/machinery/nuclearbomb/syndicate/bananium/update_icon()
if(deconstruction_state == NUKESTATE_INTACT)
switch(get_nuke_state())
if(NUKE_OFF_LOCKED, NUKE_OFF_UNLOCKED)
icon_state = "bananiumbomb_base"
update_icon_interior()
update_icon_lights()
if(NUKE_ON_TIMING)
cut_overlays()
icon_state = "bananiumbomb_timing"
if(NUKE_ON_EXPLODING)
cut_overlays()
icon_state = "bananiumbomb_exploding"
else
icon_state = "bananiumbomb_base"
update_icon_interior()
update_icon_lights()
/obj/machinery/nuclearbomb/syndicate/bananium/get_cinematic_type(off_station)
switch(off_station)
if(0)
return CINEMATIC_NUKE_CLOWNOP
if(1)
return CINEMATIC_NUKE_MISS
if(2)
return CINEMATIC_NUKE_FAKE //it is farther away, so just a bikehorn instead of an airhorn
return CINEMATIC_NUKE_FAKE
/obj/machinery/nuclearbomb/syndicate/bananium/really_actually_explode(off_station)
Cinematic(get_cinematic_type(off_station), world)
for(var/mob/living/carbon/human/H in GLOB.carbon_list)
var/turf/T = get_turf(H)
if(!T || T.z != z)
continue
H.Stun(10)
var/obj/item/clothing/C
if(!H.w_uniform || H.dropItemToGround(H.w_uniform))
C = new /obj/item/clothing/under/rank/clown(H)
C.flags_1 |= NODROP_1 //mwahaha
H.equip_to_slot_or_del(C, slot_w_uniform)
if(!H.shoes || H.dropItemToGround(H.shoes))
C = new /obj/item/clothing/shoes/clown_shoes(H)
C.flags_1 |= NODROP_1
H.equip_to_slot_or_del(C, slot_shoes)
if(!H.wear_mask || H.dropItemToGround(H.wear_mask))
C = new /obj/item/clothing/mask/gas/clown_hat(H)
C.flags_1 |= NODROP_1
H.equip_to_slot_or_del(C, slot_wear_mask)
H.dna.add_mutation(CLOWNMUT)
H.gain_trauma(/datum/brain_trauma/mild/phobia, TRAUMA_RESILIENCE_LOBOTOMY, "clowns") //MWA HA HA
@@ -0,0 +1,66 @@
/datum/game_mode/nuclear/clown_ops
name = "clown ops"
config_tag = "clownops"
announce_span = "danger"
announce_text = "Clown empire forces are approaching the station in an attempt to HONK it!\n\
<span class='danger'>Operatives</span>: Secure the nuclear authentication disk and use your bananium fission explosive to HONK the station.\n\
<span class='notice'>Crew</span>: Defend the nuclear authentication disk and ensure that it leaves with you on the emergency shuttle."
operative_antag_datum_type = /datum/antagonist/nukeop/clownop
leader_antag_datum_type = /datum/antagonist/nukeop/leader/clownop
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
/datum/game_mode/nuclear/clown_ops/pre_setup()
. = ..()
if(.)
for(var/obj/machinery/nuclearbomb/syndicate/S in GLOB.nuke_list)
var/turf/T = get_turf(S)
if(T)
qdel(S)
new /obj/machinery/nuclearbomb/syndicate/bananium(T)
for(var/V in pre_nukeops)
var/datum/mind/the_op = V
the_op.assigned_role = "Clown Operative"
the_op.special_role = "Clown Operative"
/datum/game_mode/nuclear/clown_ops/generate_report()
return "One of Central Command's trading routes was recently disrupted by a raid carried out by the Gorlex Marauders. They seemed to only be after one ship - a highly-sensitive \
transport containing a bananium fission explosive, although it is useless without the proper code and authorization disk. While the code was likely found in minutes, the only disk that \
can activate this explosive is on your station. Ensure that it is protected at all times, and remain alert for possible intruders."
/datum/outfit/syndicate/clownop
name = "Clown Operative - Basic"
uniform = /obj/item/clothing/under/syndicate
shoes = /obj/item/clothing/shoes/clown_shoes/combat
mask = /obj/item/clothing/mask/gas/clown_hat
gloves = /obj/item/clothing/gloves/combat
back = /obj/item/storage/backpack/clown
ears = /obj/item/device/radio/headset/syndicate/alt
l_pocket = /obj/item/pinpointer/nuke/syndicate
r_pocket = /obj/item/bikehorn
id = /obj/item/card/id/syndicate
backpack_contents = list(/obj/item/storage/box/syndie=1,\
/obj/item/kitchen/knife/combat/survival,
/obj/item/reagent_containers/spray/waterflower/lube)
implants = list(/obj/item/implant/sad_trombone)
uplink_type = /obj/item/device/radio/uplink/clownop
/datum/outfit/syndicate/clownop/no_crystals
tc = 0
/datum/outfit/syndicate/clownop/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
H.dna.add_mutation(CLOWNMUT)
/datum/outfit/syndicate/clownop/leader
name = "Clown Operative Leader - Basic"
id = /obj/item/card/id/syndicate/nuke_leader
r_hand = /obj/item/device/nuclear_challenge/clownops
command_radio = TRUE
@@ -0,0 +1,298 @@
/obj/item/reagent_containers/spray/waterflower/lube
name = "water flower"
desc = "A seemingly innocent sunflower...with a twist. A <i>slippery</i> twist."
icon = 'icons/obj/hydroponics/harvest.dmi'
icon_state = "sunflower"
item_state = "sunflower"
amount_per_transfer_from_this = 3
spray_range = 1
stream_range = 1
volume = 30
list_reagents = list("lube" = 30)
//COMBAT CLOWN SHOES
//Clown shoes with combat stats and noslip. Of course they still squeek.
/obj/item/clothing/shoes/clown_shoes/combat
name = "combat clown shoes"
desc = "advanced clown shoes that protect the wearer and render them nearly immune to slipping on their own peels. They also squeek at 100% capacity."
flags_1 = NOSLIP_1
slowdown = SHOES_SLOWDOWN
armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50)
strip_delay = 70
resistance_flags = NONE
permeability_coefficient = 0.05
pockets = /obj/item/storage/internal/pocket/shoes
//The super annoying version
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat
name = "mk-honk combat shoes"
desc = "The culmination of years of clown combat research, these shoes leave a trail of chaos in their wake. They will slowly recharge themselves over time, or can be manually charged with bananium."
slowdown = SHOES_SLOWDOWN
armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50)
strip_delay = 70
resistance_flags = NONE
permeability_coefficient = 0.05
pockets = /obj/item/storage/internal/pocket/shoes
always_noslip = TRUE
var/max_recharge = 3000 //30 peels worth
var/recharge_rate = 34 //about 1/3 of a peel per tick
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/Initialize()
. = ..()
GET_COMPONENT(bananium, /datum/component/material_container)
bananium.insert_amount(max_recharge, MAT_BANANIUM)
START_PROCESSING(SSobj, src)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/process()
GET_COMPONENT(bananium, /datum/component/material_container)
var/bananium_amount = bananium.amount(MAT_BANANIUM)
if(bananium_amount < max_recharge)
bananium.insert_amount(min(recharge_rate, max_recharge - bananium_amount), MAT_BANANIUM)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/attack_self(mob/user)
ui_action_click(user)
//BANANIUM SWORD
/obj/item/melee/transforming/energy/sword/bananium
name = "bananium sword"
desc = "An elegant weapon, for a more civilized age."
force = 0
throwforce = 0
force_on = 0
throwforce_on = 0
hitsound = null
attack_verb_on = list("slipped")
clumsy_check = FALSE
sharpness = IS_BLUNT
item_color = "yellow"
heat = 0
light_color = "#ffff00"
var/next_trombone_allowed = 0
/obj/item/melee/transforming/energy/sword/bananium/Initialize()
. = ..()
AddComponent(/datum/component/slippery, 60, GALOSHES_DONT_HELP)
GET_COMPONENT(slipper, /datum/component/slippery)
slipper.enabled = active
/obj/item/melee/transforming/energy/sword/bananium/attack(mob/living/M, mob/living/user)
..()
if(active)
GET_COMPONENT(slipper, /datum/component/slippery)
slipper.Slip(M)
/obj/item/melee/transforming/energy/sword/bananium/throw_impact(atom/hit_atom, throwingdatum)
. = ..()
if(active)
GET_COMPONENT(slipper, /datum/component/slippery)
slipper.Slip(hit_atom)
/obj/item/melee/transforming/energy/sword/bananium/attackby(obj/item/I, mob/living/user, params)
if((world.time > next_trombone_allowed) && istype(I, /obj/item/melee/transforming/energy/sword/bananium))
next_trombone_allowed = world.time + 50
to_chat(user, "You slap the two swords together. Sadly, they do not seem to fit.")
playsound(src, 'sound/misc/sadtrombone.ogg', 50)
return TRUE
return ..()
/obj/item/melee/transforming/energy/sword/bananium/transform_weapon(mob/living/user, supress_message_text)
..()
GET_COMPONENT(slipper, /datum/component/slippery)
slipper.enabled = active
/obj/item/melee/transforming/energy/sword/bananium/ignition_effect(atom/A, mob/user)
return ""
/obj/item/melee/transforming/energy/sword/bananium/suicide_act(mob/user)
if(!active)
transform_weapon(user, TRUE)
user.visible_message("<span class='suicide'>[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku, but the blade slips off of them harmlessly!</span>")
GET_COMPONENT(slipper, /datum/component/slippery)
slipper.Slip(user)
return SHAME
//BANANIUM SHIELD
/obj/item/shield/energy/bananium
name = "bananium energy shield"
desc = "A shield that stops most melee attacks, protects user from almost all energy projectiles, and can be thrown to slip opponents."
throw_speed = 1
clumsy_check = 0
base_icon_state = "bananaeshield"
force = 0
throwforce = 0
throw_range = 5
on_force = 0
on_throwforce = 0
on_throw_speed = 1
/obj/item/shield/energy/bananium/Initialize()
. = ..()
AddComponent(/datum/component/slippery, 60, GALOSHES_DONT_HELP)
GET_COMPONENT(slipper, /datum/component/slippery)
slipper.enabled = active
/obj/item/shield/energy/bananium/attack_self(mob/living/carbon/human/user)
..()
GET_COMPONENT(slipper, /datum/component/slippery)
slipper.enabled = active
/obj/item/shield/energy/bananium/throw_at(atom/target, range, speed, mob/thrower, spin=1)
if(active)
if(iscarbon(thrower))
var/mob/living/carbon/C = thrower
C.throw_mode_on() //so they can catch it on the return.
return ..()
/obj/item/shield/energy/bananium/throw_impact(atom/hit_atom)
if(active)
var/caught = hit_atom.hitby(src, 0, 0)
if(iscarbon(hit_atom) && !caught)//if they are a carbon and they didn't catch it
GET_COMPONENT(slipper, /datum/component/slippery)
slipper.Slip(hit_atom)
if(thrownby && !caught)
throw_at(thrownby, throw_range+2, throw_speed, null, 1)
else
return ..()
//BOMBANANA
/obj/item/reagent_containers/food/snacks/grown/banana/bombanana
trash = /obj/item/grown/bananapeel/bombanana
bitesize = 1
customfoodfilling = FALSE
seed = null
tastes = list("explosives" = 10)
list_reagents = list("vitamin" = 1)
/obj/item/grown/bananapeel/bombanana
desc = "A peel from a banana. Why is it beeping?"
seed = null
var/det_time = 50
var/obj/item/grenade/syndieminibomb/bomb
/obj/item/grown/bananapeel/bombanana/Initialize()
. = ..()
AddComponent(/datum/component/slippery, det_time)
bomb = new /obj/item/grenade/syndieminibomb(src)
bomb.det_time = det_time
if(iscarbon(loc))
to_chat(loc, "[src] begins to beep.")
var/mob/living/carbon/C = loc
C.throw_mode_on()
bomb.preprime(loc, null, FALSE)
/obj/item/grown/bananapeel/bombanana/Destroy()
. = ..()
QDEL_NULL(bomb)
/obj/item/grown/bananapeel/bombanana/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide.</span>")
playsound(loc, 'sound/misc/slip.ogg', 50, 1, -1)
bomb.preprime(user, 0, FALSE)
return (BRUTELOSS)
//TEARSTACHE GRENADE
/obj/item/grenade/chem_grenade/teargas/moustache
name = "tear-stache grenade"
desc = "A handsomely-attired teargas grenade."
icon_state = "moustacheg"
clumsy_check = GRENADE_NONCLUMSY_FUMBLE
/obj/item/grenade/chem_grenade/teargas/moustache/prime()
var/myloc = get_turf(src)
. = ..()
for(var/mob/living/carbon/M in view(6, myloc))
if(!istype(M.wear_mask, /obj/item/clothing/mask/gas/clown_hat) && !istype(M.wear_mask, /obj/item/clothing/mask/gas/mime) )
if(!M.wear_mask || M.dropItemToGround(M.wear_mask))
var/obj/item/clothing/mask/fakemoustache/sticky/the_stash = new /obj/item/clothing/mask/fakemoustache/sticky()
M.equip_to_slot_or_del(the_stash, slot_wear_mask, TRUE, TRUE, TRUE, TRUE)
/obj/item/clothing/mask/fakemoustache/sticky
var/unstick_time = 600
/obj/item/clothing/mask/fakemoustache/sticky/Initialize()
. = ..()
flags_1 |= NODROP_1
addtimer(CALLBACK(src, .proc/unstick), unstick_time)
/obj/item/clothing/mask/fakemoustache/sticky/proc/unstick()
flags_1 &= ~NODROP_1
//DARK H.O.N.K. AND CLOWN MECH WEAPONS
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/bombanana
name = "bombanana mortar"
desc = "Equipment for clown exosuits. Launches exploding banana peels."
icon_state = "mecha_bananamrtr"
projectile = /obj/item/grown/bananapeel/bombanana
projectiles = 8
projectile_energy_cost = 1000
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/bombanana/can_attach(obj/mecha/combat/honker/M)
if(..())
if(istype(M))
return TRUE
return FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/tearstache
name = "\improper HONKeR-6 grenade launcher"
desc = "A weapon for combat exosuits. Launches primed tear-stache grenades."
icon_state = "mecha_grenadelnchr"
projectile = /obj/item/grenade/chem_grenade/teargas/moustache
fire_sound = 'sound/weapons/grenadelaunch.ogg'
projectiles = 6
missile_speed = 1.5
projectile_energy_cost = 800
equip_cooldown = 60
det_time = 20
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/tearstache/can_attach(obj/mecha/combat/honker/M)
if(..())
if(istype(M))
return TRUE
return FALSE
/obj/mecha/combat/honker/dark
desc = "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. This one has been painted black for maximum fun. HONK!"
name = "\improper Dark H.O.N.K"
icon_state = "darkhonker"
max_integrity = 300
deflect_chance = 15
armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
max_temperature = 35000
operation_req_access = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/honker/dark
max_equip = 3
/obj/mecha/combat/honker/dark/GrantActions(mob/living/user, human_occupant = 0)
..()
thrusters_action.Grant(user, src)
/obj/mecha/combat/honker/dark/RemoveActions(mob/living/user, human_occupant = 0)
..()
thrusters_action.Remove(user)
/obj/mecha/combat/honker/dark/add_cell(obj/item/stock_parts/cell/C)
if(C)
C.forceMove(src)
cell = C
return
cell = new /obj/item/stock_parts/cell/hyper(src)
/obj/mecha/combat/honker/dark/loaded/Initialize()
. = ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/honker()
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/bombanana()//Needed more offensive weapons.
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/tearstache()//The mousetrap mortar was not up-to-snuff.
ME.attach(src)
/obj/structure/mecha_wreckage/honker/dark
name = "\improper Dark H.O.N.K wreckage"
icon_state = "darkhonker-broken"
+7 -3
View File
@@ -19,6 +19,9 @@
var/datum/team/nuclear/nuke_team
var/operative_antag_datum_type = /datum/antagonist/nukeop
var/leader_antag_datum_type = /datum/antagonist/nukeop/leader
/datum/game_mode/nuclear/pre_setup()
var/n_agents = min(round(num_players() / 10), antag_candidates.len, agents_possible)
if(n_agents >= required_enemies)
@@ -37,12 +40,12 @@
/datum/game_mode/nuclear/post_setup()
//Assign leader
var/datum/mind/leader_mind = pre_nukeops[1]
var/datum/antagonist/nukeop/L = leader_mind.add_antag_datum(/datum/antagonist/nukeop/leader)
var/datum/antagonist/nukeop/L = leader_mind.add_antag_datum(leader_antag_datum_type)
nuke_team = L.nuke_team
//Assign the remaining operatives
for(var/i = 2 to pre_nukeops.len)
var/datum/mind/nuke_mind = pre_nukeops[i]
nuke_mind.add_antag_datum(/datum/antagonist/nukeop,nuke_team)
nuke_mind.add_antag_datum(operative_antag_datum_type)
return ..()
/datum/game_mode/nuclear/OnNukeExplosion(off_station)
@@ -131,6 +134,7 @@
var/tc = 25
var/command_radio = FALSE
var/uplink_type = /obj/item/device/radio/uplink/nuclear
/datum/outfit/syndicate/leader
@@ -150,7 +154,7 @@
R.command = TRUE
if(tc)
var/obj/item/device/radio/uplink/nuclear/U = new(H, H.key, tc)
var/obj/item/device/radio/uplink/U = new uplink_type(H, H.key, tc)
H.equip_to_slot_or_del(U, slot_in_backpack)
var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H)
+1 -1
View File
@@ -11,7 +11,7 @@
var/equip_ready = 1 //whether the equipment is ready for use. (or deactivated/activated for static stuff)
var/energy_drain = 0
var/obj/mecha/chassis = null
var/range = MELEE //bitflags
var/range = MELEE //bitFflags
var/salvageable = 1
var/selectable = 1 // Set to 0 for passive equipment such as mining scanner or armor plates
var/pacifist_safe = TRUE //Controls if equipment can be used to attack by a pacifist.
+9 -2
View File
@@ -16,6 +16,7 @@
var/active = 0
var/det_time = 50
var/display_timer = 1
var/clumsy_check = GRENADE_CLUMSY_FUMBLE
/obj/item/grenade/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] primes [src], then eats it! It looks like [user.p_theyre()] trying to commit suicide!</span>")
@@ -32,8 +33,14 @@
qdel(src)
/obj/item/grenade/proc/clown_check(mob/living/carbon/human/user)
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
to_chat(user, "<span class='warning'>Huh? How does this thing work?</span>")
var/clumsy = user.has_trait(TRAIT_CLUMSY)
if(clumsy && (clumsy_check == GRENADE_CLUMSY_FUMBLE))
if(prob(50))
to_chat(user, "<span class='warning'>Huh? How does this thing work?</span>")
preprime(user, 5, FALSE)
return FALSE
else if(!clumsy && (clumsy_check == GRENADE_NONCLUMSY_FUMBLE))
to_chat(user, "<span class='warning'>You pull the pin on [src]. Attached to it is a pink ribbon that says, \"<span class='clown'>HONK</span>\"</span>")
preprime(user, 5, FALSE)
return FALSE
return TRUE
+2
View File
@@ -17,6 +17,8 @@
return ..()
/obj/item/melee/transforming/energy/suicide_act(mob/user)
if(!active)
transform_weapon(user, TRUE)
user.visible_message("<span class='suicide'>[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku!</span>")
return (BRUTELOSS|FIRELOSS)
@@ -1,4 +1,5 @@
/obj/item/melee/transforming
sharpness = IS_SHARP
var/active = FALSE
var/force_on = 30 //force when active
var/faction_bonus_force = 0 //Bonus force dealt against certain factions
@@ -8,10 +9,10 @@
var/list/attack_verb_on = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
var/list/attack_verb_off = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
w_class = WEIGHT_CLASS_SMALL
sharpness = IS_SHARP
var/bonus_active = FALSE //If the faction damage bonus is active
var/list/nemesis_factions //Any mob with a faction that exists in this list will take bonus damage/effects
var/w_class_on = WEIGHT_CLASS_BULKY
var/clumsy_check = TRUE
/obj/item/melee/transforming/Initialize()
. = ..()
@@ -81,6 +82,6 @@
to_chat(user, "<span class='notice'>[src] [active ? "is now active":"can now be concealed"].</span>")
/obj/item/melee/transforming/proc/clumsy_transform_effect(mob/living/user)
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
if(clumsy_check && user.has_trait(TRAIT_CLUMSY) && prob(50))
to_chat(user, "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>")
user.take_bodypart_damage(5,5)
+20 -12
View File
@@ -60,16 +60,24 @@
name = "energy combat shield"
desc = "A shield that reflects almost all energy projectiles, but is useless against physical attacks. It can be retracted, expanded, and stored anywhere."
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "eshield0" // eshield1 for expanded
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
w_class = WEIGHT_CLASS_TINY
attack_verb = list("shoved", "bashed")
throw_range = 5
force = 3
throwforce = 3
throw_speed = 3
throw_range = 5
w_class = WEIGHT_CLASS_TINY
attack_verb = list("shoved", "bashed")
var/base_icon_state = "eshield" // [base_icon_state]1 for expanded, [base_icon_state]0 for contracted
var/on_force = 10
var/on_throwforce = 8
var/on_throw_speed = 2
var/active = 0
var/clumsy_check = TRUE
/obj/item/shield/energy/Initialize()
. = ..()
icon_state = "[base_icon_state]0"
/obj/item/shield/energy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return 0
@@ -78,23 +86,23 @@
return (active)
/obj/item/shield/energy/attack_self(mob/living/carbon/human/user)
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
if(clumsy_check && user.has_trait(TRAIT_CLUMSY) && prob(50))
to_chat(user, "<span class='warning'>You beat yourself in the head with [src].</span>")
user.take_bodypart_damage(5)
active = !active
icon_state = "eshield[active]"
icon_state = "[base_icon_state][active]"
if(active)
force = 10
throwforce = 8
throw_speed = 2
force = on_force
throwforce = on_throwforce
throw_speed = on_throw_speed
w_class = WEIGHT_CLASS_BULKY
playsound(user, 'sound/weapons/saberon.ogg', 35, 1)
to_chat(user, "<span class='notice'>[src] is now active.</span>")
else
force = 3
throwforce = 3
throw_speed = 3
force = initial(force)
throwforce = initial(throwforce)
throw_speed = initial(throw_speed)
w_class = WEIGHT_CLASS_TINY
playsound(user, 'sound/weapons/saberoff.ogg', 35, 1)
to_chat(user, "<span class='notice'>[src] can now be concealed.</span>")