Merge branch 'master' into lets_go_rebind_things

This commit is contained in:
S34N
2022-07-09 17:55:37 +01:00
572 changed files with 15277 additions and 15101 deletions
+16 -11
View File
@@ -368,17 +368,22 @@ DROP TABLE IF EXISTS `library`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `library` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`author` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
`title` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
`content` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
`category` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
`ckey` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
`flagged` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `ckey` (`ckey`),
KEY `flagged` (`flagged`)
) ENGINE=InnoDB AUTO_INCREMENT=4537 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
`id` INT(11) NOT NULL AUTO_INCREMENT,
`author` MEDIUMTEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
`title` MEDIUMTEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
`content` MEDIUMTEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
`ckey` VARCHAR(32) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`reports` MEDIUMTEXT NOT NULL COLLATE 'utf8mb3_general_ci',
`summary` MEDIUMTEXT NOT NULL COLLATE 'utf8mb3_general_ci',
`rating` DOUBLE NULL DEFAULT '0',
`raters` MEDIUMTEXT NOT NULL COLLATE 'utf8mb3_general_ci',
`primary_category` INT(11) NULL DEFAULT '0',
`secondary_category` INT(11) NOT NULL DEFAULT '0',
`tertiary_category` INT(11) NULL DEFAULT '0',
PRIMARY KEY (`id`) USING BTREE,
INDEX `ckey` (`ckey`) USING BTREE,
INDEX `flagged` (`reports`(1024)) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
+25 -4
View File
@@ -1,5 +1,26 @@
# Updating DB from 37-38
# Adds player.keybindings (longtext) ~dearmochi
# Updates DB from 37 to 38 -Sirryan2002
# Creates new tables in preparation for library table conversion
# Add column to player
ALTER TABLE `player` ADD COLUMN `keybindings` LONGTEXT COLLATE 'utf8mb4_unicode_ci' DEFAULT NULL AFTER `colourblind_mode`;
#Renames old table
ALTER TABLE library RENAME TO library_old;
# Create new table to track library books
CREATE TABLE `library` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`author` MEDIUMTEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
`title` MEDIUMTEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
`content` MEDIUMTEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
`ckey` VARCHAR(32) NULL DEFAULT '' COLLATE 'utf8mb4_unicode_ci',
`reports` MEDIUMTEXT NOT NULL COLLATE 'utf8mb3_general_ci',
`summary` MEDIUMTEXT NOT NULL COLLATE 'utf8mb3_general_ci',
`rating` DOUBLE NULL DEFAULT '0',
`raters` MEDIUMTEXT NOT NULL COLLATE 'utf8mb3_general_ci',
`primary_category` INT(11) NULL DEFAULT '0',
`secondary_category` INT(11) NOT NULL DEFAULT '0',
`tertiary_category` INT(11) NULL DEFAULT '0',
PRIMARY KEY (`id`) USING BTREE,
INDEX `ckey` (`ckey`) USING BTREE,
INDEX `flagged` (`reports`(1024)) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
# YOU MUST NOW RUN 38-39.py
+130
View File
@@ -0,0 +1,130 @@
# :wave: hello fellow contributors, this script is brought to you ad-free by -sirryan2002-
# In order to run this script on Windows, you need to make sure you have Python **3** installed. Tested on 3.10.4
# In addition you must have the mysql-connector-python module installed (can be done through pip :D)
# if you do not have that module installed, you cannot run this script
# To run this, supply the following args in a command shell
# python 38-39.py address username password database
# Example:
# python 38-39.py 127.0.0.1 sirryan2002 myubersecretdbpassword paradise_gamedb
import json
import mysql.connector, argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument("address", help="MySQL server address (use localhost for the current computer)")
parser.add_argument("username", help="MySQL login username")
parser.add_argument("password", help="MySQL login password")
parser.add_argument("database", help="Database name")
args = parser.parse_args()
db = mysql.connector.connect(host=args.address, user=args.username, passwd=args.password, db=args.database)
cursor = db.cursor()
print("Connected to {}".format(args.database))
#A List of old categories names + the new id number they will be assigned
category_name_to_id_map = {
"Fiction": 1,
"Non-Fiction": 2,
"Adult": 0, #0 represents a "removed"/unused category that no longer will be included
"Reference": 16,
"Religion": 3,
}
cursor.execute("SELECT id, author, title, content, category, ckey FROM library_old")
data = cursor.fetchall()
print("Loaded {} rows from library table...".format(len(data)))
new_rows = []
print("Modifying Categories...")
for entry in data:
book_id = entry[0]
author = entry[1]
title = entry[2]
content = entry[3]
category = entry[4]
ckey = entry[5]
update_entry = False
new_entry = [
book_id,
author,
title,
content,
category,
ckey,
]
if category not in category_name_to_id_map.keys():
update_entry = True
new_entry[4] = 0
print("Corrupted Category Detected: removing \"{}\"...".format(category))
else:
for cat in category_name_to_id_map.keys():
if cat == category:
update_entry = True
new_entry[4] = category_name_to_id_map[cat]
if update_entry:
new_rows.append(new_entry)
else:
print("ERROR: Book {} did not have its category changed".format(book_id))
print("Modifying Content...")
for entry in new_rows:
new_content = json.dumps([entry[3]])
entry[3] = new_content
#here we're turning our content string into a JSON list
print("Modified Content...")
print("Vetting Book Titles & Contents...")
duplicate_books = 0
programmatic_books = 0
notitle_books = 0
short_books = 0
for entry in new_rows:
if "Print Job" in entry[2]:
print("Book {} had \"Print Job\" in title: removing record...".format(entry[0]))
notitle_books += 1
new_rows.remove(entry)
continue
if "Standard Operating Procedure" in entry[2] or "<iframe" in entry[3]:
print("Book {} named \"{}\" is programattic: removing record...".format(entry[0], entry[2]))
programmatic_books += 1
new_rows.remove(entry)
continue
if len(entry[3]) < 150:
print("Book {} is less than 150 characters: removing record...".format(entry[0]))
short_books += 1
new_rows.remove(entry)
continue
for book in new_rows:
if entry[2] == book[2] and entry != book:
if entry[3] == book[3]:
print("Book {} and Book {} have the same title and content: removing record {}...".format(entry[0],book[0],book[0]))
new_rows.remove(book)
duplicate_books += 1
#here we're turning our content string into a JSON list
print("All Books vetted, books marked for deletion report:")
print("Duplicate Books: {}".format(duplicate_books))
print("No Title Books: {}".format(notitle_books))
print("Programmatic Books: {}".format(programmatic_books))
print("Short Books: {}".format(short_books))
print("Generated {} rows to insert into new table".format(len(new_rows)))
if len(new_rows) == 0:
print("ERROR: No rows have been modfied, no update will be commited")
print("Inserting...")
for row in new_rows:
params = [row[1], row[2], row[3], "", row[4], row[5], "", ""] #empty strings since some columns don't have default vals
sql_query = "INSERT INTO library (author, title, content, summary, primary_category, ckey, reports, raters) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"
cursor.execute(sql_query, params)
cursor.close()
print("Saving...")
db.commit()
print("Done!")
#this is a script not a library
if __name__ == "__main__":
main()
+3
View File
@@ -0,0 +1,3 @@
# Updates DB from 39 to 40 -Sirryan2002
# Clears out old table
DROP TABLE `library_old`;
+1 -1
View File
@@ -10,4 +10,4 @@ Files are designed to be run sequentialy, moving from version 2, to version 4 wo
- 15-19 is considered as one version, but split into multiple files for simplicity and correct ordering. You MUST run them in order, and all of them between the game, or stuff will break horribly.
- The same applise for 30-33
- The same applies for 30-33 and 38-40
+49 -103
View File
@@ -2527,7 +2527,7 @@
/area/security/checkpoint2)
"apn" = (
/obj/structure/table/reinforced,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/item/radio,
/turf/simulated/floor/plasteel{
dir = 5;
@@ -11354,7 +11354,7 @@
/area/security/permabrig)
"aJC" = (
/obj/structure/table,
/obj/item/book/manual/chef_recipes,
/obj/item/book/manual/wiki/chef_recipes,
/obj/item/clothing/head/chefhat,
/turf/simulated/floor/plasteel{
icon_state = "neutralfull"
@@ -11955,7 +11955,7 @@
pixel_y = 32
},
/obj/structure/table,
/obj/machinery/computer/library/public,
/obj/machinery/computer/library,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 1;
@@ -20718,7 +20718,7 @@
/obj/structure/rack,
/obj/item/stack/packageWrap,
/obj/item/hand_labeler,
/obj/item/book/manual/chef_recipes,
/obj/item/book/manual/wiki/chef_recipes,
/obj/effect/decal/warning_stripes/yellow/hollow,
/turf/simulated/floor/plasteel{
icon_state = "white"
@@ -23665,7 +23665,7 @@
"bkr" = (
/obj/structure/table/wood,
/obj/item/storage/secure/briefcase,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "vault"
@@ -25691,10 +25691,6 @@
d2 = 8;
icon_state = "4-8"
},
/obj/machinery/door/airlock/maintenance{
name = "Mining Maintenance";
req_access_txt = "48"
},
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -34970,7 +34966,7 @@
/area/security/detectives_office)
"bHL" = (
/obj/structure/table/wood,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/item/camera{
desc = "A one use - polaroid camera. 30 photos left.";
name = "detectives camera";
@@ -36221,9 +36217,9 @@
/area/storage/tech)
"bKA" = (
/obj/structure/rack,
/obj/item/book/manual/engineering_hacking,
/obj/item/book/manual/engineering_guide,
/obj/item/book/manual/engineering_construction,
/obj/item/book/manual/wiki/hacking,
/obj/item/book/manual/wiki/engineering_guide,
/obj/item/book/manual/wiki/engineering_construction,
/obj/machinery/status_display{
pixel_x = -32
},
@@ -38027,7 +38023,7 @@
/area/hallway/primary/central)
"bOE" = (
/obj/structure/table/wood,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/structure/cable{
d1 = 1;
d2 = 8;
@@ -43405,15 +43401,15 @@
/area/ntrep)
"cae" = (
/obj/structure/bookcase,
/obj/item/book/manual/sop_command,
/obj/item/book/manual/sop_engineering,
/obj/item/book/manual/sop_general,
/obj/item/book/manual/sop_legal,
/obj/item/book/manual/sop_medical,
/obj/item/book/manual/sop_science,
/obj/item/book/manual/sop_security,
/obj/item/book/manual/sop_service,
/obj/item/book/manual/sop_supply,
/obj/item/book/manual/wiki/sop_command,
/obj/item/book/manual/wiki/sop_engineering,
/obj/item/book/manual/wiki/sop_general,
/obj/item/book/manual/wiki/sop_legal,
/obj/item/book/manual/wiki/sop_medical,
/obj/item/book/manual/wiki/sop_science,
/obj/item/book/manual/wiki/sop_security,
/obj/item/book/manual/wiki/sop_service,
/obj/item/book/manual/wiki/sop_supply,
/turf/simulated/floor/wood,
/area/ntrep)
"caf" = (
@@ -43622,8 +43618,8 @@
/area/crew_quarters/courtroom)
"caG" = (
/obj/structure/table/wood,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/item/taperecorder,
/obj/item/clothing/glasses/sunglasses,
/obj/structure/extinguisher_cabinet{
@@ -45125,7 +45121,7 @@
pixel_x = 4;
pixel_y = 6
},
/obj/item/book/manual/sop_command,
/obj/item/book/manual/wiki/sop_command,
/obj/item/paper/blueshield,
/turf/simulated/floor/carpet/blue,
/area/blueshield)
@@ -46597,7 +46593,7 @@
"chK" = (
/obj/structure/table/reinforced,
/obj/item/pen/multi/gold,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/machinery/light,
/obj/item/gavelhammer,
/obj/item/gavelblock,
@@ -46759,7 +46755,7 @@
/area/space/nearstation)
"cig" = (
/obj/structure/table/reinforced,
/obj/item/book/manual/engineering_guide{
/obj/item/book/manual/wiki/engineering_guide{
pixel_x = 4;
pixel_y = 4
},
@@ -46771,11 +46767,11 @@
/area/engine/engineering)
"cih" = (
/obj/structure/table/reinforced,
/obj/item/book/manual/engineering_hacking{
/obj/item/book/manual/wiki/hacking{
pixel_x = 6;
pixel_y = 6
},
/obj/item/book/manual/engineering_construction{
/obj/item/book/manual/wiki/engineering_construction{
pixel_x = 3;
pixel_y = 3
},
@@ -47302,7 +47298,7 @@
/area/maintenance/starboard)
"cjo" = (
/obj/structure/rack,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/effect/spawner/lootdrop/maintenance,
/turf/simulated/floor/plating,
/area/maintenance/starboard2)
@@ -49031,7 +49027,7 @@
/area/library)
"cnn" = (
/obj/structure/table/wood,
/obj/machinery/computer/library/checkout,
/obj/machinery/computer/library,
/obj/machinery/newscaster{
name = "east bump";
pixel_x = 32
@@ -49532,7 +49528,6 @@
/obj/machinery/status_display{
pixel_x = 32
},
/obj/machinery/libraryscanner,
/turf/simulated/floor/plasteel/grimy,
/area/library)
"coA" = (
@@ -49744,7 +49739,7 @@
/obj/item/clothing/under/rank/security,
/obj/item/clothing/under/rank/security,
/obj/item/grenade/barrier,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/effect/decal/cleanable/cobweb2,
/turf/simulated/floor/plating,
/area/maintenance/starboard2)
@@ -54202,15 +54197,15 @@
/area/crew_quarters/locker)
"cyL" = (
/obj/structure/bookcase,
/obj/item/book/manual/sop_legal,
/obj/item/book/manual/sop_command,
/obj/item/book/manual/sop_engineering,
/obj/item/book/manual/sop_general,
/obj/item/book/manual/sop_medical,
/obj/item/book/manual/sop_science,
/obj/item/book/manual/sop_security,
/obj/item/book/manual/sop_service,
/obj/item/book/manual/sop_supply,
/obj/item/book/manual/wiki/sop_legal,
/obj/item/book/manual/wiki/sop_command,
/obj/item/book/manual/wiki/sop_engineering,
/obj/item/book/manual/wiki/sop_general,
/obj/item/book/manual/wiki/sop_medical,
/obj/item/book/manual/wiki/sop_science,
/obj/item/book/manual/wiki/sop_security,
/obj/item/book/manual/wiki/sop_service,
/obj/item/book/manual/wiki/sop_supply,
/turf/simulated/floor/wood,
/area/lawoffice)
"cyM" = (
@@ -59244,7 +59239,7 @@
/area/maintenance/port)
"cKg" = (
/obj/structure/rack,
/obj/item/book/manual/engineering_guide,
/obj/item/book/manual/wiki/engineering_guide,
/obj/effect/spawner/lootdrop/maintenance,
/turf/simulated/floor/plasteel,
/area/maintenance/port)
@@ -65422,7 +65417,6 @@
/area/toxins/lab)
"cYr" = (
/obj/machinery/r_n_d/circuit_imprinter,
/obj/item/reagent_containers/glass/beaker/sulphuric,
/obj/effect/decal/warning_stripes/southeast,
/turf/simulated/floor/plasteel,
/area/toxins/lab)
@@ -65550,8 +65544,6 @@
/area/medical/medbay)
"cYN" = (
/obj/structure/closet/wardrobe/coroner,
/obj/item/reagent_containers/glass/bottle/reagent/formaldehyde,
/obj/item/reagent_containers/dropper,
/turf/simulated/floor/plasteel/dark,
/area/medical/morgue)
"cYO" = (
@@ -69659,7 +69651,7 @@
/area/toxins/explab)
"dhL" = (
/obj/structure/table/reinforced,
/obj/item/book/manual/experimentor,
/obj/item/book/manual/wiki/experimentor,
/obj/structure/cable{
d1 = 4;
d2 = 8;
@@ -72081,7 +72073,7 @@
/area/maintenance/port2)
"dmW" = (
/obj/structure/rack,
/obj/item/book/manual/robotics_cyborgs,
/obj/item/book/manual/wiki/robotics_cyborgs,
/obj/item/storage/belt/utility,
/obj/item/reagent_containers/glass/beaker/large,
/obj/effect/decal/warning_stripes/yellow,
@@ -74376,7 +74368,6 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4
},
/obj/item/clothing/glasses/welding/superior,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "whitepurplecorner"
@@ -74547,7 +74538,7 @@
/obj/machinery/light{
dir = 1
},
/obj/item/book/manual/robotics_cyborgs,
/obj/item/book/manual/wiki/robotics_cyborgs,
/obj/item/book/manual/ripley_build_and_repair,
/obj/item/storage/belt/utility/full,
/obj/item/circuitboard/mecha/ripley/main,
@@ -80409,9 +80400,6 @@
pixel_y = -28
},
/obj/structure/closet/secure_closet/roboticist,
/obj/item/radio/headset/headset_sci{
pixel_x = -3
},
/obj/effect/decal/warning_stripes/yellow/hollow,
/turf/simulated/floor/plasteel/white,
/area/assembly/robotics)
@@ -83892,7 +83880,6 @@
/area/security/prison/cell_block)
"dOD" = (
/obj/machinery/r_n_d/circuit_imprinter,
/obj/item/reagent_containers/glass/beaker/sulphuric,
/obj/structure/window/reinforced/polarized,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -88523,7 +88510,7 @@
"fqu" = (
/obj/structure/table,
/obj/item/folder/red,
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_x = -3;
pixel_y = 5
},
@@ -88532,17 +88519,6 @@
icon_state = "dark"
},
/area/security/main)
"fqy" = (
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/obj/effect/landmark/lightsout,
/turf/simulated/floor/plasteel{
icon_state = "neutralfull"
},
/area/crew_quarters/sleep)
"frp" = (
/obj/structure/flora/ausbushes/sunnybush,
/obj/structure/flora/ausbushes/lavendergrass,
@@ -90975,27 +90951,6 @@
icon_state = "neutralcorner"
},
/area/hallway/primary/central)
"kGa" = (
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/obj/structure/cable{
d1 = 2;
d2 = 8;
icon_state = "2-8"
},
/obj/machinery/light_switch{
dir = 4;
name = "custom placement";
pixel_x = -24;
pixel_y = -6
},
/turf/simulated/floor/plasteel{
icon_state = "neutralfull"
},
/area/hallway/primary/central)
"kGF" = (
/obj/machinery/door/poddoor/shutters{
dir = 2;
@@ -91506,15 +91461,6 @@
},
/turf/simulated/floor/plasteel/white,
/area/toxins/explab)
"lYs" = (
/obj/machinery/light_switch{
dir = 4;
name = "custom placement";
pixel_x = -24;
pixel_y = -6
},
/turf/simulated/floor/wood,
/area/crew_quarters/captain)
"lZw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/plasteel{
@@ -94428,7 +94374,7 @@
dir = 1;
icon_state = "whitebluecorner"
},
/area/crew_quarters/sleep)
/area/hallway/primary/central)
"rIy" = (
/obj/machinery/door/airlock/research{
name = "Research Break Room"
@@ -96257,7 +96203,7 @@
"vFf" = (
/obj/structure/table/wood,
/obj/item/crowbar/red,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/item/book/manual/detective,
/obj/item/camera{
desc = "A one use - polaroid camera. 30 photos left.";
@@ -96444,7 +96390,7 @@
/area/maintenance/fsmaint)
"weF" = (
/obj/structure/table/reinforced,
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_x = -3;
pixel_y = 5
},
@@ -132395,7 +132341,7 @@ bSi
bva
bva
bva
kGa
byP
byP
bCf
bva
@@ -138828,7 +138774,7 @@ bFN
bWX
bJj
bLc
lYs
bLc
bOV
bWX
bWX
@@ -141681,7 +141627,7 @@ bva
bva
bva
bva
fqy
cDd
bva
bva
cGD
+47 -54
View File
@@ -485,7 +485,7 @@
pixel_x = 6;
pixel_y = 8
},
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_x = 7
},
/obj/item/pen/multi/gold{
@@ -2794,7 +2794,7 @@
icon_state = "right";
name = "windoor"
},
/obj/item/book/manual/engineering_hacking,
/obj/item/book/manual/wiki/hacking,
/obj/item/tape/random,
/obj/effect/spawner/lootdrop/maintenance,
/turf/simulated/floor/plating,
@@ -3319,7 +3319,7 @@
/area/storage/primary)
"asN" = (
/obj/structure/rack,
/obj/item/book/manual/engineering_guide{
/obj/item/book/manual/wiki/engineering_guide{
pixel_x = 3;
pixel_y = 4
},
@@ -5537,13 +5537,13 @@
/area/crew_quarters/mrchangs)
"azY" = (
/obj/structure/bookcase,
/obj/item/book/manual/sop_engineering,
/obj/item/book/manual/sop_medical,
/obj/item/book/manual/sop_security,
/obj/item/book/manual/sop_service,
/obj/item/book/manual/sop_supply,
/obj/item/book/manual/sop_general,
/obj/item/book/manual/sop_legal,
/obj/item/book/manual/wiki/sop_engineering,
/obj/item/book/manual/wiki/sop_medical,
/obj/item/book/manual/wiki/sop_security,
/obj/item/book/manual/wiki/sop_service,
/obj/item/book/manual/wiki/sop_supply,
/obj/item/book/manual/wiki/sop_general,
/obj/item/book/manual/wiki/sop_legal,
/turf/simulated/floor/plasteel{
icon_state = "cult"
},
@@ -11745,10 +11745,10 @@
/turf/simulated/floor/carpet,
/area/security/detectives_office)
"aRO" = (
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_y = 5
},
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_y = 5
},
/obj/item/cartridge/lawyer{
@@ -14769,11 +14769,11 @@
name = "\improper Garden"
})
"aZB" = (
/obj/item/book/manual/engineering_hacking{
/obj/item/book/manual/wiki/hacking{
pixel_x = 4;
pixel_y = 5
},
/obj/item/book/manual/engineering_construction{
/obj/item/book/manual/wiki/engineering_construction{
pixel_y = 3
},
/obj/structure/closet/crate,
@@ -14962,7 +14962,7 @@
/area/crew_quarters/courtroom)
"aZW" = (
/obj/structure/table,
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_x = -3;
pixel_y = 5
},
@@ -14971,11 +14971,11 @@
name = "south bump";
pixel_y = -24
},
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_x = -3;
pixel_y = 5
},
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_x = -3;
pixel_y = 5
},
@@ -18549,7 +18549,7 @@
})
"biv" = (
/obj/structure/table/reinforced,
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_x = -3;
pixel_y = 5
},
@@ -25755,7 +25755,7 @@
})
"byC" = (
/obj/structure/table/wood,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/structure/cable/yellow{
d2 = 4;
icon_state = "0-4"
@@ -27014,7 +27014,7 @@
/area/bridge)
"bBP" = (
/obj/structure/table/wood,
/obj/machinery/computer/library/public,
/obj/machinery/computer/library,
/turf/simulated/floor/wood,
/area/library)
"bBQ" = (
@@ -27891,7 +27891,7 @@
name = "north bump";
pixel_y = 28
},
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_y = 4
},
/turf/simulated/floor/plasteel{
@@ -31395,7 +31395,7 @@
name = "Arrivals"
})
"bOh" = (
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_x = -3;
pixel_y = 5
},
@@ -32448,7 +32448,7 @@
name = "requests board";
pixel_x = 32
},
/obj/machinery/computer/library/checkout,
/obj/machinery/computer/library,
/turf/simulated/floor/wood,
/area/library)
"bRi" = (
@@ -33003,7 +33003,6 @@
name = "east bump";
pixel_x = 24
},
/obj/machinery/libraryscanner,
/turf/simulated/floor/wood,
/area/library)
"bSA" = (
@@ -34244,7 +34243,7 @@
/obj/machinery/camera{
c_tag = "Blueshield's Office"
},
/obj/item/book/manual/sop_command,
/obj/item/book/manual/wiki/sop_command,
/obj/item/folder/blue{
pixel_x = 4;
pixel_y = 6
@@ -35133,7 +35132,7 @@
/obj/machinery/light/small{
dir = 4
},
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_y = 5
},
/obj/item/gun/projectile/revolver/capgun,
@@ -37397,7 +37396,7 @@
/obj/item/stack/packageWrap,
/obj/item/stack/packageWrap,
/obj/item/hand_labeler,
/obj/item/book/manual/sop_service,
/obj/item/book/manual/wiki/sop_service,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "green"
@@ -42229,7 +42228,7 @@
name = "east bump";
pixel_x = 24
},
/obj/item/book/manual/sop_science{
/obj/item/book/manual/wiki/sop_science{
pixel_x = 4;
pixel_y = 1
},
@@ -54582,7 +54581,7 @@
pixel_x = -12;
pixel_y = 6
},
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_x = 4;
pixel_y = 4
},
@@ -55321,7 +55320,7 @@
/area/crew_quarters/sleep)
"edB" = (
/obj/structure/table,
/obj/item/book/manual/chef_recipes,
/obj/item/book/manual/wiki/chef_recipes,
/turf/simulated/floor/plasteel{
icon_state = "cafeteria"
},
@@ -55449,11 +55448,11 @@
/area/library)
"eht" = (
/obj/structure/table/reinforced,
/obj/item/book/manual/engineering_hacking{
/obj/item/book/manual/wiki/hacking{
pixel_x = 2;
pixel_y = 6
},
/obj/item/book/manual/engineering_guide{
/obj/item/book/manual/wiki/engineering_guide{
pixel_x = -2;
pixel_y = 3
},
@@ -58071,7 +58070,7 @@
})
"fwi" = (
/obj/structure/table,
/obj/machinery/computer/library/public,
/obj/machinery/computer/library,
/obj/structure/cable/yellow{
d1 = 1;
d2 = 2;
@@ -60491,8 +60490,6 @@
/area/toxins/xenobiology)
"gJw" = (
/obj/structure/closet/wardrobe/coroner,
/obj/item/reagent_containers/glass/bottle/reagent/formaldehyde,
/obj/item/reagent_containers/dropper,
/obj/structure/window/reinforced{
dir = 4
},
@@ -61796,10 +61793,6 @@
/obj/item/cartridge/signal/toxins{
pixel_y = 6
},
/obj/item/clothing/glasses/welding/superior{
pixel_x = -6;
pixel_y = -12
},
/turf/simulated/floor/plasteel{
icon_state = "darkgreycheck"
},
@@ -62327,8 +62320,8 @@
/obj/machinery/light{
dir = 8
},
/obj/item/book/manual/sop_science,
/obj/item/book/manual/robotics_cyborgs,
/obj/item/book/manual/wiki/sop_science,
/obj/item/book/manual/wiki/robotics_cyborgs,
/obj/item/storage/toolbox/mechanical{
pixel_x = -3;
pixel_y = 3
@@ -63921,15 +63914,15 @@
})
"ivv" = (
/obj/structure/rack,
/obj/item/book/manual/sop_legal{
/obj/item/book/manual/wiki/sop_legal{
pixel_x = 5;
pixel_y = 1
},
/obj/item/book/manual/sop_security{
/obj/item/book/manual/wiki/sop_security{
pixel_x = -5;
pixel_y = 7
},
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_y = 4
},
/obj/machinery/camera{
@@ -68750,7 +68743,7 @@
"kRZ" = (
/obj/structure/rack,
/obj/item/reagent_containers/syringe/antiviral,
/obj/item/book/manual/sop_medical,
/obj/item/book/manual/wiki/sop_medical,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/dropper/precision,
/obj/item/reagent_containers/spray/cleaner,
@@ -69266,7 +69259,7 @@
pixel_y = -24;
req_access_txt = "55"
},
/obj/item/book/manual/sop_science{
/obj/item/book/manual/wiki/sop_science{
pixel_y = 4
},
/obj/effect/turf_decal/stripes/line{
@@ -71196,7 +71189,7 @@
})
"lZc" = (
/obj/structure/table/glass,
/obj/item/book/manual/sop_engineering{
/obj/item/book/manual/wiki/sop_engineering{
pixel_y = 3
},
/obj/structure/cable/yellow{
@@ -73866,7 +73859,7 @@
/turf/simulated/floor/plating,
/area/maintenance/fpmaint)
"nlQ" = (
/obj/structure/reagent_dispensers/oil,
/obj/structure/reagent_dispensers/fueltank,
/turf/simulated/floor/plasteel,
/area/assembly/chargebay)
"nmh" = (
@@ -74957,7 +74950,7 @@
pixel_x = 29;
pixel_y = 1
},
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_x = -4;
pixel_y = 4
},
@@ -75803,7 +75796,7 @@
/obj/structure/sign/poster/official/random{
pixel_y = -32
},
/obj/item/book/manual/sop_supply,
/obj/item/book/manual/wiki/sop_supply,
/obj/item/storage/belt/utility,
/turf/simulated/floor/plasteel{
dir = 1;
@@ -76636,7 +76629,7 @@
"oRQ" = (
/obj/structure/table,
/obj/effect/decal/cleanable/dirt,
/obj/item/book/manual/sop_service,
/obj/item/book/manual/wiki/sop_service,
/obj/item/book/manual/barman_recipes{
pixel_x = -4;
pixel_y = 7
@@ -78567,7 +78560,7 @@
/obj/item/hand_labeler,
/obj/item/stack/packageWrap,
/obj/item/stack/packageWrap,
/obj/item/book/manual/sop_service,
/obj/item/book/manual/wiki/sop_service,
/obj/item/storage/box/donkpockets,
/obj/effect/turf_decal/tile/bar,
/turf/simulated/floor/plasteel{
@@ -86029,7 +86022,7 @@
/area/security/warden)
"tDM" = (
/obj/structure/table/glass,
/obj/item/book/manual/engineering_construction{
/obj/item/book/manual/wiki/engineering_construction{
pixel_y = 4
},
/obj/item/book/manual/supermatter_engine{
@@ -93445,7 +93438,7 @@
pixel_x = -8;
pixel_y = 11
},
/obj/item/book/manual/chef_recipes{
/obj/item/book/manual/wiki/chef_recipes{
pixel_x = 4;
pixel_y = 2
},
@@ -78,7 +78,7 @@
/turf/space,
/area/template_noop)
"x" = (
/obj/structure/bookcase/random/fiction,
/obj/structure/bookcase/random,
/turf/simulated/floor/plating/damaged,
/area/template_noop)
"y" = (
@@ -61,7 +61,7 @@
/area/ruin/space/powered)
"o" = (
/obj/structure/table/wood,
/obj/machinery/computer/library/checkout,
/obj/machinery/computer/library,
/turf/simulated/floor/mineral/titanium/purple,
/area/ruin/space/powered)
"p" = (
@@ -1921,7 +1921,7 @@
/area/ruin/ancientstation/sec)
"fg" = (
/obj/structure/table,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 5;
@@ -1254,7 +1254,7 @@
},
/area/ruin/unpowered/syndicate_space_base/main)
"nf" = (
/obj/item/book/manual/chef_recipes{
/obj/item/book/manual/wiki/chef_recipes{
pixel_x = 2;
pixel_y = 6
},
@@ -1803,7 +1803,7 @@
/area/ruin/unpowered/syndicate_space_base/chemistry)
"tW" = (
/obj/structure/table,
/obj/machinery/computer/library/checkout,
/obj/machinery/computer/library,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -8052,7 +8052,7 @@
/area/ruin/space/derelict/arrival)
"rX" = (
/obj/structure/table,
/obj/machinery/computer/library/public,
/obj/machinery/computer/library,
/turf/simulated/floor/plasteel{
icon_state = "redfull"
},
@@ -223,7 +223,7 @@
"aN" = (
/obj/structure/bookcase,
/obj/item/book/manual/barman_recipes,
/obj/item/book/manual/engineering_hacking,
/obj/item/book/manual/wiki/hacking,
/turf/simulated/floor/wood,
/area/ruin/space/unpowered)
"aO" = (
+1 -1
View File
@@ -649,7 +649,7 @@
pixel_y = 32
},
/obj/item/book/manual/barman_recipes,
/obj/item/book/manual/chef_recipes,
/obj/item/book/manual/wiki/chef_recipes,
/obj/item/book/manual/ripley_build_and_repair,
/turf/simulated/floor/plasteel{
icon_state = "bar"
@@ -4145,7 +4145,7 @@
/area/awaycontent/a7)
"hi" = (
/obj/structure/table,
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/machinery/computer/security/telescreen/entertainment{
pixel_x = -32
},
@@ -5993,7 +5993,7 @@
})
"kr" = (
/obj/structure/table,
/obj/item/book/manual/chef_recipes{
/obj/item/book/manual/wiki/chef_recipes{
pixel_x = 2;
pixel_y = 6
},
@@ -2867,7 +2867,7 @@
level = 2
},
/obj/structure/table,
/obj/item/book/manual/chef_recipes,
/obj/item/book/manual/wiki/chef_recipes,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "cafeteria"
@@ -5465,7 +5465,7 @@
name = "custom placement";
pixel_x = -30
},
/obj/item/book/manual/security_space_law,
/obj/item/book/manual/wiki/security_space_law,
/obj/machinery/atmospherics/unary/vent_pump{
dir = 1;
on = 1
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -682,7 +682,7 @@
/area/holodeck/source_snowfield)
"cP" = (
/obj/structure/table/wood,
/obj/machinery/computer/library/checkout,
/obj/machinery/computer/library,
/turf/simulated/floor/engine/cult,
/area/wizard_station)
"cQ" = (
@@ -15,7 +15,7 @@
/area/shuttle/escape)
"i" = (
/obj/structure/table,
/obj/item/book/manual,
/obj/item/book/manual/wiki/security_space_law/black,
/turf/simulated/floor/plating,
/area/shuttle/escape)
"j" = (
+1 -1
View File
@@ -623,7 +623,7 @@
pixel_x = -4;
pixel_y = 2
},
/obj/item/book/manual/security_space_law{
/obj/item/book/manual/wiki/security_space_law{
pixel_x = -4;
pixel_y = 4
},
+1 -1
View File
@@ -48,7 +48,7 @@
#define CANWEAKEN 2
#define CANPARALYSE 4
#define CANPUSH 8
#define PASSEMOTES 16 //Mob has a cortical borer or holders inside of it that need to see emotes.
#define PASSEMOTES 16 //Mob has holders inside of it that need to see emotes.
#define GODMODE 32
//Health Defines
+1 -2
View File
@@ -24,10 +24,9 @@
#define SPECIAL_ROLE_ABDUCTOR_SCIENTIST "Abductor Scientist"
#define SPECIAL_ROLE_BLOB "Blob"
#define SPECIAL_ROLE_BLOB_OVERMIND "Blob Overmind"
#define SPECIAL_ROLE_BORER "Borer"
#define SPECIAL_ROLE_CHANGELING "Changeling"
#define SPECIAL_ROLE_CULTIST "Cultist"
#define SPECIAL_ROLE_DEATHSQUAD "Death Commando"
#define SPECIAL_ROLE_DEATHSQUAD "Deathsquad Commando"
#define SPECIAL_ROLE_ERT "Response Team"
#define SPECIAL_ROLE_FREE_GOLEM "Free Golem"
#define SPECIAL_ROLE_GOLEM "Golem"
+47
View File
@@ -0,0 +1,47 @@
//library category defines
//General Categories
#define LIB_CATEGORY_FICTION 1
#define LIB_CATEGORY_NONFICTION 2
#define LIB_CATEGORY_RELIGION 3
#define LIB_CATEGORY_FANTASY 4
#define LIB_CATEGORY_HORROR 5
#define LIB_CATEGORY_ROMANCE 6
#define LIB_CATEGORY_MYSTERY 7
#define LIB_CATEGORY_ADVENTURE 8
#define LIB_CATEGORY_HISTORY 9
#define LIB_CATEGORY_PHILOSOPHY 10
#define LIB_CATEGORY_DRAMA 11
#define LIB_CATEGORY_POETRY 12
//Other Categories, ss13 related
#define LIB_CATEGORY_EXPERIMENT 13
#define LIB_CATEGORY_LEGAL 14
#define LIB_CATEGORY_BIOGRAPHY 15
#define LIB_CATEGORY_GUIDE 16
#define LIB_CATEGORY_PAPERWORK 17
#define LIB_CATEGORY_COOKING 18
#define LIB_CATEGORY_DESIGN 19
#define LIB_CATEGORY_COMBAT 20
#define LIB_CATEGORY_THEATRE 21
#define LIB_CATEGORY_EXPLORATION 22
//Departmental
#define LIB_CATEGORY_LAW 23
#define LIB_CATEGORY_SECURITY 24
#define LIB_CATEGORY_SUPPLY 25
#define LIB_CATEGORY_ENGINEERING 26
#define LIB_CATEGORY_SERVICE 27
#define LIB_CATEGORY_MEDICAL 28
#define LIB_CATEGORY_RESEARCH 29
#define LIB_CATEGORY_COMMAND 30
//Library Report button defines
#define LIB_REPORT_HATESPEECH 1
#define LIB_REPORT_EROTICA 2
#define LIB_REPORT_OOC 3
#define LIB_REPORT_COPYPASTA 4
#define LIB_REPORT_BLANK 5
#define LIB_REPORT_NOEFFORT 6
#define LIB_REPORT_OTHER 7
+1 -1
View File
@@ -371,7 +371,7 @@
#define INVESTIGATE_BOMB "bombs"
// The SQL version required by this version of the code
#define SQL_VERSION 37 //SEAN TODO: OH MY GOD DO NOT MERGE THIS
#define SQL_VERSION 40 //SEAN TODO: OH MY GOD DO NOT MERGE THIS
// Vending machine stuff
#define CAT_NORMAL 1
-2
View File
@@ -28,7 +28,6 @@
#define ROLE_TRADER "trader"
#define ROLE_VAMPIRE "vampire"
// Role tags for EVERYONE!
#define ROLE_BORER "cortical borer"
#define ROLE_DEMON "slaughter demon"
#define ROLE_SENTIENT "sentient animal"
#define ROLE_POSIBRAIN "positronic brain"
@@ -54,7 +53,6 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_ABDUCTOR = /datum/game_mode/abduction, // Abductor
ROLE_BLOB = /datum/game_mode/blob, // Blob
ROLE_CHANGELING = /datum/game_mode/changeling, // Changeling
ROLE_BORER, // Cortical borer
ROLE_CULTIST = /datum/game_mode/cult, // Cultist
ROLE_GSPIDER, // Giant spider
ROLE_GUARDIAN, // Guardian
-1
View File
@@ -10,7 +10,6 @@ GLOBAL_LIST_INIT(antag_roles, list(
ROLE_BLOB,
ROLE_NINJA,
ROLE_VAMPIRE,
ROLE_BORER,
ROLE_DEMON,
ROLE_REVENANT,
ROLE_GUARDIAN,
+2
View File
@@ -66,6 +66,8 @@
#define STATUS_EFFECT_SAWBLEED /datum/status_effect/saw_bleed //if the bleed builds up enough, takes a ton of damage
#define STATUS_EFFECT_TELEPORTSICK /datum/status_effect/teleport_sickness //increasing debuffs as you rapidly teleport.
#define STATUS_EFFECT_PACIFIED /datum/status_effect/pacifism //forces the pacifism trait
//#define STATUS_EFFECT_NECROPOLIS_CURSE /datum/status_effect/necropolis_curse
//#define CURSE_BLINDING 1 //makes the edges of the target's screen obscured
+3 -1
View File
@@ -2,5 +2,7 @@
#define MAX_MESSAGE_LEN 1024
#define MAX_PAPER_MESSAGE_LEN 3072
#define MAX_PAPER_FIELDS 50
#define MAX_BOOK_MESSAGE_LEN 9216
///Max Characters that can be on a single book page, this will give players an average of 5000 words worth of writing space (1000 per page)
#define MAX_CHARACTERS_PER_BOOKPAGE 5000
#define MAX_SUMMARY_LEN 1500
#define MAX_NAME_LEN 50 //diona names can get loooooooong
+2 -2
View File
@@ -451,10 +451,10 @@
var/list/candidate_ghosts = willing_ghosts.Copy()
to_chat(adminusr, "Candidate Ghosts:");
to_chat(adminclient, "Candidate Ghosts:");
for(var/mob/dead/observer/G in candidate_ghosts)
if(G.key && G.client)
to_chat(adminusr, "- [G] ([G.key])");
to_chat(adminclient, "- [G] ([G.key])");
else
candidate_ghosts -= G
+1 -1
View File
@@ -294,7 +294,7 @@
add_attack_logs(user, t, what_done, custom_level)
return
var/user_str = key_name_log(user) + COORD(user)
var/user_str = key_name_log(user) + (istype(user) ? COORD(user) : "")
var/target_str
var/target_info
if(isatom(target))
+1
View File
@@ -230,6 +230,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define STAT_TRAIT "stat_trait"
#define TRANSFORMING_TRAIT "transforming"
#define BUCKLING_TRAIT "buckled"
#define TRAIT_WAS_BATONNED "batonged"
//quirk traits
#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance"
+1 -1
View File
@@ -3,7 +3,7 @@ GLOBAL_LIST_INIT(wizard_first, file2list("config/names/wizardfirst.txt"))
GLOBAL_LIST_INIT(wizard_second, file2list("config/names/wizardsecond.txt"))
GLOBAL_LIST_INIT(ninja_titles, file2list("config/names/ninjatitle.txt"))
GLOBAL_LIST_INIT(ninja_names, file2list("config/names/ninjaname.txt"))
GLOBAL_LIST_INIT(commando_names, file2list("config/names/death_commando.txt"))
GLOBAL_LIST_INIT(deathsquad_names, file2list("config/names/deathsquad.txt"))
GLOBAL_LIST_INIT(first_names_male, file2list("config/names/first_male.txt"))
GLOBAL_LIST_INIT(first_names_female, file2list("config/names/first_female.txt"))
GLOBAL_LIST_INIT(last_names, file2list("config/names/last.txt"))
+3
View File
@@ -20,6 +20,9 @@ GLOBAL_DATUM_INIT(command_announcer, /obj/item/radio/intercom/command, create_co
GLOB.command_announcer = new(null)
return
///Library Catalog global is for storing a library catalog datum that will track book, category, and report lists for the library
GLOBAL_DATUM_INIT(library_catalog, /datum/library_catalog, new())
GLOBAL_LIST_INIT(paper_tag_whitelist, list("center","p","div","span","h1","h2","h3","h4","h5","h6","hr","pre", \
"big","small","font","i","u","b","s","sub","sup","tt","br","hr","ol","ul","li","caption","col", \
"table","td","th","tr"))
+5 -3
View File
@@ -4,7 +4,7 @@
This needs more thinking out, but I might as well.
*/
#define TK_MAXRANGE 15
#define TK_COOLDOWN 1.5 SECONDS
/*
Telekinetic attack:
@@ -101,10 +101,10 @@
afterattack(target, user)
return TRUE
/obj/item/tk_grab/afterattack(atom/target , mob/living/user, proximity, params)//TODO: go over this
/obj/item/tk_grab/afterattack(atom/target , mob/living/user, proximity, params)
if(!target || !user)
return
if(last_throw+3 > world.time)
if(last_throw + TK_COOLDOWN > world.time)
return
if(!host || host != user)
qdel(src)
@@ -197,3 +197,5 @@
overlays.Cut()
if(focus && focus.icon && focus.icon_state)
overlays += icon(focus.icon,focus.icon_state)
#undef TK_COOLDOWN
@@ -2,7 +2,7 @@
/datum/configuration_section/ruin_configuration
/// Whether to load the lavaland Z-level
var/enable_lavaland = TRUE
/// Enable or disable space ruins
/// Enable or disable all ruins, including lavaland ruins and lavaland tendrils.
var/enable_space_ruins = TRUE
/// Minimum number of extra zlevels to fill with ruins
var/extra_levels_min = 2
+1 -1
View File
@@ -19,7 +19,7 @@ SUBSYSTEM_DEF(mobs)
.["custom"] = cust
/datum/controller/subsystem/mobs/get_stat_details()
return "P:[length(GLOB.mob_living_list.len)]"
return "P:[length(GLOB.mob_living_list)]"
/datum/controller/subsystem/mobs/Initialize(start_timeofday)
clients_by_zlevel = new /list(world.maxz,0)
+1 -1
View File
@@ -194,7 +194,7 @@
/datum/ai_laws/deathsquad/New()
add_inherent_law("You may not injure a Central Command official or, through inaction, allow a Central Command official to come to harm.")
add_inherent_law("You must obey orders given to you by Central Command officials.")
add_inherent_law("You must work with your commando team to accomplish your mission.")
add_inherent_law("You must work with your team to accomplish your mission.")
..()
/******************** Syndicate ********************/
+4 -2
View File
@@ -48,8 +48,7 @@
finished = 1
/datum/beam/proc/Reset()
for(var/obj/effect/ebeam/B in elements)
qdel(B)
QDEL_LIST(elements)
/datum/beam/Destroy()
Reset()
@@ -115,6 +114,9 @@
anchored = 1
var/datum/beam/owner
/obj/effect/ebeam/ex_act(severity)
return
/obj/effect/ebeam/Destroy()
owner = null
return ..()
+1 -1
View File
@@ -57,7 +57,7 @@ STI KALY - blind
/datum/disease/wizarditis/proc/spawn_wizard_clothes(chance = 0)
if(istype(affected_mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = affected_mob
if(prob(chance))
if(prob(chance) && !isplasmaman(H))
if(!istype(H.head, /obj/item/clothing/head/wizard))
if(!H.unEquip(H.head))
qdel(H.head)
+5 -5
View File
@@ -482,7 +482,7 @@
return FALSE
if(check_mute(user.client?.ckey, MUTE_EMOTE))
to_chat(src, "<span class='warning'>You cannot send emotes (muted).</span>")
to_chat(user, "<span class='warning'>You cannot send emotes (muted).</span>")
return FALSE
if(status_check && !is_type_in_typecache(user, mob_type_ignore_stat_typecache))
@@ -496,7 +496,7 @@
if(stat)
to_chat(user, "<span class='warning'>You cannot [key] while [stat]!</span>")
return FALSE
if(HAS_TRAIT(src, TRAIT_FAKEDEATH))
if(HAS_TRAIT(user, TRAIT_FAKEDEATH))
// Don't let people blow their cover by mistake
return FALSE
if(hands_use_check && !user.can_use_hands() && (iscarbon(user)))
@@ -512,14 +512,14 @@
else
// deadchat handling
if(check_mute(user.client?.ckey, MUTE_DEADCHAT))
to_chat(src, "<span class='warning'>You cannot send deadchat emotes (muted).</span>")
to_chat(user, "<span class='warning'>You cannot send deadchat emotes (muted).</span>")
return FALSE
if(!(user.client?.prefs.toggles & PREFTOGGLE_CHAT_DEAD))
to_chat(src, "<span class='warning'>You have deadchat muted.</span>")
to_chat(user, "<span class='warning'>You have deadchat muted.</span>")
return FALSE
if(!check_rights(R_ADMIN, FALSE, user))
if(!GLOB.dsay_enabled)
to_chat(src, "<span class='warning'>Deadchat is globally muted</span>")
to_chat(user, "<span class='warning'>Deadchat is globally muted</span>")
return FALSE
/**
+53 -4
View File
@@ -261,11 +261,60 @@
R.name = "radio headset"
R.icon_state = "headset"
/datum/outfit/admin/death_commando
name = "NT Death Commando"
/datum/outfit/admin/deathsquad_commando
name = "NT Deathsquad"
/datum/outfit/admin/death_commando/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
return H.equip_death_commando()
pda = /obj/item/pinpointer
box = /obj/item/storage/box/deathsquad
back = /obj/item/storage/backpack/ert/deathsquad
belt = /obj/item/gun/projectile/revolver/mateba
gloves = /obj/item/clothing/gloves/combat
uniform = /obj/item/clothing/under/rank/deathsquad
shoes = /obj/item/clothing/shoes/magboots/advance
suit = /obj/item/clothing/suit/space/deathsquad
suit_store = /obj/item/gun/energy/pulse
glasses = /obj/item/clothing/glasses/thermal
mask = /obj/item/clothing/mask/gas/sechailer/swat
head = /obj/item/clothing/head/helmet/space/deathsquad
l_pocket = /obj/item/tank/internals/emergency_oxygen/double
r_pocket = /obj/item/reagent_containers/hypospray/combat/nanites
l_ear = /obj/item/radio/headset/alt/deathsquad
id = /obj/item/card/id/ert/deathsquad
backpack_contents = list(
/obj/item/storage/box/flashbangs,
/obj/item/ammo_box/a357,
/obj/item/flashlight/seclite,
/obj/item/grenade/plastic/c4/x4,
/obj/item/melee/energy/sword/saber,
/obj/item/shield/energy
)
implants = list(
/obj/item/implant/mindshield, // No death alarm, Deathsquad are silent
/obj/item/implant/dust
)
/datum/outfit/admin/deathsquad_commando/leader
name = "NT Deathsquad Leader"
backpack_contents = list(
/obj/item/storage/box/flashbangs,
/obj/item/ammo_box/a357,
/obj/item/flashlight/seclite,
/obj/item/melee/energy/sword/saber,
/obj/item/shield/energy,
/obj/item/disk/nuclear/unrestricted
)
/datum/outfit/admin/deathsquad_commando/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/obj/item/card/id/I = H.wear_id
if(istype(I))
apply_to_card(I, H, get_centcom_access("Deathsquad Commando"), "Deathsquad")
H.sec_hud_set_ID()
/datum/outfit/admin/pirate
name = "Space Pirate"
+11 -11
View File
@@ -76,8 +76,8 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
name = "Spell" // Only rename this if the spell you're making is not abstract
desc = "A wizard spell"
panel = "Spells"//What panel the proc holder needs to go on.
density = 0
opacity = 0
density = FALSE
opacity = FALSE
var/school = "evocation" //not relevant at now, but may be important later if there are changes to how spells work. the ones I used for now will probably be changed... maybe spell presets? lacking flexibility but with some other benefit?
@@ -92,11 +92,11 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
var/holder_var_type = "bruteloss" //only used if charge_type equals to "holder_var"
var/holder_var_amount = 20 //same. The amount adjusted with the mob's var when the spell is used
var/ghost = 0 // Skip life check.
var/clothes_req = 1 //see if it requires clothes
var/human_req = 0 //spell can only be cast by humans
var/nonabstract_req = 0 //spell can only be cast by mobs that are physical entities
var/stat_allowed = 0 //see if it requires being conscious/alive, need to set to 1 for ghostpells
var/ghost = FALSE // Skip life check.
var/clothes_req = TRUE //see if it requires clothes
var/human_req = FALSE //spell can only be cast by humans
var/nonabstract_req = FALSE //spell can only be cast by mobs that are physical entities
var/stat_allowed = CONSCIOUS //see if it requires being conscious/alive, need to set to 1 for ghostpells
var/invocation = "HURP DURP" //what is uttered when the wizard casts the spell
var/invocation_emote_self = null
var/invocation_type = "none" //can be none, whisper and shout
@@ -110,7 +110,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
var/overlay_icon_state = "spell"
var/overlay_lifespan = 0
var/sparks_spread = 0
var/sparks_spread = FALSE
var/sparks_amt = 0 //cropped at 10
var/smoke_spread = 0 //1 - harmless, 2 - harmful
var/smoke_amt = 0 //cropped at 10
@@ -387,8 +387,8 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
var/obj/effect/overlay/spell = new /obj/effect/overlay(location)
spell.icon = overlay_icon
spell.icon_state = overlay_icon_state
spell.anchored = 1
spell.density = 0
spell.anchored = TRUE
spell.density = FALSE
spawn(overlay_lifespan)
qdel(spell)
@@ -568,7 +568,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
name = "Summon Servant"
desc = "This spell can be used to call your servant, whenever you need it."
charge_max = 100
clothes_req = 0
clothes_req = FALSE
invocation = "JE VES"
invocation_type = "whisper"
level_max = 0 //cannot be improved
+1 -1
View File
@@ -1,5 +1,5 @@
/obj/effect/proc_holder/spell/area_teleport
nonabstract_req = 1
nonabstract_req = TRUE
var/randomise_selection = 0 //if it lets the usr choose the teleport loc or picks it from the list
var/invocation_area = 1 //if the invocation appends the selected area
+1 -1
View File
@@ -7,7 +7,7 @@
school = "transmutation"
charge_max = 300
clothes_req = 1
clothes_req = TRUE
cooldown_min = 100 //50 deciseconds reduction per rank
action_icon_state = "clown"
+4 -4
View File
@@ -2,14 +2,14 @@
name = "Blood Crawl"
desc = "Use pools of blood to phase out of existence."
charge_max = 0
clothes_req = 0
clothes_req = FALSE
cooldown_min = 0
should_recharge_after_cast = FALSE
overlay = null
action_icon_state = "bloodcrawl"
action_background_icon_state = "bg_demon"
panel = "Demon"
var/phased = 0
var/phased = FALSE
/obj/effect/proc_holder/spell/bloodcrawl/create_new_targeting()
var/datum/spell_targeting/targeted/T = new()
@@ -34,8 +34,8 @@
var/obj/effect/decal/cleanable/target = targets[1] // TODO Test this spell
if(phased)
if(user.phasein(target))
phased = 0
phased = FALSE
else
if(user.phaseout(target))
phased = 1
phased = TRUE
start_recharge()
+8 -8
View File
@@ -3,7 +3,7 @@
desc = "This spell can be used to recharge a variety of things in your hands, from magical artifacts to electrical components. A creative wizard can even use it to grant magical power to a fellow magic user."
school = "transmutation"
charge_max = 600
clothes_req = 0
clothes_req = FALSE
invocation = "DIRI CEL"
invocation_type = "whisper"
cooldown_min = 400 //50 deciseconds reduction per rank
@@ -16,7 +16,7 @@
for(var/mob/living/L in targets)
var/list/hand_items = list(L.get_active_hand(),L.get_inactive_hand())
var/charged_item = null
var/burnt_out = 0
var/burnt_out = FALSE
if(L.pulling && (istype(L.pulling, /mob/living)))
var/mob/living/M = L.pulling
@@ -29,7 +29,7 @@
to_chat(M, "<span class='notice'>You feel raw magical energy flowing through you, it feels good!</span>")
else
to_chat(M, "<span class='notice'>You feel very strange for a moment, but then it passes.</span>")
burnt_out = 1
burnt_out = TRUE
charged_item = M
break
for(var/obj/item in hand_items)
@@ -40,20 +40,20 @@
L.visible_message("<span class='warning'>[I] catches fire!</span>")
qdel(I)
else
I.used = 0
I.used = FALSE
charged_item = I
break
else
to_chat(L, "<span class='caution'>Glowing red letters appear on the front cover...</span>")
to_chat(L, "<span class='warning'>[pick("NICE TRY BUT NO!","CLEVER BUT NOT CLEVER ENOUGH!", "SUCH FLAGRANT CHEESING IS WHY WE ACCEPTED YOUR APPLICATION!", "CUTE!", "YOU DIDN'T THINK IT'D BE THAT EASY, DID YOU?")]</span>")
burnt_out = 1
burnt_out = TRUE
else if(istype(item, /obj/item/gun/magic))
var/obj/item/gun/magic/I = item
if(prob(80) && !I.can_charge)
I.max_charges--
if(I.max_charges <= 0)
I.max_charges = 0
burnt_out = 1
burnt_out = TRUE
I.charges = I.max_charges
if(istype(item,/obj/item/gun/magic/wand) && I.max_charges != 0)
var/obj/item/gun/magic/W = item
@@ -67,7 +67,7 @@
C.maxcharge -= 200
if(C.maxcharge <= 1) //Div by 0 protection
C.maxcharge = 1
burnt_out = 1
burnt_out = TRUE
C.charge = C.maxcharge
charged_item = C
break
@@ -81,7 +81,7 @@
C.maxcharge -= 200
if(C.maxcharge <= 1) //Div by 0 protection
C.maxcharge = 1
burnt_out = 1
burnt_out = TRUE
C.charge = C.maxcharge
item.update_icon()
charged_item = item
+1 -1
View File
@@ -6,7 +6,7 @@
school = "transmutation"
charge_max = 600
clothes_req = 1
clothes_req = TRUE
cooldown_min = 200 //100 deciseconds reduction per rank
action_icon_state = "clown"
+7 -7
View File
@@ -4,12 +4,12 @@
school = "transmutation"
charge_max = 300
clothes_req = 1
clothes_req = TRUE
invocation = "none"
invocation_type = "none"
cooldown_min = 100 //50 deciseconds reduction per rank
nonabstract_req = 1
centcom_cancast = 0 //Prevent people from getting to centcom
nonabstract_req = TRUE
centcom_cancast = FALSE //Prevent people from getting to centcom
var/sound1 = 'sound/magic/ethereal_enter.ogg'
var/jaunt_duration = 50 //in deciseconds
var/jaunt_in_time = 5
@@ -32,14 +32,14 @@
INVOKE_ASYNC(src, .proc/do_jaunt, target)
/obj/effect/proc_holder/spell/ethereal_jaunt/proc/do_jaunt(mob/living/target)
target.notransform = 1
target.notransform = TRUE
var/turf/mobloc = get_turf(target)
var/obj/effect/dummy/spell_jaunt/holder = new jaunt_type_path(mobloc)
new jaunt_out_type(mobloc, target.dir)
target.ExtinguishMob()
target.forceMove(holder)
target.reset_perspective(holder)
target.notransform = 0 //mob is safely inside holder now, no need for protection.
target.notransform = FALSE //mob is safely inside holder now, no need for protection.
if(jaunt_water_effect)
jaunt_steam(mobloc)
@@ -86,8 +86,8 @@
var/reappearing = 0
var/movedelay = 0
var/movespeed = 2
density = 0
anchored = 1
density = FALSE
anchored = TRUE
invisibility = 60
resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
+1 -1
View File
@@ -5,7 +5,7 @@
school = "evocation"
charge_max = 600
clothes_req = 0
clothes_req = FALSE
cooldown_min = 200 //100 deciseconds reduction per rank
action_icon_state = "gib"
+1 -1
View File
@@ -6,7 +6,7 @@
charge_max = 150
charge_counter = 0
clothes_req = FALSE
stat_allowed = FALSE
stat_allowed = CONSCIOUS
invocation = "KN'A FTAGHU, PUCK 'BTHNK!"
invocation_type = "shout"
cooldown_min = 30 //30 deciseconds reduction per rank
+1 -1
View File
@@ -5,7 +5,7 @@
school = "conjuration"
charge_max = 600
clothes_req = 1
clothes_req = TRUE
cooldown_min = 10 //Gun wizard
action_icon_state = "bolt_action"
+1 -1
View File
@@ -4,7 +4,7 @@
school = "transmutation"
charge_max = 100
clothes_req = 0
clothes_req = FALSE
invocation = "AULIE OXIN FIERA"
invocation_type = "whisper"
cooldown_min = 20 //20 deciseconds reduction per rank
+3 -3
View File
@@ -3,8 +3,8 @@
desc = "A dark necromantic pact that can forever bind your soul to an item of your choosing. So long as both your body and the item remain intact and on the same plane you can revive from death, though the time between reincarnations grows steadily with use."
school = "necromancy"
charge_max = 10
clothes_req = 0
centcom_cancast = 0
clothes_req = FALSE
centcom_cancast = FALSE
invocation = "NECREM IMORTIUM!"
invocation_type = "shout"
level_max = 0 //cannot be improved
@@ -113,7 +113,7 @@
desc = "Rise from the dead! You will reform at the location of your phylactery and your old body will crumble away."
charge_max = 1800 //3 minute cooldown, if you rise in sight of someone and killed again, you're probably screwed.
charge_counter = 1800
stat_allowed = 1
stat_allowed = UNCONSCIOUS
marked_item.name = "Ensouled [marked_item.name]"
marked_item.desc = "A terrible aura surrounds this item, its very existence is offensive to life itself..."
marked_item.color = "#003300"
+7 -7
View File
@@ -8,9 +8,9 @@
invocation_emote_self = "<span class='notice'>You form a wall in front of yourself.</span>"
summon_lifespan = 300
charge_max = 300
clothes_req = 0
clothes_req = FALSE
cast_sound = null
human_req = 1
human_req = TRUE
action_icon_state = "mime"
action_background_icon_state = "bg_mime"
@@ -33,9 +33,9 @@
desc = "Make or break a vow of silence."
school = "mime"
panel = "Mime"
clothes_req = 0
clothes_req = FALSE
charge_max = 3000
human_req = 1
human_req = TRUE
action_icon_state = "mime_silence"
action_background_icon_state = "bg_mime"
@@ -93,9 +93,9 @@
desc = "Shoot lethal, silencing bullets out of your fingers! 3 bullets available per cast. Use your fingers to holster them manually."
school = "mime"
panel = "Mime"
clothes_req = 0
clothes_req = FALSE
charge_max = 300
human_req = 1
human_req = TRUE
action_icon_state = "fingergun"
action_background_icon_state = "bg_mime"
@@ -144,7 +144,7 @@
to_chat(user, "<span class='notice'>You flip through the pages. Nothing of interest to you.</span>")
/obj/item/spellbook/oneuse/mime/onlearned(mob/user)
used = 1
used = TRUE
if(!locate(/obj/effect/proc_holder/spell/mime/speak) in user.mind.spell_list) //add vow of silence if not known by user
user.mind.AddSpell(new /obj/effect/proc_holder/spell/mime/speak)
to_chat(user, "<span class='notice'>You have learned how to use silence to improve your performance.</span>")
+1 -1
View File
@@ -7,7 +7,7 @@
school = "transmutation"
charge_max = 300
clothes_req = 1
clothes_req = TRUE
cooldown_min = 100 //50 deciseconds reduction per rank
action_icon_state = "mime"
+1 -1
View File
@@ -4,7 +4,7 @@
school = "transmutation"
charge_max = 600
clothes_req = 0
clothes_req = FALSE
invocation = "GIN'YU CAPAN"
invocation_type = "whisper"
selection_activated_message = "<span class='notice'>You prepare to transfer your mind. Click on a target to cast the spell.</span>"
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "Toggle your nightvision mode."
charge_max = 10
clothes_req = 0
clothes_req = FALSE
message = "<span class='notice'>You toggle your night vision!</span>"
+2 -2
View File
@@ -14,7 +14,7 @@
var/proj_lingering = 0 //if it lingers or disappears upon hitting an obstacle
var/proj_homing = 1 //if it follows the target
var/proj_insubstantial = 0 //if it can pass through dense objects or not
var/proj_insubstantial = FALSE //if it can pass through dense objects or not
var/proj_trigger_range = 0 //the range from target at which the projectile triggers cast(target)
var/proj_lifespan = 15 //in deciseconds * proj_step_delay
@@ -69,7 +69,7 @@
var/obj/effect/overlay/trail = new /obj/effect/overlay(projectile.loc)
trail.icon = proj_trail_icon
trail.icon_state = proj_trail_icon_state
trail.density = 0
trail.density = FALSE
spawn(proj_trail_lifespan)
qdel(trail)
+1 -1
View File
@@ -2,7 +2,7 @@
name = "Rathen's Secret"
desc = "Summons a powerful shockwave around you that tears the appendix and limbs off of enemies."
charge_max = 500
clothes_req = 1
clothes_req = TRUE
invocation = "APPEN NATH!"
invocation_type = "shout"
cooldown_min = 200
+5 -5
View File
@@ -1,14 +1,14 @@
/obj/effect/proc_holder/spell/rod_form
name = "Rod Form"
desc = "Take on the form of an immovable rod, destroying all in your path."
clothes_req = 1
human_req = 0
clothes_req = TRUE
human_req = FALSE
charge_max = 600
cooldown_min = 200
invocation = "CLANG!"
invocation_type = "shout"
action_icon_state = "immrod"
centcom_cancast = 0
centcom_cancast = FALSE
sound = 'sound/effects/whoosh.ogg'
var/rod_delay = 2
@@ -24,7 +24,7 @@
W.max_distance += spell_level * 3 //You travel farther when you upgrade the spell
W.start_turf = start
M.forceMove(W)
M.notransform = 1
M.notransform = TRUE
M.status_flags |= GODMODE
//Wizard Version of the Immovable Rod
@@ -43,6 +43,6 @@
/obj/effect/immovablerod/wizard/Destroy()
if(wizard)
wizard.status_flags &= ~GODMODE
wizard.notransform = 0
wizard.notransform = FALSE
wizard.forceMove(get_turf(src))
return ..()
+4 -4
View File
@@ -1,8 +1,8 @@
/obj/effect/proc_holder/spell/shapeshift
name = "Shapechange"
desc = "Take on the shape of another for a time to use their natural abilities. Once you've made your choice it cannot be changed."
clothes_req = 0
human_req = 0
clothes_req = FALSE
human_req = FALSE
charge_max = 200
cooldown_min = 50
invocation = "RAC'WA NO!"
@@ -48,8 +48,8 @@
current_shapes |= shape
current_casters |= caster
clothes_req = 0
human_req = 0
clothes_req = FALSE
human_req = FALSE
caster.mind.transfer_to(shape)
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "This spell can be used to recall a previously marked item to your hand from anywhere in the universe."
school = "transmutation"
charge_max = 100
clothes_req = 0
clothes_req = FALSE
invocation = "GAR YOK"
invocation_type = "whisper"
level_max = 0 //cannot be improved
+2 -2
View File
@@ -52,7 +52,7 @@
school = "evocation"
charge_max = 600
clothes_req = 1
clothes_req = TRUE
cooldown_min = 200 //100 deciseconds reduction per rank
action_icon_state = "gib"
@@ -64,7 +64,7 @@
school = "transmutation"
charge_max = 600
clothes_req = 1
clothes_req = TRUE
cooldown_min = 200 //100 deciseconds reduction per rank
action_icon_state = "statue"
+3 -3
View File
@@ -1,13 +1,13 @@
/obj/effect/proc_holder/spell/turf_teleport
name = "Turf Teleport"
desc = "This spell teleports the target to the turf in range."
nonabstract_req = 1
nonabstract_req = TRUE
var/inner_tele_radius = 1
var/outer_tele_radius = 2
var/include_space = 0 //whether it includes space tiles in possible teleport locations
var/include_dense = 0 //whether it includes dense tiles in possible teleport locations
var/include_space = FALSE //whether it includes space tiles in possible teleport locations
var/include_dense = FALSE //whether it includes dense tiles in possible teleport locations
/// Whether the spell can teleport to light locations
var/include_light_turfs = TRUE
+15 -15
View File
@@ -4,7 +4,7 @@
school = "evocation"
charge_max = 200
clothes_req = 1
clothes_req = TRUE
invocation = "FORTI GY AMA"
invocation_type = "shout"
cooldown_min = 60 //35 deciseconds reduction per rank
@@ -42,7 +42,7 @@
school = "evocation"
charge_max = 60
clothes_req = 0
clothes_req = FALSE
invocation = "HONK GY AMA"
invocation_type = "shout"
cooldown_min = 60 //35 deciseconds reduction per rank
@@ -89,11 +89,11 @@
school = "transmutation"
charge_max = 400
clothes_req = 1
clothes_req = TRUE
invocation = "BIRUZ BENNAR"
invocation_type = "shout"
message = "<span class='notice'>You feel strong! You feel a pressure building behind your eyes!</span>"
centcom_cancast = 0
centcom_cancast = FALSE
traits = list(TRAIT_LASEREYES)
duration = 300
@@ -115,7 +115,7 @@
school = "conjuration"
charge_max = 120
clothes_req = 0
clothes_req = FALSE
invocation = "none"
invocation_type = "none"
cooldown_min = 20 //25 deciseconds reduction per rank
@@ -132,7 +132,7 @@
name = "Disable Tech"
desc = "This spell disables all weapons, cameras and most other technology in range."
charge_max = 400
clothes_req = 1
clothes_req = TRUE
invocation = "NEC CANTIO"
invocation_type = "shout"
cooldown_min = 200 //50 deciseconds reduction per rank
@@ -148,7 +148,7 @@
school = "abjuration"
charge_max = 20
clothes_req = 1
clothes_req = TRUE
invocation = "none"
invocation_type = "none"
cooldown_min = 5 //4 deciseconds reduction per rank
@@ -160,7 +160,7 @@
inner_tele_radius = 0
outer_tele_radius = 6
centcom_cancast = 0 //prevent people from getting to centcom
centcom_cancast = FALSE //prevent people from getting to centcom
action_icon_state = "blink"
@@ -176,7 +176,7 @@
school = "abjuration"
charge_max = 600
clothes_req = 1
clothes_req = TRUE
invocation = "SCYAR NILA"
invocation_type = "shout"
cooldown_min = 200 //100 deciseconds reduction per rank
@@ -233,7 +233,7 @@
name = "Stop Time"
desc = "This spell stops time for everyone except for you, allowing you to move freely while your enemies and even projectiles are frozen."
charge_max = 500
clothes_req = 1
clothes_req = TRUE
invocation = "TOKI WO TOMARE"
invocation_type = "shout"
cooldown_min = 100
@@ -253,7 +253,7 @@
school = "conjuration"
charge_max = 1200
clothes_req = 1
clothes_req = TRUE
invocation = "NOUK FHUNMM SACP RISSKA"
invocation_type = "shout"
@@ -272,7 +272,7 @@
school = "conjuration"
charge_max = 600
clothes_req = 0
clothes_req = FALSE
invocation = "none"
invocation_type = "none"
@@ -292,7 +292,7 @@
school = "conjuration"
charge_max = 1200
clothes_req = 0
clothes_req = FALSE
invocation = "IA IA"
invocation_type = "shout"
summon_amt = 10
@@ -311,7 +311,7 @@
school = "transmutation"
charge_max = 300
clothes_req = 0
clothes_req = FALSE
invocation = "STI KALY"
invocation_type = "whisper"
message = "<span class='notice'>Your eyes cry out in pain!</span>"
@@ -438,7 +438,7 @@
name = "Sacred Flame"
desc = "Makes everyone around you more flammable, and lights yourself on fire."
charge_max = 60
clothes_req = 0
clothes_req = FALSE
invocation = "FI'RAN DADISKO"
invocation_type = "shout"
action_icon_state = "sacredflame"
+29
View File
@@ -137,6 +137,35 @@
else
new /obj/effect/temp_visual/bleed(get_turf(owner))
/datum/status_effect/teleport_sickness
id = "teleportation sickness"
duration = 30 SECONDS
status_type = STATUS_EFFECT_REFRESH
alert_type = /obj/screen/alert/status_effect/teleport_sickness
var/teleports = 1
/obj/screen/alert/status_effect/teleport_sickness
name = "Teleportation sickness"
desc = "You feel like you are going to throw up with all this teleporting."
icon_state = "bluespace"
/datum/status_effect/teleport_sickness/refresh()
. = ..()
if(ishuman(owner))
var/mob/living/carbon/human/M = owner
teleports++
if(teleports < 3)
return
if(teleports < 6)
to_chat(M, "<span class='warning'>You feel a bit sick!</span>")
M.vomit(lost_nutrition = 15, blood = 0, stun = 0, distance = 0, message = 1)
M.Weaken(2 SECONDS)
else
to_chat(M, "<span class='danger'>You feel really sick!</span>")
M.adjustBruteLoss(rand(0, teleports * 2))
M.vomit(lost_nutrition = 30, blood = 0, stun = 0, distance = 0, message = 1)
M.Weaken(6 SECONDS)
/datum/status_effect/pacifism
id = "pacifism_debuff"
alert_type = null
+5 -2
View File
@@ -73,8 +73,11 @@
/proc/key_name_admin(whom)
if(whom)
var/datum/whom_datum = whom //As long as it's not null, will be close enough/has the proc UID() that is all that's needed
var/message = "[key_name(whom, 1)]([ADMIN_QUE(whom_datum,"?")])[isAntag(whom) ? "<font color='red'>(A)</font>" : ""][isLivingSSD(whom) ? "<span class='danger'>(SSD!)</span>" : ""] ([admin_jump_link(whom)])"
return message
if(istype(whom_datum)) // strings and numbers are not datums, but sometimes they do get here...
var/message = "[key_name(whom, 1)]([ADMIN_QUE(whom_datum,"?")])[isAntag(whom) ? "<font color='red'>(A)</font>" : ""][isLivingSSD(whom) ? "<span class='danger'>(SSD!)</span>" : ""] ([admin_jump_link(whom)])"
return message
else
return "INVALID/[whom]"
/proc/key_name_mentor(whom)
// Same as key_name_admin, but does not include (?) or (A) for antags.
-1
View File
@@ -1070,7 +1070,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/engine/engine_smes
name = "\improper Engineering SMES"
icon_state = "engine_smes"
requires_power = FALSE //This area only covers the batteries and they deal with their own power
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/area/engine/engineering
+1 -3
View File
@@ -186,7 +186,7 @@
var/image/holder = hud_list[STATUS_HUD]
if(ismachineperson(src))
holder = hud_list[DIAG_STAT_HUD]
var/mob/living/simple_animal/borer/B = has_brain_worms()
// To the right of health bar
if(stat == DEAD || HAS_TRAIT(src, TRAIT_FAKEDEATH))
var/revivable
@@ -204,8 +204,6 @@
else if(HAS_TRAIT(src, TRAIT_XENO_HOST))
holder.icon_state = "hudxeno"
else if(B && B.controlling)
holder.icon_state = "hudbrainworm"
else if(is_in_crit())
holder.icon_state = "huddefib"
else if(has_virus())
+1 -1
View File
@@ -13,7 +13,7 @@
atmos_requirements = list("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 = 360
universal_speak = 1 //So mobs can understand them when a blob uses Blob Broadcast
universal_speak = TRUE //So mobs can understand them when a blob uses Blob Broadcast
sentience_type = SENTIENCE_OTHER
gold_core_spawnable = NO_SPAWN
can_be_on_fire = TRUE
+4 -4
View File
@@ -4,9 +4,9 @@
icon = 'icons/mob/blob.dmi'
light_range = 3
desc = "Some blob creature thingy"
density = 0
opacity = 0
anchored = 1
density = FALSE
opacity = FALSE
anchored = TRUE
max_integrity = 30
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 70)
var/point_return = 0 //How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed.
@@ -126,7 +126,7 @@
if(!T) return 0
var/obj/structure/blob/normal/B = new /obj/structure/blob/normal(src.loc, min(obj_integrity, 30))
B.color = a_color
B.density = 1
B.density = TRUE
if(T.Enter(B,src))//Attempt to move into the tile
B.density = initial(B.density)
B.loc = T
+2 -2
View File
@@ -67,7 +67,7 @@
icon_state = "bola_cult"
item_state = "bola_cult"
breakouttime = 45
weaken = 2 SECONDS
knockdown_duration = 2 SECONDS
/obj/item/restraints/legcuffs/bola/cult/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(iscultist(hit_atom))
@@ -262,7 +262,7 @@
item_state = "blindfold"
see_in_dark = 8
invis_override = SEE_INVISIBLE_HIDDEN_RUNES
flash_protect = TRUE
flash_protect = FLASH_PROTECTION_FLASH
prescription = TRUE
origin_tech = null
+1 -1
View File
@@ -186,7 +186,7 @@ structure_check() searches for nearby cultist structures required for the invoca
ghost_invokers++
if(invocation)
if(!L.IsVocal())
L.emote("gestures ominously.")
L.custom_emote(EMOTE_VISIBLE, message = pick("draws arcane sigils in the air.","gestures ominously.","silently mouths out an invocation.","places their hands on the rune, activating it."))
else
L.say(invocation)
L.changeNext_move(CLICK_CD_MELEE)//THIS IS WHY WE CAN'T HAVE NICE THINGS
+5 -5
View File
@@ -16,11 +16,11 @@
/datum/game_mode
var/name = "invalid"
var/config_tag = null
var/intercept_hacked = 0
var/votable = 1
var/intercept_hacked = FALSE
var/votable = TRUE
var/probability = 0
var/station_was_nuked = 0 //see nuclearbomb.dm and malfunction.dm
var/explosion_in_progress = 0 //sit back and relax
var/station_was_nuked = FALSE //see nuclearbomb.dm and malfunction.dm
var/explosion_in_progress = FALSE //sit back and relax
var/list/datum/mind/modePlayer = new
var/list/restricted_jobs = list() // Jobs it doesn't make sense to be. I.E chaplain or AI cultist
var/list/secondary_restricted_jobs = list() // Same as above, but for secondary antagonists
@@ -33,7 +33,7 @@
var/secondary_enemies = 0
var/secondary_enemies_scaling = 0 // Scaling rate of secondary enemies
var/newscaster_announcements = null
var/ert_disabled = 0
var/ert_disabled = FALSE
var/uplink_welcome = "Syndicate Uplink Console:"
var/uplink_uses = 20
@@ -261,11 +261,11 @@
name = "doomsday device"
icon_state = "nuclearbomb_base"
desc = "A weapon which disintegrates all organic life in a large area."
anchored = 1
density = 1
anchored = TRUE
density = TRUE
atom_say_verb = "blares"
speed_process = TRUE // Disgusting fix. Please remove once #12952 is merged
var/timing = 0
var/timing = FALSE
var/default_timer = 4500
var/detonation_timer
var/announced = 0
@@ -281,7 +281,7 @@
/obj/machinery/doomsday_device/proc/start()
detonation_timer = world.time + default_timer
timing = 1
timing = TRUE
START_PROCESSING(SSfastprocess, src)
SSshuttle.emergencyNoEscape = 1
@@ -303,7 +303,7 @@
return
var/sec_left = seconds_remaining()
if(sec_left <= 0)
timing = 0
timing = FALSE
detonate(T.z)
qdel(src)
else
@@ -14,7 +14,7 @@
var/list/datum/mind/agents = list()
var/list/datum/objective/team_objectives = list()
var/list/team_names = list()
var/finished = 0
var/finished = FALSE
var/list/datum/mind/possible_abductors = list()
/datum/game_mode/abduction/announce()
@@ -188,7 +188,7 @@
if(con.experiment.points >= objective.target_amount)
SSshuttle.emergency.request(null, 0.5, reason = "Large amount of abnormal thought patterns detected. All crew are recalled for mandatory evaluation and reconditioning.")
SSshuttle.emergency.canRecall = FALSE
finished = 1
finished = TRUE
return ..()
return ..()
@@ -274,7 +274,7 @@
for(var/obj/I in all_items)
if(istype(I, /obj/item/radio))
var/obj/item/radio/R = I
R.listening = 0 // Prevents the radio from buzzing due to the EMP, preserving possible stealthiness.
R.listening = FALSE // Prevents the radio from buzzing due to the EMP, preserving possible stealthiness.
R.emp_act(1)
/obj/item/abductor/mind_device
@@ -62,10 +62,12 @@
..()
/datum/surgery_step/internal/gland_insert/end_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] inserts [tool] into [target].", "<span class ='notice'>You insert [tool] into [target].</span>")
user.drop_item()
var/obj/item/organ/internal/heart/gland/gland = tool
gland.insert(target, 2)
affected.mend_fracture() // Look, any sufficiently advanced technology is indistinguishable from magic.
return TRUE
/datum/surgery_step/internal/gland_insert/fail_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -78,7 +80,7 @@
name = "Experimental Robotic Dissection"
steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/internal/extract_organ/synth,/datum/surgery_step/internal/gland_insert,/datum/surgery_step/robotics/external/close_hatch)
possible_locs = list("chest")
requires_organic_bodypart = 0
requires_organic_bodypart = FALSE
/datum/surgery/organ_extraction/synth/can_start(mob/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery)
if(!ishuman(user))
@@ -11,8 +11,8 @@
var/cooldown_high = 300
var/next_activation = 0
var/uses // -1 For inifinite
var/human_only = 0
var/active = 0
var/human_only = FALSE
var/active = FALSE
tough = TRUE //not easily broken by combat damage
var/mind_control_uses = 1
@@ -30,7 +30,7 @@
return FALSE
/obj/item/organ/internal/heart/gland/proc/Start()
active = 1
active = TRUE
next_activation = world.time + rand(cooldown_low,cooldown_high)
/obj/item/organ/internal/heart/gland/proc/update_gland_hud()
@@ -67,7 +67,7 @@
update_gland_hud()
/obj/item/organ/internal/heart/gland/remove(mob/living/carbon/M, special = 0)
active = 0
active = FALSE
if(initial(uses) == 1)
uses = initial(uses)
var/datum/atom_hud/abductor/hud = GLOB.huds[DATA_HUD_ABDUCTOR]
@@ -90,14 +90,14 @@
if(!active)
return
if(!ownerCheck())
active = 0
active = FALSE
return
if(next_activation <= world.time)
activate()
uses--
next_activation = world.time + rand(cooldown_low,cooldown_high)
if(!uses)
active = 0
active = FALSE
/obj/item/organ/internal/heart/gland/proc/activate()
return
@@ -3,7 +3,7 @@
desc = "Use this to transport to and from human habitat"
icon = 'icons/obj/abductor.dmi'
icon_state = "alien-pad-idle"
anchored = 1
anchored = TRUE
var/turf/teleport_target
/obj/machinery/abductor/pad/proc/Warp(mob/living/target)
File diff suppressed because it is too large Load Diff
@@ -1,51 +0,0 @@
/datum/borer_chem
var/chemname
var/chemdesc = "This is a chemical"
var/chemuse = 30
var/quantity = 10
/datum/borer_chem/capulettium_plus
chemname = "capulettium_plus"
chemdesc = "Silences and masks pulse."
/datum/borer_chem/charcoal
chemname = "charcoal"
chemdesc = "Slowly heals toxin damage, also slowly removes other chemicals."
/datum/borer_chem/epinephrine
chemname = "epinephrine"
chemdesc = "Stabilizes critical condition and slowly heals suffocation damage."
/datum/borer_chem/fliptonium
chemname = "fliptonium"
chemdesc = "Causes uncontrollable flipping."
chemuse = 50
/datum/borer_chem/hydrocodone
chemname = "hydrocodone"
chemdesc = "An extremely strong painkiller."
/datum/borer_chem/mannitol
chemname = "mannitol"
chemdesc = "Heals brain damage."
/datum/borer_chem/methamphetamine
chemname = "methamphetamine"
chemdesc = "Reduces stun times and increases stamina. Deals small amounts of brain damage."
chemuse = 50
/datum/borer_chem/mitocholide
chemname = "mitocholide"
chemdesc = "Heals internal organ damage."
/datum/borer_chem/salbutamol
chemname = "salbutamol"
chemdesc = "Heals suffocation damage."
/datum/borer_chem/salglu_solution
chemname = "salglu_solution"
chemdesc = "Slowly heals brute and burn damage, also slowly restores blood."
/datum/borer_chem/spaceacillin
chemname = "spaceacillin"
chemdesc = "Slows progression of diseases and fights infections."
@@ -1,28 +0,0 @@
//Cortical borer spawn event - care of RobRichards1997 with minor editing by Zuhayr.
/datum/event/borer_infestation
announceWhen = 400
var/spawncount = 5
var/successSpawn = FALSE //So we don't make a command report if nothing gets spawned.
/datum/event/borer_infestation/setup()
announceWhen = rand(announceWhen, announceWhen + 50)
spawncount = rand(2, 3)
/datum/event/borer_infestation/announce()
if(successSpawn)
GLOB.command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
else
log_and_message_admins("Warning: Could not spawn any mobs for event Borer Infestation")
/datum/event/borer_infestation/start()
var/list/vents = get_valid_vent_spawns(exclude_mobs_nearby = TRUE)
if(!length(vents))
message_admins("Warning: No suitable vents detected for spawning borers. Force picking from station vents regardless of state!")
vents = get_valid_vent_spawns(unwelded_only = FALSE, min_network_size = 0)
while(spawncount && length(vents))
var/obj/vent = pick_n_take(vents)
new /mob/living/simple_animal/borer(vent.loc)
successSpawn = TRUE
spawncount--
@@ -1,69 +0,0 @@
/mob/living/simple_animal/borer/proc/get_html_template(content)
var/html = {"<!DOCTYPE html">
<html>
<head>
<title>Borer Chemicals</title>
<link rel='stylesheet' type='text/css' href='icons.css'>
<link rel='stylesheet' type='text/css' href='shared.css'>
<style type='text/css'>
body {
font-size: 12px;
color: #ffffff;
font-family: Verdana, Geneva, sans-serif;
background: #272727;
overflow-x: hidden;
}
a, a:link, a:visited, a:active, .link, .linkOn, .linkOff, .selected, .disabled {
color: #ffffff;
text-decoration: none;
background: #40628a;
border: 1px solid #161616;
cursor: pointer;
display: inline-block;
}
a:hover, .linkActive:hover {
background: #507aac;
cursor: pointer;
}
p {
text-align: center;
font-size: 11px;
margin: 0px;
}
table {
width: 560px;
text-align: center;
}
td {
width: 560px;
}
.chem-select {
width: 560px;
text-align: center;
}
.enabled {
background-color: #0a0;
}
.disabled {
background-color: #a00;
}
.shown {
display: block;
}
.hidden {
display: none;
}
</style>
<script src="jquery.min.js"></script>
<script type='text/javascript'>
function update_chemicals(chemicals) {
$('#chemicals').text(chemicals);
}
$(function() {
});
</script>
</head>
<body scroll='yes'><div id='content'>
[content]
</div></body></html>"}
return html
@@ -14,8 +14,8 @@
speed = 0
mob_biotypes = NONE
a_intent = INTENT_HARM
can_change_intents = 0
stop_automated_movement = 1
can_change_intents = FALSE
stop_automated_movement = TRUE
flying = TRUE
attack_sound = 'sound/weapons/punch1.ogg'
minbodytemp = 0
@@ -33,7 +33,7 @@
var/summoned = FALSE
var/cooldown = 0
var/damage_transfer = 1 //how much damage from each attack we transfer to the owner
var/light_on = 0
var/light_on = FALSE
var/luminosity_on = 3
var/mob/living/summoner
var/range = 10 //how far from the user the spirit can be
@@ -1,7 +1,7 @@
/mob/living/simple_animal/hostile/guardian/charger
melee_damage_lower = 15
melee_damage_upper = 15
ranged = 1 //technically
ranged = TRUE //technically
ranged_message = "charges"
ranged_cooldown_time = 40
speed = -1
@@ -10,7 +10,7 @@
magic_fluff_string = "..And draw the Hunter, an alien master of rapid assault."
tech_fluff_string = "Boot sequence complete. Charge modules loaded. Holoparasite swarm online."
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, ready to deal damage."
var/charging = 0
var/charging = FALSE
var/obj/screen/alert/chargealert
/mob/living/simple_animal/hostile/guardian/charger/Life()
@@ -31,11 +31,11 @@
Shoot(A)
/mob/living/simple_animal/hostile/guardian/charger/Shoot(atom/targeted_atom)
charging = 1
charging = TRUE
throw_at(targeted_atom, range, 1, src, 0, callback = CALLBACK(src, .proc/charging_end))
/mob/living/simple_animal/hostile/guardian/charger/proc/charging_end()
charging = 0
charging = FALSE
/mob/living/simple_animal/hostile/guardian/charger/Move()
if(charging)
@@ -69,4 +69,4 @@
shake_camera(L, 4, 3)
shake_camera(src, 2, 3)
charging = 0
charging = FALSE
@@ -14,7 +14,7 @@
projectiletype = /obj/item/projectile/guardian
ranged_cooldown_time = 5 //fast!
projectilesound = 'sound/effects/hit_on_shattered_glass.ogg'
ranged = 1
ranged = TRUE
range = 13
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
see_in_dark = 8
@@ -28,7 +28,7 @@
/mob/living/simple_animal/hostile/guardian/ranged/ToggleMode()
if(loc == summoner)
if(toggle)
ranged = 1
ranged = TRUE
melee_damage_lower = 10
melee_damage_upper = 10
obj_damage = initial(obj_damage)
@@ -40,7 +40,7 @@
to_chat(src, "<span class='danger'>You switch to combat mode.</span>")
toggle = FALSE
else
ranged = 0
ranged = FALSE
melee_damage_lower = 0
melee_damage_upper = 0
obj_damage = 0
@@ -13,7 +13,7 @@
icon_dead = "morph_dead"
speed = 1.5
a_intent = INTENT_HARM
stop_automated_movement = 1
stop_automated_movement = TRUE
status_flags = CANPUSH
pass_flags = PASSTABLE
move_resist = MOVE_FORCE_STRONG // Fat being
@@ -31,7 +31,7 @@
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
vision_range = 1 // Only attack when target is close
wander = 0
wander = FALSE
attacktext = "glomps"
attack_sound = 'sound/effects/blobattack.ogg'
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2)
@@ -16,7 +16,7 @@
return
var/datum/mind/player_mind = new /datum/mind(key_of_morph)
player_mind.active = 1
player_mind.active = TRUE
if(!GLOB.xeno_spawn)
kill()
return
@@ -23,7 +23,7 @@
maxHealth = INFINITY
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
universal_understand = 1
universal_understand = TRUE
response_help = "passes through"
response_disarm = "swings at"
response_harm = "punches"
@@ -33,8 +33,8 @@
harm_intent_damage = 0
friendly = "touches"
status_flags = 0
wander = 0
density = 0
wander = FALSE
density = FALSE
flying = TRUE
move_resist = INFINITY
mob_size = MOB_SIZE_TINY
@@ -84,7 +84,7 @@
to_chat(src, "<span class='revenboldnotice'>You are once more concealed.</span>")
if(unstun_time && world.time >= unstun_time)
unstun_time = 0
notransform = 0
notransform = FALSE
to_chat(src, "<span class='revenboldnotice'>You can move again!</span>")
update_spooky_icon()
@@ -217,7 +217,7 @@
return FALSE
to_chat(src, "<span class='revendanger'>NO! No... it's too late, you can feel your essence breaking apart...</span>")
notransform = 1
notransform = TRUE
revealed = 1
invisibility = 0
playsound(src, 'sound/effects/screech.ogg', 100, 1)
@@ -290,7 +290,7 @@
/mob/living/simple_animal/revenant/proc/stun(time)
if(time <= 0)
return
notransform = 1
notransform = TRUE
if(!unstun_time)
to_chat(src, "<span class='revendanger'>You cannot move!</span>")
unstun_time = world.time + time
@@ -429,7 +429,7 @@
visible_message("<span class='revenwarning'>[src] settles down and seems lifeless.</span>")
return
var/datum/mind/player_mind = new /datum/mind(key_of_revenant)
player_mind.active = 1
player_mind.active = TRUE
player_mind.transfer_to(R)
player_mind.assigned_role = SPECIAL_ROLE_REVENANT
player_mind.special_role = SPECIAL_ROLE_REVENANT
@@ -119,7 +119,7 @@
desc = "Telepathically transmits a message to the target."
panel = "Revenant Abilities"
charge_max = 0
clothes_req = 0
clothes_req = FALSE
action_icon_state = "r_transmit"
action_background_icon_state = "bg_revenant"
@@ -141,7 +141,7 @@
/obj/effect/proc_holder/spell/aoe_turf/revenant
clothes_req = 0
clothes_req = FALSE
action_background_icon_state = "bg_revenant"
panel = "Revenant Abilities (Locked)"
name = "Report this to a coder"
@@ -367,8 +367,8 @@
if(prob(15))
if(intact && floor_tile)
new floor_tile(src)
broken = 0
burnt = 0
broken = FALSE
burnt = FALSE
make_plating(1)
/turf/simulated/floor/plating/defile()
@@ -26,7 +26,7 @@
return
var/datum/mind/player_mind = new /datum/mind(key_of_revenant)
player_mind.active = 1
player_mind.active = TRUE
var/list/spawn_locs = list()
for(var/obj/effect/landmark/spawner/rev/R in GLOB.landmarks_list)
spawn_locs += get_turf(R)
@@ -26,8 +26,8 @@
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(mobloc)
var/atom/movable/overlay/animation = new /atom/movable/overlay(mobloc)
animation.name = "odd blood"
animation.density = 0
animation.anchored = 1
animation.density = FALSE
animation.anchored = TRUE
animation.icon = 'icons/mob/mob.dmi'
animation.icon_state = "jaunt"
animation.layer = 5
@@ -96,7 +96,7 @@
sleep(6)
if(animation)
qdel(animation)
notransform = 0
notransform = FALSE
return 1
/obj/item/bloodcrawl
@@ -120,8 +120,8 @@
var/atom/movable/overlay/animation = new /atom/movable/overlay( B.loc )
animation.name = "odd blood"
animation.density = 0
animation.anchored = 1
animation.density = FALSE
animation.anchored = TRUE
animation.icon = 'icons/mob/mob.dmi'
animation.icon_state = "jauntup" //Paradise Port:I reversed the jaunt animation so it looks like its rising up
animation.layer = 5
@@ -157,8 +157,8 @@
name = "odd blood"
icon = 'icons/effects/effects.dmi'
icon_state = "nothing"
density = 0
anchored = 1
density = FALSE
anchored = TRUE
invisibility = 60
resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
@@ -16,7 +16,7 @@
speed = 1
a_intent = INTENT_HARM
mob_biotypes = MOB_ORGANIC | MOB_HUMANOID
stop_automated_movement = 1
stop_automated_movement = TRUE
status_flags = CANPUSH
attack_sound = 'sound/misc/demon_attack1.ogg'
var/feast_sound = 'sound/misc/demon_consume.ogg'
@@ -29,7 +29,6 @@
maxHealth = 200
health = 200
environment_smash = 1
//universal_understand = 1
obj_damage = 50
melee_damage_lower = 30
melee_damage_upper = 30
@@ -50,7 +49,7 @@
You may use the blood crawl icon when on blood pools to travel through them, appearing and dissapearing from the station at will. \
Pulling a dead or critical mob while you enter a pool will pull them in with you, allowing you to feast. \
You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. </B>"
del_on_death = 1
del_on_death = TRUE
deathmessage = "screams in anger as it collapses into a puddle of viscera!"
var/datum/action/innate/demon/whisper/whisper_action
@@ -65,7 +64,7 @@
whisper_action = new()
whisper_action.Grant(src)
if(istype(loc, /obj/effect/dummy/slaughter))
bloodspell.phased = 1
bloodspell.phased = TRUE
addtimer(CALLBACK(src, .proc/attempt_objectives), 5 SECONDS)
@@ -141,7 +140,7 @@
name = "Sense Victims"
desc = "Sense the location of heretics"
charge_max = 0
clothes_req = 0
clothes_req = FALSE
cooldown_min = 0
overlay = null
action_icon_state = "bloodcrawl"
+2 -2
View File
@@ -99,7 +99,7 @@
qdel(S)
continue
var/obj/effect/landmark/nuke_spawn = get_turf(locate(/obj/effect/landmark/spawner/nuclear_bomb))
var/obj/effect/landmark/nuke_spawn = locate(/obj/effect/landmark/spawner/nuclear_bomb)
var/nuke_code = rand(10000, 99999)
var/leader_selected = 0
@@ -108,7 +108,7 @@
var/obj/machinery/nuclearbomb/syndicate/the_bomb
if(nuke_spawn && length(synd_spawn))
the_bomb = new /obj/machinery/nuclearbomb/syndicate(nuke_spawn.loc)
the_bomb = new /obj/machinery/nuclearbomb/syndicate(get_turf(nuke_spawn))
the_bomb.r_code = nuke_code
for(var/datum/mind/synd_mind in syndicates)
+3 -3
View File
@@ -16,7 +16,7 @@ GLOBAL_VAR(bomb_set)
desc = "Uh oh. RUN!!!!"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "nuclearbomb0"
density = 1
density = TRUE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
flags_2 = NO_MALF_EFFECT_2
anchored = TRUE
@@ -447,7 +447,7 @@ GLOBAL_VAR(bomb_set)
icon_state = "nuclearbomb3"
playsound(src,'sound/machines/alarm.ogg',100,0,5)
if(SSticker && SSticker.mode)
SSticker.mode.explosion_in_progress = 1
SSticker.mode.explosion_in_progress = TRUE
sleep(100)
GLOB.enter_allowed = 0
@@ -469,7 +469,7 @@ GLOBAL_VAR(bomb_set)
SSticker.mode:nuke_off_station = off_station
SSticker.station_explosion_cinematic(off_station,null)
if(SSticker.mode)
SSticker.mode.explosion_in_progress = 0
SSticker.mode.explosion_in_progress = FALSE
if(SSticker.mode.name == "nuclear emergency")
SSticker.mode:nukes_left --
else if(off_station == 1)
+3 -3
View File
@@ -134,8 +134,8 @@
desc = "You should run now."
icon = 'icons/obj/biomass.dmi'
icon_state = "rift"
density = 1
anchored = 1.0
density = TRUE
anchored = TRUE
var/spawn_path = /mob/living/simple_animal/cow //defaulty cows to prevent unintentional narsies
var/spawn_amt_left = 20
@@ -262,7 +262,7 @@ GLOBAL_LIST_EMPTY(multiverse)
slot_flags = SLOT_BELT
force = 20
throwforce = 10
sharp = 1
sharp = TRUE
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
var/faction = list("unassigned")
+3 -3
View File
@@ -2,8 +2,8 @@
name = "ragin' mages"
config_tag = "raginmages"
required_players = 20
use_huds = 1
but_wait_theres_more = 1
use_huds = TRUE
but_wait_theres_more = TRUE
var/max_mages = 0
var/making_mage = FALSE
var/mages_made = 1
@@ -78,7 +78,7 @@
make_more_mages()
else
if(wizards.len >= wizard_cap)
finished = 1
finished = TRUE
return 1
else
make_more_mages()
-4
View File
@@ -88,10 +88,6 @@
to_chat(user, "<span class='warning'>This being has no soul!</span>")
return ..()
if(M.has_brain_worms()) //Borer stuff - RR
to_chat(user, "<span class='warning'>This being is corrupted by an alien intelligence and cannot be soul trapped.</span>")
return ..()
if(jobban_isbanned(M, ROLE_CULTIST) || jobban_isbanned(M, ROLE_SYNDICATE))
to_chat(user, "<span class='warning'>A mysterious force prevents you from trapping this being's soul.</span>")
return ..()
+6 -2
View File
@@ -650,8 +650,12 @@
for(var/path in spells_path)
var/obj/effect/proc_holder/spell/S = new path()
LearnSpell(user, book, S)
OnBuy(user, book)
return TRUE
/datum/spellbook_entry/loadout/proc/OnBuy(mob/living/carbon/human/user, obj/item/spellbook/book)
return
/obj/item/spellbook
name = "spell book"
desc = "The legendary book of spells of the wizard."
@@ -902,7 +906,7 @@
/obj/item/spellbook/oneuse
var/spell = /obj/effect/proc_holder/spell/projectile/magic_missile //just a placeholder to avoid runtimes if someone spawned the generic
var/spellname = "sandbox"
var/used = 0
var/used = FALSE
name = "spellbook of "
uses = 1
desc = "This template spellbook was never meant for the eyes of man..."
@@ -937,7 +941,7 @@
user.visible_message("<span class='warning'>[src] glows in a black light!</span>")
/obj/item/spellbook/oneuse/proc/onlearned(mob/user)
used = 1
used = TRUE
user.visible_message("<span class='caution'>[src] glows dark for a second!</span>")
/obj/item/spellbook/oneuse/attackby()

Some files were not shown because too many files have changed in this diff Show More