Merge branch 'master' into upstream-merge-5654

This commit is contained in:
Spades
2019-03-01 05:42:07 -05:00
committed by GitHub
736 changed files with 29915 additions and 32830 deletions
@@ -381,8 +381,8 @@
else
icon_state = icon_opened
/obj/structure/closet/attack_generic(var/mob/user, var/damage, var/attack_message = "destroys", var/wallbreaker)
if(damage < 10 || !wallbreaker)
/obj/structure/closet/attack_generic(var/mob/user, var/damage, var/attack_message = "destroys")
if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD)
return
user.do_attack_animation(src)
visible_message("<span class='danger'>[user] [attack_message] the [src]!</span>")
@@ -459,4 +459,4 @@
if(src.loc)
if(istype(src.loc, /obj/structure/closet))
return (loc.return_air_for_internal_lifeform(L))
return return_air()
return return_air()
@@ -90,23 +90,23 @@
/obj/structure/largecrate/animal/corgi
name = "corgi carrier"
starts_with = list(/mob/living/simple_animal/corgi)
starts_with = list(/mob/living/simple_mob/animal/passive/dog/corgi)
/obj/structure/largecrate/animal/cow
name = "cow crate"
starts_with = list(/mob/living/simple_animal/cow)
starts_with = list(/mob/living/simple_mob/animal/passive/cow)
/obj/structure/largecrate/animal/goat
name = "goat crate"
starts_with = list(/mob/living/simple_animal/retaliate/goat)
starts_with = list(/mob/living/simple_mob/animal/goat)
/obj/structure/largecrate/animal/cat
name = "cat carrier"
starts_with = list(/mob/living/simple_animal/cat)
starts_with = list(/mob/living/simple_mob/animal/passive/cat)
/obj/structure/largecrate/animal/cat/bones
starts_with = list(/mob/living/simple_animal/cat/fluff/bones)
starts_with = list(/mob/living/simple_mob/animal/passive/cat/bones)
/obj/structure/largecrate/animal/chick
name = "chicken crate"
starts_with = list(/mob/living/simple_animal/chick = 5)
starts_with = list(/mob/living/simple_mob/animal/passive/chick = 5)
@@ -5,28 +5,27 @@
/obj/structure/largecrate/birds/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.is_crowbar())
new /obj/item/stack/material/wood(src)
new /mob/living/simple_animal/bird(src)
new /mob/living/simple_animal/bird/kea(src)
new /mob/living/simple_animal/bird/eclectus(src)
new /mob/living/simple_animal/bird/greybird(src)
new /mob/living/simple_animal/bird/eclectusf(src)
new /mob/living/simple_animal/bird/blue_caique(src)
new /mob/living/simple_animal/bird/white_caique(src)
new /mob/living/simple_animal/bird/green_budgerigar(src)
new /mob/living/simple_animal/bird/blue_Budgerigar(src)
new /mob/living/simple_animal/bird/bluegreen_Budgerigar(src)
new /mob/living/simple_animal/bird/commonblackbird(src)
new /mob/living/simple_animal/bird/azuretit(src)
new /mob/living/simple_animal/bird/europeanrobin(src)
new /mob/living/simple_animal/bird/goldcrest(src)
new /mob/living/simple_animal/bird/ringneckdove(src)
new /mob/living/simple_animal/bird/cockatiel(src)
new /mob/living/simple_animal/bird/white_cockatiel(src)
new /mob/living/simple_animal/bird/yellowish_cockatiel(src)
new /mob/living/simple_animal/bird/grey_cockatiel(src)
new /mob/living/simple_animal/bird/too(src)
new /mob/living/simple_animal/bird/hooded_too(src)
new /mob/living/simple_animal/bird/pink_too(src)
new /mob/living/simple_mob/animal/passive/bird(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/kea(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/eclectus(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/white_caique(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen(src)
new /mob/living/simple_mob/animal/passive/bird/black_bird(src)
new /mob/living/simple_mob/animal/passive/bird/azure_tit(src)
new /mob/living/simple_mob/animal/passive/bird/european_robin(src)
new /mob/living/simple_mob/animal/passive/bird/goldcrest(src)
new /mob/living/simple_mob/animal/passive/bird/ringneck_dove(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo(src)
new /mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo(src)
var/turf/T = get_turf(src)
for(var/atom/movable/AM in contents)
if(AM.simulated) AM.forceMove(T)
@@ -39,72 +38,72 @@
/obj/structure/largecrate/animal/pred
name = "Predator carrier"
starts_with = list(/mob/living/simple_animal/catgirl)
starts_with = list(/mob/living/simple_mob/vore/catgirl)
/obj/structure/largecrate/animal/pred/initialize() //This is nessesary to get a random one each time.
starts_with = list(pick(/mob/living/simple_animal/retaliate/bee,
/mob/living/simple_animal/catgirl;3,
/mob/living/simple_animal/hostile/frog,
/mob/living/simple_animal/horse,
/mob/living/simple_animal/hostile/panther,
/mob/living/simple_animal/hostile/giant_snake,
/mob/living/simple_animal/hostile/wolf,
/mob/living/simple_animal/hostile/bear;0.5,
/mob/living/simple_animal/hostile/bear/brown;0.5,
/mob/living/simple_animal/hostile/carp,
/mob/living/simple_animal/hostile/mimic,
/mob/living/simple_animal/hostile/rat,
/mob/living/simple_animal/hostile/rat/passive,
/mob/living/simple_animal/otie;0.5))
starts_with = list(pick(/mob/living/simple_mob/vore/bee,
/mob/living/simple_mob/vore/catgirl;3,
/mob/living/simple_mob/vore/frog,
/mob/living/simple_mob/horse,
/mob/living/simple_mob/vore/panther,
/mob/living/simple_mob/vore/giant_snake,
/mob/living/simple_mob/vore/wolf,
/mob/living/simple_mob/animal/space/bear;0.5,
/mob/living/simple_mob/animal/space/carp,
/mob/living/simple_mob/animal/space/mimic,
/mob/living/simple_mob/vore/rat,
/mob/living/simple_mob/vore/rat/passive,
// /mob/living/simple_mob/otie;0.5
))
return ..()
/obj/structure/largecrate/animal/dangerous
name = "Dangerous Predator carrier"
starts_with = list(/mob/living/simple_animal/hostile/alien)
starts_with = list(/mob/living/simple_mob/animal/space/alien)
/obj/structure/largecrate/animal/dangerous/initialize()
starts_with = list(pick(/mob/living/simple_animal/hostile/carp/pike,
/mob/living/simple_animal/hostile/deathclaw,
/mob/living/simple_animal/hostile/dino,
/mob/living/simple_animal/hostile/alien,
/mob/living/simple_animal/hostile/alien/drone,
/mob/living/simple_animal/hostile/alien/sentinel,
/mob/living/simple_animal/hostile/alien/queen,
/mob/living/simple_animal/otie/feral,
/mob/living/simple_animal/otie/red,
/mob/living/simple_animal/hostile/corrupthound))
starts_with = list(pick(/mob/living/simple_mob/animal/space/carp/large,
/mob/living/simple_mob/hostile/deathclaw,
/mob/living/simple_mob/vore/dino,
/mob/living/simple_mob/animal/space/alien,
/mob/living/simple_mob/animal/space/alien/drone,
/mob/living/simple_mob/animal/space/alien/sentinel,
/mob/living/simple_mob/animal/space/alien/queen,
// /mob/living/simple_mob/otie/feral,
// /mob/living/simple_mob/otie/red,
/mob/living/simple_mob/vore/corrupthound))
return ..()
/*
/obj/structure/largecrate/animal/guardbeast
name = "VARMAcorp autoNOMous security solution"
desc = "The VARMAcorp bioengineering division flagship product on trained optimal snowflake guard dogs."
icon = 'icons/obj/storage_vr.dmi'
icon_state = "sotiecrate"
starts_with = list(/mob/living/simple_animal/otie/security)
starts_with = list(/mob/living/simple_mob/otie/security)
/obj/structure/largecrate/animal/guardmutant
name = "VARMAcorp autoNOMous security solution for hostile environments."
desc = "The VARMAcorp bioengineering division flagship product on trained optimal snowflake guard dogs. This one can survive hostile atmosphere."
icon = 'icons/obj/storage_vr.dmi'
icon_state = "sotiecrate"
starts_with = list(/mob/living/simple_animal/otie/security/phoron)
starts_with = list(/mob/living/simple_mob/otie/security/phoron)
/obj/structure/largecrate/animal/otie
name = "VARMAcorp adoptable reject (Dangerous!)"
desc = "A warning on the side says the creature inside was returned to the supplier after injuring or devouring several unlucky members of the previous adoption family. It was given a second chance with the next customer. Godspeed and good luck with your new pet!"
icon = 'icons/obj/storage_vr.dmi'
icon_state = "otiecrate2"
starts_with = list(/mob/living/simple_animal/otie/cotie)
starts_with = list(/mob/living/simple_mob/otie/cotie)
var/taped = 1
/obj/structure/largecrate/animal/otie/phoron
name = "VARMAcorp adaptive beta subject (Experimental)"
desc = "VARMAcorp experimental hostile environment adaptive breeding development kit. WARNING, DO NOT RELEASE IN WILD!"
starts_with = list(/mob/living/simple_animal/otie/cotie/phoron)
starts_with = list(/mob/living/simple_mob/otie/cotie/phoron)
/obj/structure/largecrate/animal/otie/phoron/initialize()
starts_with = list(pick(/mob/living/simple_animal/otie/cotie/phoron;2,
/mob/living/simple_animal/otie/red/friendly;0.5))
starts_with = list(pick(/mob/living/simple_mob/otie/cotie/phoron;2,
/mob/living/simple_mob/otie/red/friendly;0.5))
return ..()
/obj/structure/largecrate/animal/otie/attack_hand(mob/living/carbon/human/M as mob)//I just couldn't decide between the icons lmao
@@ -113,23 +112,24 @@
icon_state = "otiecrate"
taped = 0
..()
*/ //VORESTATION AI REMOVAL, Oties are still fucking broken.
/obj/structure/largecrate/animal/catgirl
name = "Catgirl Crate"
desc = "A sketchy looking crate with airholes that seems to have had most marks and stickers removed. You can almost make out 'genetically-engineered subject' written on it."
starts_with = list(/mob/living/simple_animal/catgirl)
starts_with = list(/mob/living/simple_mob/vore/catgirl)
/obj/structure/largecrate/animal/wolfgirl
name = "Wolfgirl Crate"
desc = "A sketchy looking crate with airholes that shakes and thuds every now and then. Someone seems to be demanding they be let out."
starts_with = list(/mob/living/simple_animal/retaliate/wolfgirl)
starts_with = list(/mob/living/simple_mob/vore/wolfgirl)
/obj/structure/largecrate/animal/fennec
name = "Fennec Crate"
desc = "Bounces around a lot. Looks messily packaged, were they in a hurry?"
starts_with = list(/mob/living/simple_animal/fennec)
starts_with = list(/mob/living/simple_mob/fennec)
/obj/structure/largecrate/animal/fennec/initialize()
starts_with = list(pick(/mob/living/simple_animal/fennec,
/mob/living/simple_animal/retaliate/fennix;0.5))
starts_with = list(pick(/mob/living/simple_mob/fennec,
/mob/living/simple_mob/vore/fennix;0.5))
return ..()
@@ -15,7 +15,7 @@
/obj/structure/ghost_pod/manual/corgi/create_occupant(var/mob/M)
lightning_strike(get_turf(src), cosmetic = TRUE)
density = FALSE
var/mob/living/simple_animal/corgi/R = new(get_turf(src))
var/mob/living/simple_mob/animal/passive/dog/corgi/R = new(get_turf(src))
if(M.mind)
M.mind.transfer_to(R)
to_chat(M, "<span class='notice'>You are a <b>Corgi</b>! Woof!</span>")
@@ -47,4 +47,4 @@
R.ghost_inhabit(M)
visible_message("<span class='warning'>The blade shines brightly for a brief moment as [usr] pulls it out of the stone!</span>")
log_and_message_admins("successfully acquired a cursed sword.")
..()
..()
+2 -2
View File
@@ -83,8 +83,8 @@
health = (displaced_health - round(current_damage / 4))
cover = 25
/obj/structure/girder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker)
if(!damage || !wallbreaker)
/obj/structure/girder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart")
if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD)
return 0
user.do_attack_animation(src)
visible_message("<span class='danger'>[user] [attack_message] the [src]!</span>")
+1 -1
View File
@@ -126,7 +126,7 @@
src.set_dir(turn(src.dir, 90))
return
else
if(istype(usr,/mob/living/simple_animal/mouse))
if(ismouse(usr))
return
if(!usr || !isturf(usr.loc))
return
+44 -1
View File
@@ -574,6 +574,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
icon = 'icons/mecha/mecha.dmi'
icon_state = "engineering_pod-broken"
density = TRUE
anchored = FALSE // In case a dead mecha-mob dies in a bad spot.
chance_uncommon = 20
chance_rare = 10
@@ -615,7 +616,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/structure/loot_pile/mecha/ripley
name = "ripley wreckage"
desc = "The ruins of some unfortunate ripley. Perhaps something is salvageable."
icon_states_to_use = list("ripley-broken", "firefighter-broken", "ripley-broken-old")
icon_state = "ripley-broken"
common_loot = list(
/obj/random/tool,
@@ -649,6 +650,12 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged
)
/obj/structure/loot_pile/mecha/ripley/firefighter
icon_state = "firefighter-broken"
/obj/structure/loot_pile/mecha/ripley/random_sprite
icon_states_to_use = list("ripley-broken", "firefighter-broken", "ripley-broken-old")
//Death-Ripley, same common, but more combat-exosuit-based
/obj/structure/loot_pile/mecha/deathripley
name = "strange ripley wreckage"
@@ -719,6 +726,14 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/mecha_parts/mecha_equipment/shocker
)
/obj/structure/loot_pile/mecha/odysseus/murdysseus
icon_state = "murdysseus-broken"
/obj/structure/loot_pile/mecha/hoverpod
name = "hoverpod wreckage"
desc = "The ruins of some unfortunate hoverpod. Perhaps something is salvageable."
icon_state = "engineering_pod"
/obj/structure/loot_pile/mecha/gygax
name = "gygax wreckage"
desc = "The ruins of some unfortunate gygax. Perhaps something is salvageable."
@@ -759,6 +774,18 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
)
/obj/structure/loot_pile/mecha/gygax/dark
icon_state = "darkgygax-broken"
// Todo: Better loot.
/obj/structure/loot_pile/mecha/gygax/dark/adv
icon_state = "darkgygax_adv-broken"
icon_scale = 1.5
pixel_y = 8
/obj/structure/loot_pile/mecha/gygax/medgax
icon_state = "medgax-broken"
/obj/structure/loot_pile/mecha/durand
name = "durand wreckage"
desc = "The ruins of some unfortunate durand. Perhaps something is salvageable."
@@ -799,6 +826,22 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
)
/obj/structure/loot_pile/mecha/marauder
name = "marauder wreckage"
desc = "The ruins of some unfortunate marauder. Perhaps something is salvagable."
icon_state = "marauder-broken"
// Todo: Better loot.
/obj/structure/loot_pile/mecha/marauder/seraph
name = "seraph wreckage"
desc = "The ruins of some unfortunate seraph. Perhaps something is salvagable."
icon_state = "seraph-broken"
/obj/structure/loot_pile/mecha/marauder/mauler
name = "mauler wreckage"
desc = "The ruins of some unfortunate mauler. Perhaps something is salvagable."
icon_state = "mauler-broken"
/obj/structure/loot_pile/mecha/phazon
name = "phazon wreckage"
desc = "The ruins of some unfortunate phazon. Perhaps something is salvageable."
+1 -1
View File
@@ -321,7 +321,7 @@
set category = "Object"
set src in oview(1)
if(istype(usr,/mob/living/simple_animal/mouse))
if(istype(usr,/mob/living/simple_mob/animal/passive/mouse))
return
else if(!usr || !isturf(usr.loc))
return
+2 -2
View File
@@ -10,8 +10,8 @@
explosion_resistance = 5
var/list/mobs_can_pass = list(
/mob/living/bot,
/mob/living/simple_animal/slime,
/mob/living/simple_animal/mouse,
/mob/living/simple_mob/slime/xenobio,
/mob/living/simple_mob/animal/passive/mouse,
/mob/living/silicon/robot/drone
)
+1 -1
View File
@@ -11,7 +11,7 @@
var/last_spawn
var/spawn_delay = 150
var/randomize_spawning = FALSE
var/creature_types = list(/mob/living/simple_animal/retaliate/diyaab)
var/creature_types = list(/mob/living/simple_mob/animal/sif/diyaab)
var/list/den_mobs
var/den_faction //The faction of any spawned creatures.
var/max_creatures = 3 //Maximum number of living creatures this nest can have at one time.
+1 -1
View File
@@ -206,6 +206,6 @@
/obj/structure/simple_door/cult/TryToSwitchState(atom/user)
if(isliving(user))
var/mob/living/L = user
if(!iscultist(L) && !istype(L, /mob/living/simple_animal/construct))
if(!iscultist(L) && !istype(L, /mob/living/simple_mob/construct))
return
..()
@@ -77,7 +77,7 @@
src.set_dir(turn(src.dir, 90))
return
else
if(istype(usr,/mob/living/simple_animal/mouse))
if(istype(usr,/mob/living/simple_mob/animal/passive/mouse))
return
if(!usr || !isturf(usr.loc))
return
+3 -2
View File
@@ -221,6 +221,7 @@
prob(4);/obj/item/weapon/storage/pill_bottle/happy,
prob(4);/obj/item/weapon/storage/pill_bottle/zoom,
prob(4);/obj/item/weapon/gun/energy/sizegun,
prob(3);/obj/item/weapon/implanter/sizecontrol,
prob(3);/obj/item/weapon/material/butterfly,
prob(3);/obj/item/weapon/material/butterfly/switchblade,
prob(3);/obj/item/clothing/gloves/knuckledusters,
@@ -265,7 +266,7 @@
desc = "A small heap of trash, perfect for mice to nest in."
icon = 'icons/obj/trash_piles.dmi'
icon_state = "randompile"
spawn_types = list(/mob/living/simple_animal/mouse)
spawn_types = list(/mob/living/simple_mob/animal/passive/mouse)
simultaneous_spawns = 1
destructible = 1
spawn_delay = 1 HOUR
@@ -293,4 +294,4 @@
/obj/structure/mob_spawner/mouse_nest/get_death_report(var/mob/living/L)
..()
last_spawn = rand(world.time - spawn_delay, world.time)
last_spawn = rand(world.time - spawn_delay, world.time)
+12 -17
View File
@@ -21,6 +21,7 @@
var/shardtype = /obj/item/weapon/material/shard
var/glasstype = null // Set this in subtypes. Null is assumed strange or otherwise impossible to dismantle, such as for shuttle glass.
var/silicate = 0 // number of units of silicate
var/fulltile = FALSE // Set to true on full-tile variants.
/obj/structure/window/examine(mob/user)
. = ..(user)
@@ -128,16 +129,10 @@
/obj/structure/window/blob_act()
take_damage(50)
//TODO: Make full windows a separate type of window.
//Once a full window, it will always be a full window, so there's no point
//having the same type for both.
/obj/structure/window/proc/is_full_window()
return (dir == SOUTHWEST || dir == SOUTHEAST || dir == NORTHWEST || dir == NORTHEAST)
/obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover) && mover.checkpass(PASSGLASS))
return 1
if(is_full_window())
if(is_fulltile())
return 0 //full tile window, you can't move into it!
if(get_dir(loc, target) & dir)
return !density
@@ -206,7 +201,7 @@
user.setClickCooldown(user.get_attack_speed())
if(!damage)
return
if(damage >= 10)
if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD)
visible_message("<span class='danger'>[user] smashes into [src]!</span>")
if(reinf)
damage = damage / 2
@@ -388,8 +383,6 @@
anchored = 0
state = 0
update_verbs()
if(is_fulltile())
maxhealth *= 2
health = maxhealth
@@ -416,9 +409,7 @@
//checks if this window is full-tile one
/obj/structure/window/proc/is_fulltile()
if(dir & (dir - 1))
return 1
return 0
return fulltile
//This proc is used to update the icons of nearby windows. It should not be confused with update_nearby_tiles(), which is an atmos proc!
/obj/structure/window/proc/update_nearby_icons()
@@ -484,6 +475,10 @@
maxhealth = 12.0
force_threshold = 3
/obj/structure/window/basic/full
maxhealth = 24
fulltile = TRUE
/obj/structure/window/phoronbasic
name = "phoron window"
desc = "A borosilicate alloy window. It seems to be quite strong."
@@ -497,8 +492,8 @@
force_threshold = 5
/obj/structure/window/phoronbasic/full
dir = SOUTHWEST
maxhealth = 80
fulltile = TRUE
/obj/structure/window/phoronreinforced
name = "reinforced borosilicate window"
@@ -514,8 +509,8 @@
force_threshold = 10
/obj/structure/window/phoronreinforced/full
dir = SOUTHWEST
maxhealth = 160
fulltile = TRUE
/obj/structure/window/reinforced
name = "reinforced window"
@@ -530,9 +525,9 @@
force_threshold = 6
/obj/structure/window/reinforced/full
dir = SOUTHWEST
icon_state = "fwindow"
maxhealth = 80
fulltile = TRUE
/obj/structure/window/reinforced/tinted
name = "tinted window"
@@ -567,9 +562,9 @@
var/id
/obj/structure/window/reinforced/polarized/full
dir = SOUTHWEST
icon_state = "fwindow"
maxhealth = 80
fulltile = TRUE
/obj/structure/window/reinforced/polarized/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/device/multitool) && !anchored) // Only allow programming if unanchored!