whole lotta stuff
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
/////GS13 - rayguns for metabolism and breasts/ass manipulation
|
||||
|
||||
//this is pretty wonky code, but ig it works
|
||||
|
||||
/obj/item/gun/energy/laser/alter_ray
|
||||
name = "alter-ray"
|
||||
icon = 'icons/obj/guns/energy.dmi'
|
||||
icon_state = "lasernew"
|
||||
desc = "This weapon is capable of altering one's body capabilities."
|
||||
item_state = null
|
||||
selfcharge = EGUN_SELFCHARGE
|
||||
charge_delay = 5
|
||||
ammo_x_offset = 2
|
||||
clumsy_check = 1
|
||||
|
||||
/obj/item/gun/energy/laser/alter_ray/gainrate
|
||||
name = "AL-T-Ray: Metabolism"
|
||||
desc = "This weapon is capable of altering one's body capabilities. This model appears to be capable of altering one's weight gain and loss rate by 10%."
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/laser/gainrate_decrease, /obj/item/ammo_casing/energy/laser/gainrate_increase, /obj/item/ammo_casing/energy/laser/lossrate_decrease, /obj/item/ammo_casing/energy/laser/lossrate_increase)
|
||||
|
||||
|
||||
// /obj/item/gun/energy/laser/alter_ray/assbreasts //genius name, I know
|
||||
// name = "AL-T-Ray: Voluptousness"
|
||||
// desc = "This weapon is capable of altering one's body capabilities. This model appears to be capable of altering the size's of one's breasts or buttocks."
|
||||
// ammo_type = list(/obj/item/ammo_casing/energy/laser/shrinkray, /obj/item/ammo_casing/energy/laser/growthray)
|
||||
|
||||
|
||||
/obj/item/projectile/alter_ray
|
||||
name = "sizeray beam"
|
||||
icon_state = "omnilaser"
|
||||
hitsound = null
|
||||
damage = 0
|
||||
damage_type = STAMINA
|
||||
flag = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
ricochets_max = 50
|
||||
ricochet_chance = 80
|
||||
is_reflectable = TRUE
|
||||
var/ratechange_amount = 0.1
|
||||
|
||||
|
||||
//projectile biz
|
||||
|
||||
/obj/item/projectile/alter_ray/gainrate_decrease
|
||||
icon_state="bluelaser"
|
||||
|
||||
/obj/item/projectile/alter_ray/gainrate_increase
|
||||
icon_state="laser"
|
||||
|
||||
/obj/item/projectile/alter_ray/lossrate_decrease
|
||||
icon_state="bluelaser"
|
||||
|
||||
/obj/item/projectile/alter_ray/lossrate_increase
|
||||
icon_state="laser"
|
||||
|
||||
// /obj/item/projectile/alter_ray/breast_decrease
|
||||
// icon_state="bluelaser"
|
||||
|
||||
// /obj/item/projectile/alter_ray/breast_increase
|
||||
// icon_state="laser"
|
||||
|
||||
// /obj/item/projectile/alter_ray/butt_decrease
|
||||
// icon_state="bluelaser"
|
||||
|
||||
// /obj/item/projectile/alter_ray/butt_increase
|
||||
// icon_state="laser"
|
||||
|
||||
//laser hitting / changing code
|
||||
|
||||
//wg rate increase
|
||||
/obj/item/projectile/alter_ray/gainrate_increase/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
|
||||
if(iscarbon(gainer))
|
||||
if(gainer.weight_gain_rate <= 3)
|
||||
gainer.weight_gain_rate += ratechange_amount
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
return FALSE
|
||||
|
||||
|
||||
//wg rate decrease
|
||||
/obj/item/projectile/alter_ray/gainrate_decrease/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
|
||||
if(iscarbon(gainer))
|
||||
if(gainer.weight_gain_rate >= 0.11)
|
||||
gainer.weight_gain_rate -= ratechange_amount
|
||||
return TRUE
|
||||
if(gainer.weight_gain_rate <= 0.1)
|
||||
return FALSE
|
||||
|
||||
return FALSE
|
||||
|
||||
//wl rate increase
|
||||
/obj/item/projectile/alter_ray/lossrate_increase/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
|
||||
if(iscarbon(gainer))
|
||||
if(gainer.weight_loss_rate <= 3)
|
||||
gainer.weight_loss_rate += ratechange_amount
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
return FALSE
|
||||
|
||||
//wl rate decrease
|
||||
/obj/item/projectile/alter_ray/lossrate_decrease/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
|
||||
if(iscarbon(gainer))
|
||||
if(gainer.weight_loss_rate >= 0.11)
|
||||
gainer.weight_loss_rate -= ratechange_amount
|
||||
return TRUE
|
||||
if(gainer.weight_loss_rate <= 0.1)
|
||||
return FALSE
|
||||
|
||||
return FALSE
|
||||
|
||||
//ammo casings - these are needed to allow guns to switch between firing modes
|
||||
/obj/item/ammo_casing/energy/laser/gainrate_increase
|
||||
projectile_type = /obj/item/projectile/alter_ray/gainrate_increase
|
||||
select_name = "Weight Gain Increase"
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/gainrate_decrease
|
||||
projectile_type = /obj/item/projectile/alter_ray/gainrate_decrease
|
||||
select_name = "Weight Gain Decrease"
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/lossrate_increase
|
||||
projectile_type = /obj/item/projectile/alter_ray/lossrate_increase
|
||||
select_name = "Weight Loss Increase"
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/lossrate_decrease
|
||||
projectile_type = /obj/item/projectile/alter_ray/lossrate_decrease
|
||||
select_name = "Weight Loss Decrease"
|
||||
|
||||
|
||||
|
||||
//ALTRay for making someone gain from weight loss
|
||||
|
||||
/obj/item/gun/energy/laser/alter_ray/noloss
|
||||
name = "AL-T-Ray: Reverser"
|
||||
desc = "This weapon is capable of altering one's body capabilities. This one reverse's ones body functions, to make it so weight loss results in weight gain."
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/laser/lossrate_reverse)
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/lossrate_reverse
|
||||
projectile_type = /obj/item/projectile/alter_ray/lossrate_reverse
|
||||
select_name = "Weight Loss Reverse"
|
||||
|
||||
/obj/item/projectile/alter_ray/lossrate_reverse
|
||||
ratechange_amount = -2
|
||||
icon_state="laser"
|
||||
|
||||
/obj/item/projectile/alter_ray/lossrate_reverse/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
|
||||
if(iscarbon(gainer))
|
||||
gainer.weight_loss_rate = ratechange_amount
|
||||
return TRUE
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
/obj/item/gun/fatbeam // GS13
|
||||
name = "Fatbeam Gun"
|
||||
desc = "Apparently used to treat malnourished patients from a safe distance... But we all know what it will truly be used for."
|
||||
icon = 'icons/obj/fatbeam.dmi'
|
||||
icon_state = "fatbeam"
|
||||
item_state = "fatbeam"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
var/mob/living/current_target
|
||||
var/last_check = 0
|
||||
var/check_delay = 10 //Check los as often as possible, max resolution is SSobj tick though
|
||||
var/max_range = 8
|
||||
var/active = 0
|
||||
var/datum/beam/current_beam = null
|
||||
var/mounted = 0 //Denotes if this is a handheld or mounted version
|
||||
|
||||
weapon_weight = WEAPON_MEDIUM
|
||||
|
||||
/obj/item/gun/fatbeam/Initialize(mapload)
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/gun/fatbeam/Destroy(mob/user)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
LoseTarget()
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/fatbeam/dropped(mob/user)
|
||||
..()
|
||||
LoseTarget()
|
||||
|
||||
/obj/item/gun/fatbeam/equipped(mob/user)
|
||||
..()
|
||||
LoseTarget()
|
||||
|
||||
/obj/item/gun/fatbeam/proc/LoseTarget()
|
||||
if(active)
|
||||
qdel(current_beam)
|
||||
current_beam = null
|
||||
active = 0
|
||||
on_beam_release(current_target)
|
||||
current_target = null
|
||||
|
||||
/obj/item/gun/fatbeam/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
|
||||
if(isliving(user))
|
||||
add_fingerprint(user)
|
||||
|
||||
if(current_target)
|
||||
LoseTarget()
|
||||
if(!isliving(target))
|
||||
return
|
||||
|
||||
current_target = target
|
||||
active = TRUE
|
||||
current_beam = new(user,current_target,time=6000,beam_icon_state="fatbeam",btype=/obj/effect/ebeam/medical)
|
||||
INVOKE_ASYNC(current_beam, TYPE_PROC_REF(/datum/beam,Start))
|
||||
|
||||
SSblackbox.record_feedback("tally", "gun_fired", 1, type)
|
||||
|
||||
/obj/item/gun/fatbeam/process()
|
||||
|
||||
var/source = loc
|
||||
if(!mounted && !isliving(source))
|
||||
LoseTarget()
|
||||
return
|
||||
|
||||
if(!current_target)
|
||||
LoseTarget()
|
||||
return
|
||||
|
||||
if(world.time <= last_check+check_delay)
|
||||
return
|
||||
|
||||
last_check = world.time
|
||||
|
||||
if(get_dist(source, current_target)>max_range || !los_check(source, current_target))
|
||||
LoseTarget()
|
||||
if(isliving(source))
|
||||
to_chat(source, "<span class='warning'>You lose control of the beam!</span>")
|
||||
return
|
||||
|
||||
if(current_target)
|
||||
on_beam_tick(current_target)
|
||||
|
||||
/obj/item/gun/fatbeam/proc/los_check(atom/movable/user, mob/target)
|
||||
var/turf/user_turf = user.loc
|
||||
if(mounted)
|
||||
user_turf = get_turf(user)
|
||||
else if(!istype(user_turf))
|
||||
return FALSE
|
||||
var/obj/dummy = new(user_turf)
|
||||
dummy.pass_flags |= PASSTABLE|PASSGLASS|PASSGRILLE //Grille/Glass so it can be used through common windows
|
||||
for(var/turf/turf in getline(user_turf,target))
|
||||
if(mounted && turf == user_turf)
|
||||
continue //Mechs are dense and thus fail the check
|
||||
if(turf.density)
|
||||
qdel(dummy)
|
||||
return FALSE
|
||||
for(var/atom/movable/AM in turf)
|
||||
if(!AM.CanPass(dummy,turf,1))
|
||||
qdel(dummy)
|
||||
return FALSE
|
||||
for(var/obj/effect/ebeam/medical/B in turf)// Don't cross the str-beams!
|
||||
if(B.owner.origin != current_beam.origin)
|
||||
explosion(B.loc,0,1,3,4)
|
||||
qdel(dummy)
|
||||
return FALSE
|
||||
qdel(dummy)
|
||||
return TRUE
|
||||
|
||||
/obj/item/gun/fatbeam/proc/on_beam_hit(var/mob/living/target)
|
||||
return
|
||||
|
||||
/obj/item/gun/fatbeam/proc/on_beam_tick(var/mob/living/target)
|
||||
if(target.health != target.maxHealth)
|
||||
new /obj/effect/temp_visual/heal(get_turf(target), "#fabb62")
|
||||
if(target?.client?.prefs?.weight_gain_weapons)
|
||||
target.nutrition += 50
|
||||
return
|
||||
|
||||
/obj/item/gun/fatbeam/proc/on_beam_release(var/mob/living/target)
|
||||
return
|
||||
|
||||
/obj/effect/ebeam/medical
|
||||
name = "fattening beam"
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
/////GS13 - fattening rayguns and ranged weapons
|
||||
|
||||
///The base fatoray
|
||||
/obj/item/gun/energy/fatoray
|
||||
name = "Fatoray"
|
||||
desc = "An energy gun that fattens up anyone it hits."
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
lefthand_file = 'GainStation13/icons/obj/guns_lefthand.dmi'
|
||||
righthand_file = 'GainStation13/icons/obj/guns_righthand.dmi'
|
||||
icon_state = "fatoray"
|
||||
item_state = "fatoray"
|
||||
pin = /obj/item/firing_pin
|
||||
fire_sound = 'sound/weapons/plasma_cutter.ogg'
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/fattening)
|
||||
|
||||
/obj/item/ammo_casing/energy/fattening
|
||||
name = "fattening weapon lens"
|
||||
select_name = "fatten"
|
||||
projectile_type = /obj/item/projectile/beam/fattening
|
||||
|
||||
///The base projectile used by the fatoray
|
||||
/obj/item/projectile/beam/fattening
|
||||
name = "fat energy"
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "ray"
|
||||
ricochets_max = 50
|
||||
ricochet_chance = 80
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||
damage = 0
|
||||
eyeblur = 0
|
||||
damage_type = BURN
|
||||
flag = "energy"
|
||||
light_range = 2
|
||||
light_color = LIGHT_COLOR_ORANGE
|
||||
///How much fat is added to the target mob?
|
||||
var/fat_added = 100
|
||||
|
||||
|
||||
|
||||
////// Fatoray - cannon variant, strong but can be charged
|
||||
|
||||
/obj/item/gun/energy/fatoray/cannon
|
||||
name = "Fatoray Cannon"
|
||||
desc = "An energy gun that fattens up anyone it hits. This version functions as a glass cannon of some sorts. It cannot be recharged."
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "fatoray_cannon"
|
||||
recoil = 3
|
||||
can_charge = 0
|
||||
slowdown = 1
|
||||
pin = /obj/item/firing_pin
|
||||
// charge_sections = 3
|
||||
weapon_weight = WEAPON_HEAVY
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/fattening/cannon)
|
||||
|
||||
|
||||
/obj/item/ammo_casing/energy/fattening/cannon
|
||||
name = "one-shot fattening weapon lens"
|
||||
select_name = "fatten"
|
||||
e_cost = 100
|
||||
projectile_type = /obj/item/projectile/beam/fattening/cannon
|
||||
|
||||
/obj/item/projectile/beam/fattening/cannon
|
||||
name = "fat energy"
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "cannon_ray"
|
||||
///How much fat is added to the target mob?
|
||||
fat_added = 1000
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
////////FATORAYS THAT CAN BE MADE BY LATHES OR RESEARCHED///////////
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
///Weaker version of fatoray
|
||||
/obj/item/gun/energy/fatoray/weak
|
||||
name = "Basic Fatoray"
|
||||
desc = "An energy gun that fattens up anyone it hits. This version is considerably weaker than its original counterpart, the technology behind it seemingly still not perfected."
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "fatoray_weak"
|
||||
pin = /obj/item/firing_pin
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/fattening/weak)
|
||||
|
||||
/obj/item/ammo_casing/energy/fattening/weak
|
||||
name = "budget fattening weapon lens"
|
||||
select_name = "fatten"
|
||||
projectile_type = /obj/item/projectile/beam/fattening/weak
|
||||
|
||||
///The base projectile used by the fatoray
|
||||
/obj/item/projectile/beam/fattening/weak
|
||||
name = "fat energy"
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "ray"
|
||||
///How much fat is added to the target mob?
|
||||
fat_added = 50
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
///Single shot glass cannon fatoray
|
||||
/obj/item/gun/energy/fatoray/cannon_weak
|
||||
name = "Basic Fatoray Cannon"
|
||||
desc = "An energy gun that fattens up anyone it hits. This version functions as a glass cannon of some sorts. It cannot be recharged."
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "fatoray_cannon_weak"
|
||||
can_charge = 0
|
||||
recoil = 3
|
||||
slowdown = 1
|
||||
pin = /obj/item/firing_pin
|
||||
// charge_sections = 3
|
||||
weapon_weight = WEAPON_HEAVY
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/fattening/cannon_weak)
|
||||
|
||||
/obj/item/ammo_casing/energy/fattening/cannon_weak
|
||||
name = "one-shot fattening weapon lens"
|
||||
select_name = "fatten"
|
||||
e_cost = 300
|
||||
projectile_type = /obj/item/projectile/beam/fattening/cannon_weak
|
||||
|
||||
/obj/item/projectile/beam/fattening/cannon_weak
|
||||
name = "fat energy"
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "cannon_ray"
|
||||
///How much fat is added to the target mob?
|
||||
fat_added = 500
|
||||
|
||||
///////////////////////////////////////
|
||||
//////PROJECTILE MECHANICS/////////////
|
||||
///////////////////////////////////////
|
||||
|
||||
|
||||
/obj/item/projectile/beam/fattening/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
if(!iscarbon(gainer))
|
||||
return FALSE
|
||||
|
||||
if(!gainer.adjust_fatness(fat_added, FATTENING_TYPE_WEAPON))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
@@ -0,0 +1,25 @@
|
||||
/obj/item/gun/energy/kinetic_accelerator/crossbow/feeder
|
||||
name = "feeder's mini energy crossbow"
|
||||
desc = "a modified version of the standard mini energy crossbow, designed to fatten up a target while incapacitating them."
|
||||
icon_state = "crossbow_halloween"
|
||||
item_state = "crossbow"
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/bolt/fattening)
|
||||
|
||||
/obj/item/ammo_casing/energy/bolt/fattening
|
||||
projectile_type = /obj/item/projectile/energy/bolt/fattening
|
||||
|
||||
/obj/item/projectile/energy/bolt/fattening
|
||||
damage = 0
|
||||
|
||||
/obj/item/projectile/energy/bolt/fattening/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
/obj/item/projectile/energy/bolt/fattening/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
var/mob/living/carbon/target_mob = target
|
||||
if(!istype(target_mob) || (blocked == 100))
|
||||
return
|
||||
|
||||
target_mob.reagents.add_reagent(/datum/reagent/consumable/lipoifier, 2)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user