Pirates are split into three different ghastly crews! (#56264)
Co-authored-by: DeAndre <robustness13@hotmail.com> Co-authored-by: itseasytosee <55666666+itseasytosee@users.noreply.github.com> Co-authored-by: tgstation-server <tgstation-server@tgstation13.org> Co-authored-by: Aleksej Komarov <stylemistake@gmail.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
@@ -349,6 +349,9 @@
|
||||
/area/shuttle/pirate)
|
||||
"aD" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"aF" = (
|
||||
@@ -428,6 +431,9 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"aO" = (
|
||||
@@ -789,15 +795,16 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"bP" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"bQ" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"bX" = (
|
||||
@@ -914,6 +921,9 @@
|
||||
/obj/item/grenade/smokebomb{
|
||||
pixel_x = 5
|
||||
},
|
||||
/obj/structure/sign/poster/contraband/bountyhunters{
|
||||
pixel_y = 32
|
||||
},
|
||||
/turf/open/floor/pod/light,
|
||||
/area/shuttle/pirate)
|
||||
"ep" = (
|
||||
@@ -1087,10 +1097,25 @@
|
||||
/obj/effect/mapping_helpers/airlock/cutaiwire,
|
||||
/turf/open/floor/wood,
|
||||
/area/shuttle/pirate)
|
||||
"Gk" = (
|
||||
"ED" = (
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/machinery/suit_storage_unit/pirate,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/tank_dispenser/oxygen,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"Gk" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/shower{
|
||||
name = "decontamination shower";
|
||||
pixel_y = 12
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/obj/structure/window{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/window{
|
||||
name = "Decontamination"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"JT" = (
|
||||
@@ -1112,6 +1137,14 @@
|
||||
},
|
||||
/turf/open/floor/pod/light,
|
||||
/area/shuttle/pirate)
|
||||
"Ni" = (
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 5
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"Oe" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
@@ -1274,7 +1307,7 @@ yi
|
||||
aj
|
||||
aj
|
||||
Gk
|
||||
aS
|
||||
Ni
|
||||
aF
|
||||
aI
|
||||
aJ
|
||||
@@ -1381,7 +1414,7 @@ aj
|
||||
yi
|
||||
aj
|
||||
aj
|
||||
Gk
|
||||
ED
|
||||
aS
|
||||
bZ
|
||||
bo
|
||||
|
||||
@@ -648,6 +648,14 @@
|
||||
suffix = "default"
|
||||
name = "pirate ship (Default)"
|
||||
|
||||
/datum/map_template/shuttle/pirate/silverscale
|
||||
suffix = "silverscale"
|
||||
name = "pirate ship (Silver Scales)"
|
||||
|
||||
/datum/map_template/shuttle/pirate/dutchman
|
||||
suffix = "dutchman"
|
||||
name = "pirate ship (Flying Dutchman)"
|
||||
|
||||
/datum/map_template/shuttle/hunter/space_cop
|
||||
suffix = "space_cop"
|
||||
name = "Police Spacevan"
|
||||
|
||||
@@ -55,6 +55,10 @@
|
||||
name = "Pirate Shuttle"
|
||||
requires_power = TRUE
|
||||
|
||||
/area/shuttle/pirate/flying_dutchman
|
||||
name = "Flying Dutchman"
|
||||
requires_power = FALSE
|
||||
|
||||
////////////////////////////Bounty Hunter Shuttles////////////////////////////
|
||||
|
||||
/area/shuttle/hunter
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
/obj/item/stack/cannonball
|
||||
name = "cannonballs"
|
||||
desc = "A stack of heavy plasteel cannonballs. Gunnery for the space age!"
|
||||
icon_state = "cannonballs"
|
||||
max_amount = 14
|
||||
singular_name = "cannonball"
|
||||
merge_type = /obj/item/stack/cannonball
|
||||
throwforce = 10
|
||||
flags_1 = CONDUCT_1
|
||||
custom_materials = list(/datum/material/alloy/plasteel=MINERAL_MATERIAL_AMOUNT)
|
||||
resistance_flags = FIRE_PROOF
|
||||
throw_speed = 5
|
||||
throw_range = 3
|
||||
///the type of projectile this type of cannonball item turns into.
|
||||
var/obj/projectile/projectile_type = /obj/projectile/bullet/cannonball
|
||||
|
||||
/obj/item/stack/cannonball/update_icon_state()
|
||||
if(amount == 1)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]_[min(amount, 14)]"
|
||||
|
||||
|
||||
/obj/item/stack/cannonball/fourteen
|
||||
amount = 14
|
||||
|
||||
/obj/item/stack/cannonball/shellball
|
||||
name = "explosive shellballs"
|
||||
singular_name = "explosive shellball"
|
||||
desc = "An explosive anti-materiel and counter-battery projectile cannonball. Makes great work out of any wall, for easy entrances."
|
||||
color = "#FF0000"
|
||||
merge_type = /obj/item/stack/cannonball/shellball
|
||||
projectile_type = /obj/projectile/bullet/cannonball/explosive
|
||||
|
||||
/obj/item/stack/cannonball/shellball/seven
|
||||
amount = 7
|
||||
|
||||
/obj/item/stack/cannonball/shellball/fourteen
|
||||
amount = 14
|
||||
|
||||
/obj/item/stack/cannonball/emp
|
||||
name = "malfunction shots"
|
||||
singular_name = "malfunction shot"
|
||||
icon_state = "emp_cannonballs"
|
||||
desc = "A shot filled with two chambers that combine on impact, creating a chemical EMP. What does any of that mean? Who knows. Modern piracy really lost its soul with these newfangled things."
|
||||
max_amount = 4
|
||||
merge_type = /obj/item/stack/cannonball/emp
|
||||
projectile_type = /obj/projectile/bullet/cannonball/emp
|
||||
|
||||
/obj/item/stack/cannonball/the_big_one
|
||||
name = "\"The Biggest Ones\""
|
||||
singular_name = "\"The Biggest One\""
|
||||
desc = "An insane amount of explosives jammed into a massive cannonball. The last cannonball you'll ever fire in a fight, mostly because there'll be nothing left to shoot at afterwards."
|
||||
max_amount = 5
|
||||
icon_state = "biggest_cannonballs"
|
||||
merge_type = /obj/item/stack/cannonball/the_big_one
|
||||
projectile_type = /obj/projectile/bullet/cannonball/biggest_one
|
||||
|
||||
/obj/item/stack/cannonball/the_big_one/five
|
||||
amount = 5
|
||||
@@ -81,6 +81,20 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
user.visible_message("<span class='suicide'>[user] is falling on [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return(BRUTELOSS)
|
||||
|
||||
//statistically similar to e-cutlasses
|
||||
/obj/item/claymore/cutlass
|
||||
name = "cutlass"
|
||||
desc = "A piratey sword used by buckaneers to \"negotiate\" the transfer of treasure."
|
||||
icon_state = "cutlass"
|
||||
inhand_icon_state = "cutlass"
|
||||
worn_icon_state = "cutlass"
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
force = 30
|
||||
throwforce = 20
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
armour_penetration = 35
|
||||
|
||||
/obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS
|
||||
desc = "<b><i>THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!</i></b>\nActivate it in your hand to point to the nearest victim."
|
||||
flags_1 = CONDUCT_1
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
/obj/structure/cannon
|
||||
name = "cannon"
|
||||
desc = "Holemaker Deluxe: A sporty model with a good stop power. Any cannon enthusiast should be expected to start here."
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
icon_state = "falconet_patina"
|
||||
max_integrity = 300
|
||||
var/obj/item/stack/cannonball/loaded_cannonball = null
|
||||
var/charge_ignited = FALSE
|
||||
var/fire_delay = 15
|
||||
var/charge_size = 15
|
||||
var/fire_sound = 'sound/weapons/gun/general/cannon.ogg'
|
||||
|
||||
/obj/structure/cannon/Initialize()
|
||||
. = ..()
|
||||
create_reagents(charge_size)
|
||||
|
||||
/obj/structure/cannon/proc/fire()
|
||||
for(var/mob/shaken_mob in urange(10, src))
|
||||
if(shaken_mob.stat == CONSCIOUS)
|
||||
shake_camera(shaken_mob, 3, 1)
|
||||
|
||||
playsound(src, fire_sound, 50, TRUE)
|
||||
if(loaded_cannonball)
|
||||
var/obj/projectile/fired_projectile = new loaded_cannonball.projectile_type(get_turf(src))
|
||||
QDEL_NULL(loaded_cannonball)
|
||||
fired_projectile.firer = src
|
||||
fired_projectile.fired_from = src
|
||||
fired_projectile.fire(dir2angle(dir))
|
||||
reagents.remove_all()
|
||||
charge_ignited = FALSE
|
||||
|
||||
/obj/structure/cannon/attackby(obj/item/W, mob/user, params)
|
||||
if(charge_ignited)
|
||||
to_chat(user, "<span class='danger'>[src] is about to fire!</span>")
|
||||
return
|
||||
var/ignition_message = W.ignition_effect(src, user)
|
||||
|
||||
if(istype(W, /obj/item/stack/cannonball))
|
||||
if(loaded_cannonball)
|
||||
to_chat(user, "<span class='warning'>[src] is already loaded!</span>")
|
||||
else
|
||||
var/obj/item/stack/cannonball/cannoneers_balls = W
|
||||
loaded_cannonball = new cannoneers_balls.type(src, 1)
|
||||
loaded_cannonball.copy_evidences(cannoneers_balls)
|
||||
to_chat(user, "<span class='notice'>You load a [cannoneers_balls.singular_name] into [src].</span>")
|
||||
cannoneers_balls.use(1, transfer = TRUE)
|
||||
return
|
||||
|
||||
else if(ignition_message)
|
||||
if(!reagents.has_reagent(/datum/reagent/gunpowder,15))
|
||||
to_chat(user, "<span class='warning'>[src] needs at least 15u of gunpowder to fire!</span>")
|
||||
return
|
||||
visible_message(ignition_message)
|
||||
log_game("Cannon fired by [key_name(user)] in [AREACOORD(src)]")
|
||||
addtimer(CALLBACK(src, .proc/fire), fire_delay)
|
||||
charge_ignited = TRUE
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/reagent_containers))
|
||||
var/obj/item/reagent_containers/powder_keg = W
|
||||
if(!(powder_keg.reagent_flags & OPENCONTAINER))
|
||||
return ..()
|
||||
if(istype(powder_keg, /obj/item/reagent_containers/glass/rag))
|
||||
return ..()
|
||||
|
||||
if(!powder_keg.reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[powder_keg] is empty!</span>")
|
||||
return
|
||||
else if(!powder_keg.reagents.has_reagent(/datum/reagent/gunpowder, charge_size))
|
||||
to_chat(user, "<span class='warning'>[powder_keg] doesn't have at least 15u of gunpowder to fill [src]!</span>")
|
||||
return
|
||||
if(reagents.has_reagent(/datum/reagent/gunpowder, charge_size))
|
||||
to_chat(user, "<span class='warning'>[src] already contains a full charge of powder! It would be unwise to add more.</span>")
|
||||
return
|
||||
powder_keg.reagents.trans_id_to(src, /datum/reagent/gunpowder, amount = charge_size)
|
||||
to_chat(user, "<span class='notice'>You load [src] with a charge of powder from [powder_keg].</span>")
|
||||
return
|
||||
if(W.tool_behaviour == TOOL_WRENCH)
|
||||
if(default_unfasten_wrench(user, W, time = 2 SECONDS))
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/paper/crumpled/muddy/fluff/cannon_instructions
|
||||
name = "Mast of Cannon's Past's Cannon Instructions"
|
||||
desc = "A quickly written note detailing the basics of firing a cannon. Who wrote this?"
|
||||
info = @{"
|
||||
|
||||
Ye don't know how to load cannon, and ye call yerself a fearsome pirate? I think ye be more alike a space sailor under the space monarchy's flag! Alas, everyone must learn how to blast holes in enemy ships. And thus:<br>
|
||||
|
||||
<br><center><b>HOW YE FIRES A CANNON:</b><br></center>
|
||||
|
||||
BE STEP ONE: LOAD THE LEAD BALL O' YE CHOICE!<br>
|
||||
BE STEP TWO: LOAD 15U PIRATE STANDARD CHARGE O' GUNPOWDER!<br>
|
||||
BE STEP THREE: LIGHT THE FUSE WITH SOMETHING, AND LET ER' RIP!<br>
|
||||
|
||||
<br><center><b>CANNONBALL TYPES:</b><br></center>
|
||||
|
||||
REGULAR CANNONBALL: A fine choice for killing landlubbers! Will take off any limb it hits, and most certainly down anyone hit in the chest! If they are not directly hit, they will be at least hurt by the shrapnel!<br>
|
||||
EXPLOSIVE SHELLBALL: The most elegant in breaching (er killin', if you're good at aimin') tools, ye be packing this shell with many scuppering chemicals! Just make sure to not fire it when ye be close to target!<br>
|
||||
MALFUNCTION SHOT: A very gentle "cannonball" dart at first glance, but make no mistake: This is their worst nightmare! Enjoy an easy boarding process while all their machines are broken and all their weapons unloaded from an EMP!<br>
|
||||
THE BIGGEST ONE: A shellball, but much bigger. Ye won't be seein' much of these as they were discontinued for sinkin' the firer's ship as often as it sunk the scallywag's ship. Very big boom! If ye have one, ye have been warned!
|
||||
"}
|
||||
@@ -566,6 +566,8 @@
|
||||
new/obj/structure/showcase/machinery/oldpod/used(drop_location())
|
||||
return ..()
|
||||
|
||||
///Pirates
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate
|
||||
name = "space pirate sleeper"
|
||||
desc = "A cryo sleeper smelling faintly of rum."
|
||||
@@ -573,7 +575,6 @@
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
mob_name = "a space pirate"
|
||||
mob_species = /datum/species/skeleton
|
||||
outfit = /datum/outfit/pirate/space
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
@@ -583,28 +584,82 @@
|
||||
short_desc = "You are a space pirate."
|
||||
flavour_text = "The station refused to pay for your protection, protect the ship, siphon the credits from the station and raid it for even more loot."
|
||||
assignedrole = "Space Pirate"
|
||||
var/rank = "Mate"
|
||||
///Rank of the pirate on the ship, it's used in generating pirate names!
|
||||
var/rank = "Deserter"
|
||||
///Whether or not it will spawn a fluff structure upon opening.
|
||||
var/spawn_oldpod = TRUE
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/special(mob/living/new_spawn)
|
||||
new_spawn.fully_replace_character_name(new_spawn.real_name,generate_pirate_name())
|
||||
new_spawn.fully_replace_character_name(new_spawn.real_name, generate_pirate_name(new_spawn.gender))
|
||||
new_spawn.mind.add_antag_datum(/datum/antagonist/pirate)
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/proc/generate_pirate_name()
|
||||
/obj/effect/mob_spawn/human/pirate/proc/generate_pirate_name(spawn_gender)
|
||||
var/beggings = strings(PIRATE_NAMES_FILE, "beginnings")
|
||||
var/endings = strings(PIRATE_NAMES_FILE, "endings")
|
||||
return "[rank] [pick(beggings)][pick(endings)]"
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/Destroy()
|
||||
new/obj/structure/showcase/machinery/oldpod/used(drop_location())
|
||||
if(spawn_oldpod)
|
||||
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
|
||||
return ..()
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/captain
|
||||
rank = "Captain"
|
||||
outfit = /datum/outfit/pirate/space/captain
|
||||
rank = "Renegade Leader"
|
||||
outfit = /datum/outfit/pirate/captain
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/gunner
|
||||
rank = "Rogue"
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/skeleton
|
||||
name = "pirate remains"
|
||||
desc = "Some unanimated bones. They feel like they could spring to life any moment!"
|
||||
random = TRUE
|
||||
density = FALSE
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "remains"
|
||||
spawn_oldpod = FALSE
|
||||
mob_name = "a space pirate"
|
||||
mob_species = /datum/species/skeleton
|
||||
outfit = /datum/outfit/pirate
|
||||
rank = "Mate"
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/skeleton/captain
|
||||
rank = "Captain"
|
||||
outfit = /datum/outfit/pirate/captain
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/skeleton/gunner
|
||||
rank = "Gunner"
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/silverscale
|
||||
name = "elegant sleeper"
|
||||
desc = "Cozy. You get the feeling you aren't supposed to be here, though..."
|
||||
random = TRUE
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
mob_name = "a space pirate"
|
||||
mob_species = /datum/species/lizard/silverscale
|
||||
outfit = /datum/outfit/pirate/silverscale
|
||||
rank = "High-born"
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/silverscale/generate_pirate_name(spawn_gender)
|
||||
var/first_name
|
||||
switch(gender)
|
||||
if(MALE)
|
||||
first_name = pick(GLOB.lizard_names_male)
|
||||
if(FEMALE)
|
||||
first_name = pick(GLOB.lizard_names_female)
|
||||
else
|
||||
first_name = pick(GLOB.lizard_names_male + GLOB.lizard_names_female)
|
||||
|
||||
return "[rank] [first_name]-Silverscale"
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/silverscale/captain
|
||||
rank = "Old-guard"
|
||||
outfit = /datum/outfit/pirate/silverscale/captain
|
||||
|
||||
/obj/effect/mob_spawn/human/pirate/silverscale/gunner
|
||||
rank = "Top-drawer"
|
||||
|
||||
//Forgotten syndicate ship
|
||||
|
||||
/obj/effect/mob_spawn/human/syndicatespace
|
||||
|
||||
@@ -550,6 +550,8 @@ Moving interrupts
|
||||
return ..()
|
||||
|
||||
/obj/structure/statue/custom/proc/set_visuals(model_appearance)
|
||||
if(content_ma)
|
||||
QDEL_NULL(content_ma)
|
||||
content_ma = new
|
||||
content_ma.appearance = model_appearance
|
||||
content_ma.pixel_x = 0
|
||||
|
||||
@@ -152,6 +152,11 @@
|
||||
user.remove_language(/datum/language/piratespeak/, TRUE, TRUE, LANGUAGE_HAT)
|
||||
to_chat(user, "<span class='boldnotice'>You can no longer speak like a pirate.</span>")
|
||||
|
||||
/obj/item/clothing/head/pirate/armored
|
||||
armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75)
|
||||
strip_delay = 40
|
||||
equip_delay_other = 20
|
||||
|
||||
/obj/item/clothing/head/pirate/captain
|
||||
name = "pirate captain hat"
|
||||
icon_state = "hgpiratecap"
|
||||
@@ -164,6 +169,11 @@
|
||||
inhand_icon_state = "bandana"
|
||||
dynamic_hair_suffix = ""
|
||||
|
||||
/obj/item/clothing/head/bandana/armored
|
||||
armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75)
|
||||
strip_delay = 40
|
||||
equip_delay_other = 20
|
||||
|
||||
/obj/item/clothing/head/bowler
|
||||
name = "bowler-hat"
|
||||
desc = "Gentleman, elite aboard!"
|
||||
|
||||
@@ -121,33 +121,70 @@
|
||||
|
||||
uniform = /obj/item/clothing/under/costume/pirate
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
suit = /obj/item/clothing/suit/pirate
|
||||
head = /obj/item/clothing/head/bandana
|
||||
suit = /obj/item/clothing/suit/pirate/armored
|
||||
head = /obj/item/clothing/head/bandana/armored
|
||||
ears = /obj/item/radio/headset/syndicate
|
||||
glasses = /obj/item/clothing/glasses/eyepatch
|
||||
|
||||
/datum/outfit/pirate/post_equip(mob/living/carbon/human/equipped)
|
||||
equipped.faction |= "pirate"
|
||||
|
||||
var/obj/item/radio/outfit_radio = equipped.ears
|
||||
if(outfit_radio)
|
||||
outfit_radio.set_frequency(FREQ_SYNDICATE)
|
||||
outfit_radio.freqlock = TRUE
|
||||
|
||||
var/obj/item/card/id/outfit_id = equipped.wear_id
|
||||
if(outfit_id)
|
||||
outfit_id.registered_name = equipped.real_name
|
||||
outfit_id.update_label()
|
||||
|
||||
/datum/outfit/pirate/captain
|
||||
name = "Space Pirate Captain"
|
||||
|
||||
head = /obj/item/clothing/head/pirate/armored
|
||||
|
||||
/datum/outfit/pirate/space
|
||||
name = "Space Pirate (EVA)"
|
||||
suit = /obj/item/clothing/suit/space/pirate
|
||||
head = /obj/item/clothing/head/helmet/space/pirate/bandana
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
ears = /obj/item/radio/headset/syndicate
|
||||
id = /obj/item/card/id
|
||||
|
||||
/datum/outfit/pirate/space/captain
|
||||
name = "Space Pirate Captain (EVA)"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/pirate
|
||||
|
||||
/datum/outfit/pirate/post_equip(mob/living/carbon/human/H)
|
||||
H.faction |= "pirate"
|
||||
/datum/outfit/pirate/silverscale
|
||||
name = "Silver Scale Member"
|
||||
|
||||
var/obj/item/radio/R = H.ears
|
||||
if(R)
|
||||
R.set_frequency(FREQ_SYNDICATE)
|
||||
R.freqlock = TRUE
|
||||
head = /obj/item/clothing/head/collectable/tophat
|
||||
glasses = /obj/item/clothing/glasses/monocle
|
||||
uniform = /obj/item/clothing/under/suit/charcoal
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
suit = /obj/item/clothing/suit/armor/vest/alt
|
||||
gloves = /obj/item/clothing/gloves/color/black
|
||||
|
||||
var/obj/item/card/id/W = H.wear_id
|
||||
if(W)
|
||||
W.registered_name = H.real_name
|
||||
W.update_label()
|
||||
id = /obj/item/card/id/silver
|
||||
|
||||
///special fluff for the ID's job
|
||||
var/scale_assignment = "Silver Scale Member"
|
||||
|
||||
/datum/outfit/pirate/silverscale/post_equip(mob/living/carbon/human/equipped)
|
||||
..()
|
||||
var/obj/item/card/id/outfit_id = equipped.wear_id
|
||||
if(outfit_id)
|
||||
outfit_id.assignment = scale_assignment
|
||||
outfit_id.update_label()
|
||||
|
||||
/datum/outfit/pirate/silverscale/captain
|
||||
mask = /obj/item/clothing/mask/cigarette/cigar/havana
|
||||
l_pocket = /obj/item/lighter
|
||||
head = /obj/item/clothing/head/crown
|
||||
|
||||
scale_assignment = "Silver Scale VIP"
|
||||
|
||||
/datum/outfit/tunnel_clown
|
||||
name = "Tunnel Clown"
|
||||
|
||||
@@ -131,28 +131,23 @@ Contains:
|
||||
|
||||
//Space pirate outfit
|
||||
/obj/item/clothing/head/helmet/space/pirate
|
||||
name = "pirate hat"
|
||||
desc = "Yarr."
|
||||
icon_state = "pirate"
|
||||
inhand_icon_state = "pirate"
|
||||
name = "modified EVA helmet"
|
||||
desc = "A modified helmet to allow space pirates to intimidate their customers whilst staying safe from the void. Comes with some additional protection."
|
||||
icon_state = "spacepirate"
|
||||
inhand_icon_state = "spacepiratehelmet"
|
||||
armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75)
|
||||
flags_inv = HIDEHAIR
|
||||
strip_delay = 40
|
||||
equip_delay_other = 20
|
||||
flags_cover = HEADCOVERSEYES
|
||||
|
||||
/obj/item/clothing/head/helmet/space/pirate/bandana
|
||||
name = "pirate bandana"
|
||||
icon_state = "bandana"
|
||||
inhand_icon_state = "bandana"
|
||||
icon_state = "spacebandana"
|
||||
inhand_icon_state = "spacepiratehelmet"
|
||||
|
||||
/obj/item/clothing/suit/space/pirate
|
||||
name = "pirate coat"
|
||||
desc = "Yarr."
|
||||
icon_state = "pirate"
|
||||
inhand_icon_state = "pirate"
|
||||
name = "modified EVA suit"
|
||||
desc = "A modified suit to allow space pirates to board shuttles and stations while avoiding the maw of the void. Comes with additional protection, and is lighter to move in."
|
||||
icon_state = "spacepirate"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
flags_inv = 0
|
||||
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/transforming/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum)
|
||||
slowdown = 0
|
||||
armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75)
|
||||
|
||||
@@ -54,12 +54,22 @@
|
||||
allowed = list(/obj/item/melee/transforming/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum)
|
||||
species_exception = list(/datum/species/golem)
|
||||
|
||||
/obj/item/clothing/suit/pirate/armored
|
||||
armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75)
|
||||
strip_delay = 40
|
||||
equip_delay_other = 20
|
||||
|
||||
/obj/item/clothing/suit/pirate/captain
|
||||
name = "pirate captain coat"
|
||||
desc = "Yarr."
|
||||
icon_state = "hgpirate"
|
||||
inhand_icon_state = "hgpirate"
|
||||
|
||||
/obj/item/clothing/suit/pirate/captain/armored
|
||||
armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75)
|
||||
strip_delay = 40
|
||||
equip_delay_other = 20
|
||||
|
||||
|
||||
/obj/item/clothing/suit/cyborg_suit
|
||||
name = "cyborg suit"
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
earliest_start = 30 MINUTES
|
||||
gamemode_blacklist = list("nuclear")
|
||||
|
||||
#define PIRATES_ROGUES "Rogues"
|
||||
#define PIRATES_SILVERSCALES "Silverscales"
|
||||
#define PIRATES_DUTCHMAN "Flying Dutchman"
|
||||
|
||||
/datum/round_event_control/pirates/preRunEvent()
|
||||
if (!SSmapping.empty_space)
|
||||
return EVENT_CANT_RUN
|
||||
@@ -19,11 +23,20 @@
|
||||
var/payoff = 0
|
||||
var/payoff_min = 20000
|
||||
var/paid_off = FALSE
|
||||
var/pirate_type
|
||||
var/ship_template
|
||||
var/ship_name = "Space Privateers Association"
|
||||
var/shuttle_spawned = FALSE
|
||||
|
||||
/datum/round_event/pirates/setup()
|
||||
ship_name = pick(strings(PIRATE_NAMES_FILE, "ship_names"))
|
||||
pirate_type = pick(PIRATES_ROGUES, PIRATES_SILVERSCALES, PIRATES_DUTCHMAN)
|
||||
switch(pirate_type)
|
||||
if(PIRATES_ROGUES)
|
||||
ship_name = pick(strings(PIRATE_NAMES_FILE, "rogue_names"))
|
||||
if(PIRATES_SILVERSCALES)
|
||||
ship_name = pick(strings(PIRATE_NAMES_FILE, "silverscale_names"))
|
||||
if(PIRATES_DUTCHMAN)
|
||||
ship_name = "Flying Dutchman"
|
||||
|
||||
/datum/round_event/pirates/announce(fake)
|
||||
priority_announce("Incoming subspace communication. Secure channel opened at all communication consoles.", "Incoming Message", SSstation.announcer.get_rand_report_sound())
|
||||
@@ -33,9 +46,22 @@
|
||||
var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR)
|
||||
if(D)
|
||||
payoff = max(payoff_min, FLOOR(D.account_balance * 0.80, 1000))
|
||||
threat.title = "Business proposition"
|
||||
threat.content = "This is [ship_name]. Pay up [payoff] credits or you'll walk the plank."
|
||||
threat.possible_answers = list("We'll pay.","No way.")
|
||||
switch(pirate_type)
|
||||
if(PIRATES_ROGUES)
|
||||
ship_template = /datum/map_template/shuttle/pirate/default
|
||||
threat.title = "Sector protection offer"
|
||||
threat.content = "Greetings from the [ship_name]. Your sector needs protection, how about you pay us [payoff] credits, or else you may be left wide open to an attack."
|
||||
threat.possible_answers = list("We'll pay.","That sounds like a scam.")
|
||||
if(PIRATES_SILVERSCALES)
|
||||
ship_template = /datum/map_template/shuttle/pirate/silverscale
|
||||
threat.title = "Tribute to high society"
|
||||
threat.content = "This is the [ship_name]. The Silver Scales wish for some tribute from your plebeian lizards. [payoff] credits should do the trick."
|
||||
threat.possible_answers = list("We'll pay.","Tribute? Really? Go away.")
|
||||
if(PIRATES_DUTCHMAN)
|
||||
ship_template = /datum/map_template/shuttle/pirate/dutchman
|
||||
threat.title = "Business proposition"
|
||||
threat.content = "Ahoy! This be the [ship_name]. Cough up [payoff] credits or you'll walk the plank."
|
||||
threat.possible_answers = list("We'll pay.","We will not be extorted.")
|
||||
threat.answer_callback = CALLBACK(src,.proc/answered)
|
||||
SScommunications.send_message(threat,unique = TRUE)
|
||||
|
||||
@@ -67,7 +93,7 @@
|
||||
var/list/candidates = pollGhostCandidates("Do you wish to be considered for pirate crew?", ROLE_TRAITOR)
|
||||
shuffle_inplace(candidates)
|
||||
|
||||
var/datum/map_template/shuttle/pirate/default/ship = new
|
||||
var/datum/map_template/shuttle/pirate/ship = new ship_template
|
||||
var/x = rand(TRANSITIONEDGE,world.maxx - TRANSITIONEDGE - ship.width)
|
||||
var/y = rand(TRANSITIONEDGE,world.maxy - TRANSITIONEDGE - ship.height)
|
||||
var/z = SSmapping.empty_space.z_value
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
pressure_resistance = 2 * ONE_ATMOSPHERE
|
||||
max_integrity = 300
|
||||
var/open = FALSE
|
||||
var/can_open = TRUE
|
||||
var/speed_multiplier = 1 //How fast it distills. Defaults to 100% (1.0). Lower is better.
|
||||
|
||||
/obj/structure/fermenting_barrel/Initialize()
|
||||
@@ -57,15 +58,16 @@
|
||||
return ..()
|
||||
|
||||
/obj/structure/fermenting_barrel/attack_hand(mob/user)
|
||||
open = !open
|
||||
if(open)
|
||||
reagents.flags &= ~(DRAINABLE)
|
||||
reagents.flags |= REFILLABLE | TRANSPARENT
|
||||
to_chat(user, "<span class='notice'>You open [src], letting you fill it.</span>")
|
||||
else
|
||||
reagents.flags |= DRAINABLE
|
||||
reagents.flags &= ~(REFILLABLE | TRANSPARENT)
|
||||
to_chat(user, "<span class='notice'>You close [src], letting you draw from its tap.</span>")
|
||||
if(can_open)
|
||||
open = !open
|
||||
if(open)
|
||||
reagents.flags &= ~(DRAINABLE)
|
||||
reagents.flags |= REFILLABLE | TRANSPARENT
|
||||
to_chat(user, "<span class='notice'>You open [src], letting you fill it.</span>")
|
||||
else
|
||||
reagents.flags |= DRAINABLE
|
||||
reagents.flags &= ~(REFILLABLE | TRANSPARENT)
|
||||
to_chat(user, "<span class='notice'>You close [src], letting you draw from its tap.</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/structure/fermenting_barrel/update_icon_state()
|
||||
@@ -80,3 +82,14 @@
|
||||
reqs = list(/obj/item/stack/sheet/mineral/wood = 8)
|
||||
time = 50
|
||||
category = CAT_PRIMAL
|
||||
|
||||
//lil gunpowder barrel fer pirates since it's a nice reagent holder
|
||||
|
||||
/obj/structure/fermenting_barrel/gunpowder
|
||||
name = "gunpowder barrel"
|
||||
desc = "A large wooden barrel for holding gunpowder. You'll need to take from this to load the cannons."
|
||||
can_open = FALSE
|
||||
|
||||
/obj/structure/fermenting_barrel/gunpowder/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent(/datum/reagent/gunpowder, 250)
|
||||
|
||||
@@ -272,6 +272,13 @@ Key procs
|
||||
/datum/language_holder/lizard/ash
|
||||
selected_language = /datum/language/draconic
|
||||
|
||||
/datum/language_holder/lizard/silver
|
||||
understood_languages = list(/datum/language/uncommon = list(LANGUAGE_ATOM),
|
||||
/datum/language/draconic = list(LANGUAGE_ATOM))
|
||||
spoken_languages = list(/datum/language/uncommon = list(LANGUAGE_ATOM),
|
||||
/datum/language/draconic = list(LANGUAGE_ATOM))
|
||||
selected_language = /datum/language/uncommon
|
||||
|
||||
/datum/language_holder/monkey
|
||||
understood_languages = list(/datum/language/common = list(LANGUAGE_ATOM),
|
||||
/datum/language/monkey = list(LANGUAGE_ATOM))
|
||||
|
||||
@@ -1298,6 +1298,9 @@
|
||||
/mob/living/carbon/human/species/lizard/ashwalker
|
||||
race = /datum/species/lizard/ashwalker
|
||||
|
||||
/mob/living/carbon/human/species/lizard/silverscale
|
||||
race = /datum/species/lizard/silverscale
|
||||
|
||||
/mob/living/carbon/human/species/ethereal
|
||||
race = /datum/species/ethereal
|
||||
|
||||
|
||||
@@ -111,3 +111,38 @@ Lizard subspecies: ASHWALKERS
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE,HAS_FLESH,HAS_BONE)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_CHUNKYFINGERS,TRAIT_NOBREATH)
|
||||
species_language_holder = /datum/language_holder/lizard/ash
|
||||
|
||||
/*
|
||||
Lizard subspecies: SILVER SCALED
|
||||
*/
|
||||
/datum/species/lizard/silverscale
|
||||
name = "Silver Scale"
|
||||
id = "silverlizard"
|
||||
limbs_id = "lizard"
|
||||
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_HOLY,TRAIT_NOBREATH,TRAIT_VIRUSIMMUNE,TRAIT_WINE_TASTER)
|
||||
species_language_holder = /datum/language_holder/lizard/silver
|
||||
mutanttongue = /obj/item/organ/tongue/lizard/silver
|
||||
armor = 10 //very light silvery scales soften blows
|
||||
changesource_flags = MIRROR_BADMIN | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN
|
||||
///stored mutcolor for when we turn back off of a silverscale.
|
||||
var/old_mutcolor
|
||||
///stored eye color for when we turn back off of a silverscale.
|
||||
var/old_eyecolor
|
||||
|
||||
/datum/species/lizard/silverscale/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
var/mob/living/carbon/human/new_silverscale = C
|
||||
old_mutcolor = C.dna.features["mcolor"]
|
||||
old_eyecolor = new_silverscale.eye_color
|
||||
new_silverscale.dna.features["mcolor"] = "eeeeee"
|
||||
new_silverscale.eye_color = "0000a0"
|
||||
..()
|
||||
new_silverscale.add_filter("silver_glint", 2, list("type" = "outline", "color" = "#ffffff63", "size" = 2))
|
||||
|
||||
/datum/species/lizard/silverscale/on_species_loss(mob/living/carbon/C)
|
||||
var/mob/living/carbon/human/was_silverscale = C
|
||||
was_silverscale.dna.features["mcolor"] = old_mutcolor
|
||||
was_silverscale.eye_color = old_eyecolor
|
||||
|
||||
was_silverscale.remove_filter("silver_glint")
|
||||
..()
|
||||
|
||||
@@ -124,12 +124,13 @@
|
||||
/obj/projectile/beam/pulse/heavy
|
||||
name = "heavy pulse laser"
|
||||
icon_state = "pulse1_bl"
|
||||
var/life = 20
|
||||
projectile_piercing = ALL
|
||||
var/pierce_hits = 2
|
||||
|
||||
/obj/projectile/beam/pulse/heavy/on_hit(atom/target, blocked = FALSE)
|
||||
life -= 10
|
||||
if(life > 0)
|
||||
. = BULLET_ACT_FORCE_PIERCE
|
||||
if(pierce_hits <= 0)
|
||||
projectile_piercing = NONE
|
||||
pierce_hits -= 1
|
||||
..()
|
||||
|
||||
/obj/projectile/beam/emitter
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/obj/projectile/bullet/cannonball
|
||||
name = "cannonball"
|
||||
icon_state = "cannonball"
|
||||
damage = 110 //gets set to 100 before first mob impact.
|
||||
sharpness = NONE
|
||||
wound_bonus = 0
|
||||
projectile_piercing = ALL
|
||||
dismemberment = 0
|
||||
paralyze = 5 SECONDS
|
||||
stutter = 10 SECONDS
|
||||
embedding = null
|
||||
hitsound = 'sound/effects/meteorimpact.ogg'
|
||||
hitsound_wall = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
|
||||
/obj/projectile/bullet/cannonball/on_hit(atom/target, blocked = FALSE)
|
||||
damage -= 10
|
||||
if(damage < 40)
|
||||
projectile_piercing = NONE //so it finishes its rampage
|
||||
if(blocked == 100)
|
||||
return ..()
|
||||
if(isobj(target))
|
||||
var/obj/hit_object = target
|
||||
hit_object.take_damage(80, BRUTE, BULLET, FALSE)
|
||||
else if(isclosedturf(target))
|
||||
damage -= max(damage - 30, 10) //lose extra momentum from busting through a wall
|
||||
var/turf/closed/hit_turf = target
|
||||
hit_turf.ScrapeAway()
|
||||
return ..()
|
||||
|
||||
/obj/projectile/bullet/cannonball/explosive
|
||||
name = "explosive shell"
|
||||
color = "#FF0000"
|
||||
projectile_piercing = NONE
|
||||
damage = 40 //set to 30 before first mob impact, but they're gonna be gibbed by the explosion
|
||||
|
||||
/obj/projectile/bullet/cannonball/explosive/on_hit(atom/target, blocked = FALSE)
|
||||
explosion(target, 2, 3, 4)
|
||||
. = ..()
|
||||
|
||||
/obj/projectile/bullet/cannonball/emp
|
||||
name = "malfunction shot"
|
||||
icon_state = "emp_cannonball"
|
||||
projectile_piercing = NONE
|
||||
damage = 15 //very low
|
||||
|
||||
/obj/projectile/bullet/cannonball/emp/on_hit(atom/target, blocked = FALSE)
|
||||
empulse(src, 4, 10)
|
||||
. = ..()
|
||||
|
||||
/obj/projectile/bullet/cannonball/biggest_one
|
||||
name = "\"The Biggest One\""
|
||||
icon_state = "biggest_one"
|
||||
damage = 70 //low pierce
|
||||
|
||||
/obj/projectile/bullet/cannonball/biggest_one/on_hit(atom/target, blocked = FALSE)
|
||||
if(projectile_piercing == NONE)
|
||||
explosion(target, GLOB.MAX_EX_DEVESTATION_RANGE, GLOB.MAX_EX_HEAVY_RANGE, GLOB.MAX_EX_LIGHT_RANGE, GLOB.MAX_EX_FLASH_RANGE)
|
||||
. = ..()
|
||||
@@ -92,6 +92,84 @@
|
||||
message = lizard_eckS.Replace(message, "ECKS$1")
|
||||
speech_args[SPEECH_MESSAGE] = message
|
||||
|
||||
/obj/item/organ/tongue/lizard/silver
|
||||
name = "silver tongue"
|
||||
desc = "A genetic branch of the high society Silver Scales that gives them their silverizing properties. To them, it is everything, and society traitors have their tongue forcibly revoked. Oddly enough, it itself is just blue."
|
||||
icon_state = "silvertongue"
|
||||
actions_types = list(/datum/action/item_action/organ_action/statue)
|
||||
|
||||
/datum/action/item_action/organ_action/statue
|
||||
name = "Become Statue"
|
||||
desc = "Become an elegant silver statue. Its durability and yours are directly tied together, so make sure you're careful."
|
||||
COOLDOWN_DECLARE(ability_cooldown)
|
||||
|
||||
var/obj/structure/statue/custom/statue
|
||||
|
||||
/datum/action/item_action/organ_action/statue/New(Target)
|
||||
. = ..()
|
||||
statue = new
|
||||
RegisterSignal(statue, COMSIG_PARENT_QDELETING, .proc/statue_destroyed)
|
||||
|
||||
/datum/action/item_action/organ_action/statue/Destroy()
|
||||
UnregisterSignal(statue, COMSIG_PARENT_QDELETING)
|
||||
QDEL_NULL(statue)
|
||||
. = ..()
|
||||
|
||||
/datum/action/item_action/organ_action/statue/Trigger()
|
||||
. = ..()
|
||||
if(!iscarbon(owner))
|
||||
to_chat(owner, "<span class='warning'>Your body rejects the powers of the tongue!</span>")
|
||||
return
|
||||
var/mob/living/carbon/becoming_statue = owner
|
||||
if(becoming_statue.health < 1)
|
||||
to_chat(becoming_statue, "<span class='danger'>You are too weak to become a statue!</span>")
|
||||
return
|
||||
if(!COOLDOWN_FINISHED(src, ability_cooldown))
|
||||
to_chat(becoming_statue, "<span class='warning'>You just used the ability, wait a little bit!</span>")
|
||||
return
|
||||
var/is_statue = becoming_statue.loc == statue
|
||||
to_chat(becoming_statue, "<span class='notice'>You begin to [is_statue ? "break free from the statue" : "make a glorious pose as you become a statue"]!</span>")
|
||||
if(!do_after(becoming_statue, (is_statue ? 5 : 30), target = get_turf(becoming_statue)))
|
||||
to_chat(becoming_statue, "<span class='warning'>Your transformation is interrupted!</span>")
|
||||
COOLDOWN_START(src, ability_cooldown, 3 SECONDS)
|
||||
return
|
||||
COOLDOWN_START(src, ability_cooldown, 10 SECONDS)
|
||||
|
||||
if(statue.name == initial(statue.name)) //statue has not been set up
|
||||
statue.name = "statue of [becoming_statue.real_name]"
|
||||
statue.desc = "statue depicting [becoming_statue.real_name]"
|
||||
statue.set_custom_materials(list(/datum/material/silver=MINERAL_MATERIAL_AMOUNT*5))
|
||||
|
||||
if(is_statue)
|
||||
statue.visible_message("<span class='danger'>[statue] becomes animated!</span>")
|
||||
becoming_statue.forceMove(get_turf(statue))
|
||||
statue.moveToNullspace()
|
||||
UnregisterSignal(becoming_statue, COMSIG_MOVABLE_MOVED)
|
||||
else
|
||||
becoming_statue.visible_message("<span class='notice'>[becoming_statue] hardens into a silver statue.</span>", "<span class='notice'>You have become a silver statue!</span>")
|
||||
statue.set_visuals(becoming_statue.appearance)
|
||||
statue.forceMove(get_turf(becoming_statue))
|
||||
becoming_statue.forceMove(statue)
|
||||
statue.obj_integrity = becoming_statue.health
|
||||
RegisterSignal(becoming_statue, COMSIG_MOVABLE_MOVED, .proc/human_left_statue)
|
||||
|
||||
//somehow they used an exploit/teleportation to leave statue, lets clean up
|
||||
/datum/action/item_action/organ_action/statue/proc/human_left_statue(atom/movable/mover, atom/oldloc, direction)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
statue.moveToNullspace()
|
||||
UnregisterSignal(mover, COMSIG_MOVABLE_MOVED)
|
||||
|
||||
/datum/action/item_action/organ_action/statue/proc/statue_destroyed(datum/source)
|
||||
to_chat(owner, "<span class='userdanger'>Your existence as a living creature snaps as your statue form crumbles!</span>")
|
||||
if(iscarbon(owner))
|
||||
//drop everything, just in case
|
||||
var/mob/living/carbon/dying_carbon = owner
|
||||
for(var/obj/item/dropped in dying_carbon)
|
||||
if(!dying_carbon.dropItemToGround(dropped))
|
||||
qdel(dropped)
|
||||
qdel(owner)
|
||||
|
||||
/obj/item/organ/tongue/fly
|
||||
name = "proboscis"
|
||||
desc = "A freakish looking meat tube that apparently can take in liquids."
|
||||
|
||||
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 222 KiB After Width: | Height: | Size: 225 KiB |
|
Before Width: | Height: | Size: 413 KiB After Width: | Height: | Size: 416 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 42 KiB |
@@ -1,31 +1,101 @@
|
||||
{
|
||||
"beginnings":[
|
||||
"Star",
|
||||
"Oort",
|
||||
"Comet",
|
||||
"Pulsar",
|
||||
"Plasma",
|
||||
"Void",
|
||||
"Space",
|
||||
"Solar",
|
||||
"Laser",
|
||||
"Ion"
|
||||
],
|
||||
"endings":[
|
||||
"keel",
|
||||
"beard",
|
||||
"bilge",
|
||||
"hull",
|
||||
"hook",
|
||||
"flag",
|
||||
"deck",
|
||||
"salt",
|
||||
"knot",
|
||||
"fish",
|
||||
"helm"
|
||||
],
|
||||
"ship_names":[
|
||||
"Space Queen's Revenge",
|
||||
"Syndicate Privateer"
|
||||
]
|
||||
}
|
||||
"beginnings":[
|
||||
"Comet",
|
||||
"Ion",
|
||||
"Laser",
|
||||
"Oort",
|
||||
"Plasma",
|
||||
"Pulsar",
|
||||
"Solar",
|
||||
"Space",
|
||||
"Star",
|
||||
"Void"
|
||||
],
|
||||
"endings":[
|
||||
"beard",
|
||||
"bilge",
|
||||
"deck",
|
||||
"fish",
|
||||
"flag",
|
||||
"helm",
|
||||
"hook",
|
||||
"hull",
|
||||
"keel",
|
||||
"knot",
|
||||
"salt"
|
||||
],
|
||||
"rogue_names":[
|
||||
"Abyssal Titan",
|
||||
"Ashes to Ashes",
|
||||
"Asteroid Blaster",
|
||||
"Asteroid Dragger",
|
||||
"Bellowing Spacedragon",
|
||||
"Blargbeam Solar-slider",
|
||||
"Blood Money",
|
||||
"Cosmic Gunboat",
|
||||
"Customer Service",
|
||||
"Deadman's Switch",
|
||||
"Diplomacy Disputer",
|
||||
"Driftbeam",
|
||||
"Echoing Laughter",
|
||||
"Electric Boogaloo",
|
||||
"Fat Leg",
|
||||
"Heaven's Cavaliers",
|
||||
"I Am Become Death",
|
||||
"I Love the Bomb",
|
||||
"Ickity Pickety Startooth Knuckle Dragger",
|
||||
"John Ship",
|
||||
"Lizard Melter",
|
||||
"Lost in Deep Space",
|
||||
"Missile Rack",
|
||||
"Moth Splatterer",
|
||||
"New Sins for Old",
|
||||
"One Last Job",
|
||||
"Paint Asteroids Red",
|
||||
"Pastafarianism",
|
||||
"Raging Meteor",
|
||||
"Reverse Far Leap",
|
||||
"Scourge of the Milky Way",
|
||||
"Silicon Policy",
|
||||
"Space Grease",
|
||||
"Space Justice",
|
||||
"Space Pearl",
|
||||
"Star Scraper",
|
||||
"War as a Business",
|
||||
"Xenophobia",
|
||||
"Space Queen's Revenge",
|
||||
"Syndicate Privateer"
|
||||
],
|
||||
"silverscale_names":[
|
||||
"Antelope's Run",
|
||||
"Aristocrat's Principle",
|
||||
"Aristocratic Tributary",
|
||||
"Bane of Serfs",
|
||||
"Benevolence of the Serpentine",
|
||||
"Casus Belli",
|
||||
"Celestial Lizardhawk",
|
||||
"Divine Space Wind",
|
||||
"Empire Sprawl",
|
||||
"Guiding Hand",
|
||||
"His Majesty's Chosen",
|
||||
"Home Away from Home",
|
||||
"Jewel of Tizira",
|
||||
"Manifest Destiny",
|
||||
"Necessary Evil",
|
||||
"Pearly Gates",
|
||||
"Pinnacle of the Stratocracy",
|
||||
"Prince Regent",
|
||||
"Right to Rule",
|
||||
"Ruling Body",
|
||||
"Serpentine Dominion",
|
||||
"Silver Fox",
|
||||
"Silver Sterling",
|
||||
"Silverchain's Sovereignty",
|
||||
"Spaceflower",
|
||||
"Status Quo",
|
||||
"Swords and Sandals",
|
||||
"Thesaurus Terror",
|
||||
"Archduke's Silver Ring",
|
||||
"Silver Steed"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1214,6 +1214,7 @@
|
||||
#include "code\game\objects\items\robot\robot_upgrades.dm"
|
||||
#include "code\game\objects\items\stacks\ammonia_crystals.dm"
|
||||
#include "code\game\objects\items\stacks\bscrystal.dm"
|
||||
#include "code\game\objects\items\stacks\cannonballs.dm"
|
||||
#include "code\game\objects\items\stacks\cash.dm"
|
||||
#include "code\game\objects\items\stacks\license_plates.dm"
|
||||
#include "code\game\objects\items\stacks\medical.dm"
|
||||
@@ -1266,6 +1267,7 @@
|
||||
#include "code\game\objects\structures\artstuff.dm"
|
||||
#include "code\game\objects\structures\barsigns.dm"
|
||||
#include "code\game\objects\structures\bedsheet_bin.dm"
|
||||
#include "code\game\objects\structures\cannon.dm"
|
||||
#include "code\game\objects\structures\chess.dm"
|
||||
#include "code\game\objects\structures\destructible_structures.dm"
|
||||
#include "code\game\objects\structures\displaycase.dm"
|
||||
@@ -2878,6 +2880,7 @@
|
||||
#include "code\modules\projectiles\projectile\bullets.dm"
|
||||
#include "code\modules\projectiles\projectile\magic.dm"
|
||||
#include "code\modules\projectiles\projectile\bullets\_incendiary.dm"
|
||||
#include "code\modules\projectiles\projectile\bullets\cannon.dm"
|
||||
#include "code\modules\projectiles\projectile\bullets\dart_syringe.dm"
|
||||
#include "code\modules\projectiles\projectile\bullets\dnainjector.dm"
|
||||
#include "code\modules\projectiles\projectile\bullets\grenade.dm"
|
||||
|
||||