mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 19:17:50 +01:00
Applies what my mom taught me about conflict resolution
This commit is contained in:
@@ -19,10 +19,17 @@
|
||||
var/obj/item/radio/radio = null // For use with the radio MMI upgrade
|
||||
var/datum/action/generic/configure_mmi_radio/radio_action = null
|
||||
|
||||
// Used for cases when mmi or one of it's children commits suicide.
|
||||
// Needed to fix a rather insane bug when a posibrain/robotic brain commits suicide
|
||||
var/dead_icon = "mmi_dead"
|
||||
|
||||
/obj/item/mmi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
if(istype(O, /obj/item/organ/internal/brain/crystal ))
|
||||
if(istype(O, /obj/item/organ/internal/brain/crystal))
|
||||
to_chat(user, "<span class='warning'> This brain is too malformed to be able to use with the [src].</span>")
|
||||
return
|
||||
if(istype(O, /obj/item/organ/internal/brain/golem))
|
||||
to_chat(user, "<span class='warning'>You can't find a way to plug [O] into [src].</span>")
|
||||
return
|
||||
if(istype(O,/obj/item/organ/internal/brain) && !brainmob) //Time to stick a brain in it --NEO
|
||||
var/obj/item/organ/internal/brain/B = O
|
||||
if(!B.brainmob)
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
if(!.)
|
||||
return FALSE
|
||||
if(!gibbed && container && istype(container, /obj/item/mmi))//If not gibbed but in a container.
|
||||
var/obj/item/mmi/mmi = container
|
||||
visible_message("<span class='danger'>[src]'s MMI flatlines!</span>", "<span class='warning'>You hear something flatline.</span>")
|
||||
container.icon_state = "mmi_dead"
|
||||
mmi.icon_state = mmi.dead_icon
|
||||
|
||||
/mob/living/carbon/brain/gib()
|
||||
// can we muster a parent call here?
|
||||
|
||||
@@ -21,11 +21,16 @@
|
||||
var/mob/living/carbon/human/imprinted_master = null
|
||||
var/ejected_flavor_text = "circuit"
|
||||
|
||||
dead_icon = "boris_blank"
|
||||
|
||||
/obj/item/mmi/robotic_brain/Destroy()
|
||||
imprinted_master = null
|
||||
return ..()
|
||||
|
||||
/obj/item/mmi/robotic_brain/attack_self(mob/user)
|
||||
if(isgolem(user))
|
||||
to_chat(user, "<span class='warning'>Your golem fingers are too large to press the switch on [src].</span>")
|
||||
return
|
||||
if(requires_master && !imprinted_master)
|
||||
to_chat(user, "<span class='notice'>You press your thumb on [src] and imprint your user information.</span>")
|
||||
imprinted_master = user
|
||||
@@ -228,4 +233,5 @@
|
||||
desc = "A cube of shining metal, four inches to a side and covered in shallow grooves."
|
||||
silenced = TRUE
|
||||
requires_master = FALSE
|
||||
ejected_flavor_text = "metal cube"
|
||||
ejected_flavor_text = "metal cube"
|
||||
dead_icon = "posibrain"
|
||||
|
||||
@@ -147,6 +147,7 @@
|
||||
if(reagents.has_reagent("teslium"))
|
||||
shock_damage *= 1.5 //If the mob has teslium in their body, shocks are 50% more damaging!
|
||||
take_overall_damage(0,shock_damage, TRUE, used_weapon = "Electrocution")
|
||||
shock_internal_organs(shock_damage)
|
||||
visible_message(
|
||||
"<span class='danger'>[src] was shocked by \the [source]!</span>", \
|
||||
"<span class='userdanger'>You feel a powerful shock coursing through your body!</span>", \
|
||||
@@ -1116,3 +1117,7 @@ so that different stomachs can handle things in different ways VB*/
|
||||
if(I.flags_inv & HIDEMASK || forced)
|
||||
update_inv_wear_mask()
|
||||
update_inv_head()
|
||||
|
||||
/mob/living/carbon/proc/shock_internal_organs(intensity)
|
||||
for(var/obj/item/organ/O in internal_organs)
|
||||
O.shock_organ(intensity)
|
||||
@@ -37,6 +37,9 @@ var/global/list/empty_playable_ai_cores = list()
|
||||
var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode
|
||||
current_mode.possible_traitors.Remove(src)
|
||||
|
||||
// Ghost the current player and disallow them to return to the body
|
||||
ghostize(FALSE)
|
||||
// Delete the old AI shell
|
||||
qdel(src)
|
||||
|
||||
// TODO: Move away from the insane name-based landmark system
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
var/new_destination // pending new destination (waiting for beacon response)
|
||||
var/destination // destination description tag
|
||||
var/next_destination // the next destination in the patrol route
|
||||
var/robot_arm = /obj/item/robot_parts/r_arm
|
||||
|
||||
var/blockcount = 0 //number of times retried a blocked path
|
||||
var/awaiting_beacon = 0 // count of pticks awaiting a beacon response
|
||||
@@ -1106,3 +1107,6 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
if(I)
|
||||
I.icon = null
|
||||
path.Cut(1, 2)
|
||||
|
||||
/mob/living/simple_animal/bot/proc/drop_part(obj/item/drop_item, dropzone)
|
||||
new drop_item(dropzone)
|
||||
@@ -179,14 +179,10 @@
|
||||
on = 0
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
new /obj/item/reagent_containers/glass/bucket(Tsec)
|
||||
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
|
||||
drop_part(robot_arm, Tsec)
|
||||
do_sparks(3, 1, src)
|
||||
..()
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//Bot Construction
|
||||
var/robot_arm = /obj/item/robot_parts/l_arm
|
||||
|
||||
//Cleanbot assembly
|
||||
/obj/item/bucket_sensor
|
||||
@@ -22,6 +23,7 @@
|
||||
var/turf/T = get_turf(loc)
|
||||
var/mob/living/simple_animal/bot/cleanbot/A = new /mob/living/simple_animal/bot/cleanbot(T)
|
||||
A.name = created_name
|
||||
A.robot_arm = W.type
|
||||
to_chat(user, "<span class='notice'>You add the robot arm to the bucket and sensor assembly. Beep boop!</span>")
|
||||
user.unEquip(src, 1)
|
||||
qdel(src)
|
||||
@@ -268,6 +270,7 @@
|
||||
var/turf/T = get_turf(user.loc)
|
||||
var/mob/living/simple_animal/bot/floorbot/A = new /mob/living/simple_animal/bot/floorbot(T)
|
||||
A.name = created_name
|
||||
A.robot_arm = W.type
|
||||
to_chat(user, "<span class='notice'>You add the robot arm to the odd looking toolbox assembly. Boop beep!</span>")
|
||||
user.unEquip(src, 1)
|
||||
qdel(src)
|
||||
@@ -284,7 +287,10 @@
|
||||
//Medbot Assembly
|
||||
/obj/item/storage/firstaid/attackby(obj/item/I, mob/user, params)
|
||||
if(!istype(I, /obj/item/robot_parts/l_arm) && !istype(I, /obj/item/robot_parts/r_arm))
|
||||
return ..()
|
||||
return ..()
|
||||
else
|
||||
robot_arm = I.type
|
||||
|
||||
|
||||
//Making a medibot!
|
||||
if(contents.len)
|
||||
@@ -292,7 +298,7 @@
|
||||
return
|
||||
|
||||
var/obj/item/firstaid_arm_assembly/A = new /obj/item/firstaid_arm_assembly(loc, med_bot_skin)
|
||||
|
||||
|
||||
A.req_one_access = req_one_access
|
||||
A.syndicate_aligned = syndicate_aligned
|
||||
A.treatment_oxy = treatment_oxy
|
||||
@@ -377,6 +383,7 @@
|
||||
S.treatment_fire = treatment_fire
|
||||
S.treatment_tox = treatment_tox
|
||||
S.treatment_virus = treatment_virus
|
||||
S.robot_arm = robot_arm
|
||||
else
|
||||
new /mob/living/simple_animal/bot/medbot/syndicate(T) //Syndicate medibots are a special case that have so many unique vars on them, it's not worth passing them through construction phases
|
||||
user.unEquip(src, 1)
|
||||
@@ -389,8 +396,8 @@
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "helmet_signaler"
|
||||
item_state = "helmet"
|
||||
var/build_step = 0
|
||||
var/created_name = "Securitron" //To preserve the name if it's a unique securitron I guess
|
||||
var/build_step = 0
|
||||
|
||||
/obj/item/clothing/head/helmet/attackby(obj/item/assembly/signaler/S, mob/user, params)
|
||||
..()
|
||||
@@ -440,6 +447,7 @@
|
||||
to_chat(user, "<span class='notice'>You add the robot arm to [src]!</span>")
|
||||
name = "helmet/signaler/prox sensor/robot arm assembly"
|
||||
overlays += "hs_arm"
|
||||
robot_arm = I.type
|
||||
qdel(I)
|
||||
|
||||
else if((istype(I, /obj/item/melee/baton)) && (build_step >= 3))
|
||||
@@ -450,6 +458,7 @@
|
||||
var/mob/living/simple_animal/bot/secbot/S = new /mob/living/simple_animal/bot/secbot
|
||||
S.forceMove(get_turf(src))
|
||||
S.name = created_name
|
||||
S.robot_arm = robot_arm
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
|
||||
@@ -481,10 +490,74 @@
|
||||
to_chat(user, "<span class='notice'>You remove the robot arm from [src].</span>")
|
||||
build_step--
|
||||
|
||||
//General Griefsky
|
||||
|
||||
else if((istype(I, /obj/item/wrench)) && (build_step == 3))
|
||||
var/obj/item/griefsky_assembly/A = new /obj/item/griefsky_assembly
|
||||
user.put_in_hands(A)
|
||||
to_chat(user, "<span class='notice'>You adjust the arm slots for extra weapons!.</span>")
|
||||
user.unEquip(src, 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/griefsky_assembly
|
||||
name = "\improper Griefsky assembly"
|
||||
desc = "Some sort of bizarre assembly."
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "griefsky_assembly"
|
||||
item_state = "griefsky_assembly"
|
||||
var/build_step = 0
|
||||
var/toy_step = 0
|
||||
|
||||
/obj/item/griefsky_assembly/attackby(obj/item/I, mob/user, params)
|
||||
..()
|
||||
if((istype(I, /obj/item/melee/energy/sword)) && (build_step < 3 ))
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
build_step++
|
||||
to_chat(user, "<span class='notice'>You add an energy sword to [src]!.</span>")
|
||||
qdel(I)
|
||||
|
||||
else if((istype(I, /obj/item/melee/energy/sword)) && (build_step == 3))
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You complete General Griefsky!.</span>")
|
||||
var/mob/living/simple_animal/bot/secbot/griefsky/S = new /mob/living/simple_animal/bot/secbot/griefsky
|
||||
S.forceMove(get_turf(src))
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
|
||||
else if((istype(I, /obj/item/toy/sword)) && (toy_step < 3 ))
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
toy_step++
|
||||
to_chat(user, "<span class='notice'>You add a toy sword to [src]!.</span>")
|
||||
qdel(I)
|
||||
|
||||
else if((istype(I, /obj/item/toy/sword)) && (toy_step == 3))
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You complete Genewul Giftskee!.</span>")
|
||||
var/mob/living/simple_animal/bot/secbot/griefsky/toy/S = new /mob/living/simple_animal/bot/secbot/griefsky/toy
|
||||
S.forceMove(get_turf(src))
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
|
||||
else if(istype(I, /obj/item/screwdriver))
|
||||
if((build_step == 1) || (build_step == 2) || (build_step == 3) || (build_step == 4))
|
||||
new /obj/item/melee/energy/sword(get_turf(src))
|
||||
to_chat(user, "<span class='notice'>You detach the energy sword from [src].</span>")
|
||||
build_step--
|
||||
else if((toy_step == 1) || (toy_step == 2) || (toy_step == 3) || (toy_step == 4))
|
||||
new /obj/item/toy/sword(get_turf(src))
|
||||
to_chat(user, "<span class='notice'>You detach the toy sword from [src].</span>")
|
||||
toy_step--
|
||||
|
||||
//Honkbot Assembly
|
||||
/obj/item/storage/box/clown/attackby(obj/item/W, mob/user, params)
|
||||
if(!istype(W, /obj/item/robot_parts/l_arm) && !istype(W, /obj/item/robot_parts/r_arm))
|
||||
return ..()
|
||||
else
|
||||
robot_arm = W.type
|
||||
|
||||
if(contents.len)
|
||||
to_chat(user, "<span class='warning'>You need to empty [src] out first!</span>")
|
||||
@@ -531,5 +604,6 @@
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You add the trombone to [src]! Heeeenk! </span>")
|
||||
qdel(W)
|
||||
new /mob/living/simple_animal/bot/honkbot(get_turf(loc))
|
||||
var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(T)
|
||||
A.robot_arm = robot_arm
|
||||
qdel(src)
|
||||
@@ -388,14 +388,11 @@
|
||||
on = 0
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
var/obj/item/storage/toolbox/mechanical/N = new /obj/item/storage/toolbox/mechanical(Tsec)
|
||||
N.contents = list()
|
||||
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
drop_part(robot_arm, Tsec)
|
||||
|
||||
while(amount)//Dumps the tiles into the appropriate sized stacks
|
||||
if(amount >= 16)
|
||||
|
||||
@@ -0,0 +1,231 @@
|
||||
/mob/living/simple_animal/bot/secbot/griefsky //This bot is powerful. If you managed to get 4 eswords somehow, you deserve this horror. Emag him for best results.
|
||||
name = "\improper General Griefsky"
|
||||
desc = "Is that a secbot with four eswords in its arms...?"
|
||||
icon_state = "griefsky0"
|
||||
health = 100
|
||||
maxHealth = 100
|
||||
base_icon = "griefsky"
|
||||
window_name = "Automatic Security Unit v3.0"
|
||||
|
||||
var/spin_icon = "griefsky-c" // griefsky and griefsky junior have dif icons
|
||||
var/weapon = /obj/item/melee/energy/sword
|
||||
var/block_chance = 50 //block attacks
|
||||
var/reflect_chance = 80 // chance to reflect projectiles
|
||||
var/dmg = 30 //esword dmg
|
||||
var/block_chance_melee = 50
|
||||
var/block_chance_ranged = 90
|
||||
var/stun_chance = 50
|
||||
var/spam_flag = 0
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/toy //A toy version of general griefsky!
|
||||
name = "Genewul Giftskee"
|
||||
desc = "An adorable looking secbot with four toy swords taped to its arms"
|
||||
spin_icon = "griefskyj-c"
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
radio_channel = "Service" //we dont report sec anymore!
|
||||
dmg = 0
|
||||
block_chance_melee = 1
|
||||
block_chance_ranged = 1
|
||||
stun_chance = 0
|
||||
bot_core_type = /obj/machinery/bot_core/toy
|
||||
weapon = /obj/item/toy/sword
|
||||
|
||||
/obj/machinery/bot_core/toy
|
||||
req_access = list(access_maint_tunnels, access_theatre, access_robotics)
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/proc/spam_flag_false() //used for addtimer to not spam comms
|
||||
spam_flag = 0
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/back_to_idle()
|
||||
..()
|
||||
playsound(loc, 'sound/weapons/saberoff.ogg', 50, 1, -1)
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/emag_act(mob/user)
|
||||
..()
|
||||
light_color = LIGHT_COLOR_PURE_RED //if you see a red one. RUN!!
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/Crossed(atom/movable/AM)
|
||||
..()
|
||||
if(ismob(AM) && AM == target)
|
||||
var/mob/living/carbon/C = AM
|
||||
visible_message("[src] flails his swords and pushes [C] out of it's way!" )
|
||||
C.Weaken(2)
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/New()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/Destroy()
|
||||
QDEL_NULL(weapon)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/UnarmedAttack(atom/A) //like secbots its only possible with admin intervention
|
||||
if(!on)
|
||||
return
|
||||
if(iscarbon(A))
|
||||
var/mob/living/carbon/C = A
|
||||
sword_attack(C)
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/bullet_act(obj/item/projectile/P) //so uncivilized
|
||||
retaliate(P.firer)
|
||||
if((icon_state == spin_icon) && (prob(block_chance_ranged))) //only when the eswords are on
|
||||
visible_message("[src] deflects [P] with its energy swords!")
|
||||
playsound(loc, 'sound/weapons/blade1.ogg', 50, 1, 0)
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/proc/sword_attack(mob/living/carbon/C) // esword attack
|
||||
src.do_attack_animation(C)
|
||||
playsound(loc, 'sound/weapons/blade1.ogg', 50, 1, -1)
|
||||
spawn(2)
|
||||
icon_state = spin_icon
|
||||
var/threat = C.assess_threat(src)
|
||||
if(ishuman(C))
|
||||
C.apply_damage(dmg, BRUTE)
|
||||
if(prob(stun_chance))
|
||||
C.Weaken(5)
|
||||
add_attack_logs(src, C, "sliced")
|
||||
if(declare_arrests)
|
||||
var/area/location = get_area(src)
|
||||
if(!spam_flag)
|
||||
speak("Back away! I will deal with this level [threat] swine <b>[C]</b> in [location] myself!.", radio_channel)
|
||||
spam_flag = 1
|
||||
addtimer(CALLBACK(src, .proc/spam_flag_false), 100) //to avoid spamming comms of sec for each hit
|
||||
visible_message("[src] flails his swords and cuts [C]!")
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/handle_automated_action()
|
||||
if(!on)
|
||||
return
|
||||
|
||||
switch(mode)
|
||||
if(BOT_IDLE) // idle
|
||||
icon_state = "griefsky1"
|
||||
walk_to(src,0)
|
||||
look_for_perp() // see if any criminals are in range
|
||||
if(!mode && auto_patrol) // still idle, and set to patrol
|
||||
mode = BOT_START_PATROL // switch to patrol mode
|
||||
if(BOT_HUNT) // hunting for perp
|
||||
icon_state = spin_icon
|
||||
playsound(loc,'sound/effects/spinsabre.ogg',100,1,-1)
|
||||
if(frustration >= 15) // general beepsky doesn't give up so easily, jedi scum
|
||||
walk_to(src,0)
|
||||
back_to_idle()
|
||||
return
|
||||
if(target) // make sure target exists
|
||||
if(target.stat == !DEAD)
|
||||
if(Adjacent(target) && isturf(target.loc)) // if right next to perp
|
||||
target_lastloc = target.loc
|
||||
sword_attack(target)
|
||||
anchored = TRUE
|
||||
frustration++
|
||||
return
|
||||
else // not next to perp
|
||||
var/turf/olddist = get_dist(src, target)
|
||||
walk_to(src, target,1,3) //he's a fast fucker
|
||||
if((get_dist(src, target)) >= (olddist))
|
||||
frustration++
|
||||
else
|
||||
frustration = 0
|
||||
else
|
||||
back_to_idle()
|
||||
speak("You fool")
|
||||
else
|
||||
back_to_idle()
|
||||
|
||||
if(BOT_START_PATROL)
|
||||
look_for_perp()
|
||||
start_patrol()
|
||||
|
||||
if(BOT_PATROL)
|
||||
icon_state = "griefsky1"
|
||||
look_for_perp()
|
||||
bot_patrol()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/look_for_perp()
|
||||
anchored = 0
|
||||
for (var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal
|
||||
if((C.stat) || (C.handcuffed))
|
||||
continue
|
||||
|
||||
if((C.name == oldtarget_name) && (world.time < last_found + 100))
|
||||
continue
|
||||
|
||||
threatlevel = C.assess_threat(src)
|
||||
|
||||
if(!threatlevel)
|
||||
continue
|
||||
|
||||
else if(threatlevel >= 4)
|
||||
target = C
|
||||
oldtarget_name = C.name
|
||||
speak("You are a bold one")
|
||||
playsound(src,'sound/weapons/saberon.ogg',50,TRUE,-1)
|
||||
visible_message("[src] ignites his energy swords!")
|
||||
icon_state = "griefsky-c"
|
||||
visible_message("<b>[src]</b> points at [C.name]!")
|
||||
mode = BOT_HUNT
|
||||
INVOKE_ASYNC(src, .proc/handle_automated_action)
|
||||
break
|
||||
else
|
||||
continue
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/explode()
|
||||
walk_to(src,0)
|
||||
visible_message("<span class='boldannounce'>[src] lets out a huge cough as it blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/r_arm(Tsec)
|
||||
if(prob(50)) //most of the time weapon will be destroyed
|
||||
new weapon(Tsec)
|
||||
if(prob(25))
|
||||
new weapon(Tsec)
|
||||
if(prob(10))
|
||||
new weapon(Tsec)
|
||||
if(prob(5))
|
||||
new weapon(Tsec)
|
||||
do_sparks(3, 1, src)
|
||||
new /obj/effect/decal/cleanable/blood/oil(loc)
|
||||
..()
|
||||
|
||||
//this section is blocking attack
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/bullet_act(obj/item/projectile/P) //so uncivilized
|
||||
retaliate(P.firer)
|
||||
if((icon_state == spin_icon) && (prob(block_chance_ranged))) //only when the eswords are on
|
||||
visible_message("[src] deflects [P] with its energy swords!")
|
||||
playsound(loc, 'sound/weapons/blade1.ogg', 50, 1, 0)
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/proc/special_retaliate_after_attack(mob/user) //allows special actions to take place after being attacked.
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/special_retaliate_after_attack(mob/user)
|
||||
if(icon_state != spin_icon)
|
||||
return
|
||||
if(prob(block_chance_melee))
|
||||
visible_message("[src] deflects [user]'s attack with his energy swords!")
|
||||
playsound(loc, 'sound/weapons/blade1.ogg', 50, TRUE, -1)
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/attack_hand(mob/living/carbon/human/H)
|
||||
if((H.a_intent == INTENT_HARM) || (H.a_intent == INTENT_DISARM))
|
||||
retaliate(H)
|
||||
if(special_retaliate_after_attack(H))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/attackby(obj/item/W, mob/user, params) //cant touch or attack him while spinning
|
||||
if(src.icon_state == spin_icon)
|
||||
if(prob(block_chance_melee))
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
visible_message("[src] deflects [user]'s move with his energy swords!")
|
||||
playsound(loc, 'sound/weapons/blade1.ogg', 50, TRUE, -1)
|
||||
else
|
||||
return ..()
|
||||
else
|
||||
return ..()
|
||||
@@ -278,16 +278,15 @@
|
||||
else
|
||||
continue
|
||||
|
||||
/mob/living/simple_animal/bot/honkbot/explode()
|
||||
/mob/living/simple_animal/bot/honkbot/explode() //doesn't drop cardboard nor its assembly, since its a very frail material.
|
||||
walk_to(src, 0)
|
||||
visible_message("<span class='boldannounce'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
//doesn't drop cardboard nor its assembly, since its a very frail material.
|
||||
new /obj/item/bikehorn(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/r_arm(Tsec)
|
||||
new /obj/item/bikehorn(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
|
||||
drop_part(robot_arm, Tsec)
|
||||
new /obj/effect/decal/cleanable/blood/oil(loc)
|
||||
var/datum/effect_system/spark_spread/s = new
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
|
||||
@@ -591,7 +591,7 @@
|
||||
new /obj/item/healthanalyzer(Tsec)
|
||||
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
drop_part(robot_arm, Tsec)
|
||||
|
||||
if(reagent_glass)
|
||||
reagent_glass.forceMove(Tsec)
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
dat += hack(user)
|
||||
dat += showpai(user)
|
||||
dat += text({"
|
||||
<TT><B>Securitron v1.6 controls</B></TT><BR><BR>
|
||||
<TT><B>[window_name]</B></TT><BR><BR>
|
||||
Status: []<BR>
|
||||
Behaviour controls are [locked ? "locked" : "unlocked"]<BR>
|
||||
Maintenance panel panel is [open ? "opened" : "closed"]"},
|
||||
@@ -231,9 +231,10 @@ Auto Patrol: []"},
|
||||
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
|
||||
C.visible_message("<span class='danger'>[src] is trying to put zipties on [C]!</span>",\
|
||||
"<span class='userdanger'>[src] is trying to put zipties on you!</span>")
|
||||
spawn(60)
|
||||
if( !Adjacent(C) || !isturf(C.loc) ) //if he's in a closet or not adjacent, we cancel cuffing.
|
||||
return
|
||||
INVOKE_ASYNC(src, .proc/cuff_callback, C)
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/proc/cuff_callback(mob/living/carbon/C)
|
||||
if(do_after(src, 60, target = C))
|
||||
if(!C.handcuffed)
|
||||
C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C)
|
||||
C.update_handcuffed()
|
||||
@@ -417,23 +418,18 @@ Auto Patrol: []"},
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/explode()
|
||||
|
||||
walk_to(src,0)
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
var/obj/item/secbot_assembly/Sa = new /obj/item/secbot_assembly(Tsec)
|
||||
Sa.build_step = 1
|
||||
Sa.overlays += "hs_hole"
|
||||
Sa.created_name = name
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/melee/baton(Tsec)
|
||||
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
|
||||
drop_part(robot_arm, Tsec)
|
||||
do_sparks(3, 1, src)
|
||||
|
||||
new /obj/effect/decal/cleanable/blood/oil(loc)
|
||||
..()
|
||||
|
||||
|
||||
@@ -161,6 +161,7 @@
|
||||
//The objects that corgis can wear on their backs.
|
||||
var/list/allowed_types = list(
|
||||
/obj/item/clothing/suit/armor/vest,
|
||||
/obj/item/clothing/suit/armor/vest/blueshield,
|
||||
/obj/item/clothing/suit/space/deathsquad,
|
||||
/obj/item/clothing/suit/space/hardsuit/engineering,
|
||||
/obj/item/radio,
|
||||
@@ -365,6 +366,12 @@
|
||||
name = "Definitely Not [real_name]"
|
||||
desc = "That's Definitely Not [real_name]"
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/beret/centcom/officer, /obj/item/clothing/head/beret/centcom/officer/navy)
|
||||
name = "Blueshield [real_name]"
|
||||
desc = "Will stand by you until the bitter end."
|
||||
emote_see = list("stands with pride.", "growls heroically.")
|
||||
valid = 1
|
||||
|
||||
if(valid)
|
||||
if(user && !user.drop_item())
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// Terror Spider, Black, Deadly Venom
|
||||
|
||||
/datum/reagent/terror_black_toxin
|
||||
name = "Black Widow venom"
|
||||
name = "Black Terror venom"
|
||||
id = "terror_black_toxin"
|
||||
description = "An incredibly toxic venom injected by the Black Widow spider."
|
||||
color = "#CF3600"
|
||||
|
||||
@@ -38,7 +38,10 @@
|
||||
evolvequeen_action.Grant(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/princess/proc/evolve_to_queen()
|
||||
change_mob_type(/mob/living/simple_animal/hostile/poison/terror_spider/queen, null, null, 1, 1)
|
||||
var/mob/living/simple_animal/hostile/poison/terror_spider/queen/Q = new /mob/living/simple_animal/hostile/poison/terror_spider/queen(loc)
|
||||
if(mind)
|
||||
mind.transfer_to(Q)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/princess/DoWrap()
|
||||
. = ..()
|
||||
|
||||
Reference in New Issue
Block a user