Still more simple_mob conversions (#5523)

* Fixes 6 pAI faces

PAIs are no longer coded to only recognize 9 emotions. This enables the use of the neutral, silly, nose, smirk, exclamation points, and question mark faces as a pAI. Before, those buttons did nothing.

* Fixes the PDA Halogen Scanner's tendency to be number one.

* Unfolded pAIs can be picked up

Because who doesn't want a robotic cat on their head? Adds in the missing code to allow pAIs to actually be picked up, and held sprites for the newer 4 chassis options.

* Adds the Gigaphone, a suped-up Megaphone.

* Constant Chip has a sprite

* Fireaxe cabinets find their fireaxes in initialize(), rather than new()

* Speeds up alcohol

* fixed mining cloak not being in loadouts

* Admin Supermatter Setup now closes the monitoring room shutters (#5442)

* Admin Supermatter Setup now closes the monitoring room shutters

* Fixes a copy-paste error

* Begins work on lightning.

* Fixes #5447 (Deadspy submap not overwriting mapgen) (#5448)

* Map fix

* fixed deadspy.dmm

* Added Squid plushies of varying colours

I added a few Squid plushies in different colours, changing the files code/game/objects/items/toys.dm
and obj/toy.dmi

* Added hat functionality to Squid plushies

I added the ability to wear my Squid plushies as hats. They're damn good hats.

* Replaces Skrell namegen (#5453)

Created a first name list for Skrell, to replace the syllable assembler.

Created a surname list for Skrell to replace the syllable assembler.

Replaced the Skrell namegen with pre-written namelists, instead of the old syllable assembler.

* Mechoid makes mistakes. Fix telepathic gigaphones.

* Lets people be colorblind

Adds four types of colorblindness to the traits in the setup menu - protanopia, deuteranopia, tritanopia, and monochromacy. Previously, there were ones defined in the code, but not actually usable to players.

* Whoops, worded that wrong

* Adds beams to the Type var list for View Variables.

* Unfuck my Master

* Adds beams to the Type var selection in View Variables.

* Finishes thunderstorms.

* Adds logging.

* APC Sprite Change

- Port from Virgo recolored slightly to match closer to the old sprite
- Addition of directional sprites for the APCs

* Refactors supply controller.
Supply consoles now run nanoUI

* Missing '

* [Excitedly updates changelog]

* btw i use arc

* Removes supermatters from cave PoIs.

* Holomap Port

- Port of Holomaps from Virgo

* Changing species (via ling or admin button) should no longer ruin your HUD

* Converts most istype(thing,tool) procs into an appropriate thing.is_tool() format

* Removes empty file, gives the QM a control console again (Was replaced with an ordering console)

* Hopefully fixes some tool-conversion things

* Makes the Northern Star still compile

* Keeps NS up to date

* Taj and Unathi should have explorer mask sprites now

* Corgi rune now summons the corgi in a flash of harmless lightning

* Forces mech construction to work with the is_tool() procs

* Various things and floors no longer associate with dirt

* MultiZ falling tweaks

* Fixes the clusterbang grenade

* Added new hairstyles

* Added new hairstyles

* Fixes spelling of Strike in Lightning Strike admin verb

* I don't know how we keep breaking falling

* Hallucinations now use the old system again, but with the more modern components.

* Ambience Refactor (#5476)

* Refactors how ambience is assigned, removes bad ambience, ports good ambience from tg

* Apparently that file is still used, not worth the salt to remove it.

* Changelog

* The speed-related chem effects are no longer a one-or-none affair, oxy causes slowdown

* Corrects noted issues

* Add some missing sprites for xenoarch excavation.

* Become thwarted, thot.

* Fixes the Ultra AC2's burstfire bug.

* The Major Bill's shuttle is actually contagious now.

* penguins are from earth

capitalize this, anewbe, i dare you

* Mechoid's a butt

* Adds new job/department specific teshari clothing to the loadout (#5481)

* adding the new department specific teshari outfits

* Slightly cleans up hooded suit code (#5471)

* FBPs can have brute damage repaired externally again

* Windoors fix

* Cleans up some largecrate code

* Weather refactor.

* NanoUI makes me sad.

* Drinking more booze gets you drunk faster

* Ports the supermatter grenade, supporting code

* May or may not make movement seem smoother

* Fixes the Sleepy Ring

* Partially ports the GLOB system

* Fixes the bug(s) that allow meat bodies to have metal brains

* ports VOREStation/VOREStation#4165 - i forgot to check if advanced who was a thing here

* Optimizes supply UI

* Transfer shuttle grammar fixes

* Fixes borked E and W fish sprites

* Fixes incorrect ETA in crew transfer announcement

* Mech Mini 'Revamp'. Will need playtesting. (#5480)

* Exosuits are now capable of holding more equipment, of specific types.

* Tweaks regarding feedback in staffside thread, other concerns.

* Tweak to be more consistent. Why did the Odysseus have two universals. Tweak to weapon restriction on Med - > Odyss

* Weapons only fit in universal combat slots.

* Adds smart magazine, magazine functionality

* Adds a new subset of grenades that shoot projectiles

* Low alpha now makes HUDs and tooltips not show up on you

* Fixes a UI bug with emptying currently-open bags into smartfridges...hopefully. (#5515)

* Update smartfridge.dm

* actually indicates which line solves the bug

* Adds a whole bunch of Exosuit weapons and other miscellaneous parts.

* Minifrags now use the small fragments mainly as they should.

* Iced beer no longer freezes you to 3 degrees C, which is enough to seriously burn a Skrell. Seriously, that's weird.

* Touch stuff in reference to responses.

* NanoUI now processes again

* Converts more simple_animal mobs to simple_mob

* Submap correction
This commit is contained in:
Anewbe
2018-08-28 11:25:33 -07:00
committed by Atermonera
parent 6a40982a48
commit 0c0246e3fa
289 changed files with 4825 additions and 2220 deletions
+1 -1
View File
@@ -12,7 +12,7 @@
sparks.attach(loc)
/obj/item/weapon/antag_spawner/Destroy()
qdel_null(sparks)
QDEL_NULL(sparks)
return ..()
/obj/item/weapon/antag_spawner/proc/spawn_antag(client/C, turf/T)
+2 -2
View File
@@ -149,8 +149,8 @@
..()
/obj/structure/closet/body_bag/cryobag/Destroy()
qdel_null(syringe)
qdel_null(tank)
QDEL_NULL(syringe)
QDEL_NULL(tank)
return ..()
/obj/structure/closet/body_bag/cryobag/open()
+11 -11
View File
@@ -467,7 +467,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui_tick++
var/datum/nanoui/old_ui = nanomanager.get_open_ui(user, src, "main")
var/datum/nanoui/old_ui = GLOB.nanomanager.get_open_ui(user, src, "main")
var/auto_update = 1
if(mode in no_auto_update)
auto_update = 0
@@ -647,7 +647,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
nanoUI = data
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
// the ui does not exist, so we'll create a new() one
@@ -684,7 +684,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
..()
var/mob/user = usr
var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main")
var/datum/nanoui/ui = GLOB.nanomanager.get_open_ui(user, src, "main")
var/mob/living/U = usr
//Looking for master was kind of pointless since PDAs don't appear to have one.
//if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) ) )
@@ -1129,7 +1129,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
ai.show_message("<i>Intercepted message from <b>[who]</b>: [t]</i>")
P.new_message_from_pda(src, t)
nanomanager.update_user_uis(U, src) // Update the sending user's PDA UI so that they can see the new message
GLOB.nanomanager.update_user_uis(U, src) // Update the sending user's PDA UI so that they can see the new message
else
to_chat(U, "<span class='notice'>ERROR: Messaging server is not responding.</span>")
@@ -1149,7 +1149,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(L)
if(reception_message)
L << reception_message
nanomanager.update_user_uis(L, src) // Update the receiving user's PDA UI so that they can see the new message
GLOB.nanomanager.update_user_uis(L, src) // Update the receiving user's PDA UI so that they can see the new message
/obj/item/device/pda/proc/new_news(var/message)
new_info(news_silent, newstone, news_silent ? "" : "\icon[src] <b>[message]</b>")
@@ -1195,7 +1195,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(can_use(usr))
mode = 0
nanomanager.update_uis(src)
GLOB.nanomanager.update_uis(src)
to_chat(usr, "<span class='notice'>You press the reset button on \the [src].</span>")
else
to_chat(usr, "<span class='notice'>You cannot do this while restrained.</span>")
@@ -1296,7 +1296,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
user.drop_item()
cartridge.loc = src
to_chat(usr, "<span class='notice'>You insert [cartridge] into [src].</span>")
nanomanager.update_uis(src) // update all UIs attached to src
GLOB.nanomanager.update_uis(src) // update all UIs attached to src
if(cartridge.radio)
cartridge.radio.hostpda = src
@@ -1324,7 +1324,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
C.loc = src
pai = C
to_chat(user, "<span class='notice'>You slot \the [C] into \the [src].</span>")
nanomanager.update_uis(src) // update all UIs attached to src
GLOB.nanomanager.update_uis(src) // update all UIs attached to src
else if(istype(C, /obj/item/weapon/pen))
var/obj/item/weapon/pen/O = locate() in src
if(O)
@@ -1473,9 +1473,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (src.id && prob(90)) //IDs are kept in 90% of the cases
src.id.forceMove(get_turf(src.loc))
else
qdel_null(src.id)
qdel_null(src.cartridge)
qdel_null(src.pai)
QDEL_NULL(src.id)
QDEL_NULL(src.cartridge)
QDEL_NULL(src.pai)
return ..()
/obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery.
+1 -1
View File
@@ -79,7 +79,7 @@ var/list/civilian_cartridges = list(
var/list/stored_data = list()
/obj/item/weapon/cartridge/Destroy()
qdel_null(radio)
QDEL_NULL(radio)
return ..()
/obj/item/weapon/cartridge/engineering
+1 -1
View File
@@ -43,7 +43,7 @@
data["laws"] = laws
data["has_laws"] = laws.len
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "aicard.tmpl", "[name]", 600, 400, state = state)
ui.set_initial_data(data)
@@ -114,7 +114,7 @@
data["injection"] = injection
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
@@ -250,5 +250,5 @@
fon = !fon
set_light(fon * flum)
nanomanager.update_uis(src)
GLOB.nanomanager.update_uis(src)
add_fingerprint(usr)
@@ -298,8 +298,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
all_communicators -= src
processing_objects -= src
listening_objects.Remove(src)
qdel_null(camera)
qdel_null(exonet)
QDEL_NULL(camera)
QDEL_NULL(exonet)
return ..()
+2 -2
View File
@@ -32,8 +32,8 @@
/obj/item/device/defib_kit/Destroy()
. = ..()
qdel_null(paddles)
qdel_null(bcell)
QDEL_NULL(paddles)
QDEL_NULL(bcell)
/obj/item/device/defib_kit/loaded //starts with a cell
bcell = /obj/item/weapon/cell/apc
+1 -1
View File
@@ -30,7 +30,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
//Will stop people throwing friend pAIs into the singularity so they can respawn
if(!isnull(pai))
pai.death(0)
qdel_null(radio)
QDEL_NULL(radio)
return ..()
/obj/item/device/paicard/attack_self(mob/user)
@@ -35,7 +35,7 @@ var/global/list/active_radio_jammers = list()
/obj/item/device/radio_jammer/Destroy()
if(on)
turn_off()
qdel_null(power_source)
QDEL_NULL(power_source)
return ..()
/obj/item/device/radio_jammer/get_cell()
@@ -119,7 +119,7 @@ var/global/list/default_medbay_channels = list(
if(syndie)
data["useSyndMode"] = 1
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 430)
ui.set_initial_data(data)
@@ -230,7 +230,7 @@ var/global/list/default_medbay_channels = list(
return 1
if(.)
nanomanager.update_uis(src)
GLOB.nanomanager.update_uis(src)
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel) //BS12 EDIT
var/datum/radio_frequency/connection = null
@@ -714,7 +714,7 @@ var/global/list/default_medbay_channels = list(
. = 1
if(.)
nanomanager.update_uis(src)
GLOB.nanomanager.update_uis(src)
/obj/item/device/radio/borg/interact(mob/user as mob)
if(!on)
@@ -743,7 +743,7 @@ var/global/list/default_medbay_channels = list(
data["has_subspace"] = 1
data["subspace"] = subspace_transmission
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 430)
ui.set_initial_data(data)
@@ -37,7 +37,7 @@
log_game("[key_name_admin(user)] attached both tanks to a transfer valve.")
update_icon()
nanomanager.update_uis(src) // update all UIs attached to src
GLOB.nanomanager.update_uis(src) // update all UIs attached to src
//TODO: Have this take an assemblyholder
else if(isassembly(item))
var/obj/item/device/assembly/A = item
@@ -58,7 +58,7 @@
message_admins("[key_name_admin(user)] attached a [item] to a transfer valve. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[location.x];Y=[location.y];Z=[location.z]'>JMP</a>)")
log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
attacher = user
nanomanager.update_uis(src) // update all UIs attached to src
GLOB.nanomanager.update_uis(src) // update all UIs attached to src
return
@@ -81,7 +81,7 @@
data["valveOpen"] = valve_open ? 1 : 0
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
@@ -150,7 +150,7 @@
tank_two = null
else
return
T.loc = get_turf(src)
update_icon()
@@ -166,18 +166,18 @@
/obj/item/device/transfer_valve/proc/split_gases()
if(!valve_open)
return
valve_open = 0
if(QDELETED(tank_one) || QDELETED(tank_two))
if(QDELETED(tank_one) || QDELETED(tank_two))
return
var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume
var/datum/gas_mixture/temp
temp = tank_two.air_contents.remove_ratio(ratio1)
tank_one.air_contents.merge(temp)
tank_two.air_contents.volume -= tank_one.air_contents.volume
/*
Exadv1: I know this isn't how it's going to work, but this was just to check
+3 -3
View File
@@ -72,7 +72,7 @@
discount_amount = pick(90;0.9, 80;0.8, 70;0.7, 60;0.6, 50;0.5, 40;0.4, 30;0.3, 20;0.2, 10;0.1)
next_offer_time = world.time + offer_time
update_nano_data()
nanomanager.update_uis(src)
GLOB.nanomanager.update_uis(src)
// Toggles the uplink on and off. Normally this will bypass the item's normal functions and go to the uplink menu, if activated.
/obj/item/device/uplink/hidden/proc/toggle()
@@ -110,7 +110,7 @@
data += nanoui_data
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) // No auto-refresh
ui = new(user, src, ui_key, "uplink.tmpl", title, 450, 600, state = inventory_state)
data["menu"] = 0
@@ -138,7 +138,7 @@
UI.buy(src, usr)
else if(href_list["lock"])
toggle()
var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main")
var/datum/nanoui/ui = GLOB.nanomanager.get_open_ui(user, src, "main")
ui.close()
else if(href_list["return"])
nanoui_menu = round(nanoui_menu/10)
+1 -1
View File
@@ -6,7 +6,7 @@
w_class = ITEMSIZE_SMALL
matter = list("glass" = 200)
flags = NOBLUDGEON
var/list/accept_mobs = list(/mob/living/simple_mob/animal/passive/lizard, /mob/living/simple_animal/mouse)
var/list/accept_mobs = list(/mob/living/simple_mob/animal/passive/lizard, /mob/living/simple_mob/animal/passive/mouse)
var/contains = 0 // 0 = nothing, 1 = money, 2 = animal, 3 = spiderling
/obj/item/glass_jar/New()
@@ -27,9 +27,9 @@
/obj/item/weapon/flamethrower/Destroy()
qdel_null(weldtool)
qdel_null(igniter)
qdel_null(ptank)
QDEL_NULL(weldtool)
QDEL_NULL(igniter)
QDEL_NULL(ptank)
. = ..()
/obj/item/weapon/flamethrower/process()
@@ -20,8 +20,8 @@
create_reagents(1000)
Destroy()
qdel_null(detonator)
qdel_null_list(beakers)
QDEL_NULL(detonator)
QDEL_NULL_LIST(beakers)
return ..()
attack_self(mob/user as mob)
@@ -0,0 +1,85 @@
//Concussion, or 'dizzyness' grenades.
/obj/item/weapon/grenade/concussion
name = "concussion grenade"
desc = "A polymer concussion grenade, optimized for disorienting personnel without causing large amounts of injury."
icon_state = "concussion"
item_state = "grenade"
var/blast_radius = 5
/obj/item/weapon/grenade/concussion/detonate()
..()
concussion_blast(get_turf(src), blast_radius)
qdel(src)
return
/obj/proc/concussion_blast(atom/target, var/radius = 5)
var/turf/T = get_turf(target)
if(is_below_sound_pressure(T))
visible_message("<span class='notice'>Whump.</span>")
return
playsound(src.loc, 'sound/effects/bang.ogg', 75, 1, -3)
if(istype(T))
for(var/mob/living/L in orange(T, radius))
if(ishuman(L))
var/mob/living/carbon/human/H = L
to_chat(H, "<span class='critical'>WHUMP.</span>")
var/ear_safety = 0
H.get_ear_protection()
var/bang_effectiveness = H.species.sound_mod
if((get_dist(H, T) <= round(radius * 0.3 * bang_effectiveness) || src.loc == H.loc || src.loc == H))
if(ear_safety > 0)
H.Confuse(2)
else
H.Confuse(8)
H.Weaken(1)
if ((prob(14) || (H == src.loc && prob(70))))
H.ear_damage += rand(1, 10)
else
H.ear_damage += rand(0, 5)
H.ear_deaf = max(H.ear_deaf,15)
if(H.client)
if(prob(50))
H.client.spinleft()
else
H.client.spinright()
else if(get_dist(H, T) <= round(radius * 0.5 * bang_effectiveness))
if(!ear_safety)
H.Confuse(6)
H.ear_damage += rand(0, 3)
H.ear_deaf = max(H.ear_deaf,10)
if(H.client)
if(prob(50))
H.client.spinleft()
else
H.client.spinright()
else if(!ear_safety && get_dist(H, T) <= (radius * bang_effectiveness))
H.Confuse(4)
H.ear_damage += rand(0, 1)
H.ear_deaf = max(H.ear_deaf,5)
if(H.ear_damage >= 15)
to_chat(H, "<span class='danger'>Your ears start to ring badly!</span>")
if(prob(H.ear_damage - 5))
to_chat(H, "<span class='danger'>You can't hear anything!</span>")
H.sdisabilities |= DEAF
else if(H.ear_damage >= 5)
to_chat(H, "<span class='danger'>Your ears start to ring!</span>")
if(istype(L, /mob/living/silicon/robot))
var/mob/living/silicon/robot/R = L
if(L.client)
if(prob(50))
L.client.spinleft()
else
L.client.spinright()
to_chat(R, "<span class='critical'>Gyroscopic failure.</span>")
return
@@ -1,35 +1,3 @@
//obj/item/weapon/grenade/explosive
//desc = "A fragmentation grenade, optimized for harming personnel without causing massive structural damage."
//name = "frag grenade"
//icon = 'icons/obj/grenade.dmi'
//det_time = 50
//icon_state = "frggrenade"
//origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 3)
//obj/item/weapon/grenade/explosive/prime()
// ..()
//spawn(0)
//explosion(src.loc,-1,-1,2) //If you're within two tiles of the grenade, you get hit twice, which tends to do 50+ brute and cause fractures.
//explosion(src.loc,-1,-1,3) //This is preferable to increasing the severity, so we don't decap with frags.
//qdel(src)
//return
//Explosive grenade projectile, borrowed from fragmentation grenade code.
/obj/item/projectile/bullet/pellet/fragment
damage = 10
armor_penetration = 30
range_step = 2 //projectiles lose a fragment each time they travel this distance. Can be a non-integer.
base_spread = 0 //causes it to be treated as a shrapnel explosion instead of cone
spread_step = 20
silenced = 1 //embedding messages are still produced so it's kind of weird when enabled.
no_attack_log = 1
muzzle_type = null
/obj/item/projectile/bullet/pellet/fragment/strong
damage = 15
armor_penetration = 20
/obj/item/weapon/grenade/explosive
name = "fragmentation grenade"
@@ -53,11 +21,40 @@
if(explosion_size)
on_explosion(O)
if(num_fragments)
fragmentate(O, num_fragments, spread_range, fragment_types)
src.fragmentate(O, num_fragments, spread_range, fragment_types)
qdel(src)
/obj/item/weapon/grenade/explosive/proc/on_explosion(var/turf/O)
if(explosion_size)
explosion(O, -1, -1, explosion_size, round(explosion_size/2), 0)
// Waaaaay more pellets
/obj/item/weapon/grenade/explosive/frag
name = "fragmentation grenade"
desc = "A military fragmentation grenade, designed to explode in a deadly shower of fragments."
icon_state = "frag"
loadable = null
fragment_types = list(/obj/item/projectile/bullet/pellet/fragment)
num_fragments = 200 //total number of fragments produced by the grenade
/obj/item/weapon/grenade/explosive/mini
name = "mini fragmentation grenade"
desc = "A miniaturized fragmentation grenade, this one poses relatively little threat on its own."
icon_state = "minifrag"
fragment_types = list(/obj/item/projectile/bullet/pellet/fragment/weak, /obj/item/projectile/bullet/pellet/fragment/weak, /obj/item/projectile/bullet/pellet/fragment, /obj/item/projectile/bullet/pellet/fragment/strong)
num_fragments = 20
spread_range = 3
explosion_size = 1
// This thing literally just explodes
/obj/item/weapon/grenade/explosive/concussion
name = "concussion grenade"
desc = "A small explosive grenade"
num_fragments = 0
// This proc is only here because I don't know where else to put it, should be kept at the bottom of this file unless moved to a more appropriate location
/obj/proc/fragmentate(var/turf/T=get_turf(src), var/fragment_number = 30, var/spreading_range = 5, var/list/fragtypes=list(/obj/item/projectile/bullet/pellet/fragment/))
set waitfor = 0
var/list/target_turfs = getcircle(T, spreading_range)
@@ -82,26 +79,3 @@
P.attack_mob(M, 0, 25) //you're holding a grenade, dude!
else
P.attack_mob(M, 0, 100) //otherwise, allow a decent amount of fragments to pass
/obj/item/weapon/grenade/explosive/proc/on_explosion(var/turf/O)
if(explosion_size)
explosion(O, -1, -1, explosion_size, round(explosion_size/2), 0)
/obj/item/weapon/grenade/explosive/frag
name = "fragmentation grenade"
desc = "A military fragmentation grenade, designed to explode in a deadly shower of fragments."
icon_state = "frag"
loadable = null
fragment_types = list(/obj/item/projectile/bullet/pellet/fragment)
num_fragments = 200 //total number of fragments produced by the grenade
//The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern
// This thing literally just explodes
/obj/item/weapon/grenade/explosive/concussion
name = "concussion grenade"
desc = "A small explosive grenade"
num_fragments = 0
@@ -12,7 +12,7 @@
var/active = 0
var/det_time = 50
var/loadable = 1
var/loadable = TRUE
var/arm_sound = 'sound/weapons/armbomb.ogg'
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user)
@@ -0,0 +1,75 @@
/obj/item/weapon/grenade/shooter
name = "projectile grenade" // I have no idea what else to call this, but the base type should never be used
icon_state = "frggrenade"
item_state = "grenade"
var/list/projectile_types = list(/obj/item/projectile/bullet/pistol/rubber) // What sorts of projectiles might we make?
//The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern
var/spread_range = 7
loadable = FALSE
/obj/item/weapon/grenade/shooter/detonate()
..()
var/turf/O = get_turf(src)
if(!O)
return
src.launch_many_projectiles(O, spread_range, projectile_types)
qdel(src)
/obj/item/weapon/grenade/shooter/rubber
name = "rubber pellet grenade"
desc = "An anti-riot grenade that fires a cloud of rubber projectiles upon detonation."
projectile_types = list(/obj/item/projectile/bullet/pistol/rubber)
// Exists mostly so I don't have to copy+paste the sprite vars to a billion things
/obj/item/weapon/grenade/shooter/energy
icon_state = "flashbang"
item_state = "flashbang"
spread_range = 3 // Because dear god
/obj/item/weapon/grenade/shooter/energy/laser
name = "laser grenade"
desc = "A horrifically dangerous rave in a can."
projectile_types = list(/obj/item/projectile/beam/midlaser)
/obj/item/weapon/grenade/shooter/energy/flash
name = "flash grenade"
desc = "A grenade that creates a large number of flashes upon detonation."
projectile_types = list(/obj/item/projectile/energy/flash)
/obj/item/weapon/grenade/shooter/energy/tesla
name = "tesla grenade"
projectile_types = list(/obj/item/projectile/beam/chain_lightning/lesser)
// This is just fragmentate, but less specific. Don't know how to make either of them less awful, at the moment
/obj/proc/launch_many_projectiles(var/turf/T=get_turf(src), var/spreading_range = 5, var/list/projectiletypes=list(/obj/item/projectile/bullet/pistol/rubber))
set waitfor = 0
var/list/target_turfs = getcircle(T, spreading_range)
for(var/turf/O in target_turfs)
sleep(0)
var/shot_type = pick(projectiletypes)
var/obj/item/projectile/P = new shot_type(T)
P.shot_from = src.name
P.launch(O)
//Make sure to hit any mobs in the source turf
for(var/mob/living/M in T)
//lying on a frag grenade while the grenade is on the ground causes you to absorb most of the shrapnel.
//you will most likely be dead, but others nearby will be spared the fragments that hit you instead.
if(M.lying && isturf(src.loc))
P.attack_mob(M, 0, 5)
else if(!M.lying && src.loc != get_turf(src)) //if it's not on the turf, it must be in the mob!
P.attack_mob(M, 0, 25) //you're holding a grenade, dude!
else
P.attack_mob(M, 0, 100) //otherwise, allow a decent amount of fragments to pass
@@ -37,7 +37,7 @@
/obj/item/weapon/grenade/spawnergrenade/spesscarp
name = "carp delivery grenade"
spawner_type = /mob/living/simple_animal/hostile/carp
spawner_type = /mob/living/simple_mob/animal/space/carp
deliveryamt = 5
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
@@ -58,7 +58,7 @@
data["electronic_warfare"] = electronic_warfare
data["entries"] = entries
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "agent_id_card.tmpl", "Fake ID", 600, 400)
ui.set_initial_data(data)
@@ -185,7 +185,7 @@
. = 1
// Always update the UI, or buttons will spin indefinitely
nanomanager.update_uis(src)
GLOB.nanomanager.update_uis(src)
/var/global/list/id_card_states
/proc/id_card_states()
@@ -23,7 +23,7 @@
V.mechassist()
for(var/L in need_amend)
V.add_assistable_langs(L)
qdel_null(src)
QDEL_NULL(src)
/obj/item/weapon/implant/language/get_data()
var/dat = {"
@@ -76,5 +76,5 @@
G.epitaph = epitaph
G.add_fingerprint(usr)
G.dir = user.dir
qdel_null(src)
QDEL_NULL(src)
return
@@ -65,7 +65,7 @@
return ..()
/obj/item/weapon/storage/laundry_basket/dropped(mob/user as mob)
qdel_null(linked)
QDEL_NULL(linked)
return ..()
/obj/item/weapon/storage/laundry_basket/show_to(mob/user as mob)
@@ -40,14 +40,14 @@
/obj/item/weapon/storage/Destroy()
close_all()
qdel_null(boxes)
qdel_null(src.storage_start)
qdel_null(src.storage_continue)
qdel_null(src.storage_end)
qdel_null(src.stored_start)
qdel_null(src.stored_continue)
qdel_null(src.stored_end)
qdel_null(closer)
QDEL_NULL(boxes)
QDEL_NULL(src.storage_start)
QDEL_NULL(src.storage_continue)
QDEL_NULL(src.storage_end)
QDEL_NULL(src.stored_start)
QDEL_NULL(src.stored_continue)
QDEL_NULL(src.stored_end)
QDEL_NULL(closer)
. = ..()
/obj/item/weapon/storage/MouseDrop(obj/over_object as obj)
@@ -354,7 +354,7 @@
//such as when picking up all the items on a tile with one click.
/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
if(!istype(W)) return 0
if(usr)
usr.remove_from_mob(W,target = src) //If given a target, handles forceMove()
W.on_enter_storage(src)
@@ -24,7 +24,7 @@
ion_trail.set_up(src)
/obj/item/weapon/tank/jetpack/Destroy()
qdel_null(ion_trail)
QDEL_NULL(ion_trail)
return ..()
/obj/item/weapon/tank/jetpack/examine(mob/user)
+3 -32
View File
@@ -70,10 +70,10 @@ var/list/global/tank_gauge_cache = list()
return
/obj/item/weapon/tank/Destroy()
qdel_null(air_contents)
QDEL_NULL(air_contents)
processing_objects.Remove(src)
qdel_null(src.proxyassembly)
QDEL_NULL(src.proxyassembly)
if(istype(loc, /obj/item/device/transfer_valve))
var/obj/item/device/transfer_valve/TTV = loc
@@ -264,7 +264,7 @@ var/list/global/tank_gauge_cache = list()
data["maskConnected"] = 1
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
@@ -674,32 +674,3 @@ var/list/global/tank_gauge_cache = list()
/obj/item/device/tankassemblyproxy/HasProximity(atom/movable/AM as mob|obj)
if(src.assembly)
src.assembly.HasProximity(AM)
/obj/item/projectile/bullet/pellet/fragment/tank
name = "metal fragment"
damage = 9 //Big chunks flying off.
range_step = 2 //controls damage falloff with distance. projectiles lose a "pellet" each time they travel this distance. Can be a non-integer.
base_spread = 0 //causes it to be treated as a shrapnel explosion instead of cone
spread_step = 20
armor_penetration = 20
silenced = 1
no_attack_log = 1
muzzle_type = null
pellets = 3
/obj/item/projectile/bullet/pellet/fragment/tank/small
name = "small metal fragment"
damage = 6
armor_penetration = 5
pellets = 5
/obj/item/projectile/bullet/pellet/fragment/tank/big
name = "large metal fragment"
damage = 17
armor_penetration = 10
range_step = 5 //controls damage falloff with distance. projectiles lose a "pellet" each time they travel this distance. Can be a non-integer.
pellets = 1
@@ -65,7 +65,7 @@
/obj/item/weapon/tool/crowbar/power/Destroy()
if(counterpart)
counterpart.counterpart = null // So it can qdel cleanly.
qdel_null(counterpart)
QDEL_NULL(counterpart)
return ..()
/obj/item/weapon/tool/crowbar/power/attack_self(mob/user)
@@ -1,3 +1,4 @@
/*
* Screwdriver
*/
@@ -113,7 +114,7 @@
/obj/item/weapon/tool/screwdriver/power/Destroy()
if(counterpart)
counterpart.counterpart = null // So it can qdel cleanly.
qdel_null(counterpart)
QDEL_NULL(counterpart)
return ..()
/obj/item/weapon/tool/screwdriver/power/attack_self(mob/user)
@@ -81,7 +81,7 @@
/obj/item/weapon/tool/wirecutters/power/Destroy()
if(counterpart)
counterpart.counterpart = null // So it can qdel cleanly.
qdel_null(counterpart)
QDEL_NULL(counterpart)
return ..()
/obj/item/weapon/tool/wirecutters/power/attack_self(mob/user)
@@ -1,3 +1,4 @@
/*
* Wrench
*/
@@ -59,7 +60,7 @@
/obj/item/weapon/tool/wrench/power/Destroy()
if(counterpart)
counterpart.counterpart = null // So it can qdel cleanly.
qdel_null(counterpart)
QDEL_NULL(counterpart)
return ..()
/obj/item/weapon/tool/wrench/power/attack_self(mob/user)
+13 -13
View File
@@ -22,18 +22,18 @@
prob(6);/mob/living/simple_mob/animal/sif/diyaab,
prob(10);/mob/living/simple_animal/cat/fluff,
prob(6);/mob/living/simple_animal/cat/kitten,
prob(10);/mob/living/simple_animal/corgi,
prob(6);/mob/living/simple_animal/corgi/puppy,
prob(10);/mob/living/simple_mob/animal/passive/dog/corgi,
prob(6);/mob/living/simple_mob/animal/passive/dog/corgi/puppy,
prob(10);/mob/living/simple_mob/animal/passive/crab,
prob(10);/mob/living/simple_animal/chicken,
prob(6);/mob/living/simple_animal/chick,
prob(10);/mob/living/simple_animal/cow,
prob(6);/mob/living/simple_animal/retaliate/goat,
prob(10);/mob/living/simple_mob/animal/passive/chicken,
prob(6);/mob/living/simple_mob/animal/passive/chick,
prob(10);/mob/living/simple_mob/animal/passive/cow,
prob(6);/mob/living/simple_mob/goat,
prob(10);/mob/living/simple_mob/animal/passive/penguin,
prob(10);/mob/living/simple_animal/mouse,
prob(10);/mob/living/simple_mob/animal/passive/mouse,
prob(10);/mob/living/simple_mob/animal/passive/yithian,
prob(10);/mob/living/simple_mob/animal/passive/tindalos,
prob(10);/mob/living/simple_animal/corgi/tamaskan,
prob(10);/mob/living/simple_mob/animal/passive/dog/tamaskan,
prob(3);/mob/living/simple_animal/parrot,
prob(1);/mob/living/simple_mob/animal/passive/crab)
@@ -68,10 +68,10 @@
return pick(prob(30);/mob/living/simple_mob/animal/sif/diyaab,
prob(15);/mob/living/simple_mob/animal/passive/crab,
prob(15);/mob/living/simple_mob/animal/passive/penguin,
prob(15);/mob/living/simple_animal/mouse,
prob(15);/mob/living/simple_animal/corgi/tamaskan,
prob(15);/mob/living/simple_mob/animal/passive/mouse,
prob(15);/mob/living/simple_mob/animal/passive/dog/tamaskan,
prob(2);/mob/living/simple_mob/animal/giant_spider/frost,
prob(1);/mob/living/simple_animal/hostile/goose,
prob(1);/mob/living/simple_mob/animal/space/goose,
prob(20);/mob/living/simple_mob/animal/passive/crab)
@@ -87,8 +87,8 @@
return pick(prob(30);/mob/living/simple_mob/animal/sif/diyaab,
prob(15);/mob/living/simple_mob/animal/passive/crab,
prob(15);/mob/living/simple_mob/animal/passive/penguin,
prob(15);/mob/living/simple_animal/mouse,
prob(15);/mob/living/simple_animal/corgi/tamaskan,
prob(15);/mob/living/simple_mob/animal/passive/mouse,
prob(15);/mob/living/simple_mob/animal/passive/dog/tamaskan,
prob(20);/mob/living/simple_mob/animal/sif/hooligan_crab)
/obj/random/mob/sif/hostile
@@ -66,15 +66,15 @@
/obj/structure/largecrate/animal/corgi
name = "corgi carrier"
starts_with = list(/mob/living/simple_animal/corgi)
starts_with = list(/mob/living/simple_mob/animal/passive/dog/corgi)
/obj/structure/largecrate/animal/cow
name = "cow crate"
starts_with = list(/mob/living/simple_animal/cow)
starts_with = list(/mob/living/simple_mob/animal/passive/cow)
/obj/structure/largecrate/animal/goat
name = "goat crate"
starts_with = list(/mob/living/simple_animal/retaliate/goat)
starts_with = list(/mob/living/simple_mob/goat)
/obj/structure/largecrate/animal/cat
name = "cat carrier"
@@ -85,4 +85,4 @@
/obj/structure/largecrate/animal/chick
name = "chicken crate"
starts_with = list(/mob/living/simple_animal/chick = 5)
starts_with = list(/mob/living/simple_mob/animal/passive/chick = 5)
@@ -15,7 +15,7 @@
/obj/structure/ghost_pod/manual/corgi/create_occupant(var/mob/M)
lightning_strike(get_turf(src), cosmetic = TRUE)
density = FALSE
var/mob/living/simple_animal/corgi/R = new(get_turf(src))
var/mob/living/simple_mob/animal/passive/dog/corgi/R = new(get_turf(src))
if(M.mind)
M.mind.transfer_to(R)
to_chat(M, "<span class='notice'>You are a <b>Corgi</b>! Woof!</span>")
+1 -1
View File
@@ -126,7 +126,7 @@
src.set_dir(turn(src.dir, 90))
return
else
if(istype(usr,/mob/living/simple_animal/mouse))
if(ismouse(usr))
return
if(!usr || !isturf(usr.loc))
return
+1 -1
View File
@@ -52,7 +52,7 @@
/obj/machinery/holoplant/proc/deactivate()
overlays -= plant
qdel_null(plant)
QDEL_NULL(plant)
set_light(0)
use_power = 0
+1 -1
View File
@@ -102,7 +102,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
data["replacer"] = myreplacer ? capitalize(myreplacer.name) : null
data["signs"] = signs ? "[signs] sign\s" : null
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "janitorcart.tmpl", "Janitorial cart", 240, 160)
ui.set_initial_data(data)
+2 -2
View File
@@ -744,7 +744,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
uncommon_loot = list(
/obj/item/mecha_parts/mecha_equipment/shocker,
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang,
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade,
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser,
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,
/obj/item/device/kit/paint/gygax,
@@ -784,7 +784,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
uncommon_loot = list(
/obj/item/mecha_parts/mecha_equipment/shocker,
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang,
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade,
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser,
/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster,
/obj/item/device/kit/paint/durand,
+1 -1
View File
@@ -32,7 +32,7 @@
set category = "Object"
set src in oview(1)
if(istype(usr,/mob/living/simple_animal/mouse))
if(ismouse(usr))
return
else if(!usr || !isturf(usr.loc))
return
+1 -1
View File
@@ -11,7 +11,7 @@
var/list/mobs_can_pass = list(
/mob/living/bot,
/mob/living/simple_animal/slime,
/mob/living/simple_animal/mouse,
/mob/living/simple_mob/animal/passive/mouse,
/mob/living/silicon/robot/drone
)
@@ -76,7 +76,7 @@
src.set_dir(turn(src.dir, 90))
return
else
if(istype(usr,/mob/living/simple_animal/mouse))
if(istype(usr,/mob/living/simple_mob/animal/passive/mouse))
return
if(!usr || !isturf(usr.loc))
return