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"
|
origin_tech = "materials=1"
|
||||||
var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute
|
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
|
/obj/item/weapon/legcuffs/beartrap
|
||||||
name = "bear trap"
|
name = "bear trap"
|
||||||
throw_speed = 2
|
throw_speed = 2
|
||||||
|
|||||||
@@ -400,4 +400,34 @@
|
|||||||
projectiles--
|
projectiles--
|
||||||
log_message("Launched a mouse-trap from [src.name], targeting [target]. HONK!")
|
log_message("Launched a mouse-trap from [src.name], targeting [target]. HONK!")
|
||||||
do_after_cooldown()
|
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
|
return
|
||||||
@@ -181,10 +181,13 @@
|
|||||||
else
|
else
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
proc/OnDeath() //if assigned, allows for code when the projectile disappears
|
||||||
|
return 1
|
||||||
|
|
||||||
process()
|
process()
|
||||||
if(kill_count < 1)
|
if(kill_count < 1)
|
||||||
//del(src)
|
//del(src)
|
||||||
|
OnDeath()
|
||||||
returnToPool(src)
|
returnToPool(src)
|
||||||
return
|
return
|
||||||
kill_count--
|
kill_count--
|
||||||
@@ -193,6 +196,7 @@
|
|||||||
current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z)
|
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))
|
if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
|
||||||
//del(src)
|
//del(src)
|
||||||
|
OnDeath()
|
||||||
returnToPool(src)
|
returnToPool(src)
|
||||||
return
|
return
|
||||||
step_towards(src, current)
|
step_towards(src, current)
|
||||||
@@ -206,9 +210,11 @@
|
|||||||
proc/dumbfire(var/dir) // for spacepods, go snowflake go
|
proc/dumbfire(var/dir) // for spacepods, go snowflake go
|
||||||
if(!dir)
|
if(!dir)
|
||||||
//del(src)
|
//del(src)
|
||||||
|
OnDeath()
|
||||||
returnToPool(src)
|
returnToPool(src)
|
||||||
if(kill_count < 1)
|
if(kill_count < 1)
|
||||||
//del(src)
|
//del(src)
|
||||||
|
OnDeath()
|
||||||
returnToPool(src)
|
returnToPool(src)
|
||||||
kill_count--
|
kill_count--
|
||||||
spawn while(loc)
|
spawn while(loc)
|
||||||
|
|||||||
@@ -138,6 +138,49 @@
|
|||||||
M.adjustBrainLoss(20)
|
M.adjustBrainLoss(20)
|
||||||
M.hallucination += 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
|
/obj/item/projectile/kinetic
|
||||||
name = "kinetic force"
|
name = "kinetic force"
|
||||||
icon_state = "energy"
|
icon_state = "energy"
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ other types of metals and chemistry for reagents).
|
|||||||
build_type = IMPRINTER
|
build_type = IMPRINTER
|
||||||
materials = list("$glass" = 2000, "sacid" = 20)
|
materials = list("$glass" = 2000, "sacid" = 20)
|
||||||
build_path = /obj/item/weapon/circuitboard/air_management
|
build_path = /obj/item/weapon/circuitboard/air_management
|
||||||
|
|
||||||
/datum/design/large_tank_control
|
/datum/design/large_tank_control
|
||||||
name = "Circuit Design (Atmospheric Tank Control)"
|
name = "Circuit Design (Atmospheric Tank Control)"
|
||||||
desc = "Allows for the construction of circuit boards used to build an 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
|
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
|
||||||
category = "Exosuit Equipment"
|
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
|
/datum/design/mech_laser
|
||||||
name = "Exosuit Weapon Design (CH-PS \"Immolator\" Laser)"
|
name = "Exosuit Weapon Design (CH-PS \"Immolator\" Laser)"
|
||||||
desc = "Allows for the construction of CH-PS 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 |