Bolas in the game
- Throw it at running people to sometimes trip them and legcuff them - Throw it at walking people to not really do anything at all - Can be thrown or fired from a mech - Mech weapon can only be attached to the Gygax - Allows for ranged security and good crowd control - Part 1 of 2 changes to Gygax for better sec(TM)
@@ -177,6 +177,47 @@
|
||||
origin_tech = "materials=1"
|
||||
var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute
|
||||
|
||||
/obj/item/weapon/legcuffs/bolas
|
||||
name = "bolas"
|
||||
desc = "An entangling bolas. Throw at your foes to trip them and prevent them from running."
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "bolas"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 2
|
||||
w_class = 2.0
|
||||
m_amt = 500
|
||||
w_type = RECYK_METAL
|
||||
origin_tech = "materials=1"
|
||||
attack_verb = list("lashed", "bludgeoned", "whipped")
|
||||
force = 10
|
||||
var/dispenser = 0
|
||||
var/throw_sound = 'sound/weapons/whip.ogg'
|
||||
|
||||
suicide_act(mob/living/user)
|
||||
viewers(user) << "\red <b>[user] is wrapping the [src.name] around \his neck! It looks like \he's trying to commit suicide.</b>"
|
||||
return(OXYLOSS)
|
||||
|
||||
/obj/item/weapon/legcuffs/bolas/throw_at(var/atom/A, range, speed) //mostly copied and modified from gun code - Comic
|
||||
var /obj/item/projectile/thrownbolas/T = new /obj/item/projectile/thrownbolas(usr.loc) //creates a bolas projectile (projectile is used for compatibility with mechs)
|
||||
var /turf/targetloc = get_turf(A) //gets the position of the clicked atom
|
||||
T.current = usr.loc //projectile is placed on user
|
||||
T.starting = usr.loc
|
||||
T.original = targetloc
|
||||
T.yo = (targetloc.y - T.starting.y)
|
||||
T.xo = (targetloc.x - T.starting.x)
|
||||
if (ishuman(usr)) // determines if the bolas should spawn an item when it dies (prevents infinite spam from mechsWell)
|
||||
T.shot_from = "hand"
|
||||
else
|
||||
T.shot_from = "mecha"
|
||||
T.process()
|
||||
playsound(src, throw_sound, 20, 1)
|
||||
Destroy() //gets rid of the bolas item in the hand
|
||||
|
||||
// /obj/item/weapon/legcuffs/bolas/cyborg To be implemented
|
||||
// dispenser = 1
|
||||
|
||||
/obj/item/weapon/legcuffs/beartrap
|
||||
name = "bear trap"
|
||||
throw_speed = 2
|
||||
|
||||
@@ -400,4 +400,34 @@
|
||||
projectiles--
|
||||
log_message("Launched a mouse-trap from [src.name], targeting [target]. HONK!")
|
||||
do_after_cooldown()
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas
|
||||
name = "PCMK-6 Bolas Launcher"
|
||||
icon_state = "mecha_bolas"
|
||||
projectile = /obj/item/weapon/legcuffs/bolas
|
||||
fire_sound = 'sound/weapons/whip.ogg'
|
||||
projectiles = 10
|
||||
missile_speed = 5
|
||||
missile_range = 30
|
||||
projectile_energy_cost = 50
|
||||
equip_cooldown = 10
|
||||
construction_time = 300
|
||||
construction_cost = list("iron"=20000)
|
||||
|
||||
can_attach(obj/mecha/combat/gygax/M as obj)
|
||||
if(..())
|
||||
if(istype(M))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
action(target)
|
||||
if(!action_checks(target)) return
|
||||
set_ready_state(0)
|
||||
var/obj/item/weapon/legcuffs/bolas/M = new projectile(chassis.loc)
|
||||
playsound(chassis, fire_sound, 50, 1)
|
||||
M.throw_at(target, missile_range, missile_speed)
|
||||
projectiles--
|
||||
log_message("Fired from [src.name], targeting [target].")
|
||||
do_after_cooldown()
|
||||
return
|
||||
@@ -181,10 +181,13 @@
|
||||
else
|
||||
return 1
|
||||
|
||||
proc/OnDeath() //if assigned, allows for code when the projectile disappears
|
||||
return 1
|
||||
|
||||
process()
|
||||
if(kill_count < 1)
|
||||
//del(src)
|
||||
OnDeath()
|
||||
returnToPool(src)
|
||||
return
|
||||
kill_count--
|
||||
@@ -193,6 +196,7 @@
|
||||
current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z)
|
||||
if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
|
||||
//del(src)
|
||||
OnDeath()
|
||||
returnToPool(src)
|
||||
return
|
||||
step_towards(src, current)
|
||||
@@ -206,9 +210,11 @@
|
||||
proc/dumbfire(var/dir) // for spacepods, go snowflake go
|
||||
if(!dir)
|
||||
//del(src)
|
||||
OnDeath()
|
||||
returnToPool(src)
|
||||
if(kill_count < 1)
|
||||
//del(src)
|
||||
OnDeath()
|
||||
returnToPool(src)
|
||||
kill_count--
|
||||
spawn while(loc)
|
||||
|
||||
@@ -138,6 +138,49 @@
|
||||
M.adjustBrainLoss(20)
|
||||
M.hallucination += 20
|
||||
|
||||
/obj/item/projectile/thrownbolas
|
||||
name ="bolas"
|
||||
icon_state= "bolas_thrown"
|
||||
damage = 3
|
||||
kill_count = 50
|
||||
damage_type = BRUTE
|
||||
flag = "bullet"
|
||||
anchored = 0 //it's an object, can still be affected by singularity
|
||||
|
||||
on_hit(var/atom/target, var/blocked = 0)
|
||||
log_admin("[src] has hit an atom of [target]")
|
||||
if(isliving(target) && current != starting) //if the target is a live creature other than the thrower
|
||||
var/mob/living/M = target
|
||||
if(ishuman(M)) //if they're a human species
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.m_intent == "run") //if they're set to run (though not necessarily running at that moment)
|
||||
if(prob(70)) //this probability is up for change and mostly a placeholder - Comic
|
||||
step(H, H.dir)
|
||||
H << "\blue Your legs have been tangled!"
|
||||
viewers(H) << "\red [H] was tripped by the bolas!"
|
||||
H.Stun(5) //used instead of setting damage in vars to avoid non-human targets being affected
|
||||
H.Weaken(10)
|
||||
H.legcuffed = new /obj/item/weapon/legcuffs/bolas(H) //applies legcuff properties inherited through legcuffs
|
||||
H.update_inv_legcuffed()
|
||||
else if(H.legcuffed) //if the target is already legcuffed (has to be walking)
|
||||
OnDeath()
|
||||
else //walking, but uncuffed, or the running prob(70) failed
|
||||
H << "\blue You stumble over the thrown bolas"
|
||||
step(H, H.dir)
|
||||
H.m_intent = "walk"
|
||||
OnDeath()
|
||||
else
|
||||
M.Stun(2) //minor stun damage to anything not human
|
||||
OnDeath()
|
||||
else
|
||||
OnDeath()
|
||||
|
||||
OnDeath()
|
||||
if(shot_from == "hand") //if it's thrown, we want it to respawn the item. Mechs don't do this to avoid spam and infinite bolas works
|
||||
var /obj/item/weapon/legcuffs/bolas/B = new /obj/item/weapon/legcuffs/bolas
|
||||
B.loc = current
|
||||
Destroy()
|
||||
|
||||
/obj/item/projectile/kinetic
|
||||
name = "kinetic force"
|
||||
icon_state = "energy"
|
||||
|
||||
@@ -228,7 +228,7 @@ other types of metals and chemistry for reagents).
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 2000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/air_management
|
||||
|
||||
|
||||
/datum/design/large_tank_control
|
||||
name = "Circuit Design (Atmospheric Tank Control)"
|
||||
desc = "Allows for the construction of circuit boards used to build an Atmospheric Tank Control."
|
||||
@@ -928,6 +928,15 @@ other types of metals and chemistry for reagents).
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
|
||||
category = "Exosuit Equipment"
|
||||
|
||||
/datum/design/mech_bolas
|
||||
name = "Exosuit Weapon Design (PCMK-6 Bolas Launcher)"
|
||||
desc = "Allows for the construction of PCMK-6 Bolas Launcher."
|
||||
id = "mech_bolas"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("combat" = 3)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas
|
||||
category = "Exosuit Equipment"
|
||||
|
||||
/datum/design/mech_laser
|
||||
name = "Exosuit Weapon Design (CH-PS \"Immolator\" Laser)"
|
||||
desc = "Allows for the construction of CH-PS Laser."
|
||||
|
||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 156 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 155 KiB After Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 35 KiB |