Merge branch 'release' of https://github.com/VOREStation/VOREStation into izac
@@ -24,9 +24,22 @@ SUBSYSTEM_DEF(supply)
|
||||
var/movetime = 1200
|
||||
var/datum/shuttle/autodock/ferry/supply/shuttle
|
||||
var/list/material_points_conversion = list( // Any materials not named in this list are worth 0 points
|
||||
"silver" = 2,
|
||||
"marble" = 2,
|
||||
"gold" = 2,
|
||||
"uranium" = 2,
|
||||
"lead" = 2,
|
||||
"platinum" = 5,
|
||||
"phoron" = 5,
|
||||
"platinum" = 5
|
||||
)
|
||||
"titanium" = 6,
|
||||
"plasteel" = 6,
|
||||
"osmium" = 6,
|
||||
"mhydrogen" = 6,
|
||||
"verdantium" = 8,
|
||||
"diamond" = 8,
|
||||
"durasteel" = 9,
|
||||
"morphium" = 13
|
||||
)//SPOOKY number!
|
||||
|
||||
/datum/controller/subsystem/supply/Initialize()
|
||||
ordernum = rand(1,9000)
|
||||
@@ -174,6 +187,8 @@ SUBSYSTEM_DEF(supply)
|
||||
|
||||
var/list/clear_turfs = get_clear_turfs()
|
||||
|
||||
var/shopping_log = "SUPPLY_BUY: "
|
||||
|
||||
for(var/datum/supply_order/SO in shoppinglist)
|
||||
if(!clear_turfs.len)
|
||||
break
|
||||
@@ -184,6 +199,7 @@ SUBSYSTEM_DEF(supply)
|
||||
|
||||
SO.status = SUP_ORDER_SHIPPED
|
||||
var/datum/supply_pack/SP = SO.object
|
||||
shopping_log += "[SP.name];"
|
||||
|
||||
var/obj/A = new SP.containertype(pickedloc)
|
||||
A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]"
|
||||
@@ -238,6 +254,7 @@ SUBSYSTEM_DEF(supply)
|
||||
slip.info += "</ul><br>"
|
||||
slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS<hr>"
|
||||
|
||||
log_game(shopping_log)
|
||||
return
|
||||
|
||||
// Will attempt to purchase the specified order, returning TRUE on success, FALSE on failure
|
||||
|
||||
@@ -96,3 +96,18 @@
|
||||
access_explorer,
|
||||
access_pilot)
|
||||
one_access = TRUE
|
||||
|
||||
/datum/supply_pack/randomised/misc/explorer_shield
|
||||
name = "Explorer shield"
|
||||
num_contained = 2
|
||||
contains = list(
|
||||
/obj/item/weapon/shield/riot/explorer,
|
||||
/obj/item/weapon/shield/riot/explorer/purple
|
||||
)
|
||||
cost = 75
|
||||
containertype = /obj/structure/closet/crate/secure/gear
|
||||
containername = "exploration shield crate"
|
||||
access = list(access_explorer,
|
||||
access_eva,
|
||||
access_pilot)
|
||||
one_access = TRUE
|
||||
20
code/datums/uplink/ammunition_vr.dm
Normal file
@@ -0,0 +1,20 @@
|
||||
/*************
|
||||
* Ammunition *
|
||||
*************/
|
||||
/datum/uplink_item/item/ammo/cell
|
||||
name = "Weapon cell"
|
||||
|
||||
/datum/uplink_item/item/ammo/highcell
|
||||
name = "High capacity cell"
|
||||
path = /obj/item/weapon/cell/high
|
||||
item_cost = 15
|
||||
|
||||
/datum/uplink_item/item/ammo/supercell
|
||||
name = "Super capacity cell"
|
||||
path = /obj/item/weapon/cell/super
|
||||
item_cost = 30
|
||||
|
||||
/datum/uplink_item/item/ammo/voidcell
|
||||
name = "Void cell"
|
||||
path = /obj/item/weapon/cell/device/weapon/recharge/alien/hybrid
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 1.5
|
||||
@@ -1,25 +1,10 @@
|
||||
/**********
|
||||
* Medical *
|
||||
**********/
|
||||
/datum/uplink_item/item/medical/fire
|
||||
name = "Fire medical kit"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/firstaid/fire
|
||||
|
||||
/datum/uplink_item/item/medical/toxin
|
||||
name = "Toxin medical kit"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/firstaid/toxin
|
||||
|
||||
/datum/uplink_item/item/medical/o2
|
||||
name = "Oxygen medical kit"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/firstaid/o2
|
||||
|
||||
/datum/uplink_item/item/medical/adv
|
||||
name = "Advanced medical kit"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/firstaid/adv
|
||||
/datum/uplink_item/item/medical/pizza
|
||||
name = "Free Pizza Voucher"
|
||||
item_cost = 5
|
||||
path = /obj/item/pizzavoucher
|
||||
|
||||
/datum/uplink_item/item/medical/mre
|
||||
name = "Meal, Ready to eat (Random)"
|
||||
@@ -36,6 +21,11 @@
|
||||
item_cost = 5
|
||||
path = /obj/item/weapon/storage/mre/menu11
|
||||
|
||||
/datum/uplink_item/item/medical/medical
|
||||
name = "Meal, Ready to eat (medical)"
|
||||
item_cost = 5
|
||||
path = /obj/item/weapon/storage/mre/menu13
|
||||
|
||||
/datum/uplink_item/item/medical/glucose
|
||||
name = "Glucose injector"
|
||||
item_cost = 5
|
||||
@@ -71,11 +61,41 @@
|
||||
item_cost = 5
|
||||
path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy
|
||||
|
||||
/datum/uplink_item/item/medical/fire
|
||||
name = "Fire medical kit"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/firstaid/fire
|
||||
|
||||
/datum/uplink_item/item/medical/toxin
|
||||
name = "Toxin medical kit"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/firstaid/toxin
|
||||
|
||||
/datum/uplink_item/item/medical/o2
|
||||
name = "Oxygen medical kit"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/firstaid/o2
|
||||
|
||||
/datum/uplink_item/item/medical/adv
|
||||
name = "Advanced medical kit"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/firstaid/adv
|
||||
|
||||
/datum/uplink_item/item/medical/organ
|
||||
name = "Organ Repair injector"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ
|
||||
|
||||
/datum/uplink_item/item/medical/stasis
|
||||
name = "Stasis Bag"
|
||||
item_cost = 20
|
||||
path = /obj/item/bodybag/cryobag
|
||||
|
||||
/datum/uplink_item/item/medical/synth
|
||||
name = "Synthmorph Bag"
|
||||
item_cost = 20
|
||||
path = /obj/item/bodybag/cryobag/robobag
|
||||
|
||||
/datum/uplink_item/item/medical/nanites
|
||||
name = "Healing Nanite pill bottle"
|
||||
item_cost = 30
|
||||
|
||||
@@ -1,6 +1,21 @@
|
||||
/********************
|
||||
* Devices and Tools *
|
||||
********************/
|
||||
/datum/uplink_item/item/tools/oxygen
|
||||
name = "Emergency Oxygen Tank"
|
||||
item_cost = 2
|
||||
path = /obj/item/weapon/tank/emergency/oxygen/double
|
||||
|
||||
/datum/uplink_item/item/tools/phoron
|
||||
name = "Emergency Phoron Tank"
|
||||
item_cost = 2
|
||||
path = /obj/item/weapon/tank/emergency/phoron/double
|
||||
|
||||
/datum/uplink_item/item/tools/suitcooler
|
||||
name = "Emergency Suit Cooler"
|
||||
item_cost = 2
|
||||
path = /obj/item/device/suit_cooling_unit/emergency
|
||||
|
||||
/datum/uplink_item/item/tools/basiclaptop
|
||||
name = "Laptop (Basic)"
|
||||
item_cost = 5
|
||||
@@ -16,6 +31,11 @@
|
||||
item_cost = 10
|
||||
path = /obj/item/stack/nanopaste/advanced
|
||||
|
||||
/datum/uplink_item/item/tools/autolok
|
||||
name = "Autolok Voidsuit"
|
||||
item_cost = 10
|
||||
path = /obj/item/clothing/suit/space/void/autolok
|
||||
|
||||
/datum/uplink_item/item/tools/elitetablet
|
||||
name = "Tablet (Advanced)"
|
||||
item_cost = 15
|
||||
|
||||
@@ -242,7 +242,7 @@ Class Procs:
|
||||
return 1
|
||||
if(user.lying || user.stat)
|
||||
return 1
|
||||
if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon)))
|
||||
if(!user.IsAdvancedToolUser()) //Vorestation edit
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return 1
|
||||
if(ishuman(user))
|
||||
@@ -312,6 +312,7 @@ Class Procs:
|
||||
qdel(C)
|
||||
C = new /obj/item/weapon/cell/high(src)
|
||||
component_parts += C
|
||||
return C
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/proc/default_part_replacement(var/mob/user, var/obj/item/weapon/storage/part_replacer/R)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
/obj/machinery/recharge_station/Initialize()
|
||||
. = ..()
|
||||
default_apply_parts()
|
||||
default_use_hicell()
|
||||
cell = default_use_hicell()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/recharge_station/proc/has_cell_power()
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
network = "tcommsat"
|
||||
produces_heat = 0
|
||||
autolinkers = list("receiverCent")
|
||||
freq_listening = list(ERT_FREQ, DTH_FREQ)
|
||||
freq_listening = list(ERT_FREQ, DTH_FREQ, SYND_FREQ)
|
||||
|
||||
|
||||
//Buses
|
||||
@@ -108,7 +108,7 @@
|
||||
/obj/machinery/telecomms/bus/preset_cent
|
||||
id = "CentCom Bus"
|
||||
network = "tcommsat"
|
||||
freq_listening = list(ERT_FREQ, DTH_FREQ)
|
||||
freq_listening = list(ERT_FREQ, DTH_FREQ, SYND_FREQ)
|
||||
produces_heat = 0
|
||||
autolinkers = list("processorCent", "centcom")
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
|
||||
/obj/machinery/telecomms/server/presets/centcomm
|
||||
id = "CentCom Server"
|
||||
freq_listening = list(ERT_FREQ, DTH_FREQ)
|
||||
freq_listening = list(ERT_FREQ, DTH_FREQ, SYND_FREQ)
|
||||
produces_heat = 0
|
||||
autolinkers = list("centcom")
|
||||
|
||||
|
||||
@@ -662,9 +662,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
ui.set_auto_update(auto_update)
|
||||
|
||||
/obj/item/device/pda/attack_self(mob/user as mob)
|
||||
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/pda)
|
||||
assets.send(user)
|
||||
|
||||
user.set_machine(src)
|
||||
|
||||
if(active_uplink_check(user))
|
||||
|
||||
@@ -19,3 +19,68 @@
|
||||
attack_verb = list("shoved", "bashed")
|
||||
var/cooldown = 0 //shield bash cooldown. based on world.time
|
||||
allowed = list(/obj/item/weapon/melee/fluffstuff/wolfgirlsword)
|
||||
|
||||
|
||||
/obj/item/weapon/shield/riot/explorer
|
||||
name = "green explorer shield"
|
||||
desc = "A shield issued to exploration teams to help protect them when advancing into the unknown. It is lighter and cheaper but less protective than some of its counterparts. It has a flashlight straight in the middle to help draw attention."
|
||||
icon = 'icons/obj/weapons_vr.dmi'
|
||||
icon_state = "explorer_shield"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_melee_vr.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_melee_vr.dmi'
|
||||
)
|
||||
base_block_chance = 40
|
||||
slot_flags = SLOT_BACK
|
||||
var/brightness_on
|
||||
brightness_on = 4
|
||||
var/on = 0
|
||||
var/light_applied
|
||||
//var/light_overlay
|
||||
|
||||
//POURPEL WHY U NO COVER
|
||||
|
||||
/obj/item/weapon/shield/riot/explorer/attack_self(mob/user)
|
||||
if(brightness_on)
|
||||
if(!isturf(user.loc))
|
||||
to_chat(user, "You cannot turn the light on while in this [user.loc]")
|
||||
return
|
||||
on = !on
|
||||
to_chat(user, "You [on ? "enable" : "disable"] the shield light.")
|
||||
update_flashlight(user)
|
||||
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
else
|
||||
return ..(user)
|
||||
|
||||
/obj/item/weapon/shield/riot/explorer/proc/update_flashlight(var/mob/user = null)
|
||||
if(on && !light_applied)
|
||||
set_light(brightness_on)
|
||||
light_applied = 1
|
||||
else if(!on && light_applied)
|
||||
set_light(0)
|
||||
light_applied = 0
|
||||
update_icon(user)
|
||||
user.update_action_buttons()
|
||||
light = !light
|
||||
playsound(src, 'sound/weapons/empty.ogg', 15, 1, -3)
|
||||
|
||||
/obj/item/weapon/shield/riot/explorer/update_icon()
|
||||
if(on)
|
||||
icon_state = "explorer_shield_lighted"
|
||||
else
|
||||
icon_state = "explorer_shield"
|
||||
|
||||
/obj/item/weapon/shield/riot/explorer/purple
|
||||
name = "purple explorer shield"
|
||||
desc = "A shield issued to exploration teams to help protect them when advancing into the unknown. It is lighter and cheaper but less protective than some of its counterparts. It has a flashlight straight in the middle to help draw attention. This one is POURPEL"
|
||||
icon_state = "explorer_shield_P"
|
||||
|
||||
/obj/item/weapon/shield/riot/explorer/purple/update_icon()
|
||||
if(on)
|
||||
icon_state = "explorer_shield_P_lighted"
|
||||
else
|
||||
icon_state = "explorer_shield_P"
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/weapon/storage/backpack/saddlebag
|
||||
name = "Horse Saddlebags"
|
||||
desc = "A saddle that holds items. Seems slightly bulky."
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon = 'icons/obj/clothing/backpack_vr.dmi'
|
||||
icon_override = 'icons/mob/back_vr.dmi'
|
||||
item_state = "saddlebag"
|
||||
icon_state = "saddlebag"
|
||||
@@ -33,7 +33,7 @@
|
||||
/obj/item/weapon/storage/backpack/saddlebag_common //Shared bag for other taurs with sturdy backs
|
||||
name = "Taur Saddlebags"
|
||||
desc = "A saddle that holds items. Seems slightly bulky."
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon = 'icons/obj/clothing/backpack_vr.dmi'
|
||||
icon_override = 'icons/mob/back_vr.dmi'
|
||||
item_state = "saddlebag"
|
||||
icon_state = "saddlebag"
|
||||
@@ -108,7 +108,7 @@
|
||||
/obj/item/weapon/storage/backpack/saddlebag_common/robust //Shared bag for other taurs with sturdy backs
|
||||
name = "Robust Saddlebags"
|
||||
desc = "A saddle that holds items. Seems robust."
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon = 'icons/obj/clothing/backpack_vr.dmi'
|
||||
icon_override = 'icons/mob/back_vr.dmi'
|
||||
item_state = "robustsaddle"
|
||||
icon_state = "robustsaddle"
|
||||
@@ -117,7 +117,7 @@
|
||||
/obj/item/weapon/storage/backpack/saddlebag_common/vest //Shared bag for other taurs with sturdy backs
|
||||
name = "Taur Duty Vest"
|
||||
desc = "An armored vest with the armor modules replaced with various handy compartments with decent storage capacity. Useless for protection though."
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon = 'icons/obj/clothing/backpack_vr.dmi'
|
||||
icon_override = 'icons/mob/back_vr.dmi'
|
||||
item_state = "taurvest"
|
||||
icon_state = "taurvest"
|
||||
@@ -141,49 +141,49 @@
|
||||
/obj/item/weapon/storage/backpack/satchel/explorer
|
||||
name = "explorer satchel"
|
||||
desc = "A satchel for carrying a large number of supplies easily."
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon = 'icons/obj/clothing/backpack_vr.dmi'
|
||||
icon_override = 'icons/mob/back_vr.dmi'
|
||||
item_state = "satchel-explorer"
|
||||
icon_state = "satchel-explorer"
|
||||
/obj/item/weapon/storage/backpack/explorer
|
||||
name = "explorer backpack"
|
||||
desc = "A backpack for carrying a large number of supplies easily."
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon = 'icons/obj/clothing/backpack_vr.dmi'
|
||||
icon_override = 'icons/mob/back_vr.dmi'
|
||||
item_state = "explorerpack"
|
||||
icon_state = "explorerpack"
|
||||
/obj/item/weapon/storage/backpack/satchel/roboticist
|
||||
name = "roboticist satchel"
|
||||
desc = "A satchel for carrying a large number of spare parts easily."
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon = 'icons/obj/clothing/backpack_vr.dmi'
|
||||
icon_override = 'icons/mob/back_vr.dmi'
|
||||
item_state = "satchel-robo"
|
||||
icon_state = "satchel-robo"
|
||||
/obj/item/weapon/storage/backpack/roboticist
|
||||
name = "roboticist backpack"
|
||||
desc = "A backpack for carrying a large number of spare parts easily."
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon = 'icons/obj/clothing/backpack_vr.dmi'
|
||||
icon_override = 'icons/mob/back_vr.dmi'
|
||||
item_state = "backpack-robo"
|
||||
icon_state = "backpack-robo"
|
||||
/obj/item/weapon/storage/backpack/vietnam
|
||||
name = "vietnam backpack"
|
||||
desc = "There are tangos in the trees! We need napalm right now! Why is my gun jammed?"
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon = 'icons/obj/clothing/backpack_vr.dmi'
|
||||
icon_override = 'icons/mob/back_vr.dmi'
|
||||
item_state = "nambackpack"
|
||||
icon_state = "nambackpack"
|
||||
/obj/item/weapon/storage/backpack/russian
|
||||
name = "russian backpack"
|
||||
desc = "Useful for carrying large quantities of vodka."
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon = 'icons/obj/clothing/backpack_vr.dmi'
|
||||
icon_override = 'icons/mob/back_vr.dmi'
|
||||
item_state = "ru_rucksack"
|
||||
icon_state = "ru_rucksack"
|
||||
/obj/item/weapon/storage/backpack/korean
|
||||
name = "korean backpack"
|
||||
desc = "Insert witty description here."
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon = 'icons/obj/clothing/backpack_vr.dmi'
|
||||
icon_override = 'icons/mob/back_vr.dmi'
|
||||
item_state = "kr_rucksack"
|
||||
icon_state = "kr_rucksack"
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
|
||||
/obj/item/weapon/tank/vox/Initialize()
|
||||
. = ..()
|
||||
air_contents.adjust_gas("phoron", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
|
||||
air_contents.adjust_gas("phoron", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) //VOREStation Edit
|
||||
|
||||
/obj/item/weapon/tank/phoron/pressurized
|
||||
name = "fuel can"
|
||||
|
||||
@@ -85,6 +85,7 @@
|
||||
icon_override = 'icons/mob/belt_vr.dmi'
|
||||
icon_state = "emergency_phoron_vox"
|
||||
gauge_icon = "indicator_smalltank"
|
||||
volume = 6
|
||||
gauge_cap = 3
|
||||
|
||||
/obj/item/weapon/tank/nitrogen
|
||||
|
||||
11
code/game/objects/random/misc_vr.dm
Normal file
@@ -0,0 +1,11 @@
|
||||
//This file is for VR only
|
||||
|
||||
/obj/random/explorer_shield
|
||||
name = "random explorer shield"
|
||||
desc = "This is a random shield for the explorer lockers."
|
||||
icon = 'icons/obj/weapons_vr.dmi'
|
||||
icon_state = "explorer_shield"
|
||||
|
||||
/obj/random/explorer_shield/item_to_spawn()
|
||||
return pick(/obj/item/weapon/shield/riot/explorer,
|
||||
/obj/item/weapon/shield/riot/explorer/purple)
|
||||
@@ -177,6 +177,7 @@
|
||||
/obj/item/weapon/material/knife/machete/deluxe,
|
||||
/obj/item/weapon/gun/energy/locked/frontier/carbine,
|
||||
/obj/item/clothing/accessory/holster/machete,
|
||||
/obj/random/explorer_shield,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidprotein,
|
||||
/obj/item/device/cataloguer/compact/pathfinder)
|
||||
@@ -214,6 +215,23 @@
|
||||
|
||||
starts_with = list(
|
||||
/obj/item/clothing/suit/space/void/autolok,
|
||||
/obj/item/weapon/tank/emergency/oxygen/double,
|
||||
/obj/item/weapon/tank/emergency/oxygen/engi,
|
||||
/obj/item/device/suit_cooling_unit/emergency
|
||||
)
|
||||
|
||||
/obj/structure/closet/emergsuit_wall
|
||||
name = "emergency suit storage"
|
||||
desc = "It's wall-mounted storage unit for an emergency suit."
|
||||
icon = 'icons/obj/closets/bases/wall.dmi'
|
||||
closet_appearance = /decl/closet_appearance/wall/emergency
|
||||
anchored = 1
|
||||
density = 0
|
||||
wall_mounted = 1
|
||||
store_mobs = 0
|
||||
|
||||
starts_with = list(
|
||||
/obj/item/clothing/head/helmet/space/emergency,
|
||||
/obj/item/clothing/suit/space/emergency,
|
||||
/obj/item/weapon/tank/emergency/oxygen/engi,
|
||||
/obj/item/device/suit_cooling_unit/emergency
|
||||
)
|
||||
|
||||
409
code/modules/busy_space_vr/air_traffic.dm
Normal file
@@ -0,0 +1,409 @@
|
||||
//Cactus, Speedbird, Dynasty, oh my
|
||||
//Also, massive additions/refactors by Killian, because the original incarnation was full of holes
|
||||
|
||||
var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
|
||||
|
||||
/datum/lore/atc_controller
|
||||
var/delay_min = 25 MINUTES //How long between ATC traffic
|
||||
var/delay_max = 35 MINUTES //Adjusted to give approx 2 per hour, will work out to 10-14 over a full shift
|
||||
//Shorter delays means more traffic, which gives the impression of a busier system, but also means a lot more radio noise
|
||||
var/backoff_delay = 5 MINUTES //How long to back off if we can't talk and want to. Default is 5 mins.
|
||||
var/initial_delay = 2 MINUTES //How long to wait before sending the first message of the shift.
|
||||
var/next_message = 30 MINUTES //When the next message should happen in world.time - Making it default to min value
|
||||
var/force_chatter_type //Force a specific type of messages
|
||||
|
||||
var/squelched = 0 //If ATC is squelched currently
|
||||
|
||||
//define a block of frequencies so we can have them be static instead of being random for each call
|
||||
var/ertchannel
|
||||
var/medchannel
|
||||
var/engchannel
|
||||
var/secchannel
|
||||
var/sdfchannel
|
||||
|
||||
/datum/lore/atc_controller/New()
|
||||
//generate our static event frequencies for the shift. alternately they can be completely fixed, up in the core block
|
||||
ertchannel = "[rand(700,749)].[rand(1,9)]"
|
||||
medchannel = "[rand(750,799)].[rand(1,9)]"
|
||||
engchannel = "[rand(800,849)].[rand(1,9)]"
|
||||
secchannel = "[rand(850,899)].[rand(1,9)]"
|
||||
sdfchannel = "[rand(900,999)].[rand(1,9)]"
|
||||
spawn(450 SECONDS) //Lots of lag at the start of a shift. Yes, the following lines *have* to be indented or they're not delayed by the spawn properly.
|
||||
msg("New shift beginning, resuming traffic control. This shift's Colony Frequencies are as follows: Emergency Responders: [ertchannel]. Medical: [medchannel]. Engineering: [engchannel]. Security: [secchannel]. System Defense: [sdfchannel].")
|
||||
next_message = world.time + initial_delay
|
||||
process()
|
||||
|
||||
/datum/lore/atc_controller/process()
|
||||
if(world.time >= next_message)
|
||||
if(squelched)
|
||||
next_message = world.time + backoff_delay
|
||||
else
|
||||
next_message = world.time + rand(delay_min,delay_max)
|
||||
random_convo()
|
||||
|
||||
spawn(1 MINUTE) //We don't really need high-accuracy here.
|
||||
process()
|
||||
|
||||
/datum/lore/atc_controller/proc/msg(var/message,var/sender)
|
||||
ASSERT(message)
|
||||
global_announcer.autosay("[message]", sender ? sender : "[using_map.dock_name] Control")
|
||||
|
||||
/datum/lore/atc_controller/proc/reroute_traffic(var/yes = 1)
|
||||
if(yes)
|
||||
if(!squelched)
|
||||
msg("Rerouting traffic away from [using_map.station_name].")
|
||||
squelched = 1
|
||||
else
|
||||
if(squelched)
|
||||
msg("Resuming normal traffic routing around [using_map.station_name].")
|
||||
squelched = 0
|
||||
|
||||
/datum/lore/atc_controller/proc/shift_ending(var/evac = 0)
|
||||
msg("[using_map.shuttle_name], this is [using_map.dock_name] Control, you are cleared to complete routine transfer from [using_map.station_name] to [using_map.dock_name].")
|
||||
sleep(5 SECONDS)
|
||||
msg("[using_map.shuttle_name] departing [using_map.dock_name] for [using_map.station_name] on routine transfer route. Estimated time to arrival: ten minutes.","[using_map.shuttle_name]")
|
||||
|
||||
/datum/lore/atc_controller/proc/random_convo()
|
||||
var/one = pick(loremaster.organizations) //These will pick an index, not an instance
|
||||
var/two = pick(loremaster.organizations)
|
||||
|
||||
var/datum/lore/organization/source = loremaster.organizations[one] //Resolve to the instances
|
||||
var/datum/lore/organization/secondary = loremaster.organizations[two] //repurposed for new fun stuff
|
||||
|
||||
//Let's get some mission parameters, pick our first ship
|
||||
var/name = source.name //get the name
|
||||
var/owner = source.short_name //Use the short name
|
||||
var/prefix = pick(source.ship_prefixes) //Pick a random prefix
|
||||
var/mission = source.ship_prefixes[prefix] //The value of the prefix is the mission type that prefix does
|
||||
var/shipname = pick(source.ship_names) //Pick a random ship name
|
||||
var/destname = pick(source.destination_names) //destination is where?
|
||||
var/law_abiding = source.lawful //do we fully observe system law (or are we otherwise favored by the system owners, i.e. NT)?
|
||||
var/law_breaker = source.hostile //or are we part of a pirate group
|
||||
var/system_defense = source.sysdef //are we actually system law/SDF? unlocks the SDF-specific events
|
||||
|
||||
//pick our second ship
|
||||
//var/secondname = secondary.name //not used atm, commented out to suppress errors
|
||||
var/secondowner = secondary.short_name
|
||||
var/secondprefix = pick(secondary.ship_prefixes) //Pick a random prefix
|
||||
var/secondshipname = pick(secondary.ship_names) //Pick a random ship name
|
||||
var/law_abiding2 = secondary.lawful
|
||||
var/law_breaker2 = secondary.hostile
|
||||
var/system_defense2 = secondary.sysdef //mostly here as a secondary check to ensure SDF don't interrogate other SDF
|
||||
|
||||
var/combined_first_name = "[owner][prefix] |[shipname]|"
|
||||
var/combined_second_name = "[secondowner][secondprefix] |[secondshipname]|"
|
||||
|
||||
var/alt_atc_names = list("[using_map.dock_name] Traffic Control","[using_map.dock_name] TraCon","[using_map.dock_name] System Control","[using_map.dock_name] Star Control","[using_map.dock_name] SysCon","[using_map.dock_name] Tower","[using_map.dock_name] Control","[using_map.dock_name] STC","[using_map.dock_name] StarCon")
|
||||
var/mission_noun = pick(source.flight_types) //pull from a list of owner-specific flight ops, to allow an extra dash of flavor
|
||||
if(source.complex_tasks) //if our source has the complex_tasks flag, regenerate with a two-stage assignment
|
||||
mission_noun = "[pick(source.task_types)] [pick(source.flight_types)]"
|
||||
|
||||
//First response is 'yes', second is 'no'
|
||||
var/requests = list(
|
||||
"special flight rules" = list("authorizing special flight rules", "denying special flight rules, not allowed for your traffic class"),
|
||||
"current solar weather info" = list("sending you the relevant information via tightbeam", "your request has been queued, stand by"),
|
||||
"aerospace priority" = list("affirmative, aerospace priority is yours", "negative, another vessel has priority right now"),
|
||||
"system traffic info" = list("sending you current traffic info", "request queued, please hold"),
|
||||
"refueling information" = list("sending refueling information now", "depots currently experiencing fuel shortages, advise you move on"),
|
||||
"a current system time sync" = list("sending time sync ping to you now", "your ship isn't compatible with our time sync, set time manually"),
|
||||
"current system starcharts" = list("transmitting current starcharts", "your request is queued, overloaded right now")
|
||||
)
|
||||
|
||||
//Random chance things for variety
|
||||
var/chatter_type = "normal"
|
||||
if(force_chatter_type)
|
||||
chatter_type = force_chatter_type
|
||||
else if(law_abiding && !system_defense) //I have to offload this from the chatter_type switch below and do it here, otherwise BYOND throws a shitfit for no discernable reason
|
||||
chatter_type = pick(5;"emerg",25;"policescan",25;"traveladvisory",30;"pathwarning",30;"dockingrequestgeneric",30;"dockingrequestdenied",30;"dockingrequestdelayed",30;"dockingrequestsupply",30;"dockingrequestrepair",30;"dockingrequestmedical",30;"dockingrequestsecurity",30;"undockingrequest","normal",30;"undockingdenied",30;"undockingdelayed")
|
||||
//the following filters *always* fire their 'unique' event when they're tripped, simply because the conditions behind them are quite rare to begin with
|
||||
else if(name == "Smugglers" && !system_defense2) //just straight up funnel smugglers into always being caught, otherwise we get them asking for traffic info and stuff
|
||||
chatter_type = "policeflee"
|
||||
else if(name == "Smugglers" && system_defense2) //ditto, if an SDF ship catches them
|
||||
chatter_type = "policeshipflee"
|
||||
else if(law_abiding && law_breaker2) //on the offchance that we manage to roll a goodguy and a badguy, run a new distress event - it's like emerg but better
|
||||
chatter_type = "distress"
|
||||
else if(law_breaker && system_defense2) //if we roll this combo instead, time for the SDF to do their fucking job
|
||||
chatter_type = "policeshipcombat"
|
||||
else if(law_breaker && !system_defense2) //but if we roll THIS combo, time to alert the SDF to get off their asses
|
||||
chatter_type = "hostiledetected"
|
||||
//SDF-specific events that need to filter based on the second party (basically just the following SDF-unique list with the soft-result ship scan thrown in)
|
||||
else if(system_defense && law_abiding2 && !system_defense2) //let's see if we can narrow this down, I didn't see many ship-to-ship scans
|
||||
chatter_type = pick(75;"policeshipscan","sdfpatrolupdate",75;"sdfendingpatrol",30;"dockingrequestgeneric",30;"dockingrequestdelayed",30;"dockingrequestsupply",30;"dockingrequestrepair",30;"dockingrequestmedical",30;"dockingrequestsecurity",20;"undockingrequest",75;"sdfbeginpatrol",50;"normal")
|
||||
//SDF-specific events that don't require the secondary at all, in the event that we manage to roll SDF + hostile/smuggler or something
|
||||
else if(system_defense)
|
||||
chatter_type = pick("sdfpatrolupdate",60;"sdfendingpatrol",30;"dockingrequestgeneric",30;"dockingrequestdelayed",30;"dockingrequestsupply",30;"dockingrequestrepair",30;"dockingrequestmedical",30;"dockingrequestsecurity",20;"undockingrequest",80;"sdfbeginpatrol","normal")
|
||||
//if we somehow don't match any of the other existing filters once we've run through all of them
|
||||
else
|
||||
chatter_type = pick(5;"emerg",25;"policescan",25;"traveladvisory",30;"pathwarning",30;"dockingrequestgeneric",30;"dockingrequestdelayed",30;"dockingrequestdenied",30;"dockingrequestsupply",30;"dockingrequestrepair",30;"dockingrequestmedical",30;"dockingrequestsecurity",30;"undockingrequest",30;"undockingdenied",30;"undockingdelayed","normal")
|
||||
//I probably should do some kind of pass here to work through all the possible combinations of major factors and see if the filtering list needs reordering or modifying, but I really can't be arsed
|
||||
|
||||
var/yes = prob(90) //Chance for them to say yes vs no
|
||||
|
||||
var/request = pick(requests)
|
||||
var/callname = pick(alt_atc_names)
|
||||
var/response = requests[request][yes ? 1 : 2] //1 is yes, 2 is no
|
||||
var/number = rand(1,42)
|
||||
var/zone = pick("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")
|
||||
//fallbacks in case someone sets the dock_type on the map datum to null- it defaults to "station" normally
|
||||
var/landing_zone = "LZ [zone]"
|
||||
var/landing_move = "landing request"
|
||||
var/landing_short = "land"
|
||||
switch(using_map.dock_type)
|
||||
if("surface") //formal installations with proper facilities
|
||||
landing_zone = "landing pad [number]"
|
||||
landing_move = "landing request"
|
||||
landing_short = "land"
|
||||
if("frontier") //for frontier bases - landing spots are literally just open ground, maybe concrete at best
|
||||
landing_zone = "LZ [zone]"
|
||||
landing_move = "landing request"
|
||||
landing_short = "land"
|
||||
if("station") //standard station pattern
|
||||
landing_zone = "docking bay [number]"
|
||||
landing_move = "docking request"
|
||||
landing_short = "dock"
|
||||
|
||||
// what you're about to witness is what feels like an extremely kludgy rework of the system, but it's more 'flexible' and allows events that aren't just ship-stc-ship
|
||||
// something more elegant could probably be done, but it won't be done by somebody as half-competent as me
|
||||
switch(chatter_type)
|
||||
//mayday call
|
||||
if("emerg")
|
||||
var/problem = pick("We have hull breaches on multiple decks","We have unknown hostile life forms on board","Our primary drive is failing","We have asteroids impacting the hull","We're experiencing a total loss of engine power","We have hostile ships closing fast","There's smoke in the cockpit","We have unidentified boarders","Our life support has failed")
|
||||
msg("+Mayday, mayday, mayday!+ This is [combined_first_name] declaring an emergency! [problem]!","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control, copy. Switch to emergency responder channel [ertchannel].")
|
||||
sleep(5 SECONDS)
|
||||
msg("Understood [using_map.dock_name] Control, switching now.","[prefix] [shipname]")
|
||||
//Control scan event: soft outcome
|
||||
if("policescan")
|
||||
var/confirm = pick("Understood","Roger that","Affirmative")
|
||||
var/complain = pick("I hope this doesn't take too long.","Can we hurry this up?","Make it quick.","This better not take too long.","Is this really necessary?")
|
||||
var/completed = pick("You're free to proceed.","Everything looks fine, carry on.","You're clear, move along.","Apologies for the delay, you're clear.","Switch to channel [sdfchannel] and await further instruction.")
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control, your [pick("ship","vessel","starship")] has been flagged for routine inspection. Hold position and prepare to be scanned.")
|
||||
sleep(5 SECONDS)
|
||||
msg("[confirm] [using_map.dock_name] Control, holding position.","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("Your compliance is appreciated, [combined_first_name]. Scan commencing.")
|
||||
sleep(10 SECONDS)
|
||||
msg(complain,"[prefix] [shipname]")
|
||||
sleep(15 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Scan complete. [completed]")
|
||||
//Control scan event: hard outcome
|
||||
if("policeflee")
|
||||
var/uhoh = pick("No can do chief, we got places to be.","Sorry but we've got places to be.","Not happening.","Ah fuck, who ratted us out this time?!","You'll never take me alive!","Hey, I have a cloaking device! You can't see me!","I'm going to need to ask for a refund on that stealth drive...","I'm afraid I can't do that, Control.","Ah |hell|.","Fuck!","This isn't the ship you're looking for.","Well. This is awkward.","Uh oh.","I surrender!")
|
||||
msg("Unknown [pick("ship","vessel","starship")], this is [using_map.dock_name] Control, identify yourself and submit to a full inspection. Flying without an active transponder is a violation of system regulations.")
|
||||
sleep(5 SECONDS)
|
||||
msg("[uhoh]","[shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("This is [using_map.starsys_name] Defense Control to all local assets: vector to interdict and detain [combined_first_name]. Control out.","[using_map.starsys_name] Defense Control")
|
||||
//SDF scan event: soft outcome
|
||||
if("policeshipscan")
|
||||
var/confirm = pick("Understood","Roger that","Affirmative")
|
||||
var/complain = pick("I hope this doesn't take too long.","Can we hurry this up?","Make it quick.","This better not take too long.","Is this really necessary?")
|
||||
var/completed = pick("You're free to proceed.","Everything looks fine, carry on.","You're clear. Move along.","Apologies for the delay, you're clear.","Switch to channel [sdfchannel] and await further instruction.")
|
||||
msg("[combined_second_name], this is [combined_first_name], your [pick("ship","vessel","starship")] has been flagged for routine inspection. Hold position and prepare to be scanned.","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[confirm] [combined_first_name], holding position.","[secondprefix] [secondshipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("Your compliance is appreciated, [combined_second_name]. Scan commencing.","[prefix] [shipname]")
|
||||
sleep(10 SECONDS)
|
||||
msg(complain,"[secondprefix] [secondshipname]")
|
||||
sleep(15 SECONDS)
|
||||
msg("[combined_second_name], this is [combined_first_name]. Scan complete. [completed]","[prefix] [shipname]")
|
||||
//SDF scan event: hard outcome
|
||||
if("policeshipflee")
|
||||
var/uhoh = pick("No can do chief, we got places to be.","Sorry but we've got places to be.","Not happening.","Ah fuck, who ratted us out this time?!","You'll never take me alive!","Hey, I have a cloaking device! You can't see me!","I'm going to need to ask for a refund on that stealth drive...","I'm afraid I can't do that, |[shipname]|.","Ah |hell|.","Fuck!","This isn't the ship you're looking for.","Well. This is awkward.","Uh oh.","I surrender!")
|
||||
msg("Unknown [pick("ship","vessel","starship")], this is [combined_second_name], identify yourself and submit to a full inspection. Flying without an active transponder is a violation of system regulations.","[secondprefix] [secondshipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[uhoh]","[shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[using_map.starsys_name] Defense Control, this is [combined_second_name], we have a situation here, please advise.","[secondprefix] [secondshipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("Defense Control copies, [combined_second_name], reinforcements are en route. Switch further communications to encrypted band [sdfchannel].","[using_map.starsys_name] Defense Control")
|
||||
//SDF scan event: engage primary in combat! fairly rare since it needs a pirate/vox + SDF roll
|
||||
if("policeshipcombat")
|
||||
var/battlestatus = pick("requesting reinforcements.","we need backup! Now!","holding steady.","we're holding our own for now.","we have them on the run.","they're trying to make a run for it!","we have them right where we want them.","we're badly outgunned!","we have them outgunned.","we're outnumbered here!","we have them outnumbered.","this'll be a cakewalk.",10;"notify their next of kin.")
|
||||
msg("[using_map.starsys_name] Defense Control, this is [combined_second_name], engaging [combined_first_name] [pick("near route","in sector")] [rand(1,100)], [battlestatus]","[secondprefix] [secondshipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[using_map.starsys_name] Defense Control copies, [combined_second_name]. Keep us updated.","[using_map.starsys_name] Defense Control")
|
||||
//SDF event: patrol update
|
||||
if("sdfpatrolupdate")
|
||||
var/statusupdate = pick("nothing unusual so far","nothing of note","everything looks clear so far","ran off some [pick("pirates","marauders")] near route [pick(1,100)], [pick("no","minor")] damage sustained, continuing patrol","situation normal, no suspicious activity yet","minor incident on route [pick(1,100)]","Code 7-X [pick("on route","in sector")] [pick(1,100)], situation is under control","seeing a lot of traffic on route [pick(1,100)]","caught a couple of smugglers [pick("on route","in sector")] [pick(1,100)]","sustained some damage in a skirmish just now, we're heading back for repairs")
|
||||
msg("[using_map.starsys_name] Defense Control, this is [combined_first_name] reporting in, [statusupdate], over.","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[using_map.starsys_name] Defense Control copies, [combined_first_name]. Keep us updated, out.","[using_map.starsys_name] Defense Control")
|
||||
//SDF event: end patrol
|
||||
if("sdfendingpatrol")
|
||||
var/appreciation = pick("Copy","Understood","Affirmative","10-4","Roger that")
|
||||
var/dockingplan = pick("Starting final approach now.","Commencing landing procedures.","Autopilot engaged.","Approach vector locked in.","In the pipe, five by five.")
|
||||
msg("[callname], this is [combined_first_name], returning from our system patrol route, requesting permission to [landing_short].","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
|
||||
sleep(5 SECONDS)
|
||||
msg("[appreciation], [using_map.dock_name] Control. [dockingplan]","[prefix] [shipname]")
|
||||
//DefCon event: hostile found
|
||||
if("hostiledetected")
|
||||
var/orders = pick("Engage on sight","Engage with caution","Engage with extreme prejudice","Engage at will","Search and destroy","Bring them in alive, if possible","Interdict and detain","Keep your eyes peeled","Bring them in, dead or alive","Stay alert")
|
||||
msg("This is [using_map.starsys_name] Defense Control to all SDF assets. Priority update follows.","[using_map.starsys_name] Defense Control")
|
||||
sleep(5 SECONDS)
|
||||
msg("Be on the lookout for [combined_first_name], last sighted near route [rand(1,100)]. [orders]. DefCon, out.","[using_map.starsys_name] Defense Control")
|
||||
//Ship event: distress call, under attack
|
||||
if("distress")
|
||||
msg("+Mayday, mayday, mayday!+ This is [combined_first_name] declaring an emergency! We are under attack by [combined_second_name]! Requesting immediate assistance!","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.starsys_name] Defense Control, copy. SDF is en route, contact on [sdfchannel].")
|
||||
sleep(5 SECONDS)
|
||||
msg("Understood [using_map.starsys_name] Defense Control, switching now.","[prefix] [shipname]")
|
||||
//Control event: travel advisory
|
||||
if("traveladvisory")
|
||||
var/flightwarning = pick("Solar flare activity is spiking and expected to cause issues along main flight lanes [rand(1,33)], [rand(34,67)], and [rand(68,100)]","Pirate activity is on the rise, stay close to System Defense vessels","We're seeing a rise in illegal salvage operations, please report any unusual activity to the nearest SDF vessel via channel [sdfchannel]","Vox Marauder activity is higher than usual, report any unusual activity to the nearest System Defense vessel","A quarantined [pick("fleet","convoy")] is passing through the system along route [rand(1,100)], please observe minimum safe distance","A prison [pick("fleet","convoy")] is passing through the system along route [rand(1,100)], please observe minimum safe distance","Traffic volume is higher than normal, expect processing delays","Anomalous bluespace activity detected along route [rand(1,100)], exercise caution","Smugglers have been particularly active lately, expect increased security scans","Depots are currently experiencing a fuel shortage, expect delays and higher rates","Asteroid mining has displaced debris dangerously close to main flight lanes on route [rand(1,100)], watch for potential impactors","[pick("Pirate","Vox Marauder")] and System Defense forces are currently engaged in skirmishes throughout the system, please steer clear of any active combat zones","A [pick("fuel tanker","cargo liner","passenger liner","freighter","transport ship")] has collided with a [pick("fuel tanker","cargo liner","passenger liner","freighter","transport ship")] near route [rand(1,100)], watch for debris and do not impede emergency service vessels","A [pick("fuel tanker","cargo liner","passenger liner","freighter","transport ship")] on route [rand(1,100)] has experienced total engine failure. Emergency response teams are en route, please observe minimum safe distances and do not impede emergency service vessels","Transit routes have been recalculated to adjust for planetary drift. Please synch your astronav computers as soon as possible to avoid delays and difficulties","[pick("Bounty hunters","System Defense officers","Mercenaries")] are currently searching for a wanted fugitive, report any sightings of suspicious activity to System Defense via channel [sdfchannel]","Mercenary contractors are currently conducting aggressive [pick("piracy","marauder")] suppression operations",10;"It's space carp breeding season. [pick("Stars","Gods","God","Goddess")] have mercy on you all, because the carp won't")
|
||||
msg("This is [using_map.dock_name] Control to all vessels in the [using_map.starsys_name] system. Priority travel advisory follows.")
|
||||
sleep(5 SECONDS)
|
||||
msg("[flightwarning]. Control out.")
|
||||
//Control event: warning to a specific vessel
|
||||
if("pathwarning")
|
||||
var/navhazard = pick("a pocket of intense radiation","a pocket of unstable gas","a debris field","a secure installation","an active combat zone","a quarantined ship","a quarantined installation","a quarantined sector","a live-fire SDF training exercise","an ongoing Search & Rescue operation")
|
||||
var/confirm = pick("Understood","Roger that","Affirmative","Our bad","Thanks for the heads up")
|
||||
var/safetravels = pick("Fly safe out there","Good luck","Safe travels","Godspeed","Stars guide you","Don't let it happen again")
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control, your [pick("ship","vessel","starship")] is approaching [navhazard], observe minimum safe distance and adjust your heading appropriately.")
|
||||
sleep(5 SECONDS)
|
||||
msg("[confirm] [using_map.dock_name] Control, adjusting course.","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("Your compliance is appreciated, [combined_first_name]. [safetravels].")
|
||||
//Ship event: docking request (generic)
|
||||
if("dockingrequestgeneric")
|
||||
var/appreciation = pick("Much appreciated","Many thanks","Understood","Cheers")
|
||||
var/dockingplan = pick("Starting final approach now.","Commencing landing procedures.","Autopilot engaged.","Approach vector locked in.","In the pipe, five by five.")
|
||||
msg("[callname], this is [combined_first_name], [pick("stopping by","passing through")] on our way to [destname], requesting permission to [landing_short].","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
|
||||
sleep(5 SECONDS)
|
||||
msg("[appreciation], [using_map.dock_name] Control. [dockingplan]","[prefix] [shipname]")
|
||||
//Ship event: docking request (denied)
|
||||
if("dockingrequestdenied")
|
||||
var/reason = pick("we don't have any landing pads large enough for your vessel","we don't have the necessary facilities for your vessel type or class")
|
||||
var/disappointed = pick("That's unfortunate. [combined_first_name], out.","Damn shame. We'll just have to keep moving. [combined_first_name], out.","[combined_first_name], out.")
|
||||
msg("[callname], this is [combined_first_name], [pick("stopping by","passing through")] on our way to [destname], requesting permission to [landing_move].","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Request denied, [reason].")
|
||||
sleep(5 SECONDS)
|
||||
msg("Understood, [using_map.dock_name] Control. [disappointed]","[prefix] [shipname]")
|
||||
//Ship event: docking request (delayed)
|
||||
if("dockingrequestdelayed")
|
||||
var/reason = pick("we don't have any free landing pads right now, please hold for three minutes","you're too far away, please close to ten thousand meters","we're seeing heavy traffic around the landing pads right now, please hold for three minutes","we're currently cleaning up a fuel spill on one of our free pads, please hold for three minutes","there are loose containers on our free pads, stand by for a couple of minutes whilst we secure them","another vessel has aerospace priority right now, please hold for three minutes")
|
||||
var/appreciation = pick("Much appreciated","Many thanks","Understood","Perfect, thank you","Excellent, thanks","Great","Copy that")
|
||||
var/dockingplan = pick("Starting final approach now.","Commencing landing procedures.","Autopilot engaged.","Approach vector locked in.","In the pipe, five by five.")
|
||||
msg("[callname], this is [combined_first_name], [pick("stopping by","passing through")] on our way to [destname], requesting permission to [landing_short].","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Request denied, [reason] and resubmit your request.")
|
||||
sleep(5 SECONDS)
|
||||
msg("Understood, [using_map.dock_name] Control.","[prefix] [shipname]")
|
||||
sleep(180 SECONDS)
|
||||
msg("[callname], this is [combined_first_name], resubmitting [landing_move].","[prefix] [shipname]")
|
||||
sleep (5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Everything appears to be in order now, permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
|
||||
sleep(5 SECONDS)
|
||||
msg("[appreciation], [using_map.dock_name] Control. [dockingplan]","[prefix] [shipname]")
|
||||
//Ship event: docking request (resupply)
|
||||
if("dockingrequestsupply")
|
||||
var/preintensifier = pick(75;"getting ",75;"running ","") //whitespace hack, sometimes they'll add a preintensifier, but not always
|
||||
var/intensifier = pick("very","pretty","critically","extremely","dangerously","desperately","kinda","a little","a bit","rather","sorta")
|
||||
var/low_thing = pick("ammunition","munitions","clean water","food","spare parts","medical supplies","reaction mass","gas","hydrogen fuel","phoron fuel","fuel",10;"tea",10;"coffee",10;"soda",10;"pizza",10;"beer",10;"booze",10;"vodka",10;"snacks") //low chance of a less serious shortage
|
||||
var/appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","We owe you one","I owe you one","Perfect, thank you")
|
||||
var/dockingplan = pick("Starting final approach now.","Commencing landing procedures.","Autopilot engaged.","Approach vector locked in.","In the pipe, five by five.")
|
||||
msg("[callname], this is [combined_first_name]. We're [preintensifier][intensifier] low on [low_thing]. Requesting permission to [landing_short] for resupply.","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
|
||||
sleep(5 SECONDS)
|
||||
msg("[appreciation], [using_map.dock_name] Control. [dockingplan]","[prefix] [shipname]")
|
||||
//Ship event: docking request (repair/maint)
|
||||
if("dockingrequestrepair")
|
||||
var/damagestate = pick("We've experienced some hull damage","We're suffering minor system malfunctions","We're having some technical issues","We're overdue maintenance","We have several minor space debris impacts","We've got some battle damage here","Our reactor output is fluctuating","We're hearing some weird noises from the [pick("engines","pipes","ducting","HVAC")]","Our artificial gravity generator has failed","Our life support is failing","Our environmental controls are busted","Our water recycling system has shorted out","Our navcomp is freaking out","Our systems are glitching out","We just got caught in a solar flare","We had a close call with an asteroid","We have a minor [pick("fuel","water","oxygen","gas")] leak","We have depressurized compartments","We have a hull breach","Our shield generator is on the fritz","Our RCS is acting up","One of our [pick("hydraulic","pneumatic")] systems has depressurized","Our repair bots are malfunctioning")
|
||||
var/appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","We owe you one","I owe you one","Perfect, thank you")
|
||||
var/dockingplan = pick("Starting final approach now.","Commencing landing procedures.","Autopilot engaged.","Approach vector locked in.","In the pipe, five by five.")
|
||||
msg("[callname], this is [combined_first_name]. [damagestate]. Requesting permission to [landing_short] for repairs and maintenance.","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in. Repair crews are standing by, contact them on channel [engchannel].")
|
||||
sleep(5 SECONDS)
|
||||
msg("[appreciation], [using_map.dock_name] Control. [dockingplan]","[prefix] [shipname]")
|
||||
//Ship event: docking request (medical)
|
||||
if("dockingrequestmedical")
|
||||
var/medicalstate = pick("multiple casualties","several cases of radiation sickness","an unknown virus","an unknown infection","a critically injured VIP","sick refugees","multiple cases of food poisoning","injured passengers","sick passengers","injured engineers","wounded marines","a delicate situation","a pregnant passenger","injured castaways","recovered escape pods","unknown escape pods")
|
||||
var/appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","We owe you one","I owe you one","Perfect, thank you")
|
||||
var/dockingplan = pick("Starting final approach now.","Commencing landing procedures.","Autopilot engaged.","Approach vector locked in.","In the pipe, five by five.")
|
||||
msg("[callname], this is [combined_first_name]. We have [medicalstate] on board. Requesting permission to [landing_short] for medical assistance.","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in. Medtechs are standing by, contact them on channel [medchannel].")
|
||||
sleep(5 SECONDS)
|
||||
msg("[appreciation], [using_map.dock_name] Control. [dockingplan]","[prefix] [shipname]")
|
||||
//Ship event: docking request (security)
|
||||
if("dockingrequestsecurity")
|
||||
var/species = pick("human","unathi","lizard","tajaran","feline","skrell","akula","promethean","sergal","synthetic","robotic","teshari","avian","vulpkanin","canine","vox","zorren","hybrid","mixed-species","vox","grey","alien")
|
||||
var/securitystate = pick("several [species] convicts","a captured pirate","a wanted criminal","[species] stowaways","incompetent [species] shipjackers","a delicate situation","a disorderly passenger","disorderly [species] passengers","ex-mutineers","a captured vox marauder","captured vox marauders","stolen goods","a container full of confiscated contraband","containers full of confiscated contraband",5;"a very lost shadekin",5;"a raging case of [pick("spiders","crabs")]") //gotta have a little something to lighten the mood now and then
|
||||
var/appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","Perfect, thank you")
|
||||
var/dockingplan = pick("Starting final approach now.","Commencing docking procedures.","Autopilot engaged.","Approach vector locked in.","In the pipe, five by five.")
|
||||
msg("[callname], this is [combined_first_name]. We have [securitystate] on board and require security assistance. Requesting permission to [landing_short].","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in. Security teams are standing by, contact them on channel [secchannel].")
|
||||
sleep(5 SECONDS)
|
||||
msg("[appreciation], [using_map.dock_name] Control. [dockingplan]","[prefix] [shipname]")
|
||||
//Ship event: undocking request
|
||||
if("undockingrequest")
|
||||
var/safetravels = pick("Fly safe out there","Good luck","Safe travels","See you next week","Godspeed","Stars guide you")
|
||||
var/thanks = pick("Appreciated","Thanks","Don't worry about us","We'll be fine","You too","So long")
|
||||
var/takeoff = pick("depart","launch")
|
||||
msg("[callname], this is [combined_first_name], requesting permission to [takeoff] from [landing_zone].","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted. Docking clamps released. [safetravels].")
|
||||
sleep(5 SECONDS)
|
||||
msg("[thanks], [using_map.dock_name] Control. This is [combined_first_name] setting course for [destname], out.","[prefix] [shipname]")
|
||||
//SDF event: starting patrol
|
||||
if("sdfbeginpatrol")
|
||||
var/safetravels = pick("Fly safe out there","Good luck","Good hunting","Safe travels","Godspeed","Stars guide you")
|
||||
var/thanks = pick("Appreciated","Thanks","Don't worry about us","We'll be fine","You too")
|
||||
var/takeoff = pick("depart","launch","take off","dust off")
|
||||
msg("[callname], this is [combined_first_name], requesting permission to [takeoff] from [landing_zone] to begin system patrol.","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted. Docking clamps released. [safetravels].")
|
||||
sleep(5 SECONDS)
|
||||
msg("[thanks], [using_map.dock_name] Control. This is [combined_first_name] beginning system patrol, out.","[prefix] [shipname]")
|
||||
//Ship event: undocking request (denied)
|
||||
if("undockingdenied")
|
||||
var/takeoff = pick("depart","launch")
|
||||
var/denialreason = pick("Security is requesting a full cargo inspection","Your ship has been impounded for multiple [pick("security","safety")] violations","Your ship is currently under quarantine lockdown","We have reason to believe there's an issue with your papers","Security personnel are currently searching for a fugitive and have ordered all outbound ships remain grounded until further notice")
|
||||
msg("[callname], this is [combined_first_name], requesting permission to [takeoff] from [landing_zone].","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("Negative [combined_first_name], request denied. [denialreason].")
|
||||
//Ship event: undocking request (delayed)
|
||||
if("undockingdelayed")
|
||||
var/denialreason = pick("Docking clamp malfunction, please hold","Fuel lines have not been secured","Ground crew are still on the pad","Loose containers are on the pad","Exhaust deflectors are not yet in position, please hold","There's heavy traffic right now, it's not safe for your vessel to launch","Another vessel has aerospace priority at this moment","Port officials are still aboard")
|
||||
var/takeoff = pick("depart","launch")
|
||||
var/safetravels = pick("Fly safe out there","Good luck","Safe travels","See you next week","Godspeed","Stars guide you")
|
||||
var/thanks = pick("Appreciated","Thanks","Don't worry about us","We'll be fine","You too","So long")
|
||||
msg("[callname], this is [combined_first_name], requesting permission to [takeoff] from [landing_zone].","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("Negative [combined_first_name], request denied. [denialreason]. Try again in three minutes.")
|
||||
sleep(180 SECONDS) //yes, three minutes
|
||||
msg("[callname], this is [combined_first_name], re-requesting permission to depart from [landing_zone].","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control. Everything appears to be in order now, permission granted. Docking clamps released. [safetravels].")
|
||||
sleep(5 SECONDS)
|
||||
msg("[thanks], [using_map.dock_name] Control. This is [combined_first_name] setting course for [destname], out.","[prefix] [shipname]")
|
||||
else //time for generic message
|
||||
msg("[callname], this is [combined_first_name] on [mission] [pick(mission_noun)] to [destname], requesting [request].","[prefix] [shipname]")
|
||||
sleep(5 SECONDS)
|
||||
msg("[combined_first_name], this is [using_map.dock_name] Control, [response].")
|
||||
sleep(5 SECONDS)
|
||||
msg("[using_map.dock_name] Control, [yes ? "thank you" : "understood"], out.","[prefix] [shipname]")
|
||||
return //oops, forgot to restore this
|
||||
|
||||
/* //OLD BLOCK, for reference
|
||||
//Ship sends request to ATC
|
||||
msg(full_request,"[prefix] [shipname]"
|
||||
sleep(5 SECONDS)
|
||||
//ATC sends response to ship
|
||||
msg(full_response)
|
||||
sleep(5 SECONDS)
|
||||
//Ship sends response to ATC
|
||||
msg(full_closure,"[prefix] [shipname]")
|
||||
return
|
||||
*/
|
||||
16
code/modules/busy_space_vr/loremaster.dm
Normal file
@@ -0,0 +1,16 @@
|
||||
//I AM THE LOREMASTER, ARE YOU THE GATEKEEPER?
|
||||
|
||||
var/datum/lore/loremaster/loremaster = new/datum/lore/loremaster
|
||||
|
||||
/datum/lore/loremaster
|
||||
var/list/organizations = list()
|
||||
|
||||
/datum/lore/loremaster/New()
|
||||
|
||||
var/list/paths = typesof(/datum/lore/organization) - /datum/lore/organization
|
||||
for(var/path in paths)
|
||||
// Some intermediate paths are not real organizations (ex. /datum/lore/organization/mil). Only do ones with names
|
||||
var/datum/lore/organization/instance = path
|
||||
if(initial(instance.name))
|
||||
instance = new path()
|
||||
organizations[path] = instance
|
||||
2783
code/modules/busy_space_vr/organizations.dm
Normal file
@@ -352,9 +352,9 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
|
||||
name = "TSC - Major Bill's Transportation"
|
||||
datum_to_copy = /datum/lore/organization/tsc/mbt
|
||||
|
||||
/datum/category_item/catalogue/information/organization/solgov
|
||||
name = "Government - Solar Confederate Government"
|
||||
datum_to_copy = /datum/lore/organization/gov/solgov
|
||||
/datum/category_item/catalogue/information/organization/commonwealth //VS EDIT 1
|
||||
name = "Government - Commonwealth of Sol-Procyon" //VS EDIT 2
|
||||
datum_to_copy = /datum/lore/organization/gov/commonwealth //VS EDIT 3
|
||||
|
||||
/* //VOREStation Removal
|
||||
/datum/category_item/catalogue/information/organization/virgov
|
||||
|
||||
@@ -66,6 +66,6 @@
|
||||
|
||||
/*
|
||||
/datum/category_item/catalogue/information/organization/khi
|
||||
name = "Government - Kitsuhana Heavy Industries"
|
||||
datum_to_copy = /datum/lore/organization/gov/kitsuhana
|
||||
name = "Independents - Kitsuhana Heavy Industries"
|
||||
datum_to_copy = /datum/lore/organization/other/kitsuhana
|
||||
*/
|
||||
@@ -223,34 +223,6 @@ You can set verify to TRUE if you want send() to sleep until the client has the
|
||||
return "<span class='[name] [icon_state]-[dir2text(dir)]'></span>"
|
||||
|
||||
//DEFINITIONS FOR ASSET DATUMS START HERE.
|
||||
/datum/asset/simple/pda
|
||||
assets = list(
|
||||
"pda_atmos.png" = 'icons/pda_icons/pda_atmos.png',
|
||||
"pda_back.png" = 'icons/pda_icons/pda_back.png',
|
||||
"pda_bell.png" = 'icons/pda_icons/pda_bell.png',
|
||||
"pda_blank.png" = 'icons/pda_icons/pda_blank.png',
|
||||
"pda_boom.png" = 'icons/pda_icons/pda_boom.png',
|
||||
"pda_bucket.png" = 'icons/pda_icons/pda_bucket.png',
|
||||
"pda_crate.png" = 'icons/pda_icons/pda_crate.png',
|
||||
"pda_cuffs.png" = 'icons/pda_icons/pda_cuffs.png',
|
||||
"pda_eject.png" = 'icons/pda_icons/pda_eject.png',
|
||||
"pda_exit.png" = 'icons/pda_icons/pda_exit.png',
|
||||
"pda_flashlight.png" = 'icons/pda_icons/pda_flashlight.png',
|
||||
"pda_honk.png" = 'icons/pda_icons/pda_honk.png',
|
||||
"pda_mail.png" = 'icons/pda_icons/pda_mail.png',
|
||||
"pda_medical.png" = 'icons/pda_icons/pda_medical.png',
|
||||
"pda_menu.png" = 'icons/pda_icons/pda_menu.png',
|
||||
"pda_mule.png" = 'icons/pda_icons/pda_mule.png',
|
||||
"pda_notes.png" = 'icons/pda_icons/pda_notes.png',
|
||||
"pda_power.png" = 'icons/pda_icons/pda_power.png',
|
||||
"pda_rdoor.png" = 'icons/pda_icons/pda_rdoor.png',
|
||||
"pda_reagent.png" = 'icons/pda_icons/pda_reagent.png',
|
||||
"pda_refresh.png" = 'icons/pda_icons/pda_refresh.png',
|
||||
"pda_scanner.png" = 'icons/pda_icons/pda_scanner.png',
|
||||
"pda_signaler.png" = 'icons/pda_icons/pda_signaler.png',
|
||||
"pda_status.png" = 'icons/pda_icons/pda_status.png'
|
||||
)
|
||||
|
||||
/datum/asset/simple/generic
|
||||
assets = list(
|
||||
"search.js" = 'html/search.js',
|
||||
@@ -261,20 +233,6 @@ You can set verify to TRUE if you want send() to sleep until the client has the
|
||||
"talisman.png" = 'html/images/talisman.png',
|
||||
"paper_bg.png" = 'html/images/paper_bg.png',
|
||||
"no_image32.png" = 'html/images/no_image32.png',
|
||||
"sos_1.png" = 'icons/spideros_icons/sos_1.png',
|
||||
"sos_2.png" = 'icons/spideros_icons/sos_2.png',
|
||||
"sos_3.png" = 'icons/spideros_icons/sos_3.png',
|
||||
"sos_4.png" = 'icons/spideros_icons/sos_4.png',
|
||||
"sos_5.png" = 'icons/spideros_icons/sos_5.png',
|
||||
"sos_6.png" = 'icons/spideros_icons/sos_6.png',
|
||||
"sos_7.png" = 'icons/spideros_icons/sos_7.png',
|
||||
"sos_8.png" = 'icons/spideros_icons/sos_8.png',
|
||||
"sos_9.png" = 'icons/spideros_icons/sos_9.png',
|
||||
"sos_10.png" = 'icons/spideros_icons/sos_10.png',
|
||||
"sos_11.png" = 'icons/spideros_icons/sos_11.png',
|
||||
"sos_12.png" = 'icons/spideros_icons/sos_12.png',
|
||||
"sos_13.png" = 'icons/spideros_icons/sos_13.png',
|
||||
"sos_14.png" = 'icons/spideros_icons/sos_14.png'
|
||||
)
|
||||
|
||||
/datum/asset/simple/changelog
|
||||
|
||||
@@ -53,8 +53,8 @@
|
||||
var/related_accounts_cid = "(Requires database)" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id
|
||||
var/account_join_date = "(Requires database)"
|
||||
var/account_age = "(Requires database)"
|
||||
var/list/department_hours // VOREStation Edit - Track hours of leave accured for each department.
|
||||
var/list/play_hours // VOREStation Edit - Tracks total playtime hours for each departments.
|
||||
var/list/department_hours = list() // VOREStation Edit - Track hours of leave accured for each department.
|
||||
var/list/play_hours = list() // VOREStation Edit - Tracks total playtime hours for each departments.
|
||||
|
||||
preload_rsc = PRELOAD_RSC
|
||||
|
||||
|
||||
@@ -360,14 +360,16 @@
|
||||
log_admin("Couldn't perform IP check on [key] with [address]")
|
||||
|
||||
// VOREStation Edit Start - Department Hours
|
||||
if(config.time_off)
|
||||
var/DBQuery/query_hours = dbcon.NewQuery("SELECT department, hours, total_hours FROM vr_player_hours WHERE ckey = '[sql_ckey]'")
|
||||
query_hours.Execute()
|
||||
LAZYINITLIST(department_hours)
|
||||
LAZYINITLIST(play_hours)
|
||||
var/DBQuery/query_hours = dbcon.NewQuery("SELECT department, hours, total_hours FROM vr_player_hours WHERE ckey = '[sql_ckey]'")
|
||||
if(query_hours.Execute())
|
||||
while(query_hours.NextRow())
|
||||
department_hours[query_hours.item[1]] = text2num(query_hours.item[2])
|
||||
play_hours[query_hours.item[1]] = text2num(query_hours.item[3])
|
||||
else
|
||||
var/error_message = query_hours.ErrorMsg() // Need this out here since the spawn below will split the stack and who knows what'll happen by the time it runs
|
||||
log_debug("Error loading play hours for [ckey]: [error_message]")
|
||||
spawn(0)
|
||||
alert(src, "The query to load your existing playtime failed. Screenshot this, give the screenshot to a developer, and reconnect, otherwise you may lose any recorded play hours (which may limit access to jobs). ERROR: [error_message]", "PROBLEMS!!")
|
||||
// VOREStation Edit End - Department Hours
|
||||
|
||||
if(sql_id)
|
||||
|
||||
@@ -1115,6 +1115,19 @@
|
||||
ckeywhitelist = list("xonkon")
|
||||
character_name = list("Ali")
|
||||
|
||||
/datum/gear/fluff/zena_suit
|
||||
path = /obj/item/clothing/suit/space/void/engineering/zena
|
||||
display_name = "Zena's Shroud Suit"
|
||||
ckeywhitelist = list("xonkon")
|
||||
character_name = list("Zena Aviv")
|
||||
|
||||
/datum/gear/fluff/zena_helmet
|
||||
path = /obj/item/clothing/head/helmet/space/void/engineering/zena
|
||||
display_name = "Zena's Shroud Helmet"
|
||||
ckeywhitelist = list("xonkon")
|
||||
character_name = list("Zena Aviv")
|
||||
|
||||
|
||||
// Y CKEYS
|
||||
|
||||
// Z CKEYS
|
||||
|
||||
@@ -50,3 +50,20 @@
|
||||
display_name = "sleek modern coat (long), detective"
|
||||
path = /obj/item/clothing/suit/storage/det_trench/alt2
|
||||
allowed_roles = list("Head of Security", "Detective")
|
||||
|
||||
//Emergency Responder jackets for Parameds & EMTs, but also general Medical Staff
|
||||
/datum/gear/suit/roles/medical/ems_jacket
|
||||
display_name = "first responder jacket"
|
||||
path = /obj/item/clothing/suit/storage/toggle/fr_jacket
|
||||
allowed_roles = list("Chief Medical Officer","Paramedic","Medical Doctor")
|
||||
|
||||
//imo-superior 'martian' style jacket with the star-of-life design
|
||||
/datum/gear/suit/roles/medical/ems_jacket/alt
|
||||
display_name = "first responder jacket, alt."
|
||||
path = /obj/item/clothing/suit/storage/toggle/fr_jacket/ems
|
||||
|
||||
//paramedic vest
|
||||
/datum/gear/suit/roles/medical/paramedic_vest
|
||||
display_name = "paramedic vest"
|
||||
path = /obj/item/clothing/suit/storage/toggle/paramedic
|
||||
allowed_roles = list("Chief Medical Officer","Paramedic","Medical Doctor")
|
||||
@@ -61,6 +61,17 @@
|
||||
item_flags = AIRTIGHT
|
||||
body_parts_covered = EYES
|
||||
|
||||
/obj/item/clothing/glasses/graviton/medgravpatch
|
||||
name = "medical graviton eyepatch"
|
||||
desc = "A graviton eyepatch with a medical overlay."
|
||||
icon = 'icons/obj/clothing/glasses_vr.dmi'
|
||||
icon_override = 'icons/mob/eyes_vr.dmi'
|
||||
icon_state = "medgravpatch"
|
||||
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
|
||||
action_button_name = "Toggle Eyepatch"
|
||||
off_state = "eyepatch"
|
||||
enables_planes = list(VIS_CH_STATUS,VIS_CH_HEALTH,VIS_FULLBRIGHT,VIS_MESONS)
|
||||
|
||||
/*---Tajaran-specific Eyewear---*/
|
||||
|
||||
/obj/item/clothing/glasses/tajblind
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
icon_state = "autoloksuit"
|
||||
item_state = "autoloksuit"
|
||||
armor = list(melee = 15, bullet = 5, laser = 5,energy = 5, bomb = 5, bio = 100, rad = 80)
|
||||
slowdown = 0
|
||||
slowdown = 0.5
|
||||
siemens_coefficient = 1
|
||||
species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX) //this thing can autoadapt
|
||||
icon = 'icons/obj/clothing/suits_vr.dmi'
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
/datum/lore/codex/category/important_locations,
|
||||
/datum/lore/codex/category/species,
|
||||
/datum/lore/codex/category/auto_org/tsc,
|
||||
/datum/lore/codex/category/auto_org/other,
|
||||
/datum/lore/codex/category/auto_org/gov,
|
||||
/datum/lore/codex/category/auto_org/mil,
|
||||
/datum/lore/codex/category/political_factions,
|
||||
|
||||
@@ -27,13 +27,17 @@
|
||||
the biggest and most influential of them all. Some people also categorize the different TSCs into 'major' and 'minor' TSCs."
|
||||
desired_type = /datum/lore/organization/tsc
|
||||
|
||||
/datum/lore/codex/category/auto_org/other
|
||||
name = "Other Factions"
|
||||
auto_keywords = list("KHI","SDF","Smuggler","Smugglers","Pirate","Pirates")
|
||||
desired_type = /datum/lore/organization/other
|
||||
|
||||
/datum/lore/codex/category/auto_org/gov
|
||||
name = "Governments"
|
||||
auto_keywords = list("Gov","Government","Governments")
|
||||
desired_type = /datum/lore/organization/gov
|
||||
|
||||
|
||||
/datum/lore/codex/category/auto_org/mil
|
||||
name = "Militaries"
|
||||
name = "Military Forces & PMCs"
|
||||
auto_keywords = list("Mil","Military", "Militaries")
|
||||
desired_type = /datum/lore/organization/mil
|
||||
|
||||
@@ -83,3 +83,8 @@
|
||||
/material/durasteel/generate_recipes()
|
||||
. = ..()
|
||||
recipes += new/datum/stack_recipe("durasteel fishing rod", /obj/item/weapon/material/fishing_rod/modern/strong, 2)
|
||||
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 30)
|
||||
|
||||
/material/plastitanium/generate_recipes()
|
||||
. = ..()
|
||||
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 20)
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
if(ispath(cell))
|
||||
cell = new cell(src)
|
||||
default_apply_parts()
|
||||
default_use_hicell()
|
||||
cell = default_use_hicell()
|
||||
|
||||
/obj/machinery/mining/drill/loaded
|
||||
cell = /obj/item/weapon/cell/high
|
||||
|
||||
@@ -110,9 +110,6 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_eye_colour,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_hair_colors,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_gender,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_wings, //VOREStation Add,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_tail, //VOREStation Add,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_ears, //VOREStation Add,
|
||||
/mob/living/carbon/human/proc/regenerate
|
||||
)
|
||||
|
||||
@@ -186,35 +183,35 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
if(istype(T))
|
||||
if(!(H.shoes || (H.wear_suit && (H.wear_suit.body_parts_covered & FEET))))
|
||||
for(var/obj/O in T)
|
||||
O.clean_blood()
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if(O.clean_blood())
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if (istype(T, /turf/simulated))
|
||||
var/turf/simulated/S = T
|
||||
T.clean_blood()
|
||||
S.dirt = 0
|
||||
//VOREStation Edit Start
|
||||
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
|
||||
if(T.clean_blood())
|
||||
H.adjust_nutrition(rand(10, 20))
|
||||
if(S.dirt > 50)
|
||||
S.dirt = 0
|
||||
H.adjust_nutrition(rand(10, 20))
|
||||
if(H.clean_blood(1))
|
||||
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if(H.r_hand)
|
||||
if(H.r_hand.clean_blood())
|
||||
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if(H.l_hand)
|
||||
if(H.l_hand.clean_blood())
|
||||
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if(H.head)
|
||||
if(H.head.clean_blood())
|
||||
H.update_inv_head(0)
|
||||
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if(H.wear_suit)
|
||||
if(H.wear_suit.clean_blood())
|
||||
H.update_inv_wear_suit(0)
|
||||
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if(H.w_uniform)
|
||||
if(H.w_uniform.clean_blood())
|
||||
H.update_inv_w_uniform(0)
|
||||
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
|
||||
//VOREStation Edit End
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
//End cleaning code.
|
||||
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_hair_colors,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_gender,
|
||||
/mob/living/carbon/human/proc/regenerate,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_wings,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_tail,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_ears,
|
||||
/mob/living/proc/set_size,
|
||||
/mob/living/carbon/human/proc/succubus_drain,
|
||||
/mob/living/carbon/human/proc/succubus_drain_finalize,
|
||||
|
||||
@@ -155,7 +155,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
layer = MOB_LAYER -0.01 // Fix for a byond bug where turf entry order no longer matters
|
||||
else
|
||||
M.Scale(desired_scale_x, desired_scale_y)
|
||||
M.Translate(0, 16*(desired_scale_y-1))
|
||||
M.Translate(0, (vis_height/2)*(desired_scale_y-1)) //VOREStation edit
|
||||
layer = MOB_LAYER // Fix for a byond bug where turf entry order no longer matters
|
||||
|
||||
animate(src, transform = M, time = anim_time)
|
||||
|
||||
@@ -1,2 +1,8 @@
|
||||
/datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death.
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/recursive
|
||||
name = "recursive dark gygax"
|
||||
desc = "Whoever pilots this cursed mecha has been stuck in eternal loop of death and rebirth forever. Their maddened rampage cannot be stopped."
|
||||
wreckage = /obj/item/weapon/ectoplasm
|
||||
pilot_type = /mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/recursive
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this clown is stronk
|
||||
faction = "clown"
|
||||
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
see_in_dark = 8
|
||||
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 25
|
||||
attack_armor_pen = 5
|
||||
attack_sharp = FALSE
|
||||
attack_edge = FALSE
|
||||
melee_attack_delay = 1 SECOND
|
||||
attacktext = list("clowned")
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/angryclowns
|
||||
|
||||
loot_list = list(/obj/item/weapon/bikehorn = 100)
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big
|
||||
min_oxy = 0
|
||||
max_oxy = 500
|
||||
min_tox = 0
|
||||
max_tox = 500
|
||||
min_co2 = 0
|
||||
max_co2 = 500
|
||||
min_n2 = 0
|
||||
max_n2 = 500
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 700
|
||||
|
||||
/datum/ai_holder/simple_mob/melee/angryclowns
|
||||
can_breakthrough = TRUE
|
||||
violent_breakthrough = FALSE
|
||||
hostile = TRUE // The majority of simplemobs are hostile, gaslamps are nice.
|
||||
cooperative = FALSE
|
||||
retaliate = TRUE //so the monster can attack back
|
||||
returns_home = FALSE
|
||||
can_flee = FALSE
|
||||
speak_chance = 3
|
||||
wander = TRUE
|
||||
base_wander_delay = 9
|
||||
@@ -0,0 +1,45 @@
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/
|
||||
tt_desc = "E Homo sapiens corydon" //this is a clown
|
||||
faction = "clown"
|
||||
movement_sound = 'sound/effects/clownstep2.ogg'
|
||||
attack_sound = 'sound/effects/Whipcrack.ogg'
|
||||
|
||||
faction = "clown"
|
||||
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
see_in_dark = 8
|
||||
|
||||
has_hands = TRUE
|
||||
humanoid_hands = TRUE
|
||||
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 30
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/clowns
|
||||
|
||||
loot_list = list(/obj/item/weapon/bikehorn = 100)
|
||||
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 700
|
||||
|
||||
|
||||
/datum/ai_holder/simple_mob/melee/clowns
|
||||
can_breakthrough = FALSE
|
||||
violent_breakthrough = FALSE
|
||||
hostile = FALSE // The majority of simplemobs are hostile, gaslamps are nice.
|
||||
cooperative = FALSE
|
||||
retaliate = TRUE //so the monster can attack back
|
||||
returns_home = FALSE
|
||||
can_flee = FALSE
|
||||
speak_chance = 3
|
||||
wander = TRUE
|
||||
base_wander_delay = 9
|
||||
@@ -0,0 +1,379 @@
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/normal
|
||||
name = "Clown"
|
||||
desc = "A regular, every tuesday Clown."
|
||||
tt_desc = "E Homo sapiens corydon" //this is a clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_normal"
|
||||
icon_living = "c_normal"
|
||||
icon_dead = "clown_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/honkmunculus
|
||||
name = "A Clown?"
|
||||
desc = "That clown has some interesting proportions."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/TGClowns.dmi'
|
||||
icon_state = "honkmunculus"
|
||||
icon_living = "honkmunculus"
|
||||
icon_dead = "honkmunculus_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/cluwne
|
||||
name = "A Clown?"
|
||||
desc = "Oh no not that thing."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "cluwne"
|
||||
icon_living = "cluwne"
|
||||
icon_dead = "cluwne_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/tunnelclown
|
||||
name = "A Clown?"
|
||||
desc = "Have you heard about our lord and savior, Honkus Chrust?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "tunnel_new"
|
||||
icon_living = "tunnel_new"
|
||||
icon_dead = "tunnel_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/sentinel
|
||||
name = "A Clown?"
|
||||
desc = "This guy means business..."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "sentinel_new"
|
||||
icon_living = "sentinel_new"
|
||||
icon_dead = "sentinel_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/punished
|
||||
name = "A Clown?"
|
||||
desc = "A clown at peak performance."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_punished"
|
||||
icon_living = "c_punished"
|
||||
icon_dead = "punished_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/thicc
|
||||
name = "A Clown..."
|
||||
desc = "I mean, you see it don't you?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_thicc"
|
||||
icon_living = "c_thicc"
|
||||
icon_dead = "thicc_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/perm
|
||||
name = "A Clown?"
|
||||
desc = "That clown really needs to get that hair under control."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_perm"
|
||||
icon_living = "c_perm"
|
||||
icon_dead = "perm_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/wide
|
||||
name = "A Clown?"
|
||||
desc = "He looks good from some angles!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_wide"
|
||||
icon_living = "c_wide"
|
||||
icon_dead = "wide_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/thin
|
||||
name = "A Clown?"
|
||||
desc = "Is he eating enough?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_thin"
|
||||
icon_living = "c_thin"
|
||||
icon_dead = "thin_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/hulk
|
||||
name = "A Clown?"
|
||||
desc = "Just look at those muscles."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "honkhulk"
|
||||
icon_living = "honkhulk"
|
||||
icon_dead = "hulk_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
health = 350
|
||||
maxHealth = 350
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/longface
|
||||
name = "A Clown?"
|
||||
desc = "Why the long face?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "long face"
|
||||
icon_living = "long face"
|
||||
icon_dead = "long_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/giggles
|
||||
name = "A Giggles?"
|
||||
desc = "Oh sweet space christ."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "giggles"
|
||||
icon_living = "giggles"
|
||||
icon_dead = "giggles_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/destroyer
|
||||
name = "A Clown?"
|
||||
desc = "That clown looks like he means business."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "destroyer"
|
||||
icon_living = "destroyer"
|
||||
icon_dead = "destroyer_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
movement_cooldown = 10
|
||||
movement_sound = 'sound/weapons/heavysmash.ogg'
|
||||
movement_shake_radius = 5
|
||||
|
||||
armor = list(
|
||||
"melee" = 40,
|
||||
"bullet" = 20,
|
||||
"laser" = 10,
|
||||
"energy" = 0,
|
||||
"bomb" = 0,
|
||||
"bio" = 0,
|
||||
"rad" = 0
|
||||
)
|
||||
armor_soak = list(
|
||||
"melee" = 10,
|
||||
"bullet" = 5,
|
||||
"laser" = 0,
|
||||
"energy" = 0,
|
||||
"bomb" = 0,
|
||||
"bio" = 0,
|
||||
"rad" = 0
|
||||
)
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/chlown
|
||||
name = "A Clown?"
|
||||
desc = "No."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "chlown"
|
||||
icon_living = "chlown"
|
||||
icon_dead = "chlown_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/scary
|
||||
name = "A Clown?"
|
||||
desc = "Hey that clown looks familiar!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "scary_clown"
|
||||
icon_living = "scary_clown"
|
||||
icon_dead = "scary_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/flesh
|
||||
name = "A Clown?"
|
||||
desc = "WOOOOO STREAKING WOOOO!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "fleshclown"
|
||||
icon_living = "fleshclown"
|
||||
icon_dead = "flesh_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/clowns
|
||||
name = "Definitely a singular clown"
|
||||
desc = "Is it one clown, or many clowns in not a trenchcoat?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "clowns"
|
||||
icon_living = "clowns"
|
||||
icon_dead = "clowns_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/mutant
|
||||
name = "A Clown?"
|
||||
desc = "Oh sweet space christ."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "mutant"
|
||||
icon_living = "mutant"
|
||||
icon_dead = "mutant_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/blob
|
||||
name = "A Clown?"
|
||||
desc = "Go to a gym fatty!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "blob"
|
||||
icon_living = "blob"
|
||||
icon_dead = "blob_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/mayor
|
||||
name = "A clown?"
|
||||
desc = "One speaks in riddles..."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/giantclowns.dmi'
|
||||
icon_state = "c_mayor"
|
||||
icon_living = "c_mayor"
|
||||
icon_dead = "mayor_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 96
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/honkling
|
||||
name = "A Clown?"
|
||||
desc = "Oh sweet space christ."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "honkling"
|
||||
icon_living = "honkling"
|
||||
icon_dead = "honkling_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
//template
|
||||
|
||||
///mob/living/simple_mob/mobs_monsters/clowns/big/
|
||||
// name = "A Clown?"
|
||||
// desc = "Oh sweet space christ."
|
||||
// tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
// icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
// icon_state = ""
|
||||
// icon_living = ""
|
||||
// icon_dead = "_dead"
|
||||
// icon_gib = "generic_gib"
|
||||
// vis_height = 64
|
||||
@@ -0,0 +1,7 @@
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
faction = "clown"
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/New()
|
||||
..()
|
||||
verbs += /mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/proc/phase_shift
|
||||
@@ -0,0 +1,365 @@
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/anormal
|
||||
name = "Clown"
|
||||
desc = "A regular, every tuesday Clown."
|
||||
tt_desc = "E Homo sapiens corydon" //this is a clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_normal"
|
||||
icon_living = "c_normal"
|
||||
icon_dead = "clown_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/honkmunculus
|
||||
name = "A Clown?"
|
||||
desc = "That clown has some interesting proportions."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/TGClowns.dmi'
|
||||
icon_state = "honkmunculus"
|
||||
icon_living = "honkmunculus"
|
||||
icon_dead = "honkmunculus_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/cluwne
|
||||
name = "A Clown?"
|
||||
desc = "Oh no not that thing."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "cluwne"
|
||||
icon_living = "cluwne"
|
||||
icon_dead = "cluwne_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/tunnelclown
|
||||
name = "A Clown?"
|
||||
desc = "Have you heard about our lord and savior, Honkus Chrust?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "tunnel_new"
|
||||
icon_living = "tunnel_new"
|
||||
icon_dead = "tunnel_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/sentinel
|
||||
name = "A Clown?"
|
||||
desc = "This guy means business..."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "sentinel_new"
|
||||
icon_living = "sentinel_new"
|
||||
icon_dead = "sentinel_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/punished
|
||||
name = "A Clown?"
|
||||
desc = "A clown at peak performance."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_punished"
|
||||
icon_living = "c_punished"
|
||||
icon_dead = "punished_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/thicc
|
||||
name = "A Clown..."
|
||||
desc = "I mean, you see it don't you?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_thicc"
|
||||
icon_living = "c_thicc"
|
||||
icon_dead = "thicc_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/perm
|
||||
name = "A Clown?"
|
||||
desc = "That clown really needs to get that hair under control."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_perm"
|
||||
icon_living = "c_perm"
|
||||
icon_dead = "perm_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/wide
|
||||
name = "A Clown?"
|
||||
desc = "He looks good from some angles!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_wide"
|
||||
icon_living = "c_wide"
|
||||
icon_dead = "wide_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/thin
|
||||
name = "A Clown?"
|
||||
desc = "Is he eating enough?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_thin"
|
||||
icon_living = "c_thin"
|
||||
icon_dead = "thin_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/hulk
|
||||
name = "A Clown?"
|
||||
desc = "Just look at those muscles."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "honkhulk"
|
||||
icon_living = "honkhulk"
|
||||
icon_dead = "hulk_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
health = 350
|
||||
maxHealth = 350
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/longface
|
||||
name = "A Clown?"
|
||||
desc = "Why the long face?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "long face"
|
||||
icon_living = "long face"
|
||||
icon_dead = "long_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/giggles
|
||||
name = "A Giggles?"
|
||||
desc = "Oh sweet space christ."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "giggles"
|
||||
icon_living = "giggles"
|
||||
icon_dead = "giggles_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/destroyer
|
||||
name = "A Clown?"
|
||||
desc = "That clown looks like he means business."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "destroyer"
|
||||
icon_living = "destroyer"
|
||||
icon_dead = "destroyer_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
movement_cooldown = 10
|
||||
movement_sound = 'sound/weapons/heavysmash.ogg'
|
||||
movement_shake_radius = 5
|
||||
|
||||
armor = list(
|
||||
"melee" = 40,
|
||||
"bullet" = 20,
|
||||
"laser" = 10,
|
||||
"energy" = 0,
|
||||
"bomb" = 0,
|
||||
"bio" = 0,
|
||||
"rad" = 0
|
||||
)
|
||||
armor_soak = list(
|
||||
"melee" = 10,
|
||||
"bullet" = 5,
|
||||
"laser" = 0,
|
||||
"energy" = 0,
|
||||
"bomb" = 0,
|
||||
"bio" = 0,
|
||||
"rad" = 0
|
||||
)
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/chlown
|
||||
name = "A Clown?"
|
||||
desc = "No."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "chlown"
|
||||
icon_living = "chlown"
|
||||
icon_dead = "chlown_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/scary
|
||||
name = "A Clown?"
|
||||
desc = "Hey that clown looks familiar!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "scary_clown"
|
||||
icon_living = "scary_clown"
|
||||
icon_dead = "scary_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/flesh
|
||||
name = "A Clown?"
|
||||
desc = "WOOOOO STREAKING WOOOO!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "fleshclown"
|
||||
icon_living = "fleshclown"
|
||||
icon_dead = "flesh_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/clowns
|
||||
name = "Definitely a singular clown"
|
||||
desc = "Is it one clown, or many clowns in not a trenchcoat?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "clowns"
|
||||
icon_living = "clowns"
|
||||
icon_dead = "clowns_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/mutant
|
||||
name = "A Clown?"
|
||||
desc = "Oh sweet space christ."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "mutant"
|
||||
icon_living = "mutant"
|
||||
icon_dead = "mutant_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/blob
|
||||
name = "A Clown?"
|
||||
desc = "Go to a gym fatty!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "blob"
|
||||
icon_living = "blob"
|
||||
icon_dead = "blob_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/mayor
|
||||
name = "A clown?"
|
||||
desc = "One speaks in riddles..."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/giantclowns.dmi'
|
||||
icon_state = "c_mayor"
|
||||
icon_living = "c_mayor"
|
||||
icon_dead = "mayor_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 96
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/honkling
|
||||
name = "A Clown?"
|
||||
desc = "Oh sweet space christ."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "honkling"
|
||||
icon_living = "honkling"
|
||||
icon_dead = "honkling_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
@@ -0,0 +1,95 @@
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift
|
||||
var/ability_flags = 0 //Flags for active abilities
|
||||
|
||||
// Phase shifting procs (and related procs)
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/proc/phase_shift()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T.CanPass(src,T) || loc != T)
|
||||
to_chat(src,"<span class='warning'>You can't use that here!</span>")
|
||||
return FALSE
|
||||
|
||||
forceMove(T)
|
||||
var/original_canmove = canmove
|
||||
SetStunned(0)
|
||||
SetWeakened(0)
|
||||
if(buckled)
|
||||
buckled.unbuckle_mob()
|
||||
if(pulledby)
|
||||
pulledby.stop_pulling()
|
||||
stop_pulling()
|
||||
canmove = FALSE
|
||||
|
||||
//Shifting in
|
||||
if(ability_flags & AB_PHASE_SHIFTED)
|
||||
ability_flags &= ~AB_PHASE_SHIFTED
|
||||
mouse_opacity = 2
|
||||
name = real_name
|
||||
|
||||
|
||||
overlays.Cut()
|
||||
alpha = initial(alpha)
|
||||
invisibility = initial(invisibility)
|
||||
see_invisible = initial(see_invisible)
|
||||
incorporeal_move = initial(incorporeal_move)
|
||||
density = initial(density)
|
||||
force_max_speed = initial(force_max_speed)
|
||||
|
||||
//Cosmetics mostly
|
||||
flick("tp_in",src)
|
||||
custom_emote(1,"phases in!")
|
||||
sleep(5) //The duration of the TP animation
|
||||
canmove = original_canmove
|
||||
|
||||
// Do this after the potential vore, so we get the belly
|
||||
update_icon()
|
||||
|
||||
//Affect nearby lights
|
||||
|
||||
|
||||
for(var/obj/machinery/light/L in machines)
|
||||
if(L.z != z || get_dist(src,L) > 10)
|
||||
continue
|
||||
|
||||
L.flicker(10)
|
||||
|
||||
//Shifting out
|
||||
else
|
||||
ability_flags |= AB_PHASE_SHIFTED
|
||||
mouse_opacity = 0
|
||||
custom_emote(1,"phases out!")
|
||||
real_name = name
|
||||
name = "Something"
|
||||
|
||||
overlays.Cut()
|
||||
flick("tp_out",src)
|
||||
sleep(5)
|
||||
invisibility = INVISIBILITY_LEVEL_TWO
|
||||
see_invisible = INVISIBILITY_LEVEL_TWO
|
||||
update_icon()
|
||||
alpha = 127
|
||||
|
||||
canmove = original_canmove
|
||||
incorporeal_move = TRUE
|
||||
density = FALSE
|
||||
force_max_speed = TRUE
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/UnarmedAttack()
|
||||
if(ability_flags & AB_PHASE_SHIFTED)
|
||||
return FALSE //Nope.
|
||||
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/can_fall()
|
||||
if(ability_flags & AB_PHASE_SHIFTED)
|
||||
return FALSE //Nope!
|
||||
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/zMove(direction)
|
||||
if(ability_flags & AB_PHASE_SHIFTED)
|
||||
var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src)
|
||||
if(destination)
|
||||
forceMove(destination)
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
@@ -0,0 +1,30 @@
|
||||
// These are used to spawn a specific mob when triggered, with the mob controlled by a player pulled from the ghost pool, hense its name.
|
||||
/obj/structure/ghost_pod/manual/clegg
|
||||
name = "Clown Egg?"
|
||||
desc = "Why does this have to be what this is?"
|
||||
icon = 'icons/mob/mobs_monsters/giantclowns.dmi'
|
||||
icon_state = "c_egg"
|
||||
icon_state_opened = "c_egg_opened" // Icon to switch to when 'used'.
|
||||
ghost_query_type = /datum/ghost_query/hellclown
|
||||
|
||||
/datum/ghost_query/hellclown
|
||||
role_name = "egg clown"
|
||||
question = "THE HONKMOTHER REQUESTS SUBJECTS. REPORT TO THE ELEMENTAL TO JOIN THE HONKENING."
|
||||
cutoff_number = 1
|
||||
|
||||
/obj/structure/ghost_pod/manual/clegg/trigger()
|
||||
..("<span class='warning'>\The [usr] places their hand on the egg!</span>", "is attempting to make a mistake!")
|
||||
|
||||
/obj/structure/ghost_pod/manual/clegg/create_occupant(var/mob/M)
|
||||
lightning_strike(get_turf(src), cosmetic = TRUE)
|
||||
var/list/choices = list(/mob/living/simple_mob/mobs_monsters/clowns/normal, /mob/living/simple_mob/mobs_monsters/clowns/honkling, /mob/living/simple_mob/mobs_monsters/clowns/mayor, /mob/living/simple_mob/mobs_monsters/clowns/blob, /mob/living/simple_mob/mobs_monsters/clowns/mutant, /mob/living/simple_mob/mobs_monsters/clowns/clowns, /mob/living/simple_mob/mobs_monsters/clowns/flesh, /mob/living/simple_mob/mobs_monsters/clowns/scary, /mob/living/simple_mob/mobs_monsters/clowns/chlown, /mob/living/simple_mob/mobs_monsters/clowns/destroyer, /mob/living/simple_mob/mobs_monsters/clowns/giggles, /mob/living/simple_mob/mobs_monsters/clowns/longface, /mob/living/simple_mob/mobs_monsters/clowns/hulk, /mob/living/simple_mob/mobs_monsters/clowns/thin, /mob/living/simple_mob/mobs_monsters/clowns/wide, /mob/living/simple_mob/mobs_monsters/clowns/perm, /mob/living/simple_mob/mobs_monsters/clowns/thicc, /mob/living/simple_mob/mobs_monsters/clowns/punished, /mob/living/simple_mob/mobs_monsters/clowns/sentinel, /mob/living/simple_mob/mobs_monsters/clowns/tunnelclown, /mob/living/simple_mob/mobs_monsters/clowns/cluwne, /mob/living/simple_mob/mobs_monsters/clowns/honkmunculus)
|
||||
var/chosen_clown = input(M, "Redspace clowns like themes, what's yours?") in choices
|
||||
density = FALSE
|
||||
var/mob/living/simple_mob/R = new chosen_clown(get_turf(src))
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(R)
|
||||
to_chat(M, "<span class='notice'>You are a <b>Clown!</b>! HONK!</span>")
|
||||
R.ckey = M.ckey
|
||||
visible_message("<span class='warning'>With a bright flash of light, \the [src] disappears, and in its place you see a... Clown?</span>")
|
||||
log_and_message_admins("successfully touched \a [src] and summoned a mistake!")
|
||||
..()
|
||||
@@ -0,0 +1,35 @@
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/honkelemental
|
||||
name = "Honk Elemental"
|
||||
desc = "That thing can't be real, right?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/giantclowns.dmi'
|
||||
icon_state = "honk_elemental"
|
||||
icon_living = "honk_elemental"
|
||||
icon_dead = "he_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 96
|
||||
|
||||
faction = "clown"
|
||||
|
||||
loot_list = list(/obj/item/weapon/bikehorn = 100)
|
||||
|
||||
response_help = "pokes"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
|
||||
say_list_type = /datum/say_list/clown
|
||||
|
||||
/datum/say_list/clown
|
||||
speak = list("HONK", "Honk!", "Henk!")
|
||||
emote_see = list("honks")
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/honkelemental/verb/spawn_egg()
|
||||
set category = "Abilities"
|
||||
set name = "Spawn Clown Egg"
|
||||
set desc = "Spawns an egg that a player can touch, which will call on ghosts to spawn as clowns."
|
||||
|
||||
if(is_dead())
|
||||
return
|
||||
|
||||
new /obj/structure/ghost_pod/manual/clegg(get_turf(src))
|
||||
flick("he_lay",src)
|
||||
@@ -0,0 +1,362 @@
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/
|
||||
response_help = "pokes"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
|
||||
say_list_type = /datum/say_list/clown
|
||||
|
||||
/datum/say_list/clown
|
||||
speak = list("HONK", "Honk!", "Henk!")
|
||||
emote_see = list("honks")
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/honkmunculus
|
||||
name = "A Clown?"
|
||||
desc = "That clown has some interesting proportions."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/TGClowns.dmi'
|
||||
icon_state = "honkmunculus"
|
||||
icon_living = "honkmunculus"
|
||||
icon_dead = "honkmunculus_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/cluwne
|
||||
name = "A Clown?"
|
||||
desc = "Oh no not that thing."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "cluwne"
|
||||
icon_living = "cluwne"
|
||||
icon_dead = "cluwne_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/tunnelclown
|
||||
name = "A Clown?"
|
||||
desc = "Have you heard about our lord and savior, Honkus Chrust?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "tunnel_new"
|
||||
icon_living = "tunnel_new"
|
||||
icon_dead = "tunnel_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/sentinel
|
||||
name = "A Clown?"
|
||||
desc = "This guy means business..."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "sentinel_new"
|
||||
icon_living = "sentinel_new"
|
||||
icon_dead = "sentinel_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/punished
|
||||
name = "A Clown?"
|
||||
desc = "A clown at peak performance."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_punished"
|
||||
icon_living = "c_punished"
|
||||
icon_dead = "punished_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/thicc
|
||||
name = "A Clown..."
|
||||
desc = "I mean, you see it don't you?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_thicc"
|
||||
icon_living = "c_thicc"
|
||||
icon_dead = "thicc_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/perm
|
||||
name = "A Clown?"
|
||||
desc = "That clown really needs to get that hair under control."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_perm"
|
||||
icon_living = "c_perm"
|
||||
icon_dead = "perm_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/wide
|
||||
name = "A Clown?"
|
||||
desc = "He looks good from some angles!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_wide"
|
||||
icon_living = "c_wide"
|
||||
icon_dead = "wide_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/thin
|
||||
name = "A Clown?"
|
||||
desc = "Is he eating enough?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_thin"
|
||||
icon_living = "c_thin"
|
||||
icon_dead = "thin_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/hulk
|
||||
name = "A Clown?"
|
||||
desc = "Just look at those muscles."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "honkhulk"
|
||||
icon_living = "honkhulk"
|
||||
icon_dead = "hulk_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/longface
|
||||
name = "A Clown?"
|
||||
desc = "Why the long face?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "long face"
|
||||
icon_living = "long face"
|
||||
icon_dead = "long_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/giggles
|
||||
name = "A Giggles?"
|
||||
desc = "Oh sweet space christ."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "giggles"
|
||||
icon_living = "giggles"
|
||||
icon_dead = "giggles_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/destroyer
|
||||
name = "A Clown?"
|
||||
desc = "That clown looks like he means business."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "destroyer"
|
||||
icon_living = "destroyer"
|
||||
icon_dead = "destroyer_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/chlown
|
||||
name = "A Clown?"
|
||||
desc = "No."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "chlown"
|
||||
icon_living = "chlown"
|
||||
icon_dead = "chlown_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/scary
|
||||
name = "A Clown?"
|
||||
desc = "Hey that clown looks familiar!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "scary_clown"
|
||||
icon_living = "scary_clown"
|
||||
icon_dead = "scary_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/flesh
|
||||
name = "A Clown?"
|
||||
desc = "WOOOOO STREAKING WOOOO!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "fleshclown"
|
||||
icon_living = "fleshclown"
|
||||
icon_dead = "flesh_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/clowns
|
||||
name = "Definitely a singular clown"
|
||||
desc = "Is it one clown, or many clowns in not a trenchcoat?"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "clowns"
|
||||
icon_living = "clowns"
|
||||
icon_dead = "clowns_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/mutant
|
||||
name = "A Clown?"
|
||||
desc = "Oh sweet space christ."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "mutant"
|
||||
icon_living = "mutant"
|
||||
icon_dead = "mutant_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/blob
|
||||
name = "A Clown?"
|
||||
desc = "Go to a gym fatty!"
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "blob"
|
||||
icon_living = "blob"
|
||||
icon_dead = "blob_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 64
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/mayor
|
||||
name = "A clown?"
|
||||
desc = "One speaks in riddles..."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/giantclowns.dmi'
|
||||
icon_state = "c_mayor"
|
||||
icon_living = "c_mayor"
|
||||
icon_dead = "mayor_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 96
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/honkling
|
||||
name = "A Clown?"
|
||||
desc = "Oh sweet space christ."
|
||||
tt_desc = "E Homo sapiens corydon horrificus" //this is a redspace clown
|
||||
icon = 'icons/mob/mobs_monsters/tgclowns.dmi'
|
||||
icon_state = "honkling"
|
||||
icon_living = "honkling"
|
||||
icon_dead = "honkling_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
|
||||
/mob/living/simple_mob/mobs_monsters/clowns/normal
|
||||
name = "Clown"
|
||||
desc = "A regular, every tuesday Clown."
|
||||
tt_desc = "E Homo sapiens corydon" //this is a clown
|
||||
icon = 'icons/mob/mobs_monsters/newclowns.dmi'
|
||||
icon_state = "c_normal"
|
||||
icon_living = "c_normal"
|
||||
icon_dead = "clown_dead"
|
||||
icon_gib = "generic_gib"
|
||||
vis_height = 32
|
||||
|
||||
faction = "clown"
|
||||
|
||||
loot_list = list(/obj/item/weapon/bikehorn = 100)
|
||||
|
||||
response_help = "pokes"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
6
code/modules/nano/interaction/default_vr.dm
Normal file
@@ -0,0 +1,6 @@
|
||||
/mob/living/simple_mob/default_can_use_topic(var/src_object)
|
||||
. = shared_nano_interaction(src_object)
|
||||
if(. != STATUS_CLOSE)
|
||||
. = min(., shared_living_nano_distance(src_object))
|
||||
|
||||
//Allows simple mobs to interact with nanoui as long as they have "has_hands = TRUE"
|
||||
@@ -161,8 +161,8 @@
|
||||
name = "Space Bulldog"
|
||||
id = "bulldog"
|
||||
result = "bulldog"
|
||||
required_reagents = list("blackrussian" = 3, "cola" =1) // YW edit, cream makes it turn into white russian, when they change on vorestation and we update, can change this
|
||||
result_amount = 5
|
||||
required_reagents = list("vodka" = 1, "cola" =1, "cream" =1, "kahlua" =1)
|
||||
result_amount = 4
|
||||
|
||||
/datum/chemical_reaction/drinks/sbagliato
|
||||
name = "Negroni Sbagliato"
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
var/nonhuman_prey_swallow_time = 30 // Time in deciseconds to swallow anything else
|
||||
var/emote_time = 60 SECONDS // How long between stomach emotes at prey
|
||||
var/nutrition_percent = 100 // Nutritional percentage per tick in digestion mode
|
||||
var/digest_brute = 2 // Brute damage per tick in digestion mode
|
||||
var/digest_burn = 2 // Burn damage per tick in digestion mode
|
||||
var/digest_brute = 0.5 // Brute damage per tick in digestion mode
|
||||
var/digest_burn = 0.5 // Burn damage per tick in digestion mode
|
||||
var/immutable = FALSE // Prevents this belly from being deleted
|
||||
var/escapable = FALSE // Belly can be resisted out of at any time
|
||||
var/escapetime = 60 SECONDS // Deciseconds, how long to escape this belly
|
||||
|
||||
@@ -1965,3 +1965,28 @@ Departamental Swimsuits, for general use
|
||||
|
||||
icon_override = 'icons/vore/custom_onmob_vr.dmi'
|
||||
icon_state = "azuracollar"
|
||||
|
||||
|
||||
//Xonkon: Zena Aviv
|
||||
/obj/item/clothing/head/helmet/space/void/engineering/zena
|
||||
name = "custom shroud helmet"
|
||||
desc = "A black and orange engineering shroud helmet. Orange plated and specially crafted and augmented for a variety of activites."
|
||||
icon = 'icons/vore/custom_clothes_vr.dmi'
|
||||
icon_state = "zenahelmet"
|
||||
|
||||
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
||||
item_state = "zenahelmet_mob"
|
||||
|
||||
species_restricted = null
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/void/engineering/zena
|
||||
name = "custom shroud suit"
|
||||
desc = "A black and orange engineering shroud helmet. Skintight and specially crafted and augmented for a variety of activites."
|
||||
icon = 'icons/vore/custom_clothes_vr.dmi'
|
||||
icon_state = "zenasuit"
|
||||
|
||||
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
||||
item_state = "zenasuit_mob"
|
||||
|
||||
species_restricted = null
|
||||
|
Before Width: | Height: | Size: 481 B After Width: | Height: | Size: 655 B |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 5.3 KiB |
BIN
icons/mob/mobs_monsters/TGClowns.dmi
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
icons/mob/mobs_monsters/giantclowns.dmi
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
icons/mob/mobs_monsters/newclowns.dmi
Normal file
|
After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 480 B After Width: | Height: | Size: 673 B |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 224 B |
|
Before Width: | Height: | Size: 219 B |
|
Before Width: | Height: | Size: 226 B |
|
Before Width: | Height: | Size: 189 B |
|
Before Width: | Height: | Size: 241 B |
|
Before Width: | Height: | Size: 220 B |
|
Before Width: | Height: | Size: 223 B |
|
Before Width: | Height: | Size: 234 B |
|
Before Width: | Height: | Size: 225 B |
|
Before Width: | Height: | Size: 226 B |
|
Before Width: | Height: | Size: 241 B |
|
Before Width: | Height: | Size: 221 B |
|
Before Width: | Height: | Size: 219 B |
|
Before Width: | Height: | Size: 215 B |
|
Before Width: | Height: | Size: 216 B |
|
Before Width: | Height: | Size: 203 B |
|
Before Width: | Height: | Size: 229 B |
|
Before Width: | Height: | Size: 230 B |
|
Before Width: | Height: | Size: 218 B |
|
Before Width: | Height: | Size: 215 B |
|
Before Width: | Height: | Size: 212 B |
|
Before Width: | Height: | Size: 219 B |
|
Before Width: | Height: | Size: 234 B |
|
Before Width: | Height: | Size: 241 B |
|
Before Width: | Height: | Size: 238 B |
|
Before Width: | Height: | Size: 230 B |
|
Before Width: | Height: | Size: 271 B |
|
Before Width: | Height: | Size: 243 B |
|
Before Width: | Height: | Size: 226 B |
|
Before Width: | Height: | Size: 234 B |
|
Before Width: | Height: | Size: 289 B |
|
Before Width: | Height: | Size: 249 B |
|
Before Width: | Height: | Size: 249 B |
|
Before Width: | Height: | Size: 226 B |
|
Before Width: | Height: | Size: 260 B |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 241 B |
|
Before Width: | Height: | Size: 242 B |
|
Before Width: | Height: | Size: 242 B |
|
Before Width: | Height: | Size: 247 B |
|
Before Width: | Height: | Size: 210 KiB After Width: | Height: | Size: 213 KiB |