Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into upstream-merge-27697

This commit is contained in:
LetterJay
2017-05-29 02:12:41 -05:00
63 changed files with 392 additions and 588 deletions
@@ -8,185 +8,81 @@
},
/obj/structure/alien/resin/wall,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"c" = (
/obj/structure/alien/weeds{
icon_state = "weeds2"
},
/obj/structure/alien/resin/wall,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"d" = (
/obj/structure/alien/resin/wall,
/obj/structure/alien/weeds{
icon_state = "weeds2"
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"e" = (
/obj/structure/alien/weeds{
icon_state = "weeds1"
},
/obj/structure/alien/egg/burst,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"f" = (
/obj/structure/alien/weeds,
/obj/structure/alien/weeds{
icon_state = "weeds2"
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"g" = (
/obj/structure/alien/weeds,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"h" = (
/obj/structure/alien/weeds,
/obj/structure/alien/resin/wall,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"i" = (
/obj/structure/alien/weeds,
/obj/structure/bed/nest,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"j" = (
/obj/structure/alien/weeds{
icon_state = "weeds2"
},
/mob/living/simple_animal/hostile/alien,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"k" = (
/obj/structure/alien/weeds{
icon_state = "weeds2"
},
/obj/structure/alien/egg/burst,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"l" = (
/obj/structure/alien/weeds/node,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"m" = (
/obj/structure/alien/weeds{
icon_state = "weeds1"
},
/obj/structure/bed/nest,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"n" = (
/obj/structure/alien/weeds{
icon_state = "weeds2"
},
/obj/structure/bed/nest,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"o" = (
/obj/structure/alien/weeds,
/obj/structure/bed/nest,
@@ -198,43 +94,19 @@
},
/obj/item/weapon/gun/ballistic/automatic/pistol,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"p" = (
/obj/structure/alien/weeds{
icon_state = "weeds1"
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"q" = (
/obj/structure/alien/weeds{
icon_state = "weeds2"
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"r" = (
/obj/structure/alien/weeds{
icon_state = "weeds1"
@@ -242,112 +114,48 @@
/obj/structure/alien/resin/wall,
/obj/structure/alien/resin/wall,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"s" = (
/obj/structure/alien/weeds{
icon_state = "weeds2"
},
/obj/structure/alien/egg,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"t" = (
/obj/structure/alien/weeds{
icon_state = "weeds2"
},
/mob/living/simple_animal/hostile/alien/sentinel,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"u" = (
/obj/structure/alien/weeds{
icon_state = "weeds1"
},
/obj/effect/decal/cleanable/blood/gibs,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"v" = (
/obj/structure/alien/weeds/node,
/obj/effect/decal/cleanable/blood,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"w" = (
/obj/structure/alien/weeds,
/obj/effect/decal/cleanable/blood/gibs,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"x" = (
/obj/structure/alien/weeds,
/obj/structure/alien/egg/burst,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"y" = (
/obj/structure/alien/weeds/node,
/obj/structure/alien/resin/wall,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"z" = (
/obj/structure/alien/weeds{
icon_state = "weeds1"
@@ -364,28 +172,12 @@
/obj/item/weapon/melee/baton/loaded,
/obj/item/clothing/head/helmet,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"A" = (
/obj/structure/alien/weeds,
/obj/structure/alien/egg,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"B" = (
/obj/structure/alien/weeds{
icon_state = "weeds1"
@@ -393,59 +185,27 @@
/obj/structure/alien/egg/burst,
/obj/effect/decal/cleanable/blood/gibs,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"C" = (
/obj/structure/alien/weeds,
/obj/structure/alien/egg/burst,
/obj/effect/decal/cleanable/blood,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"D" = (
/obj/structure/alien/weeds{
icon_state = "weeds2"
},
/obj/effect/decal/cleanable/blood/gibs,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"E" = (
/obj/structure/alien/weeds,
/mob/living/simple_animal/hostile/alien/drone{
plants_off = 1
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"F" = (
/obj/structure/alien/weeds,
/mob/living/simple_animal/hostile/alien/queen/large{
@@ -455,15 +215,7 @@
plants_off = 1
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"G" = (
/obj/structure/alien/weeds{
icon_state = "weeds1"
@@ -472,28 +224,12 @@
plants_off = 1
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"H" = (
/obj/structure/alien/weeds,
/obj/effect/decal/cleanable/blood,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"I" = (
/obj/structure/alien/weeds,
/obj/structure/bed/nest,
@@ -507,56 +243,24 @@
/obj/item/clothing/under/syndicate,
/obj/item/clothing/glasses/night,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"J" = (
/obj/structure/alien/weeds,
/mob/living/simple_animal/hostile/alien/sentinel,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"K" = (
/obj/structure/alien/weeds/node,
/mob/living/simple_animal/hostile/alien,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"L" = (
/obj/structure/alien/weeds/node,
/mob/living/simple_animal/hostile/alien/drone{
plants_off = 1
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"M" = (
/obj/structure/alien/weeds{
icon_state = "weeds1"
@@ -573,15 +277,7 @@
stat = 2
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"N" = (
/obj/structure/alien/weeds,
/obj/structure/alien/resin/wall,
@@ -590,15 +286,7 @@
"O" = (
/obj/structure/alien/weeds/node,
/turf/template_noop,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"P" = (
/obj/structure/alien/weeds{
icon_state = "weeds2"
@@ -615,41 +303,17 @@
plants_off = 1
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"R" = (
/obj/structure/alien/weeds,
/turf/template_noop,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"S" = (
/obj/structure/alien/weeds{
icon_state = "weeds2"
},
/turf/template_noop,
/area/awaycontent/a5{
always_unpowered = 1;
has_gravity = 1;
name = "The Hive";
power_environ = 0;
power_equip = 0;
power_light = 0;
poweralm = 0
})
/area/ruin/xenonest)
"T" = (
/obj/structure/alien/weeds/node,
/obj/structure/alien/resin/wall,
+1
View File
@@ -23,6 +23,7 @@
#define WACKY "Wacky"
#define MUT_MUTE "Mute"
#define SMILE "Smile"
#define STONER "Stoner"
#define UNINTELLIGABLE "Unintelligable"
#define SWEDISH "Swedish"
#define CHAV "Chav"
+5
View File
@@ -124,3 +124,8 @@
#define MAX_CHICKENS 50
#define UNHEALING_EAR_DAMAGE 100
#define INCORPOREAL_MOVE_BASIC 1
#define INCORPOREAL_MOVE_SHADOW 2 // leaves a trail of shadows
#define INCORPOREAL_MOVE_JAUNT 3 // is blocked by holy water/salt
+2 -1
View File
@@ -177,7 +177,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
to_chat(world, "<span class='boldannounce'>[msg]</span>")
log_world(msg)
SetRunLevel(1)
if (!current_runlevel)
SetRunLevel(1)
// Sort subsystems by display setting for easy access.
sortTim(subsystems, /proc/cmp_subsystem_display)
+2 -2
View File
@@ -164,8 +164,8 @@ SUBSYSTEM_DEF(garbage)
if (time > highest_del_time)
highest_del_time = time
if (time > 10)
log_game("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete)")
message_admins("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete).")
log_game("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete)")
message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete).")
postpone(time/5)
/datum/controller/subsystem/garbage/proc/HardQueue(datum/A)
+11 -2
View File
@@ -744,6 +744,15 @@ SUBSYSTEM_DEF(ticker)
cinematic = SSticker.cinematic
maprotatechecked = SSticker.maprotatechecked
switch (current_state)
if(GAME_STATE_SETTING_UP)
Master.SetRunLevel(RUNLEVEL_SETUP)
if(GAME_STATE_PLAYING)
Master.SetRunLevel(RUNLEVEL_GAME)
if(GAME_STATE_FINISHED)
Master.SetRunLevel(RUNLEVEL_POSTGAME)
modevoted = SSticker.modevoted
/datum/controller/subsystem/ticker/proc/send_news_report()
@@ -844,7 +853,7 @@ SUBSYSTEM_DEF(ticker)
if(delay_end)
to_chat(world, "<span class='boldannounce'>An admin has delayed the round end.</span>")
return
to_chat(world, "<span class='boldannounce'>Rebooting World in [delay/10] [(delay >= 10 && delay < 20) ? "second" : "seconds"]. [reason]</span>")
var/start_wait = world.time
@@ -854,7 +863,7 @@ SUBSYSTEM_DEF(ticker)
if(delay_end)
to_chat(world, "<span class='boldannounce'>Reboot was cancelled by an admin.</span>")
return
SSblackbox.set_details("[feedback_c]","[feedback_r]")
log_game("<span class='boldannounce'>Rebooting World. [reason]</span>")
+2 -2
View File
@@ -11,8 +11,8 @@
var/minetype = "lavaland"
var/list/transition_config = list(MAIN_STATION = CROSSLINKED,
CENTCOMM = SELFLOOPING,
var/list/transition_config = list(CENTCOMM = SELFLOOPING,
MAIN_STATION = CROSSLINKED,
EMPTY_AREA_1 = CROSSLINKED,
EMPTY_AREA_2 = CROSSLINKED,
MINING = SELFLOOPING,
+17
View File
@@ -608,6 +608,23 @@ GLOBAL_LIST_EMPTY(mutations_list)
message = replacetext(message," muh valids "," getting my kicks ")
return trim(message)
/datum/mutation/human/stoner
name = "Stoner"
quality = NEGATIVE
dna_block = NON_SCANNABLE
text_gain_indication = "<span class='notice'>You feel...totally chill, man!</span>"
text_lose_indication = "<span class='notice'>You feel like you have a better sense of time.</span>"
/datum/mutation/human/stoner/on_acquiring(mob/living/carbon/human/owner)
..()
owner.grant_language(/datum/language/beachbum)
owner.remove_language(/datum/language/common)
/datum/mutation/human/stoner/on_losing(mob/living/carbon/human/owner)
..()
owner.grant_language(/datum/language/common)
owner.remove_language(/datum/language/beachbum)
/datum/mutation/human/laser_eyes
name = "Laser Eyes"
quality = POSITIVE
+59 -116
View File
@@ -1,6 +1,4 @@
/datum/riding
var/generic_pixel_x = 0 //All dirs show this pixel_x for the driver
var/generic_pixel_y = 0 //All dirs show this pixel_y for the driver, use these vars if the pixel shift is stable across all dir, override handle_vehicle_offsets otherwise.
var/next_vehicle_move = 0 //used for move delays
var/vehicle_move_delay = 2 //tick delay between movements, lower = faster, higher = slower
var/keytype = null
@@ -34,16 +32,29 @@
/datum/riding/proc/force_dismount(mob/living/M)
ridden.unbuckle_mob(M)
//Override this to set your vehicle's various pixel offsets
//if they differ between directions, otherwise use the
//generic variables
/datum/riding/proc/handle_vehicle_offsets()
var/ridden_dir = "[ridden.dir]"
var/passindex = 0
if(ridden.has_buckled_mobs())
for(var/m in ridden.buckled_mobs)
passindex++
var/mob/living/buckled_mob = m
buckled_mob.setDir(ridden.dir)
buckled_mob.pixel_x = generic_pixel_x
buckled_mob.pixel_y = generic_pixel_y
var/list/offsets = get_offsets(passindex)
dir_loop:
for(var/offsetdir in offsets)
if(offsetdir == ridden_dir)
var/list/diroffsets = offsets[offsetdir]
buckled_mob.pixel_x = diroffsets[1]
if(diroffsets.len == 2)
buckled_mob.pixel_y = diroffsets[2]
if(diroffsets.len == 3)
buckled_mob.layer = diroffsets[3]
break dir_loop
//Override this to set your vehicle's various pixel offsets
/datum/riding/proc/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(0, 0), "[SOUTH]" = list(0, 0), "[EAST]" = list(0, 0), "[WEST]" = list(0, 0))
//KEYS
/datum/riding/proc/keycheck(mob/user)
@@ -100,10 +111,12 @@
//atv
/datum/riding/atv
keytype = /obj/item/key
generic_pixel_x = 0
generic_pixel_y = 4
vehicle_move_delay = 1
/datum/riding/atv/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(0, 4), "[EAST]" = list(0, 4), "[WEST]" = list( 0, 4))
/datum/riding/atv/handle_vehicle_layer()
if(ridden.dir == SOUTH)
ridden.layer = ABOVE_MOB_LAYER
@@ -150,24 +163,9 @@
keytype = /obj/item/key/janitor
/datum/riding/janicart/handle_vehicle_offsets()
..()
if(ridden.has_buckled_mobs())
for(var/m in ridden.buckled_mobs)
var/mob/living/buckled_mob = m
switch(buckled_mob.dir)
if(NORTH)
buckled_mob.pixel_x = 0
buckled_mob.pixel_y = 4
if(EAST)
buckled_mob.pixel_x = -12
buckled_mob.pixel_y = 7
if(SOUTH)
buckled_mob.pixel_x = 0
buckled_mob.pixel_y = 7
if(WEST)
buckled_mob.pixel_x = 12
buckled_mob.pixel_y = 7
/datum/riding/janicart/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(-12, 7), "[EAST]" = list(0, 7), "[WEST]" = list( 12, 7))
//scooter
/datum/riding/scooter/handle_vehicle_layer()
if(ridden.dir == SOUTH)
@@ -175,20 +173,14 @@
else
ridden.layer = OBJ_LAYER
/datum/riding/scooter/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(0), "[SOUTH]" = list(-2), "[EAST]" = list(0), "[WEST]" = list( 2))
/datum/riding/scooter/handle_vehicle_offsets()
..()
if(ridden.has_buckled_mobs())
for(var/m in ridden.buckled_mobs)
var/mob/living/buckled_mob = m
switch(buckled_mob.dir)
if(NORTH)
buckled_mob.pixel_x = 0
if(EAST)
buckled_mob.pixel_x = -2
if(SOUTH)
buckled_mob.pixel_x = 0
if(WEST)
buckled_mob.pixel_x = 2
if(buckled_mob.get_num_legs() > 0)
buckled_mob.pixel_y = 5
else
@@ -209,16 +201,18 @@
//secway
/datum/riding/secway
keytype = /obj/item/key/security
generic_pixel_x = 0
generic_pixel_y = 4
/datum/riding/secway/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(0, 4), "[EAST]" = list(0, 4), "[WEST]" = list( 0, 4))
//i want to ride my
/datum/riding/bicycle
keytype = null
generic_pixel_x = 0
generic_pixel_y = 4
vehicle_move_delay = 0
/datum/riding/bicycle/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(0, 4), "[EAST]" = list(0, 4), "[WEST]" = list( 0, 4))
//speedbike
/datum/riding/space/speedbike
keytype = null
@@ -233,54 +227,28 @@
ridden.pixel_x = -18
ridden.pixel_y = 0
/datum/riding/space/speedbike/handle_vehicle_offsets()
if(ridden.has_buckled_mobs())
for(var/m in ridden.buckled_mobs)
var/mob/living/buckled_mob = m
buckled_mob.setDir(ridden.dir)
switch(ridden.dir)
if(NORTH)
buckled_mob.pixel_x = 0
buckled_mob.pixel_y = -8
if(SOUTH)
buckled_mob.pixel_x = 0
buckled_mob.pixel_y = 4
if(EAST)
buckled_mob.pixel_x = -10
buckled_mob.pixel_y = 5
if(WEST)
buckled_mob.pixel_x = 10
buckled_mob.pixel_y = 5
/datum/riding/space/speedbike/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(0, -8), "[SOUTH]" = list(0, 4), "[EAST]" = list(-10, 5), "[WEST]" = list( 10, 5))
//SPEEDUWAGON
/datum/riding/space/speedwagon
vehicle_move_delay = 0
/datum/riding/space/speedwagon/handle_vehicle_offsets()
if(ridden.has_buckled_mobs())
for(var/m in ridden.buckled_mobs)
var/mob/living/buckled_mob = m
buckled_mob.setDir(ridden.dir)
ridden.pixel_x = -48
ridden.pixel_y = -48
switch(ridden.dir)
if(NORTH)
buckled_mob.pixel_x = -10
buckled_mob.pixel_y = -3
if(SOUTH)
buckled_mob.pixel_x = 16
buckled_mob.pixel_y = 3
if(EAST)
buckled_mob.pixel_x = -4
buckled_mob.pixel_y = 30
if(WEST)
buckled_mob.pixel_x = 4
buckled_mob.pixel_y = -1
/datum/riding/space/speedwagon/handle_vehicle_layer()
ridden.layer = BELOW_MOB_LAYER
/datum/riding/space/speedwagon/get_offsets(pass_index) // list(dir = x, y, layer)
switch(pass_index)
if(1)
return list("[NORTH]" = list(-10, -4), "[SOUTH]" = list(16, 3), "[EAST]" = list(-4, 30), "[WEST]" = list(4, -3))
if(2)
return list("[NORTH]" = list(19, -5, 4), "[SOUTH]" = list(-13, 3, 4), "[EAST]" = list(-4, -3, 4.1), "[WEST]" = list(4, 28, 3.9))
if(3)
return list("[NORTH]" = list(-10, -18, 4.2), "[SOUTH]" = list(16, 25, 3.9), "[EAST]" = list(-22, 30), "[WEST]" = list(22, -3, 4.1))
if(4)
return list("[NORTH]" = list(19, -18, 4.2), "[SOUTH]" = list(-13, 25, 3.9), "[EAST]" = list(-22, 3, 3.9), "[WEST]" = list(22, 28))
///////////////BOATS////////////
/datum/riding/boat
keytype = /obj/item/weapon/oar
@@ -297,17 +265,15 @@
/datum/riding/boat/dragon
keytype = null
generic_pixel_y = 2
generic_pixel_x = 1
vehicle_move_delay = 1
/datum/riding/boat/dragon/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(1, 2), "[SOUTH]" = list(1, 2), "[EAST]" = list(1, 2), "[WEST]" = list( 1, 2))
///////////////ANIMALS////////////
//general animals
/datum/riding/animal
keytype = null
generic_pixel_x = 0
generic_pixel_y = 4
/datum/riding/animal/handle_ride(mob/user, direction)
if(user.incapacitated())
@@ -335,7 +301,7 @@
/datum/riding/human/ride_check(mob/living/M)
var/mob/living/carbon/human/H = ridden //IF this runtimes I'm blaming the admins.
if(M.incapacitated(FALSE, TRUE) || H.incapacitated(FALSE, TRUE))
M.visible_message("<span class='warning'>[M] falls off [ridden]!</span>")
M.visible_message("<span class='boldwarning'>[M] falls off of [ridden]!</span>")
Unbuckle(M)
return FALSE
if(M.restrained(TRUE))
@@ -345,22 +311,8 @@
if(H.pulling == M)
H.stop_pulling()
/datum/riding/human/handle_vehicle_offsets()
for(var/mob/living/M in ridden.buckled_mobs)
M.setDir(ridden.dir)
switch(ridden.dir)
if(NORTH)
M.pixel_x = 0
M.pixel_y = 6
if(SOUTH)
M.pixel_x = 0
M.pixel_y = 6
if(EAST)
M.pixel_x = -6
M.pixel_y = 4
if(WEST)
M.pixel_x = 6
M.pixel_y = 4
/datum/riding/human/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(0, 6), "[SOUTH]" = list(0, 6), "[EAST]" = list(-6, 4), "[WEST]" = list( 6, 4))
/datum/riding/human/handle_vehicle_layer()
if(ridden.buckled_mobs && ridden.buckled_mobs.len)
@@ -375,7 +327,7 @@
ridden.unbuckle_mob(user)
user.Weaken(3)
user.Stun(3)
user.visible_message("<span class='warning'>[ridden] pushes [user] off of them!</span>")
user.visible_message("<span class='boldwarning'>[ridden] pushes [user] off of them!</span>")
/datum/riding/cyborg
keytype = null
@@ -407,6 +359,9 @@
else
ridden.layer = MOB_LAYER
/datum/riding/cyborg/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(0, 4), "[EAST]" = list(-6, 3), "[WEST]" = list( 6, 3))
/datum/riding/cyborg/handle_vehicle_offsets()
if(ridden.has_buckled_mobs())
for(var/mob/living/M in ridden.buckled_mobs)
@@ -417,26 +372,14 @@
M.pixel_x = R.module.ride_offset_x[dir2text(ridden.dir)]
M.pixel_y = R.module.ride_offset_y[dir2text(ridden.dir)]
else
switch(ridden.dir)
if(NORTH)
M.pixel_x = 0
M.pixel_y = 4
if(SOUTH)
M.pixel_x = 0
M.pixel_y = 4
if(EAST)
M.pixel_x = -6
M.pixel_y = 3
if(WEST)
M.pixel_x = 6
M.pixel_y = 3
..()
/datum/riding/cyborg/force_dismount(mob/living/M)
ridden.unbuckle_mob(M)
var/turf/target = get_edge_target_turf(ridden, ridden.dir)
var/turf/targetm = get_step(get_turf(ridden), ridden.dir)
M.Move(targetm)
M.visible_message("<span class='warning'>[M] is thrown clear of [ridden]!</span>")
M.visible_message("<span class='boldwarning'>[M] is thrown clear of [ridden]!</span>")
M.throw_at(target, 14, 5, ridden)
M.Weaken(3)
+13
View File
@@ -5,6 +5,7 @@
icon_state = "away"
has_gravity = 1
hidden = TRUE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/area/ruin/unpowered
@@ -199,3 +200,15 @@
/area/ruin/abandonedzoo
name = "Abandoned Zoo"
icon_state = "green"
//Xeno Nest
/area/ruin/xenonest
name = "The Hive"
always_unpowered = 1
power_environ = 0
power_equip = 0
power_light = 0
poweralm = 0
-2
View File
@@ -53,7 +53,6 @@
/datum/gang_item/weapon/ammo/uzi_ammo,
/datum/gang_item/equipment/sharpener,
/datum/gang_item/equipment/spraycan,
/datum/gang_item/equipment/sharpener,
/datum/gang_item/equipment/emp,
/datum/gang_item/equipment/c4,
/datum/gang_item/equipment/frag,
@@ -91,7 +90,6 @@
/datum/gang_item/weapon/ammo/uzi_ammo,
/datum/gang_item/equipment/sharpener,
/datum/gang_item/equipment/spraycan,
/datum/gang_item/equipment/sharpener,
/datum/gang_item/equipment/emp,
/datum/gang_item/equipment/c4,
/datum/gang_item/equipment/frag,
@@ -15,7 +15,7 @@
var/icon_stun = "revenant_stun"
var/icon_drain = "revenant_draining"
var/stasis = FALSE
incorporeal_move = 3
incorporeal_move = INCORPOREAL_MOVE_JAUNT
invisibility = INVISIBILITY_REVENANT
health = INFINITY //Revenants don't use health, they use essence instead
maxHealth = INFINITY
@@ -102,7 +102,7 @@
if(unreveal_time && world.time >= unreveal_time)
unreveal_time = 0
revealed = FALSE
incorporeal_move = 3
incorporeal_move = INCORPOREAL_MOVE_JAUNT
invisibility = INVISIBILITY_REVENANT
to_chat(src, "<span class='revenboldnotice'>You are once more concealed.</span>")
if(unstun_time && world.time >= unstun_time)
@@ -222,7 +222,7 @@
R.essence = max(reforming_essence - 15 * perfectsouls, 75) //minus any perfect souls
R.client_to_revive = client //If the essence reforms, the old revenant is put back in the body
R.revenant = src
invisibility = INVISIBILITY_ABSTRACT
invisibility = INVISIBILITY_ABSTRACT
revealed = FALSE
ghostize(0)//Don't re-enter invisible corpse
return
@@ -236,7 +236,7 @@
return
revealed = TRUE
invisibility = 0
incorporeal_move = 0
incorporeal_move = FALSE
if(!unreveal_time)
to_chat(src, "<span class='revendanger'>You have been revealed!</span>")
unreveal_time = world.time + time
@@ -309,12 +309,12 @@
/mob/living/simple_animal/revenant/proc/death_reset()
revealed = FALSE
unreveal_time = 0
unreveal_time = 0
notransform = 0
unstun_time = 0
inhibited = FALSE
draining = FALSE
incorporeal_move = 3
incorporeal_move = INCORPOREAL_MOVE_JAUNT
invisibility = INVISIBILITY_REVENANT
alpha=255
stasis = FALSE
+12 -6
View File
@@ -358,8 +358,12 @@
/obj/machinery/clonepod/proc/go_out()
countdown.stop()
var/mob/living/mob_occupant = occupant
var/turf/T = get_turf(src)
if(mess) //Clean that mess and dump those gibs!
for(var/obj/fl in unattached_flesh)
fl.forceMove(T)
unattached_flesh.Cut()
mess = FALSE
new /obj/effect/gibspawner/generic(loc)
audible_message("<span class='italics'>You hear a splat.</span>")
@@ -375,10 +379,12 @@
to_chat(occupant, "<span class='notice'><b>There is a bright flash!</b><br><i>You feel like a new being.</i></span>")
mob_occupant.flash_act()
var/turf/T = get_turf(src)
occupant.forceMove(T)
icon_state = "pod_0"
mob_occupant.domutcheck(1) //Waiting until they're out before possible monkeyizing. The 1 argument forces powers to manifest.
for(var/fl in unattached_flesh)
qdel(fl)
unattached_flesh.Cut()
occupant = null
@@ -389,8 +395,7 @@
SPEAK("Critical error! Please contact a Thinktronic Systems \
technician, as your warranty may be affected.")
mess = TRUE
for(var/obj/item/O in unattached_flesh)
qdel(O)
maim_clone(mob_occupant) //Remove every bit that's grown back so far to drop later, also destroys bits that haven't grown yet
icon_state = "pod_g"
if(mob_occupant.mind != clonemind)
clonemind.transfer_to(mob_occupant)
@@ -450,9 +455,10 @@
var/static/list/zones = list("r_arm", "l_arm", "r_leg", "l_leg")
for(var/zone in zones)
var/obj/item/bodypart/BP = H.get_bodypart(zone)
BP.drop_limb()
BP.forceMove(src)
unattached_flesh += BP
if(BP)
BP.drop_limb()
BP.forceMove(src)
unattached_flesh += BP
for(var/o in H.internal_organs)
var/obj/item/organ/organ = o
@@ -54,7 +54,7 @@
/obj/machinery/computer/communications/Topic(href, href_list)
if(..())
return
if (src.z > ZLEVEL_CENTCOM) //Can only use on centcom and SS13
if (z != ZLEVEL_STATION && z != ZLEVEL_CENTCOM) //Can only use on centcom and SS13
to_chat(usr, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
return
usr.set_machine(src)
+8 -1
View File
@@ -632,7 +632,14 @@ GLOBAL_LIST_EMPTY(PDAs)
L = get(src, /mob/living/silicon)
if(L && L.stat != UNCONSCIOUS)
to_chat(L, "\icon[src] <b>Message from [source.owner] ([source.ownjob]), </b>\"[msg.message]\"[msg.get_photo_ref()] (<a href='byond://?src=\ref[src];choice=Message;skiprefresh=1;target=\ref[source]'>Reply</a>)")
var/hrefstart
var/hrefend
if (isAI(L))
hrefstart = "<a href='?src=\ref[L];track=[html_encode(source.owner)]'>"
hrefend = "</a>"
to_chat(L, "\icon[src.icon] <b>Message from [hrefstart][source.owner] ([source.ownjob])[hrefend], </b>\"[msg.message]\"[msg.get_photo_ref()] (<a href='byond://?src=\ref[src];choice=Message;skiprefresh=1;target=\ref[source]'>Reply</a>)")
update_icon()
add_overlay(icon_alert)
+1 -1
View File
@@ -548,7 +548,7 @@
return ..()
/obj/item/borg/projectile_dampen/attack_self(mob/user)
if(cycle_delay < world.time)
if(cycle_delay > world.time)
to_chat(user, "<span class='boldwarning'>\the [src] is still recycling its projectors!</span>")
return
cycle_delay = world.time + PKBORG_DAMPEN_CYCLE_DELAY
@@ -83,6 +83,14 @@
var/list/access = list()
var/registered_name = null // The name registered_name on the card
var/assignment = null
var/access_txt // mapping aid
/obj/item/weapon/card/id/Initialize(mapload)
. = ..()
if(mapload && access_txt)
access = text2access(access_txt)
/obj/item/weapon/card/id/attack_self(mob/user)
user.visible_message("<span class='notice'>[user] shows you: \icon[src] [src.name].</span>", \
@@ -270,4 +270,4 @@
/obj/item/weapon/pneumatic_cannon/pie/selfcharge/process()
if(++charge_tick >= charge_ticks)
fill_with_type(/obj/item/weapon/reagent_containers/food/snacks/pie, charge_amount)
fill_with_type(/obj/item/weapon/reagent_containers/food/snacks/pie/cream, charge_amount)
@@ -161,7 +161,16 @@
anchored = 0
buildstacktype = /obj/item/stack/sheet/mineral/wood
buildstackamount = 10
var/mob/living/owner = null
/obj/structure/bed/dogbed/proc/update_owner(mob/living/M)
owner = M
name = "[M]'s bed"
desc = "[M]'s bed! Looks comfy."
/obj/structure/bed/dogbed/buckle_mob(mob/living/M, force, check_loc)
. = ..()
update_owner(M)
/obj/structure/bed/alien
name = "resting contraption"
+4
View File
@@ -377,6 +377,10 @@
icon_state = "sleeper"
flavour_text = "You are a beach bum!"
/obj/effect/mob_spawn/human/beach/equip(mob/living/carbon/human/H)
..()
H.dna.add_mutation(STONER)
/////////////////Officers+Nanotrasen Security//////////////////////
/obj/effect/mob_spawn/human/bridgeofficer
+1 -1
View File
@@ -1582,7 +1582,7 @@
name = "Contraband Crate"
contraband = TRUE
cost = 3000
num_contained = 6
num_contained = 5
contains = list(/obj/item/weapon/poster/random_contraband,
/obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims,
/obj/item/weapon/storage/fancy/cigarettes/cigpack_midori,
-5
View File
@@ -1,5 +0,0 @@
/obj/item/clothing/head/hunter
name = "hunter hat"
desc = "It's a flimsy looking hat."
icon_state = "hunter"
icon = 'icons/obj/clothing/cit_hats.dmi'
+6
View File
@@ -280,3 +280,9 @@
name = "magnificent crown"
desc = "A crown worn by only the highest emperors of the land."
icon_state = "fancycrown"
/obj/item/clothing/head/hunter
name = "hunter hat"
desc = "It's a flimsy looking hat."
item_state = "hunter_hat"
icon_state = "hunter_hat"
+1 -1
View File
@@ -541,5 +541,5 @@
name = "spooky ghost"
desc = "this is obviously just a bedsheet, but maybe try it on?"
icon_state = "bedsheet"
user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = 1, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150)
user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150)
alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire
+18 -17
View File
@@ -136,26 +136,27 @@ GLOBAL_VAR_CONST(access_away_generic4, 208)
/obj/item/proc/GetID()
return null
/obj/proc/text2access(access_text)
. = list()
if(!access_text)
return
var/list/split = splittext(access_text,";")
for(var/x in split)
var/n = text2num(x)
if(n)
. += n
//Call this before using req_access or req_one_access directly
/obj/proc/gen_access()
//These generations have been moved out of /obj/New() because they were slowing down the creation of objects that never even used the access system.
if(!src.req_access)
src.req_access = list()
if(src.req_access_txt)
var/list/req_access_str = splittext(req_access_txt,";")
for(var/x in req_access_str)
var/n = text2num(x)
if(n)
req_access += n
if(!src.req_one_access)
src.req_one_access = list()
if(src.req_one_access_txt)
var/list/req_one_access_str = splittext(req_one_access_txt,";")
for(var/x in req_one_access_str)
var/n = text2num(x)
if(n)
req_one_access += n
if(!req_access)
req_access = list()
for(var/a in text2access(req_access_txt))
req_access += a
if(!req_one_access)
req_one_access = list()
for(var/b in text2access(req_one_access_txt))
req_one_access += b
/obj/proc/check_access(obj/item/I)
gen_access()
+22
View File
@@ -0,0 +1,22 @@
/datum/language/beachbum
name = "Beach Bumbian"
desc = "For when you're too toasted to speak normally."
speech_verb = "mumbles"
ask_verb = "grills"
exclaim_verb = "hollers"
key = "u"
space_chance = 85
default_priority = 90
syllables = list("cowabunga", "rad", "radical", "dudes", "bogus", "weeed", "every",
"dee", "dah", "woah", "surf", "blazed", "high", "heinous", "day",
"brah", "bro", "blown", "catch", "body", "beach", "oooo", "twenty",
"shiz", "phiz", "wizz", "pop", "chill", "awesome", "dude", "it",
"wax", "stoked", "yes", "ding", "way", "no", "wicked", "aaaa",
"cool", "hoo", "wah", "wee", "man", "maaaaaan", "mate", "wick",
"oh", "ocean", "up", "out", "rip", "slide", "big", "stomp",
"weed", "pot", "smoke", "four-twenty", "shove", "wacky", "hah",
"sick", "slash", "spit", "stoked", "shallow", "gun", "party",
"heavy", "stellar", "excellent", "triumphant", "babe", "four",
"tail", "trim", "tube", "wobble", "roll", "gnarly", "epic")
icon_state = "beach"
@@ -20,3 +20,16 @@
. = ..()
if(.)
update_hair()
/mob/living/carbon/human/set_drugginess(amount)
..()
if(!amount)
remove_language(/datum/language/beachbum)
/mob/living/carbon/human/adjust_drugginess(amount)
..()
if(!dna.check_mutation(STONER))
if(druggy)
grant_language(/datum/language/beachbum)
else
remove_language(/datum/language/beachbum)
+2 -1
View File
@@ -24,7 +24,8 @@
var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out.
//Allows mobs to move through dense areas without restriction. For instance, in space or out of holder objects.
var/incorporeal_move = 0 //0 is off, 1 is normal, 2 is for ninjas.
var/incorporeal_move = FALSE //FALSE is off, INCORPOREAL_MOVE_BASIC is normal, INCORPOREAL_MOVE_SHADOW is for ninjas
//and INCORPOREAL_MOVE_JAUNT is blocked by holy water/salt
var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them.
+14 -2
View File
@@ -833,8 +833,20 @@
/mob/living/silicon/ai/proc/relay_speech(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode)
raw_message = lang_treat(speaker, message_language, raw_message, spans, message_mode)
var/name_used = speaker.GetVoice()
var/rendered = "<i><span class='game say'>Relayed Speech: <span class='name'>[name_used]</span> <span class='message'>[raw_message]</span></span></i>"
var/start = "Relayed Speech: "
var/namepart = "[speaker.GetVoice()][speaker.get_alt_name()]"
var/hrefpart = "<a href='?src=\ref[src];track=[html_encode(namepart)]'>"
var/jobpart
if (iscarbon(speaker))
var/mob/living/carbon/S = speaker
if(S.job)
jobpart = "[S.job]"
else
jobpart = "Unknown"
var/rendered = "<i><span class='game say'>[start]<span class='name'>[hrefpart][namepart] ([jobpart])</a> </span><span class='message'>[raw_message]</span></span></i>"
show_message(rendered, 2)
/mob/living/silicon/ai/fully_replace_character_name(oldname,newname)
@@ -44,6 +44,13 @@
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/pug = 3)
gold_core_spawnable = 2
/mob/living/simple_animal/pet/dog/Initialize()
var/dog_area = get_area(src)
for(var/obj/structure/bed/dogbed/D in dog_area)
if(!D.owner)
D.update_owner(src)
break
/mob/living/simple_animal/pet/dog/corgi/Initialize()
..()
regenerate_icons()
@@ -37,7 +37,7 @@
environment_smash = initial(environment_smash)
alpha = 255
range = initial(range)
incorporeal_move = 0
incorporeal_move = FALSE
to_chat(src, "<span class='danger'><B>You switch to combat mode.</span></B>")
toggle = FALSE
else
@@ -48,7 +48,7 @@
environment_smash = ENVIRONMENT_SMASH_NONE
alpha = 45
range = 255
incorporeal_move = 1
incorporeal_move = INCORPOREAL_MOVE_BASIC
to_chat(src, "<span class='danger'><B>You switch to scout mode.</span></B>")
toggle = TRUE
else
@@ -193,6 +193,7 @@ Difficulty: Medium
return
animate(src, transform = matrix()*0.7, time = 7)
swooping |= SWOOP_INVULNERABLE
mouse_opacity = 0
sleep(7)
var/list/flame_hit = list()
while(swoop_duration > 0)
@@ -233,6 +234,7 @@ Difficulty: Medium
animate(src, transform = oldtransform, time = 5)
sleep(5)
swooping &= ~SWOOP_INVULNERABLE
mouse_opacity = initial(mouse_opacity)
icon_state = "dragon"
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 200, 1)
for(var/mob/living/L in orange(1, src))
@@ -948,7 +948,7 @@
color = "#FFFFFF77"
speak_chance = 20
status_flags = GODMODE
incorporeal_move = 1
incorporeal_move = INCORPOREAL_MOVE_BASIC
butcher_results = list(/obj/item/weapon/ectoplasm = 1)
/mob/living/simple_animal/parrot/Poly/ghost/Initialize()
+3 -3
View File
@@ -209,10 +209,10 @@
return
var/mob/living/L = mob
switch(L.incorporeal_move)
if(1)
if(INCORPOREAL_MOVE_BASIC)
L.loc = get_step(L, direct)
L.setDir(direct)
if(2)
if(INCORPOREAL_MOVE_SHADOW)
if(prob(50))
var/locx
var/locy
@@ -250,7 +250,7 @@
new /obj/effect/temp_visual/dir_setting/ninja/shadow(mobloc, L.dir)
L.loc = get_step(L, direct)
L.setDir(direct)
if(3) //Incorporeal move, but blocked by holy-watered tiles and salt piles.
if(INCORPOREAL_MOVE_JAUNT) //Incorporeal move, but blocked by holy-watered tiles and salt piles.
var/turf/open/floor/stepTurf = get_step(L, direct)
for(var/obj/effect/decal/cleanable/salt/S in stepTurf)
to_chat(L, "<span class='warning'>[S] bars your passage!</span>")
@@ -5,7 +5,7 @@
var/_has_battery = 0
var/_has_ai = 0
/obj/machinery/modular_computer/console/preset/New()
/obj/machinery/modular_computer/console/preset/Initialize()
. = ..()
if(!cpu)
return
@@ -27,15 +27,13 @@
var/obj/item/device/modular_computer/processor/cpu = null // CPU that handles most logic while this type only handles power and other specific things.
/obj/machinery/modular_computer/New()
..()
/obj/machinery/modular_computer/Initialize()
. = ..()
cpu = new(src)
cpu.physical = src
/obj/machinery/modular_computer/Destroy()
if(cpu)
qdel(cpu)
cpu = null
QDEL_NULL(cpu)
return ..()
/obj/machinery/modular_computer/attack_ghost(mob/dead/observer/user)
@@ -20,8 +20,8 @@
max_integrity = 300
integrity_failure = 150
/obj/machinery/modular_computer/console/buildable/New()
..()
/obj/machinery/modular_computer/console/buildable/Initialize()
. = ..()
// User-built consoles start as empty frames.
var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
var/obj/item/weapon/computer_hardware/hard_drive/network_card = cpu.all_components[MC_NET]
@@ -30,8 +30,8 @@
qdel(network_card)
qdel(hard_drive)
/obj/machinery/modular_computer/console/New()
..()
/obj/machinery/modular_computer/console/Initialize()
. = ..()
var/obj/item/weapon/computer_hardware/battery/battery_module = cpu.all_components[MC_CELL]
if(battery_module)
qdel(battery_module)
+3 -4
View File
@@ -66,9 +66,8 @@ By design, d1 is the smallest direction and d2 is the highest
icon = 'icons/obj/power_cond/power_cond_white.dmi'
// the power cable object
/obj/structure/cable/New()
..()
/obj/structure/cable/Initialize()
. = ..()
// ensure d1 & d2 reflect the icon_state for entering and exiting cable
var/dash = findtext(icon_state, "-")
@@ -529,7 +528,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai
return(OXYLOSS)
/obj/item/stack/cable_coil/New(loc, new_amount = null, var/param_color = null)
..()
. = ..()
if(new_amount) // MAXCOIL by default
amount = new_amount
if(param_color)
+21 -13
View File
@@ -30,7 +30,7 @@ GLOBAL_LIST_EMPTY(rad_collectors)
/obj/machinery/power/rad_collector/process()
if(loaded_tank)
if(!loaded_tank.air_contents.gases["plasma"])
investigate_log("<font color='red'>out of fuel</font>.", INVESTIGATE_SINGULO)
investigate_log("<font color='red'>out of fuel</font>.", INVESTIGATE_SINGULO)
eject()
else
loaded_tank.air_contents.gases["plasma"][MOLES] -= 0.001*drainratio
@@ -46,9 +46,11 @@ GLOBAL_LIST_EMPTY(rad_collectors)
toggle_power()
user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \
"<span class='notice'>You turn the [src.name] [active? "on":"off"].</span>")
var/fuel = loaded_tank.air_contents.gases["plasma"]
var/fuel
if(loaded_tank)
fuel = loaded_tank.air_contents.gases["plasma"]
fuel = fuel ? fuel[MOLES] : 0
investigate_log("turned [active?"<font color='green'>on</font>":"<font color='red'>off</font>"] by [user.key]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"<font color='red'>It is empty</font>"].", INVESTIGATE_SINGULO)
investigate_log("turned [active?"<font color='green'>on</font>":"<font color='red'>off</font>"] by [user.key]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"<font color='red'>It is empty</font>"].", INVESTIGATE_SINGULO)
return
else
to_chat(user, "<span class='warning'>The controls are locked!</span>")
@@ -73,28 +75,34 @@ GLOBAL_LIST_EMPTY(rad_collectors)
/obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/device/multitool))
to_chat(user, "<span class='notice'>The [W.name] detects that [last_power]W were recently produced.</span>")
return 1
return TRUE
else if(istype(W, /obj/item/device/analyzer) && loaded_tank)
atmosanalyzer_scan(loaded_tank.air_contents, user)
else if(istype(W, /obj/item/weapon/tank/internals/plasma))
if(!anchored)
to_chat(user, "<span class='warning'>The [src] needs to be secured to the floor first!</span>")
return 1
return TRUE
if(loaded_tank)
to_chat(user, "<span class='warning'>There's already a plasma tank loaded!</span>")
return 1
return TRUE
if(!user.drop_item())
return 1
return TRUE
loaded_tank = W
W.forceMove(src)
update_icons()
else if(istype(W, /obj/item/weapon/crowbar))
if(loaded_tank && !locked)
if(loaded_tank)
if(locked)
to_chat(user, "<span class='warning'>The controls are locked!</span>")
return TRUE
eject()
return 1
return TRUE
else
to_chat(user, "<span class='warning'>There isn't a tank loaded!</span>")
return TRUE
else if(istype(W, /obj/item/weapon/wrench))
default_unfasten_wrench(user, W, 0)
return 1
return TRUE
else if(W.GetID())
if(allowed(user))
if(active)
@@ -104,7 +112,7 @@ GLOBAL_LIST_EMPTY(rad_collectors)
to_chat(user, "<span class='warning'>The controls can only be locked when \the [src] is active!</span>")
else
to_chat(user, "<span class='danger'>Access denied.</span>")
return 1
return TRUE
else
return ..()
@@ -141,11 +149,11 @@ GLOBAL_LIST_EMPTY(rad_collectors)
/obj/machinery/power/rad_collector/proc/update_icons()
cut_overlays()
if(loaded_tank)
add_overlay("ptank")
add_overlay("ptank")
if(stat & (NOPOWER|BROKEN))
return
if(active)
add_overlay("on")
add_overlay("on")
/obj/machinery/power/rad_collector/proc/toggle_power()
+6 -4
View File
@@ -295,14 +295,16 @@
/obj/item/weapon/gun/attack(mob/M as mob, mob/user)
if(user.a_intent == INTENT_HARM) //Flogging
if(bayonet)
bayonet.attack(M, user)
M.attackby(bayonet, user)
return
return ..()
else
return ..()
return
/obj/item/weapon/gun/attack_obj(obj/O, mob/user)
if(user.a_intent == INTENT_HARM)
if(bayonet)
bayonet.attack_obj(O, user)
O.attackby(bayonet, user)
return
return ..()
@@ -332,7 +334,7 @@
if(!bayonet)
if(!user.transferItemToLoc(I, src))
return
to_chat(user, "<span class='notice'>You attach \the [K] to the front of ]the [src].</span>")
to_chat(user, "<span class='notice'>You attach \the [K] to the front of \the [src].</span>")
bayonet = K
update_icon()
else if(istype(I, /obj/item/weapon/screwdriver))
@@ -294,10 +294,11 @@
/obj/item/bodypart/head/attach_limb(mob/living/carbon/C, special)
//Transfer some head appearance vars over
if(brain)
brainmob.container = null //Reset brainmob head var.
brainmob.loc = brain //Throw mob into brain.
brain.brainmob = brainmob //Set the brain to use the brainmob
brainmob = null //Set head brainmob var to null
if(brainmob)
brainmob.container = null //Reset brainmob head var.
brainmob.loc = brain //Throw mob into brain.
brain.brainmob = brainmob //Set the brain to use the brainmob
brainmob = null //Set head brainmob var to null
brain.Insert(C) //Now insert the brain proper
brain = null //No more brain in the head
+1
View File
@@ -15,6 +15,7 @@
/datum/language/common,
/datum/language/draconic,
/datum/language/monkey,
/datum/language/beachbum,
/datum/language/narsie,
))
@@ -0,0 +1,9 @@
diff a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm (rejected hunks)
@@ -17,6 +17,7 @@
/datum/language/codespeak,
/datum/language/monkey,
/datum/language/narsie,
+ /datum/language/beachbum,
/datum/language/ratvar
))
+1
View File
@@ -35,6 +35,7 @@
icon_state = "speedwagon"
layer = LYING_MOB_LAYER
overlay_state = "speedwagon_cover"
max_buckled_mobs = 4
var/crash_all = FALSE //CHAOS
pixel_y = -48 //to fix the offset when Initialized()
pixel_x = -48
@@ -0,0 +1,5 @@
author: "That Really Good Soda Flavor"
delete-after: True
changes:
- rscadd: "People who are high and beach bums can now talk in their own stoner language."
- tweak: "Beach bums can only communicate with other beach bums and people who are high."
@@ -0,0 +1,5 @@
author: "cacogen"
delete-after: True
changes:
- rscadd: "You can now rename dog beds by buckling a new owner to them"
- rscadd: "Dogs that spawn in an area with a vacant bed will take possession of and rename the bed"
@@ -0,0 +1,4 @@
author: "QualityVan"
delete-after: True
changes:
- bugfix: "Bayonets can now be used for butchery"
@@ -0,0 +1,5 @@
author: "cacogen"
delete-after: True
changes:
- rscadd: "Adds AI follow links to holopad speech and PDA messages. Note that PDA messages point to the owner of the PDA and not the PDA's actual location."
- bugfix: "Fixes PDA icon not showing up beside received messages for AIs"
@@ -0,0 +1,5 @@
author: "QualityVan"
delete-after: True
changes:
- tweak: "Cloning pods which are interrupted by a emagging will now produce a slightly lumpier smoothie"
- bugfix: "Cloning pods that have stopped cloning early can no longer be broken open to extract leftover parts"
@@ -0,0 +1,4 @@
author: "QualityVan"
delete-after: True
changes:
- bugfix: "Crew monitoring consoles once again have minimaps while you're on the station level"
@@ -0,0 +1,4 @@
author: "Swindly"
delete-after: True
changes:
- bugfix: "fixed not being able to attach heads without brainmobs in them"

Before

Width:  |  Height:  |  Size: 917 KiB

After

Width:  |  Height:  |  Size: 917 KiB

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 1.0 MiB

Before

Width:  |  Height:  |  Size: 492 KiB

After

Width:  |  Height:  |  Size: 492 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 KiB

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 B

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

+1 -1
View File
@@ -1194,7 +1194,6 @@
#include "code\modules\clothing\gloves\miscellaneous.dm"
#include "code\modules\clothing\gloves\vg_gloves.dm"
#include "code\modules\clothing\head\beanie.dm"
#include "code\modules\clothing\head\cit_hats.dm"
#include "code\modules\clothing\head\collectable.dm"
#include "code\modules\clothing\head\hardhat.dm"
#include "code\modules\clothing\head\helmet.dm"
@@ -1440,6 +1439,7 @@
#include "code\modules\jobs\job_types\science.dm"
#include "code\modules\jobs\job_types\security.dm"
#include "code\modules\jobs\job_types\silicon.dm"
#include "code\modules\language\beachbum.dm"
#include "code\modules\language\common.dm"
#include "code\modules\language\draconic.dm"
#include "code\modules\language\drone.dm"
+9
View File
@@ -0,0 +1,9 @@
diff a/tgstation.dme b/tgstation.dme (rejected hunks)
@@ -1390,6 +1390,7 @@
#include "code\modules\jobs\job_types\security.dm"
#include "code\modules\jobs\job_types\silicon.dm"
#include "code\modules\jobs\map_changes\map_changes.dm"
+#include "code\modules\language\beachbum.dm"
#include "code\modules\language\codespeak.dm"
#include "code\modules\language\common.dm"
#include "code\modules\language\draconic.dm"