diff --git a/SQL/feedback_schema.sql b/SQL/feedback_schema.sql deleted file mode 100644 index 3fa0f7080dd..00000000000 --- a/SQL/feedback_schema.sql +++ /dev/null @@ -1,120 +0,0 @@ -CREATE TABLE `erro_admin` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ckey` varchar(32) NOT NULL, - `rank` varchar(32) NOT NULL DEFAULT 'Administrator', - `level` int(2) NOT NULL DEFAULT '0', - `flags` int(16) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; - -CREATE TABLE `erro_admin_log` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `adminckey` varchar(32) NOT NULL, - `adminip` varchar(18) NOT NULL, - `log` text NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; - -CREATE TABLE `erro_ban` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `bantime` datetime NOT NULL, - `serverip` varchar(32) NOT NULL, - `bantype` varchar(32) NOT NULL, - `reason` text NOT NULL, - `job` varchar(32) DEFAULT NULL, - `duration` int(11) NOT NULL, - `rounds` int(11) DEFAULT NULL, - `expiration_time` datetime NOT NULL, - `ckey` varchar(32) NOT NULL, - `computerid` varchar(32) NOT NULL, - `ip` varchar(32) NOT NULL, - `a_ckey` varchar(32) NOT NULL, - `a_computerid` varchar(32) NOT NULL, - `a_ip` varchar(32) NOT NULL, - `who` text NOT NULL, - `adminwho` text NOT NULL, - `edits` text, - `unbanned` tinyint(1) DEFAULT NULL, - `unbanned_datetime` datetime DEFAULT NULL, - `unbanned_ckey` varchar(32) DEFAULT NULL, - `unbanned_computerid` varchar(32) DEFAULT NULL, - `unbanned_ip` varchar(32) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; - -CREATE TABLE `erro_feedback` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `time` datetime NOT NULL, - `round_id` int(8) NOT NULL, - `var_name` varchar(32) NOT NULL, - `var_value` int(16) DEFAULT NULL, - `details` text, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; - -CREATE TABLE `erro_player` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ckey` varchar(32) NOT NULL, - `firstseen` datetime NOT NULL, - `lastseen` datetime NOT NULL, - `ip` varchar(18) NOT NULL, - `computerid` varchar(32) NOT NULL, - `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player', - PRIMARY KEY (`id`), - UNIQUE KEY `ckey` (`ckey`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; - -CREATE TABLE `erro_poll_option` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `pollid` int(11) NOT NULL, - `text` varchar(255) NOT NULL, - `percentagecalc` tinyint(1) NOT NULL DEFAULT '1', - `minval` int(3) DEFAULT NULL, - `maxval` int(3) DEFAULT NULL, - `descmin` varchar(32) DEFAULT NULL, - `descmid` varchar(32) DEFAULT NULL, - `descmax` varchar(32) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; - -CREATE TABLE `erro_poll_question` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `polltype` varchar(16) NOT NULL DEFAULT 'OPTION', - `starttime` datetime NOT NULL, - `endtime` datetime NOT NULL, - `question` varchar(255) NOT NULL, - `adminonly` tinyint(1) DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; - -CREATE TABLE `erro_poll_textreply` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `pollid` int(11) NOT NULL, - `ckey` varchar(32) NOT NULL, - `ip` varchar(18) NOT NULL, - `replytext` text NOT NULL, - `adminrank` varchar(32) NOT NULL DEFAULT 'Player', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; - -CREATE TABLE `erro_poll_vote` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `pollid` int(11) NOT NULL, - `optionid` int(11) NOT NULL, - `ckey` varchar(255) NOT NULL, - `ip` varchar(16) NOT NULL, - `adminrank` varchar(32) NOT NULL, - `rating` int(2) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; - -CREATE TABLE `erro_privacy` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `ckey` varchar(32) NOT NULL, - `option` varchar(128) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; \ No newline at end of file diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index f22f746fa48..c05e74a467a 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -2,7 +2,7 @@ CREATE DATABASE IF NOT EXISTS `paradise` /*!40100 DEFAULT CHARACTER SET utf8 */ USE `paradise`; -- MySQL dump 10.13 Distrib 5.6.13, for Win32 (x86) -- --- Host: localhost Database: paradise +-- Host: nanotrasen.se Database: paradise -- ------------------------------------------------------ -- Server version 5.6.15-log @@ -78,20 +78,10 @@ CREATE TABLE `characters` ( `rlimb_data` mediumtext NOT NULL, `nanotrasen_relation` varchar(45) NOT NULL, `speciesprefs` int(1) NOT NULL, - `slime_color` mediumtext NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=18747 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `characters` --- - -LOCK TABLES `characters` WRITE; -/*!40000 ALTER TABLE `characters` DISABLE KEYS */; -/*!40000 ALTER TABLE `characters` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `customuseritems` -- @@ -104,23 +94,15 @@ CREATE TABLE `customuseritems` ( `cuiCKey` varchar(36) NOT NULL, `cuiRealName` varchar(60) NOT NULL, `cuiPath` varchar(255) NOT NULL, - `cuiDescription` text NOT NULL, - `cuiReason` text NOT NULL, - `cuiPropAdjust` text NOT NULL, + `cuiItemName` text, + `cuiDescription` text, + `cuiReason` text, + `cuiPropAdjust` text, `cuiJobMask` text NOT NULL, PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; +) ENGINE=MyISAM AUTO_INCREMENT=56 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `customuseritems` --- - -LOCK TABLES `customuseritems` WRITE; -/*!40000 ALTER TABLE `customuseritems` DISABLE KEYS */; -/*!40000 ALTER TABLE `customuseritems` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `death` -- @@ -145,18 +127,9 @@ CREATE TABLE `death` ( `fireloss` int(11) NOT NULL, `oxyloss` int(11) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; +) ENGINE=MyISAM AUTO_INCREMENT=166546 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `death` --- - -LOCK TABLES `death` WRITE; -/*!40000 ALTER TABLE `death` DISABLE KEYS */; -/*!40000 ALTER TABLE `death` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `erro_admin` -- @@ -171,18 +144,9 @@ CREATE TABLE `erro_admin` ( `level` int(2) NOT NULL DEFAULT '0', `flags` int(16) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; +) ENGINE=InnoDB AUTO_INCREMENT=99 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `erro_admin` --- - -LOCK TABLES `erro_admin` WRITE; -/*!40000 ALTER TABLE `erro_admin` DISABLE KEYS */; -/*!40000 ALTER TABLE `erro_admin` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `erro_admin_log` -- @@ -200,15 +164,6 @@ CREATE TABLE `erro_admin_log` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `erro_admin_log` --- - -LOCK TABLES `erro_admin_log` WRITE; -/*!40000 ALTER TABLE `erro_admin_log` DISABLE KEYS */; -/*!40000 ALTER TABLE `erro_admin_log` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `erro_ban` -- @@ -241,18 +196,9 @@ CREATE TABLE `erro_ban` ( `unbanned_computerid` varchar(32) DEFAULT NULL, `unbanned_ip` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; +) ENGINE=InnoDB AUTO_INCREMENT=10685 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `erro_ban` --- - -LOCK TABLES `erro_ban` WRITE; -/*!40000 ALTER TABLE `erro_ban` DISABLE KEYS */; -/*!40000 ALTER TABLE `erro_ban` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `erro_feedback` -- @@ -268,18 +214,9 @@ CREATE TABLE `erro_feedback` ( `var_value` int(16) DEFAULT NULL, `details` text, PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; +) ENGINE=MyISAM AUTO_INCREMENT=257638 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `erro_feedback` --- - -LOCK TABLES `erro_feedback` WRITE; -/*!40000 ALTER TABLE `erro_feedback` DISABLE KEYS */; -/*!40000 ALTER TABLE `erro_feedback` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `erro_player` -- @@ -307,18 +244,9 @@ CREATE TABLE `erro_player` ( `volume` smallint(4) DEFAULT '100', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; +) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `erro_player` --- - -LOCK TABLES `erro_player` WRITE; -/*!40000 ALTER TABLE `erro_player` DISABLE KEYS */; -/*!40000 ALTER TABLE `erro_player` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `erro_poll_option` -- @@ -340,15 +268,6 @@ CREATE TABLE `erro_poll_option` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `erro_poll_option` --- - -LOCK TABLES `erro_poll_option` WRITE; -/*!40000 ALTER TABLE `erro_poll_option` DISABLE KEYS */; -/*!40000 ALTER TABLE `erro_poll_option` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `erro_poll_question` -- @@ -367,15 +286,6 @@ CREATE TABLE `erro_poll_question` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `erro_poll_question` --- - -LOCK TABLES `erro_poll_question` WRITE; -/*!40000 ALTER TABLE `erro_poll_question` DISABLE KEYS */; -/*!40000 ALTER TABLE `erro_poll_question` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `erro_poll_textreply` -- @@ -395,15 +305,6 @@ CREATE TABLE `erro_poll_textreply` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `erro_poll_textreply` --- - -LOCK TABLES `erro_poll_textreply` WRITE; -/*!40000 ALTER TABLE `erro_poll_textreply` DISABLE KEYS */; -/*!40000 ALTER TABLE `erro_poll_textreply` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `erro_poll_vote` -- @@ -424,15 +325,6 @@ CREATE TABLE `erro_poll_vote` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `erro_poll_vote` --- - -LOCK TABLES `erro_poll_vote` WRITE; -/*!40000 ALTER TABLE `erro_poll_vote` DISABLE KEYS */; -/*!40000 ALTER TABLE `erro_poll_vote` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `erro_privacy` -- @@ -446,18 +338,9 @@ CREATE TABLE `erro_privacy` ( `ckey` varchar(32) NOT NULL, `option` varchar(128) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; +) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `erro_privacy` --- - -LOCK TABLES `erro_privacy` WRITE; -/*!40000 ALTER TABLE `erro_privacy` DISABLE KEYS */; -/*!40000 ALTER TABLE `erro_privacy` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `karma` -- @@ -477,18 +360,9 @@ CREATE TABLE `karma` ( `spenderip` text NOT NULL, `time` datetime NOT NULL, PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; +) ENGINE=MyISAM AUTO_INCREMENT=73614 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `karma` --- - -LOCK TABLES `karma` WRITE; -/*!40000 ALTER TABLE `karma` DISABLE KEYS */; -/*!40000 ALTER TABLE `karma` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `karmatotals` -- @@ -502,18 +376,9 @@ CREATE TABLE `karmatotals` ( `karma` int(11) NOT NULL, `karmaspent` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; +) ENGINE=MyISAM AUTO_INCREMENT=6765 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `karmatotals` --- - -LOCK TABLES `karmatotals` WRITE; -/*!40000 ALTER TABLE `karmatotals` DISABLE KEYS */; -/*!40000 ALTER TABLE `karmatotals` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `library` -- @@ -527,19 +392,11 @@ CREATE TABLE `library` ( `title` text NOT NULL, `content` text NOT NULL, `category` text NOT NULL, + `ckey` varchar(45) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; +) ENGINE=MyISAM AUTO_INCREMENT=929 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `library` --- - -LOCK TABLES `library` WRITE; -/*!40000 ALTER TABLE `library` DISABLE KEYS */; -/*!40000 ALTER TABLE `library` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `population` -- @@ -553,18 +410,9 @@ CREATE TABLE `population` ( `admincount` int(11) DEFAULT NULL, `time` datetime NOT NULL, PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; +) ENGINE=MyISAM AUTO_INCREMENT=2550 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Dumping data for table `population` --- - -LOCK TABLES `population` WRITE; -/*!40000 ALTER TABLE `population` DISABLE KEYS */; -/*!40000 ALTER TABLE `population` ENABLE KEYS */; -UNLOCK TABLES; - -- -- Table structure for table `whitelist` -- @@ -578,17 +426,8 @@ CREATE TABLE `whitelist` ( `job` text, `species` text, PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; +) ENGINE=MyISAM AUTO_INCREMENT=877 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `whitelist` --- - -LOCK TABLES `whitelist` WRITE; -/*!40000 ALTER TABLE `whitelist` DISABLE KEYS */; -/*!40000 ALTER TABLE `whitelist` ENABLE KEYS */; -UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; @@ -599,4 +438,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2014-11-19 1:24:17 +-- Dump completed on 2015-05-28 19:57:44 diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql deleted file mode 100644 index b7e2e501ce1..00000000000 --- a/SQL/tgstation_schema.sql +++ /dev/null @@ -1,100 +0,0 @@ -SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; -SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; -SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; - -CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ; -CREATE SCHEMA IF NOT EXISTS `tgstation` DEFAULT CHARACTER SET latin1 ; -USE `mydb` ; -USE `tgstation` ; - --- ----------------------------------------------------- --- Table `tgstation`.`death` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `tgstation`.`death` ( - `id` INT(11) NOT NULL AUTO_INCREMENT , - `pod` TEXT NOT NULL COMMENT 'Place of death' , - `coord` TEXT NOT NULL COMMENT 'X, Y, Z POD' , - `tod` DATETIME NOT NULL COMMENT 'Time of death' , - `job` TEXT NOT NULL , - `special` TEXT NOT NULL , - `name` TEXT NOT NULL , - `byondkey` TEXT NOT NULL , - `laname` TEXT NOT NULL COMMENT 'Last attacker name' , - `lakey` TEXT NOT NULL COMMENT 'Last attacker key' , - `gender` TEXT NOT NULL , - `bruteloss` INT(11) NOT NULL , - `brainloss` INT(11) NOT NULL , - `fireloss` INT(11) NOT NULL , - `oxyloss` INT(11) NOT NULL , - PRIMARY KEY (`id`) ) -ENGINE = MyISAM -AUTO_INCREMENT = 3409 -DEFAULT CHARACTER SET = latin1; - - --- ----------------------------------------------------- --- Table `tgstation`.`karma` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `tgstation`.`karma` ( - `id` INT(11) NOT NULL AUTO_INCREMENT , - `spendername` TEXT NOT NULL , - `spenderkey` TEXT NOT NULL , - `receivername` TEXT NOT NULL , - `receiverkey` TEXT NOT NULL , - `receiverrole` TEXT NOT NULL , - `receiverspecial` TEXT NOT NULL , - `isnegative` TINYINT(1) NOT NULL , - `spenderip` TEXT NOT NULL , - `time` DATETIME NOT NULL , - PRIMARY KEY (`id`) ) -ENGINE = MyISAM -AUTO_INCREMENT = 943 -DEFAULT CHARACTER SET = latin1; - - --- ----------------------------------------------------- --- Table `tgstation`.`karmatotals` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `tgstation`.`karmatotals` ( - `id` INT(11) NOT NULL AUTO_INCREMENT , - `byondkey` TEXT NOT NULL , - `karma` INT(11) NOT NULL , - PRIMARY KEY (`id`) ) -ENGINE = MyISAM -AUTO_INCREMENT = 244 -DEFAULT CHARACTER SET = latin1; - - --- ----------------------------------------------------- --- Table `tgstation`.`library` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `tgstation`.`library` ( - `id` INT(11) NOT NULL AUTO_INCREMENT , - `author` TEXT NOT NULL , - `title` TEXT NOT NULL , - `content` TEXT NOT NULL , - `category` TEXT NOT NULL , - PRIMARY KEY (`id`) ) -ENGINE = MyISAM -AUTO_INCREMENT = 184 -DEFAULT CHARACTER SET = latin1; - - --- ----------------------------------------------------- --- Table `tgstation`.`population` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `tgstation`.`population` ( - `id` INT(11) NOT NULL AUTO_INCREMENT , - `playercount` INT(11) NULL DEFAULT NULL , - `admincount` INT(11) NULL DEFAULT NULL , - `time` DATETIME NOT NULL , - PRIMARY KEY (`id`) ) -ENGINE = MyISAM -AUTO_INCREMENT = 2544 -DEFAULT CHARACTER SET = latin1; - - - -SET SQL_MODE=@OLD_SQL_MODE; -SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; -SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 7613a856d58..e62aa126eab 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -3562,7 +3562,7 @@ "bqz" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqA" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqB" = (/turf/simulated/floor/carpet,/area/crew_quarters/captain) -"bqC" = (/mob/living/simple_animal/fox/Renault,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bqC" = (/mob/living/simple_animal/pet/fox/Renault,/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bqD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bqE" = (/obj/structure/table/woodentable,/obj/machinery/camera{c_tag = "Captain's Office"; dir = 8; network = list("SS13")},/obj/item/weapon/storage/lockbox/medal,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqF" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Central Hall East APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central/east) @@ -4021,7 +4021,7 @@ "bzq" = (/obj/machinery/mecha_part_fabricator,/obj/effect/decal/warning_stripes/north,/turf/simulated/floor,/area/assembly/robotics) "bzr" = (/obj/machinery/mecha_part_fabricator,/obj/effect/decal/warning_stripes/northeast,/turf/simulated/floor,/area/assembly/robotics) "bzs" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) -"bzt" = (/mob/living/simple_animal/corgi/Ian/borgi,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) +"bzt" = (/mob/living/simple_animal/pet/corgi/Ian/borgi,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bzu" = (/obj/machinery/ai_status_display{pixel_x = 32; pixel_y = 0},/obj/structure/table,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bzv" = (/obj/structure/closet/firecloset,/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/research{name = "Research Division"}) "bzw" = (/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -4339,7 +4339,7 @@ "bFw" = (/obj/machinery/computer/card,/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/crew_quarters/heads) "bFx" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/crew_quarters/heads) "bFy" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/crew_quarters/heads) -"bFz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor/carpet,/area/crew_quarters/heads) +"bFz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/mob/living/simple_animal/pet/corgi/Ian,/turf/simulated/floor/carpet,/area/crew_quarters/heads) "bFA" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/crew_quarters/heads) "bFB" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "Gravity Generator APC"; pixel_x = -24},/turf/simulated/floor,/area/engine/gravitygenerator) "bFC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/gravitygenerator) @@ -5101,7 +5101,7 @@ "bUe" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/cmo) "bUf" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/cmo) "bUg" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/cmo) -"bUh" = (/obj/machinery/power/apc{dir = 4; name = "CMO Office APC"; pixel_x = 25},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/mob/living/simple_animal/cat/Runtime,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/cmo) +"bUh" = (/obj/machinery/power/apc{dir = 4; name = "CMO Office APC"; pixel_x = 25},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/mob/living/simple_animal/pet/cat/Runtime,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/cmo) "bUi" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay2) "bUj" = (/turf/simulated/wall,/area/medical/medbreak) "bUk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light{dir = 1; on = 1},/obj/machinery/door_control{id = "staffroom"; name = "Staff Room Privacy Shutters Control"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/medbreak) @@ -6114,18 +6114,18 @@ "cnD" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/toxins/xenobiology) "cnE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{name = "Xenobiology Research"; req_access_txt = "47"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cnF" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/toxins/xenobiology) -"cnG" = (/obj/structure/closet/bombcloset,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{dir = 9; icon_state = "whitepurple"},/area/toxins/misc_lab) -"cnH" = (/obj/structure/closet/secure_closet/scientist,/obj/machinery/newscaster{pixel_y = 34},/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/toxins/misc_lab) -"cnI" = (/obj/structure/closet/secure_closet/scientist,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/toxins/misc_lab) -"cnJ" = (/obj/machinery/light{dir = 1; on = 1},/obj/machinery/power/apc{dir = 1; name = "Testing Lab APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/toxins/misc_lab) -"cnK" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = 0},/obj/item/clothing/ears/earmuffs,/obj/machinery/camera{c_tag = "Research Test Lab North"; dir = 2; network = list("Research","SS13"); pixel_x = 0},/turf/simulated/floor{dir = 5; icon_state = "whitepurple"},/area/toxins/misc_lab) -"cnL" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cnM" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/chem_heater,/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cnN" = (/obj/machinery/chem_dispenser,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cnO" = (/obj/machinery/chem_master,/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cnP" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/toxins/misc_lab) -"cnQ" = (/turf/simulated/floor,/area/toxins/misc_lab) -"cnR" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "caution"; dir = 4},/area/toxins/misc_lab) +"cnG" = (/obj/structure/closet/bombcloset,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cnH" = (/obj/structure/closet/secure_closet/scientist,/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cnI" = (/obj/structure/closet/secure_closet/scientist,/obj/machinery/camera{c_tag = "Research Test Lab West"; dir = 2; network = list("Research","SS13"); pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cnJ" = (/obj/machinery/alarm{hidden = 1; pixel_y = 22},/obj/structure/table,/obj/item/device/radio/electropack,/obj/item/device/assembly/signaler,/obj/item/device/healthanalyzer,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cnK" = (/obj/machinery/power/apc{dir = 1; name = "Testing Lab APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cnL" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/ears/earmuffs,/obj/item/device/multitool,/obj/item/clothing/ears/earmuffs,/obj/structure/sign/poster/legit{pixel_y = 32},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cnM" = (/obj/structure/table,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cnN" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/warning_stripes/yellow,/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cnO" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cnP" = (/obj/machinery/chem_dispenser,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"cnQ" = (/obj/machinery/chem_heater,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"cnR" = (/obj/machinery/newscaster{pixel_y = 34},/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) "cnS" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cnT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cnU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6183,18 +6183,18 @@ "coU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "coV" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "coW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/toxins/misc_lab) -"coX" = (/obj/structure/closet/l3closet/scientist,/turf/simulated/floor{dir = 8; icon_state = "whitepurple"},/area/toxins/misc_lab) +"coX" = (/obj/machinery/chem_master,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) "coY" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) -"coZ" = (/obj/structure/stool{pixel_y = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) -"cpa" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table,/obj/item/device/radio/electropack,/obj/item/device/healthanalyzer,/obj/item/device/assembly/signaler,/turf/simulated/floor{dir = 4; icon_state = "whitepurple"},/area/toxins/misc_lab) -"cpb" = (/obj/machinery/chem_heater,/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cpc" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = -32; pixel_y = 30},/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cpd" = (/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cpe" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cpf" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cpg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/toxins/misc_lab) -"cph" = (/obj/machinery/magnetic_module,/obj/structure/target_stake,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) -"cpi" = (/turf/simulated/floor{icon_state = "caution"; dir = 4},/area/toxins/misc_lab) +"coZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cpa" = (/obj/machinery/chem_heater,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"cpb" = (/turf/simulated/floor{dir = 8; icon_state = "whitepurplecorner"},/area/toxins/misc_lab) +"cpc" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"cpd" = (/obj/effect/decal/warning_stripes/west,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"cpe" = (/obj/structure/stool/bed/chair/office/light{dir = 4},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"cpf" = (/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"cpg" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cph" = (/obj/machinery/chem_dispenser,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"cpi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitepurple"},/area/toxins/misc_lab) "cpj" = (/turf/simulated/wall/r_wall,/area/solar/starboard) "cpk" = (/obj/machinery/door/airlock/engineering{name = "Aft Starboard Solar Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/solar/starboard) "cpl" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/solar/starboard) @@ -6241,16 +6241,16 @@ "cqa" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cqb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cqc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"cqd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/research{name = "Test Lab"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) -"cqe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitepurple"},/area/toxins/misc_lab) +"cqd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/research{name = "Test Lab"; req_access_txt = "7"},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cqe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; initialize_directions = 10; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "cqf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; initialize_directions = 10; level = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) -"cqg" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) -"cqh" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) -"cqi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table,/obj/machinery/cell_charger,/obj/item/stack/cable_coil,/obj/item/device/multitool,/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor{dir = 4; icon_state = "whitepurple"},/area/toxins/misc_lab) -"cqj" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cqk" = (/obj/structure/table,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter{pixel_x = 2; pixel_y = 2},/obj/item/device/assembly/igniter{pixel_x = -3; pixel_y = 3},/obj/item/device/assembly/igniter{pixel_x = -4; pixel_y = -4},/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cql" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/toxins/misc_lab) -"cqm" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) +"cqg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cqh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cqi" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cqj" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cqk" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/reagentgrinder,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"cql" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitepurplecorner"},/area/toxins/misc_lab) +"cqm" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "cqn" = (/obj/machinery/power/apc{dir = 8; name = "Aft Starboard Solar APC"; pixel_x = -26; pixel_y = 3},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/solar/starboard) "cqo" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/solar/starboard) "cqp" = (/obj/machinery/power/smes{charge = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/solar/starboard) @@ -6291,13 +6291,13 @@ "cqY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/disposalpipe/wrapsortjunction{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cqZ" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cra" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/toxins/misc_lab) -"crb" = (/obj/structure/rack,/obj/item/clothing/mask/gas{pixel_x = -2; pixel_y = -2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = 2; pixel_y = 2},/turf/simulated/floor{dir = 10; icon_state = "whitepurple"},/area/toxins/misc_lab) -"crc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/toxins/misc_lab) -"crd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; initialize_directions = 10; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/toxins/misc_lab) -"cre" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/toxins/misc_lab) -"crf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/turf/simulated/floor{dir = 6; icon_state = "whitepurple"},/area/toxins/misc_lab) +"crb" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"crc" = (/obj/structure/rack,/obj/item/clothing/mask/gas{pixel_x = 2; pixel_y = 2},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"crd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/closet/l3closet/scientist,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cre" = (/obj/structure/closet/l3closet/scientist,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"crf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "crg" = (/obj/structure/piano,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"crh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/toxins/misc_lab) +"crh" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/secure_closet/research_reagents,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) "cri" = (/obj/structure/stool,/obj/machinery/camera{c_tag = "Aft Starboard Solar Control"; dir = 4; network = list("SS13")},/turf/simulated/floor/plating,/area/solar/starboard) "crj" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/solar/starboard) "crk" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/solar/starboard) @@ -6355,16 +6355,16 @@ "csk" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "csl" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/toxins/xenobiology) "csm" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = -24; pixel_y = 0; req_access_txt = "55"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xeno_airlock_exterior"; locked = 1; name = "Xenobiology External Airlock"; req_access_txt = "55"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"csn" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) -"cso" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) -"csp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) -"csq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) -"csr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/toxins/misc_lab) -"css" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"cst" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"csu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; initialize_directions = 10; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"csv" = (/obj/structure/table,/obj/item/stack/sheet/mineral/plasma,/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) -"csw" = (/obj/machinery/camera{c_tag = "Research Test Lab Firing Range"; dir = 8; network = list("Research","SS13")},/turf/simulated/floor{icon_state = "caution"; dir = 4},/area/toxins/misc_lab) +"csn" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cso" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"csp" = (/obj/machinery/atmospherics/pipe/simple/insulated{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"csq" = (/obj/structure/stool/bed/chair/office/light,/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"csr" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"css" = (/obj/machinery/atmospherics/binary/pump/highcap{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cst" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"csu" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/mineral/plasma{amount = 5; layer = 2.9},/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"csv" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper/precision,/obj/item/weapon/reagent_containers/dropper/precision,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) +"csw" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/insulated,/obj/machinery/ignition_switch{id = "testigniter"; pixel_x = 3; pixel_y = -3},/obj/machinery/door_control{id = "RnDChem"; name = "Chamber Blast Doors"; pixel_x = 3; pixel_y = 5},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "csx" = (/obj/machinery/power/solar_control{id = "starboardsolar"; name = "Aft Starboard Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/solar/starboard) "csy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_xeno_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "10;13"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/solar/starboard) "csz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/solar/starboard) @@ -6421,16 +6421,15 @@ "cty" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor{dir = 9; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/toxins/xenobiology) "ctz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "ctA" = (/obj/structure/closet/emcloset,/obj/machinery/camera/xray{c_tag = "Xenobiology Access"; network = list("Research","SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/toxins/xenobiology) -"ctB" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor,/area/toxins/misc_lab) -"ctC" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4; initialize_directions = 11; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/toxins/misc_lab) -"ctD" = (/obj/structure/stool/bed/chair/office/light,/obj/effect/landmark/start{name = "Scientist"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor,/area/toxins/misc_lab) -"ctE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/toxins/misc_lab) -"ctF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/toxins/misc_lab) -"ctG" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) -"ctH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) -"ctI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) -"ctJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) -"ctK" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/turf/simulated/floor{icon_state = "dark"},/area/toxins/misc_lab) +"ctB" = (/obj/structure/table/reinforced,/obj/item/device/taperecorder,/obj/item/device/tape/random{pixel_x = 3; pixel_y = -3},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"ctC" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"ctD" = (/obj/machinery/atmospherics/pipe/simple/hidden/green{dir = 4; level = 2},/turf/simulated/wall/r_wall,/area/toxins/test_chamber) +"ctE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "RnDChem"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/glass_research{name = "Test Chamber"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"ctF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "RnDChem"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/grille,/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/insulated,/turf/simulated/floor/engine,/area/toxins/misc_lab) +"ctG" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "RnDChem"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/grille,/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 1},/turf/simulated/floor/engine,/area/toxins/misc_lab) +"ctH" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/toxins/misc_lab) +"ctJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/engine{icon_state = "stage_stairs"; name = "reinforced stairs"},/area/toxins/test_chamber) +"ctK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/sparker{id = "testigniter"; name = "Test Igniter"; pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/test_chamber) "ctL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/solar/starboard) "ctM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_xeno_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/solar/starboard) "ctN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/solar/starboard) @@ -6483,18 +6482,17 @@ "cuI" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) "cuJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cuK" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cuL" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor,/area/toxins/misc_lab) -"cuM" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor,/area/toxins/misc_lab) -"cuN" = (/obj/structure/table,/obj/machinery/ignition_switch{id = "testigniter"; pixel_x = -6; pixel_y = 2},/obj/machinery/door_control{id = "testlab"; name = "Test Chamber Blast Door"; pixel_x = 4; pixel_y = 2},/turf/simulated/floor,/area/toxins/misc_lab) -"cuO" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder,/obj/item/weapon/folder,/obj/item/weapon/pen,/obj/item/device/taperecorder,/turf/simulated/floor,/area/toxins/misc_lab) -"cuP" = (/obj/machinery/light_switch{pixel_x = 27; pixel_y = 0},/obj/structure/table,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper/precision,/obj/item/weapon/reagent_containers/dropper/precision,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) -"cuQ" = (/obj/structure/rack,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber."; layer = 4; name = "Test Chamber Camera Screen"; network = list("TestChamber"); pixel_x = 0; pixel_y = -32},/obj/item/pipe,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"; pixel_x = 2; pixel_y = 2},/turf/simulated/floor,/area/toxins/misc_lab) -"cuR" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/toxins/misc_lab) -"cuS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/toxins/misc_lab) -"cuT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/toxins/misc_lab) -"cuU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/reinforced,/obj/effect/decal/warning_stripes/east,/obj/machinery/recharger,/turf/simulated/floor,/area/toxins/misc_lab) -"cuV" = (/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/toxins/misc_lab) -"cuW" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/reinforced,/obj/effect/decal/warning_stripes/west,/obj/machinery/magnetic_controller{autolink = 1; name = "Firing Range Control Console"; path = "w;e;e;w;s;n;n;s"; pixel_x = 0; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/toxins/misc_lab) +"cuL" = (/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/engine,/area/toxins/test_chamber) +"cuM" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/engine,/area/toxins/test_chamber) +"cuO" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/engine,/area/toxins/test_chamber) +"cuP" = (/obj/machinery/light{dir = 8},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/engine,/area/toxins/test_chamber) +"cuQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = -30},/obj/structure/table,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cuR" = (/obj/structure/table/reinforced,/obj/machinery/alarm{dir = 1; hidden = 1; icon_state = "alarm0"; pixel_y = -22},/obj/item/clothing/mask/gas,/turf/simulated/floor/engine,/area/toxins/test_chamber) +"cuS" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/power/apc{dir = 2; name = "Test Chamber APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/engine,/area/toxins/test_chamber) +"cuT" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/closet/firecloset,/obj/machinery/camera{c_tag = "Research Test Chamber East"; dir = 4; network = list("Research","SS13"); pixel_y = -22},/obj/structure/sign/fire{pixel_y = -32},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cuU" = (/obj/machinery/light,/obj/machinery/computer/security/telescreen{desc = "Used for watching the horrors within the test chamber."; name = "Research Monitor"; network = list("TestChamber"); pixel_x = 0; pixel_y = -32},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"cuV" = (/obj/machinery/camera{c_tag = "Research Test Chamber"; dir = 2; network = list("TestChamber","SS13","Research"); pixel_x = 0},/turf/simulated/floor/engine,/area/toxins/test_chamber) +"cuW" = (/mob/living/carbon/human/monkey,/turf/simulated/floor/engine,/area/toxins/test_chamber) "cuX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/solar/starboard) "cuY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_xeno_pump"; tag_exterior_door = "solar_xeno_outer"; frequency = 1379; id_tag = "solar_xeno_airlock"; tag_interior_door = "solar_xeno_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_xeno_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_xeno_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "solar_xeno_pump"},/turf/simulated/floor/plating,/area/solar/starboard) "cuZ" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/radio{pixel_y = 6},/turf/simulated/floor,/area/engine/mechanic_workshop) @@ -6551,18 +6549,10 @@ "cvY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cvZ" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/toxins/xenobiology) "cwa" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/toxins/test_chamber) -"cwb" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "testlab"; name = "Test Chamber Blast Door"; opacity = 0},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced,/turf/simulated/floor/engine,/area/toxins/test_chamber) -"cwc" = (/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "testlab"; name = "Test Chamber Blast Door"; opacity = 0},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced,/turf/simulated/floor/engine,/area/toxins/test_chamber) -"cwd" = (/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "testlab"; name = "Test Chamber Blast Door"; opacity = 0},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 4},/turf/simulated/floor/engine,/area/toxins/test_chamber) +"cwb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/engine,/area/toxins/test_chamber) +"cwc" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/engine,/area/toxins/test_chamber) +"cwd" = (/obj/structure/table/reinforced,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/weapon/clipboard,/obj/item/weapon/hand_labeler,/turf/simulated/floor/engine,/area/toxins/test_chamber) "cwe" = (/turf/simulated/wall/r_wall,/area/toxins/test_chamber) -"cwf" = (/obj/effect/decal/warning_stripes/yellow,/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/toxins/misc_lab) -"cwg" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/warning_stripes/yellow,/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/toxins/misc_lab) -"cwh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/toxins/misc_lab) -"cwi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/toxins/misc_lab) -"cwj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/glass_research{name = "Firing Range"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/misc_lab) -"cwk" = (/obj/effect/decal/warning_stripes/northeastcorner,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/toxins/misc_lab) -"cwl" = (/obj/effect/decal/warning_stripes/north,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor,/area/toxins/misc_lab) -"cwm" = (/obj/effect/decal/warning_stripes/northwestcorner,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/toxins/misc_lab) "cwn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/solar/starboard) "cwo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_xeno_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/solar/starboard) "cwp" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/space) @@ -6628,15 +6618,8 @@ "cxx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cxy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/toxins/xenobiology) "cxz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = -28; pixel_y = 8; req_access_txt = "55"},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xeno_airlock_interior"; locked = 1; name = "Xenobiology Internal Airlock"; req_access_txt = "55"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"cxA" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/engine,/area/toxins/test_chamber) "cxB" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1443; icon_state = "on"; id = "air_in"; on = 1},/turf/simulated/floor/engine,/area/toxins/test_chamber) "cxC" = (/turf/simulated/floor/engine,/area/toxins/test_chamber) -"cxD" = (/obj/machinery/power/apc{dir = 4; name = "Testing Chamber APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/engine,/area/toxins/test_chamber) -"cxE" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor,/area/toxins/misc_lab) -"cxF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/toxins/misc_lab) -"cxG" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor,/area/toxins/misc_lab) -"cxH" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor,/area/toxins/misc_lab) -"cxI" = (/obj/structure/rack,/obj/item/weapon/gun/energy/laser/practice,/obj/item/clothing/ears/earmuffs,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/turf/simulated/floor,/area/toxins/misc_lab) "cxJ" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_xeno_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/starboard) "cxK" = (/turf/space,/area/xenos_station/southwest) "cxL" = (/turf/simulated/wall/r_wall,/area/maintenance/aft) @@ -6698,11 +6681,6 @@ "cyP" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{tag_exterior_door = "xeno_airlock_exterior"; id_tag = "xeno_airlock_control"; tag_interior_door = "xeno_airlock_interior"; name = "Xenobiology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/turf/simulated/floor{dir = 4; icon_state = "whitegreencorner"},/area/toxins/xenobiology) "cyQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/toxins/xenobiology) "cyR" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Xenobiology APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "whitegreencorner"},/area/toxins/xenobiology) -"cyS" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/engine,/area/toxins/test_chamber) -"cyT" = (/obj/machinery/light_switch{pixel_x = 27; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/engine,/area/toxins/test_chamber) -"cyU" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{frequency = 1449; id_tag = "testchamber_access_control"; name = "Test Chamber Access Console"; pixel_x = -26; pixel_y = 6; req_access_txt = "47"; tag_exterior_door = "testchamber_airlock_exterior"; tag_interior_door = "testchamber_airlock_interior"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/misc_lab) -"cyV" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/camera{c_tag = "Research Test Lab South"; dir = 8; network = list("Research","SS13")},/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/misc_lab) -"cyW" = (/turf/simulated/floor{tag = "icon-rampbottom"; icon_state = "rampbottom"},/area/toxins/misc_lab) "cyX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/starboard) "cyY" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) "cyZ" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk2"; icon_state = "catwalk2"},/area/solar/port) @@ -6743,16 +6721,7 @@ "czI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "czJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "czK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"czL" = (/obj/machinery/sparker{id = "testigniter"; name = "Test Igniter"; pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/test_chamber) "czM" = (/obj/item/device/radio/beacon,/turf/simulated/floor/engine,/area/toxins/test_chamber) -"czN" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/engine,/area/toxins/test_chamber) -"czO" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "testlab"; name = "Test Chamber Blast Door"; opacity = 0},/obj/machinery/door/airlock/glass_research{frequency = 1449; icon_state = "door_locked"; id_tag = "testchamber_airlock_exterior"; locked = 1; name = "Test Chamber Exterior Airlock"; req_access_txt = "47"},/obj/machinery/access_button{command = "cycle_exterior"; layer = 3.1; master_tag = "testchamber_access_control"; name = "Test Chamber Airlock Control"; pixel_x = 0; pixel_y = -23},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/toxins/test_chamber) -"czP" = (/obj/effect/decal/warning_stripes/yellow,/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/toxins/test_chamber) -"czQ" = (/obj/effect/decal/warning_stripes/yellow,/obj/machinery/door/airlock/glass_research{frequency = 1449; icon_state = "door_locked"; id_tag = "testchamber_airlock_interior"; locked = 1; name = "Test Chamber Interior Airlock"; req_access_txt = "47"},/obj/machinery/access_button{command = "cycle_interior"; master_tag = "testchamber_access_control"; name = "Test Chamber Airlock Control"; pixel_x = 0; pixel_y = -22},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/toxins/test_chamber) -"czR" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{icon_state = "white"; temperature = 273.15},/area/toxins/misc_lab) -"czS" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "white"; temperature = 273.15},/area/toxins/misc_lab) -"czT" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/toxins/misc_lab) -"czU" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/toxins/misc_lab) "czV" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/port) "czW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/aft) "czX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/assembly/assembly_line) @@ -6798,13 +6767,6 @@ "cAL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cAM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cAN" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"cAO" = (/obj/machinery/light,/obj/machinery/camera{c_tag = "Research Test Chamber"; dir = 1; network = list("TestChamber","Research","SS13"); pixel_x = 0},/turf/simulated/floor/engine,/area/toxins/test_chamber) -"cAP" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/turf/simulated/floor/engine,/area/toxins/test_chamber) -"cAQ" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/engine,/area/toxins/test_chamber) -"cAR" = (/obj/structure/closet/firecloset,/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/toxins/misc_lab) -"cAS" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/toxins/misc_lab) -"cAT" = (/obj/structure/closet/crate,/obj/item/target/alien,/obj/item/target/alien,/obj/item/target/alien,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/toxins/misc_lab) -"cAU" = (/obj/structure/closet/crate,/obj/item/target/syndicate,/obj/item/target/syndicate,/obj/item/target/syndicate,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/toxins/misc_lab) "cAV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/aft) "cAW" = (/obj/structure/closet,/turf/simulated/floor{icon_state = "floorgrime"},/area/assembly/assembly_line) "cAX" = (/turf/simulated/floor,/area/assembly/assembly_line) @@ -6859,8 +6821,6 @@ "cBU" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cBV" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cBW" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"cBX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/misc_lab) -"cBY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/misc_lab) "cBZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/aft) "cCa" = (/obj/structure/table,/obj/structure/sign/poster{pixel_x = -32},/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/assembly/assembly_line) "cCb" = (/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/assembly/assembly_line) @@ -8067,8 +8027,6 @@ "cZg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/aisat/maintenance) "cZh" = (/turf/space,/area/shuttle/derelict/ship/station) "cZi" = (/obj/structure/table,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/tape_roll,/obj/item/stack/tape_roll,/turf/simulated/floor,/area/engine/equipmentstorage) -"cZj" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/wood,/area/clownoffice) -"cZm" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/closet/secure_closet/research_reagents,/turf/simulated/floor,/area/toxins/misc_lab) "cZn" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 9},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) "cZo" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/alarm{dir = 1; hidden = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server) "cZp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/wall/r_wall,/area/toxins/server_coldroom) @@ -8237,21 +8195,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciBaaaaabaabciCciCciCciCciCciCciDciCbTCcdbciEaaaciFciGciHciIciJciKciLciMciNciOciPciQciRciSciTciUciVciWciXciYciZchLcjacjbcjbcjbcjcchMbHTbHTcjdcjdcjdcjdcjecjdcjfcjfcjgcjdcjdcjhcjdcjicjjcjkcjlcjkcjmcjncjocjpcjqbuXbuXcjrcjscjtcjucjvcjwcjxcbScaAcaAcjycaAcjzcaAcjAcjBcjCcjDcjEcjFcjGcjHcjIcjJcjKcjLcjIbvWcgYcjMbvWcjNcjOcjPcjQbvWbvWbvWbvWbvWbvWbvWbvWcjRcjSbNlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNbWHbWHbWHbWHbWHbWHceDbWHciAbWHbWHbWHbWHbWHbUNbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjTcjUcjUcjUcjVcjWcjXcjYcjZckackbckcckdcdbckeaaackfckgckhckickjciKckkcklckmcknchBckoceTbZUchFckpcgockqcgockrckscktckuckvckvckvckwchMbHTbHTcjdckxckyckzckAckBckCckCckDckEckFckGckHckIckJckKcdXcdXckLckMckNckOckPaaaaaacjvckQckRckScjrckTckUckVckWckWckXbGickYckZclaclbckZckZckZclcckZckZcldcleclfclgclhclicljclkbWycllclmbWybWybWybWyclnclobWybWybWybWyclpbvWclqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNbUNccYbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclrclsclsclsclscltcluclvclwclxclxclyclzclAceIckeaaackfclBclCclDclEclFclGclHclEclEclIclJclKclLclMclMclNclOcgoclPclQclRckvckvckvckvclSchMbHTbHTcjdclTclUclVclWclXclYclYclZcmacmbcmccmdcmecjdcmfcdTcmgbEDcmhckNcmickPaaaaaacjvcmjcmkcmlcjvbHUcmmcmncmncmncmncmncmncmocmpcmqcmrcmscmscmtcmucmscmvcmwcmxcmycmzcmAcmBcmCcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAbvWcmDbvWbOIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZEbUNbUNcgbcgbbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcmFcmGcmHcmGcmIcmJcmKcmLcmLcmMclzcmNcdbckeaaackfcmOcmPcmQcmRciKcmScmTcmUcmVchBckoceTcmWcmXceVcmYcmZcnacnbcnccndcneckvckvcnfcngchMbHTcnhcjdcnicnjcnkcnlcnlcnlcnmcnncnlcnlcnocnkcnpcnqcnrcdTcnsbEDcntckNcnuckPaaaaaacjvcnvcnwcnxcjvcnybHTcnhcnzcnzcnzcnzcnzcnAcnBcnCcnzcnzaaaaaaaaaaaacjIcnDcnEcnFcmAcnGcnHcnIcnJcnKcmAcnLcnMcnNcnOcmzcnPcnQcnRcmAcnScnTcnUcnVcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnXcnYbUNbYcbUNbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaacmEcnZcoacobcocclwcodclwcoeclwcofcogcohcoicojaaacokciGcolciIcomciKciKconcoocopcoqcorcoscotcouceVcovcowcoxcoycozchLcoAckvckvckvcoBchMbHTbHTcoCcoCcoDcoEcoFcoGcoHcoCcoIcoJcoKcoLcoMcoDcoNcmfcdTcmgbEDcoOckNckOckPaaaaaacjvcoPcoQcoRcjvbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoScoTcoUcoVcoWcoXcoYcoYcoZcpacpbcpccpdcpecpfcpgcnQcphcpicpjcpjcpkcplcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNcpmcpncpobUNbUNbWHbWHcppbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcpqcmGcprcmGcpscptcpucpvcmKcpwclzcpxcdbccZaaaaaaaaaaaachucpycpzcpAcpAchBcpBchBcpCceTbZUcpDcpEcpFcpGcpHcpHcpHcpIcpJckvcpKckvcpLchMbHTbHTcoCcpMcpNcpOcpPcpQcpRcoCcpQcpRcpPcpScpTcpUcoNcnrcpVcnsbEDcpWckNcpXckPcnzcnzcjvcjvcjvcjvcjvcpYbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpZcqacqbcqccqdcqecqfcqgcqhcqicnNcqjcpdcpdcqkcqlcnQcqmcpicpjcqncqocqpcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqqcqrcqsbYdbUMbUNbUNbWHbWIbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUabCcqtcqtcqtcqtcqtcqtcqtcqtcqucqucqucqucquciCclzclzclzclzclzclzcqvcqwcqxcqxcqxcqxcqxchuchBchBchBchBchBchBchBcqyceTbZUcqzcqAcqBcqCcqDcqEcqFcqGcqHcqIcqJcqKcqLchMbHTbHTcoCcqMcqNcpOcpPcpPcqOcoCcqPcpPcpPcpScpOcqQcoNbEDbEDbEDcqRcqSckNcqTckPcqUbHTbHTbHTbHTcqVbHTbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqWcqXcqYcqZcracrbcrccrdcrecrfcnOcpdcpdcpdctKcrhcnQcnQcpicpjcricrjcrkcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrlbUKbUKbULbUMbUMbUNbUNbUNbUNbUOaabaabaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmcrncrocrpcrqcrqcrrcrscrtcrucrvcrwcrxcrycrzcrzcrzcrAcrBcrCcrDcrDcrEcrFcrGcrHcrIcrHcrHcrHcrGcrHcrHcrJcrKcrLcrMceTbZUcrNcrPcrOcrQceVcrRclMcrScrTcrUcrVcrWcrXcrYbHTbHTcoCcrZcsacsbcsccsdcsecoCcsfcsdcsgcshcsbcsicoNbHTbHTbHTcsjcoOckNcoOcskbHTbHTbHTbHTbHTbHTbHTbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacslcjIcsmcjLcslcsncsocspcsqcsrcsscstcsscsucsvcmzcnQcnQcswcpjcsxcsycszcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmcrncsAcsBcsCcsBcsDcsEcsFcsGcsHcsIcsHcsJcsKcsKcsKcsKceTbZVbZVbZVcsKcsLcsKcsKcsKcsKcsKcsKcsKcsKcsKcsKcsMcsNcsOcsPcsQcsRcsScsTcsUcsVcsWcsXcsYcsZctactbctcctdctecmnctfctgcthctictjctkcpPctlcoCctmcpPctkctncpOctocoNctpcmscmsctqctrctscttckPctuctvctvctwcnzcnzcnzctxctvcnCcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjIctyctzctAcjIctBctCctDctEctFctGctHctIctJcuPcmzcnQcnQcpicpjctLctMctNctOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmctPcsBctQctRctSctTctUctVctWctXctYctZcuacubcuccudcudcuecdqcufcdqcubcugcubcubcubcubcubcubcubcubcubcubcuhcsKcuicujcukculcumcuncuocupcuqcurcuscutcuucuvcuwcuxcrVcdzcuycuzcuAcpPcpOcpPcpPcuBcuCcuDcpPcpPcpScpOcuEcoNcuFcnzaaacuGckPcuHckPckPaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjIcjIcjIcjIcjIcjIcjIcjIcjIcuIcuJcuKcjIcuLcuMcuNcuOcuQcZmcuRcnQcuScnQcuTcuUcuVcuWcpjcuXcuYcuXaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUabCcqtcqtcqtcqtcqtcqtcuZcvacvacvbcsHcvccqtcqxcvdcvecvecvfcvecvgcvecvecvhcvicvecvecvjcvkcvicvecvecvecvecvlcvmcvncvocvpcvqcvrcvscvtcvscvscvucvscvvcvwcvxcvycvzcrYbHTcuFcvAcvBcvCcvDcvEcvFcvGcoCcvHcvFcvIcpScvJcvKcoNcuFcnzaaacuGcvLcvMcvNckPaaaaaaaaaaaacvOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjIcvPcvQcvRcvScvTcvUcvVcvWcvXcvYcvZcjIcwacwbcwccwdcwecwecwfcwgcwhcwicwjcwkcwlcwmcpjcwncwocwnaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczaczakSakSaczakSakSakSalwakSakSaabalwawTaaaaabaabcwpcwpcwpcqtcwqcwrcwscwtcwucwvcwwcwxcwycwzcwAcwBcwCcwDcwEcwFcwGcwHcwIcvecwHcwJcwKcwLcwLcwMcvecwNcwOcwPcwQbZUcwRcwScwTcwUcwVcwWcwVcwXcwYcwZcxacxbcxccrYcrYcuFcvAcoNcoNcxdcoNcoNcxecxfcxgcxgcxgcxhcxgcxicxgcxjcnzaaacuGcxkcvMcxlckPcxmcxncxncxockPckPcxpcxqcxqcxrcxqcxqcxrcxsaaaaaacjIcxtcxucxtcxvcxwcqacxxcvWcxycxzcxycjIcxAcxBcxCcxCcxDcwecxEcwgcxFcnQcuTcxGcxHcxIcmAaaacxJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaabaabaaaaabaabaaaaaaaabaabaabaaaawTaaaaaaaaaaabaabcwpcqtcqtcqtcqtcqtcqtcqtcqtcxLcwycxMcxNcxOcxPcxQcxQcxQcxQcxRcxScxTcwLcxUcwLcwLcxVcwLcxWcxXcxYcxZcwQbZUcyacybcyccwUcydcyecyfcwUcygcyhcyicyjcykcylcymcyncyocypcypcyqcyrcyscytcyucdzcdzcdzcyvbHTbHTcbRbHTcnzaaacuGcywcvMcyxcyycyzcyAcyBcyCcyDcyEcyFcyDcyEcyGcyDcyHcyIcyJaaaaaacjIcxtcxtcxtcyKcyLcyMcyNcyOcyPcyQcyRcjIcyScxCcxCcxCcyTcwecwecwecyUcyVcmAcmzcyWcmzcmAaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaczaaacyYcyZczaaaacyYcyZczaaaacyYcyZczaaabczbaabaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaczccwycxMczdcwLcxVczecwLcwLcwLczfcwLczdczdcwLcwLcwLcwLczgczhcxXczicsKczjbZUcybcybczkcwUczlczmczncwUczoctaczpczqczrczscztcbSbHTczucbSczubHTbHTbHTcuFczvcnzctxctvctvctvcnCcnzcnzaaaczwczxczycjqczzczAcoOcoOczBczCczDczEczCczDczEczCczDczEcyJaaaaabcjIcvWcvWcvWcvWczFcqaczGczHczIczJczKcjIczLcxCczMcxCczNczOczPczQczRczScmAczTczTczUcmAaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaczaaacyYczVczaaaacyYczVczaaaacyYczVczaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabczWcwyczXczdczYcwLczZcAacAbcAbcxUcwLczdcAccwLcwLcwLcwLcAdcAecAfcAgbYxcAhcAicAjcAkcAlcwUczlcAmcAncwUcAoctacrYcApcrVcAqcArcAscAtcAucAvcAwcAtcAtcAtcAxcAtcnzaaaaaaaaaaaaaaaaaaaabaaacuGcAycvMcAzcAAcABcoOcoOczBcACcADcAEcAFcADcAEcAFcADcAGcyJaabaabcjIcvPcvQcvRcAHcAIcyMcAJcAKcALcAMcANcjIcxCcxCcAOcAPcAQcwecwecwecARcARcmAcAScATcAUcmAaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaagaaaaaaaaaakSaabcyYczVczaaaacyYczVczaaabcyYczVczaaabaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaaaaaacAVcwycvecAWcwLcAXcAYcAZcBacBbcBacBccBacBdcBecwHcBfczdczdczhcBgcBhcBicBjcBkcBlcBmcBncBocBpcBqcBrcBscBtcBucBvcBvcBwcBxcBycBzcBAcBBcBCcBDcBEcBFcBGcBHcBIaabaaaaaaaaaaaaaaaaaaaabaabczwcBJcBKcBLcBMcBNcoOcoOcoOcBOcoOcoOcoOcoOcoOcoOcoOcBPcBQaaaaaacjIcxtcxtcxtcBRcxwcqacBScBTcBUcBVcBWcjIcjIcjIcjIcjIcwecwecmAcmAcBXcBYcmAcmAcmAcmAcmAaaacyXaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaabaaacyYczVczaaabcyYczVczaaaacyYczVczaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaaaaabaabaaaaaacxLcBZcvecCacCbcCbcCccvecvecvecvecvecvecvecvecvecvecvecvecvecCdcCecCdcCfcCdcqxcCgcChcCicCjcCkcClcCmcCncBucCocCpcCqcCrcCscCtcCucCvcCwcCxcCycCzcCAcCBcCCaabcCDcCDcCDcCDcCDaaaaaaaabcuGcCEcvMcCFcCGcCHcCIcoOcoOcCJcoOcoOcoOcoOcoOcCKcoOcCLcCMaaaaaacjIcxtcxtcxtcAHcCNcyMcCOcCPcCQcCRcCScCTcCUcCVcCWcjIaabaabaaaaabaabaabaabaaaaaaaaaaaaaaacyXaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaaacyYczVczaaabcyYczVczaaaacyYczVczaaabaaaaaaaaaaaaaaaaaaaaaaaaaabcCXcCYcCYcCYcCYcxLcCZcwycDacDbcDccDccDdcDecDfcDgcDgcDgcDgcDhcDicDjcDicDicDkcDkcDicDlcDmcDncDocDocDpcDqcDrcDscDtcDucDucDvcDwcDxcDycDzcDAcCscDBcCucDCcDDcDEcDFcDGcDHcDIcDJcDKcDLcDMcDNcDOcCDaaaaaacDPcDQcDRcDScDTcDRcDUcDVcDWcDXcDYcDZcEacDYcEbcEccEdcEecEfcyJaaaaaacjIcvWcvWcvWcvWcEgcqacBScEhcEicBVcEjcEkcElcEmcEncEocEpaabaabaabaaaaaaaaaaaaaaaaaaaaaaaacyXaabaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcmFcmGcmHcmGcmIcmJcmKcmLcmLcmMclzcmNcdbckeaaackfcmOcmPcmQcmRciKcmScmTcmUcmVchBckoceTcmWcmXceVcmYcmZcnacnbcnccndcneckvckvcnfcngchMbHTcnhcjdcnicnjcnkcnlcnlcnlcnmcnncnlcnlcnocnkcnpcnqcnrcdTcnsbEDcntckNcnuckPaaaaaacjvcnvcnwcnxcjvcnybHTcnhcnzcnzcnzcnzcnzcnAcnBcnCcnzcnzaaaaaaaaaaaacjIcnDcnEcnFcmAcnGcnIcnHcnKcnJcnMcnLcnOcnNcnQcnPcoXcnRcpacmAcnScnTcnUcnVcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnXcnYbUNbYcbUNbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaacmEcnZcoacobcocclwcodclwcoeclwcofcogcohcoicojaaacokciGcolciIcomciKciKconcoocopcoqcorcoscotcouceVcovcowcoxcoycozchLcoAckvckvckvcoBchMbHTbHTcoCcoCcoDcoEcoFcoGcoHcoCcoIcoJcoKcoLcoMcoDcoNcmfcdTcmgbEDcoOckNckOckPaaaaaacjvcoPcoQcoRcjvbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoScoTcoUcoVcoWcpbcoYcoYcoZcoYcoYcoYcoYcoYcpdcpccpfcpecphcpjcpjcpkcplcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNcpmcpncpobUNbUNbWHbWHcppbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcpqcmGcprcmGcpscptcpucpvcmKcpwclzcpxcdbccZaaaaaaaaaaaachucpycpzcpAcpAchBcpBchBcpCceTbZUcpDcpEcpFcpGcpHcpHcpHcpIcpJckvcpKckvcpLchMbHTbHTcoCcpMcpNcpOcpPcpQcpRcoCcpQcpRcpPcpScpTcpUcoNcnrcpVcnsbEDcpWckNcpXckPcnzcnzcjvcjvcjvcjvcjvcpYbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpZcqacqbcqccqdcpicqfcqhcpgcoYcoYcqjcoYcoYcpdcpfcpfcpfcoXcpjcqncqocqpcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqqcqrcqsbYdbUMbUNbUNbWHbWIbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUabCcqtcqtcqtcqtcqtcqtcqtcqtcqucqucqucqucquciCclzclzclzclzclzclzcqvcqwcqxcqxcqxcqxcqxchuchBchBchBchBchBchBchBcqyceTbZUcqzcqAcqBcqCcqDcqEcqFcqGcqHcqIcqJcqKcqLchMbHTbHTcoCcqMcqNcpOcpPcpPcqOcoCcqPcpPcpPcpScpOcqQcoNbEDbEDbEDcqRcqSckNcqTckPcqUbHTbHTbHTbHTcqVbHTbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqWcqXcqYcqZcracqlcqgcqecqicoYcoYcoYcoYcqmcrhcrbcsvcsucqkcpjcricrjcrkcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrlbUKbUKbULbUMbUMbUNbUNbUNbUNbUOaabaabaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmcrncrocrpcrqcrqcrrcrscrtcrucrvcrwcrxcrycrzcrzcrzcrAcrBcrCcrDcrDcrEcrFcrGcrHcrIcrHcrHcrHcrGcrHcrHcrJcrKcrLcrMceTbZUcrNcrPcrOcrQceVcrRclMcrScrTcrUcrVcrWcrXcrYbHTbHTcoCcrZcsacsbcsccsdcsecoCcsfcsdcsgcshcsbcsicoNbHTbHTbHTcsjcoOckNcoOcskbHTbHTbHTbHTbHTbHTbHTbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacslcjIcsmcjLcslcrccrecrdcuQcrfcsocsncoYcoYcsqcspcsscsrcstcpjcsxcsycszcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmcrncsAcsBcsCcsBcsDcsEcsFcsGcsHcsIcsHcsJcsKcsKcsKcsKceTbZVbZVbZVcsKcsLcsKcsKcsKcsKcsKcsKcsKcsKcsKcsKcsMcsNcsOcsPcsQcsRcsScsTcsUcsVcsWcsXcsYcsZctactbctcctdctecmnctfctgcthctictjctkcpPctlcoCctmcpPctkctncpOctocoNctpcmscmsctqctrctscttckPctuctvctvctwcnzcnzcnzctxctvcnCcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjIctyctzctAcjIcmAcmAcmAcmAcmAcmAcuTcsncuUctBcswctCcmAcmAcpjctLctMctNctOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmctPcsBctQctRctSctTctUctVctWctXctYctZcuacubcuccudcudcuecdqcufcdqcubcugcubcubcubcubcubcubcubcubcubcubcuhcsKcuicujcukculcumcuncuocupcuqcurcuscutcuucuvcuwcuxcrVcdzcuycuzcuAcpPcpOcpPcpPcuBcuCcuDcpPcpPcpScpOcuEcoNcuFcnzaaacuGckPcuHckPckPaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjIcjIcjIcjIcjIcjIcjIcjIcjIcuIcuJcuKcjIaabaabaaaaaaaabcmAcmActEcmActGctFctHcmAaaaaaacuXcuYcuXaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUabCcqtcqtcqtcqtcqtcqtcuZcvacvacvbcsHcvccqtcqxcvdcvecvecvfcvecvgcvecvecvhcvicvecvecvjcvkcvicvecvecvecvecvlcvmcvncvocvpcvqcvrcvscvtcvscvscvucvscvvcvwcvxcvycvzcrYbHTcuFcvAcvBcvCcvDcvEcvFcvGcoCcvHcvFcvIcpScvJcvKcoNcuFcnzaaacuGcvLcvMcvNckPaaaaaaaaaaaacvOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjIcvPcvQcvRcvScvTcvUcvVcvWcvXcvYcvZcjIaabaaaaaaaaaaabaabcwectJcuVcxCcxBcwacweaaaaaacwncwocwnaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczaczakSakSaczakSakSakSalwakSakSaabalwawTaaaaabaabcwpcwpcwpcqtcwqcwrcwscwtcwucwvcwwcwxcwycwzcwAcwBcwCcwDcwEcwFcwGcwHcwIcvecwHcwJcwKcwLcwLcwMcvecwNcwOcwPcwQbZUcwRcwScwTcwUcwVcwWcwVcwXcwYcwZcxacxbcxccrYcrYcuFcvAcoNcoNcxdcoNcoNcxecxfcxgcxgcxgcxhcxgcxicxgcxjcnzaaacuGcxkcvMcxlckPcxmcxncxncxockPckPcxpcxqcxqcxrcxqcxqcxrcxsaaaaaacjIcxtcxucxtcxvcxwcqacxxcvWcxycxzcxycjIaaaaaaaaaaaaaaaaaacwecwbcuWcxCcxCcwccweaaaaaaaaacxJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaabaabaaaaabaabaaaaaaaabaabaabaaaawTaaaaaaaaaaabaabcwpcqtcqtcqtcqtcqtcqtcqtcqtcxLcwycxMcxNcxOcxPcxQcxQcxQcxQcxRcxScxTcwLcxUcwLcwLcxVcwLcxWcxXcxYcxZcwQbZUcyacybcyccwUcydcyecyfcwUcygcyhcyicyjcykcylcymcyncyocypcypcyqcyrcyscytcyucdzcdzcdzcyvbHTbHTcbRbHTcnzaaacuGcywcvMcyxcyycyzcyAcyBcyCcyDcyEcyFcyDcyEcyGcyDcyHcyIcyJaaaaaacjIcxtcxtcxtcyKcyLcyMcyNcyOcyPcyQcyRcjIaaaaaaaaaaaaaaaaaacwectKcxCczMcxCcuLcweaaaaaaaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaczaaacyYcyZczaaaacyYcyZczaaaacyYcyZczaaabczbaabaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaczccwycxMczdcwLcxVczecwLcwLcwLczfcwLczdczdcwLcwLcwLcwLczgczhcxXczicsKczjbZUcybcybczkcwUczlczmczncwUczoctaczpczqczrczscztcbSbHTczucbSczubHTbHTbHTcuFczvcnzctxctvctvctvcnCcnzcnzaaaczwczxczycjqczzczAcoOcoOczBczCczDczEczCczDczEczCczDczEcyJaaaaabcjIcvWcvWcvWcvWczFcqaczGczHczIczJczKcjIaabaaaaaaaaaaaaaaacwecuPcuMcxCcxCcuOctDcEpaaaaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaczaaacyYczVczaaaacyYczVczaaaacyYczVczaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabczWcwyczXczdczYcwLczZcAacAbcAbcxUcwLczdcAccwLcwLcwLcwLcAdcAecAfcAgbYxcAhcAicAjcAkcAlcwUczlcAmcAncwUcAoctacrYcApcrVcAqcArcAscAtcAucAvcAwcAtcAtcAtcAxcAtcnzaaaaaaaaaaaaaaaaaaaabaaacuGcAycvMcAzcAAcABcoOcoOczBcACcADcAEcAFcADcAEcAFcADcAGcyJaabaabcjIcvPcvQcvRcAHcAIcyMcAJcAKcALcAMcANcjIaabaabaabaabaabaaacwecwecuScuRcwdcwecweaaaaaaaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaagaaaaaaaaaakSaabcyYczVczaaaacyYczVczaaabcyYczVczaaabaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaaaaaacAVcwycvecAWcwLcAXcAYcAZcBacBbcBacBccBacBdcBecwHcBfczdczdczhcBgcBhcBicBjcBkcBlcBmcBncBocBpcBqcBrcBscBtcBucBvcBvcBwcBxcBycBzcBAcBBcBCcBDcBEcBFcBGcBHcBIaabaaaaaaaaaaaaaaaaaaaabaabczwcBJcBKcBLcBMcBNcoOcoOcoOcBOcoOcoOcoOcoOcoOcoOcoOcBPcBQaaaaaacjIcxtcxtcxtcBRcxwcqacBScBTcBUcBVcBWcjIcjIcjIcjIcjIaabaaaaaacwecwecwecwecweaaaaaaaaaaaacyXaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaabaaacyYczVczaaabcyYczVczaaaacyYczVczaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaaaaabaabaaaaaacxLcBZcvecCacCbcCbcCccvecvecvecvecvecvecvecvecvecvecvecvecvecCdcCecCdcCfcCdcqxcCgcChcCicCjcCkcClcCmcCncBucCocCpcCqcCrcCscCtcCucCvcCwcCxcCycCzcCAcCBcCCaabcCDcCDcCDcCDcCDaaaaaaaabcuGcCEcvMcCFcCGcCHcCIcoOcoOcCJcoOcoOcoOcoOcoOcCKcoOcCLcCMaaaaaacjIcxtcxtcxtcAHcCNcyMcCOcCPcCQcCRcCScCTcCUcCVcCWcjIaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaaacyYczVczaaabcyYczVczaaaacyYczVczaaabaaaaaaaaaaaaaaaaaaaaaaaaaabcCXcCYcCYcCYcCYcxLcCZcwycDacDbcDccDccDdcDecDfcDgcDgcDgcDgcDhcDicDjcDicDicDkcDkcDicDlcDmcDncDocDocDpcDqcDrcDscDtcDucDucDvcDwcDxcDycDzcDAcCscDBcCucDCcDDcDEcDFcDGcDHcDIcDJcDKcDLcDMcDNcDOcCDaaaaaacDPcDQcDRcDScDTcDRcDUcDVcDWcDXcDYcDZcEacDYcEbcEccEdcEecEfcyJaaaaaacjIcvWcvWcvWcvWcEgcqacBScEhcEicBVcEjcEkcElcEmcEncEocEpaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaabaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaaaaabaaaaabaabcEqaabaabaabcEqaabaaaaabcEqaabaaaaaaaaaaaaaaaaaaaaaaaacErcEscEtcEucEvcEwcExcEycEzcEAcDacDacEBcECcvecvecEDcEEcEEcEEcEEcEFcEGcEHcEGcEGcEGcDocDocEIcEJcEKcELcEMcDucENcDrcDucDucDucDucEOcBucEPcEQcCqcDAcCscDAcERcDCcDDcEScETcEUcEVcEWcEXaabcEYcEZcDOcFacCDaaaaaaaaacDQcFbcFccFdcDRcFecFfcFgcFhcFiczEczDcFicFjcFkcFlczEczDcyJaaaaaacjIcvPcvQcvRcFmcAIcyMcFncFocFpcEmcFqcFrcFscFtcFucjIaabaabaagaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaabaaaaaaaaaaabaabaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaakSaabcFvcFwcFwcFxcFycFzcFzcFzcFycFzcFzcFzcFycFzcFzcFAcFwcFwcFwcFwcFwcFBcFCcFDcFEcFFcFGcFHcFIcFJceHcwycFKcDacvecvecvecFLcEDcEEcFMcFNcFOcFPcFQcFRcFScFTcFUcFVcFWcFXcFYcFZcGacGbcGccGdcDrcGecDucDucDucGfcBucGgcGgcDAcGhcGicGjcGkcGlcGmcGncGocGpcGqcGrcDJcGscDLcGtcDOcDOcCDaaaaaaaabcDQcGucFccGvcDRcGwcGxcCIcGycFicGzcGAcFicGBcGCcFlcGzcGDcyJaaaaaacjIcxtcxucxtcGEcxwcqacGFcFocGGcqacqacGHcvWcvWcvWcjIaaaaaaaaaaaaamjamjamjawTaabaabaabaabcGIaabaabaabaabaabalwamjamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaaaaabaaaaabaabcGJaabaaaaabcGJaabaaaaabcGJaabaaaaaaaaaaaaaaaaaaaaaaaacErcEscGKcGLcGMcGNcCYcGOceHcGPcEzcEzcEzcEzcGQcEzcFJcEEcGRcGScGTcGUcGVcGWcGXcGYcGZcHacHbcHccHdcHecHfcHgcHhcDqcDrcZicHjcDucDucHkcBucHlcHmcDAcHncCscHocHpcHqcHrcHscHtcHucHvcHucHwaabcCDcCDcCDcCDcCDaabaabaabcHxcHycFccGvcDRcHzcHAcHBcHCcHDcHEcHFcHFcHGcHFcHHcHIcDRcHJaaaaaacjIcxtcxtcxtcFmcHKcHLcHMcHNcHOcCTcCTcCTcHPcHQcHRcHSaaaaaaaaaaaaamjaaaaabaaaaabaaaaaaaaacHTaaaaabaabaaaaaaaaaaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 43eaa37cc76..8c41e8e8626 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -780,7 +780,7 @@ "oZ" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/grass/brown,/turf/unsimulated/floor{tag = "icon-gravsnow_corner (EAST)"; icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 4},/area/syndicate_mothership) "pa" = (/obj/structure/noticeboard{pixel_x = -32},/obj/item/weapon/paper/syndimemo,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pb" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) -"pc" = (/mob/living/simple_animal/fox/Syndifox,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) +"pc" = (/mob/living/simple_animal/pet/fox/Syndifox,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pd" = (/obj/effect/decal/warning_stripes/southeastcorner,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pe" = (/obj/effect/decal/warning_stripes/south,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pf" = (/obj/machinery/door/airlock/centcom{name = "Study"; opacity = 1; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) diff --git a/_maps/map_files/cyberiad/z8.dmm b/_maps/map_files/cyberiad/z8.dmm index 5bb901489ad..41fe6d642c8 100644 --- a/_maps/map_files/cyberiad/z8.dmm +++ b/_maps/map_files/cyberiad/z8.dmm @@ -211,7 +211,7 @@ "ec" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/tox) "ed" = (/obj/machinery/atmospherics/pipe/tank/oxygen{dir = 8; volume = 20000},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/tox) "ee" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/traitor/tox) -"ef" = (/mob/living/simple_animal/cat/Syndi,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/hall) +"ef" = (/mob/living/simple_animal/pet/cat/Syndi,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/hall) "eg" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/hall) "eh" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/tox) "ei" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/traitor/hall) @@ -622,3 +622,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 5b561406f23..df4737591a9 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -128,3 +128,5 @@ #define LIGHT_COLOR_PINK "#FF33CC" #define LIGHT_COLOR_WHITE "#FFFFFF" + +#define RESIZE_DEFAULT_SIZE 1 \ No newline at end of file diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 75253e430e4..5aec63c8129 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -81,7 +81,7 @@ var/forumurl = "http://baystation12.net/forums/" var/media_base_url = "http://nanotrasen.se/media" // http://ss13.nexisonline.net/media - + var/overflow_server_url var/forbid_singulo_possession = 0 //game_options.txt configs @@ -154,6 +154,8 @@ var/starlight = 0 // Whether space turfs have ambient light or not var/allow_holidays = 0 + var/player_overflow_cap = 0 //number of players before the server starts rerouting + var/list/overflow_whitelist = list() //whitelist for overflow /datum/configuration/New() var/list/L = typesof(/datum/game_mode) - /datum/game_mode @@ -508,6 +510,13 @@ var/vvalue = text2num(value) config.starlight = vvalue >= 0 ? vvalue : 0 + if("player_reroute_cap") + var/vvalue = text2num(value) + config.player_overflow_cap = vvalue >= 0 ? vvalue : 0 + + if("overflow_server_url") + config.overflow_server_url = value + else diary << "Unknown setting in configuration: '[name]'" @@ -645,6 +654,19 @@ else diary << "Unknown setting in configuration: '[name]'" +/datum/configuration/proc/loadoverflowwhitelist(filename) + var/list/Lines = file2list(filename) + for(var/t in Lines) + if(!t) continue + + t = trim(t) + if (length(t) == 0) + continue + else if (copytext(t, 1, 2) == "#") + continue + + config.overflow_whitelist += t + /datum/configuration/proc/pick_mode(mode_name) // I wish I didn't have to instance the game modes in order to look up // their information, but it is the only way (at least that I know of). diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 5d5b7588355..a0ca40d98ca 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1416,7 +1416,7 @@ datum/mind ..() mind.assigned_role = "Animal" -/mob/living/simple_animal/corgi/mind_initialize() +/mob/living/simple_animal/pet/corgi/mind_initialize() ..() mind.assigned_role = "Corgi" diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 0002ce9f496..8e73f62d3ce 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -857,24 +857,28 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine name = "Corgi Crate" cost = 50 containertype = /obj/structure/closet/critter/corgi + contains = list(/obj/item/clothing/accessory/petcollar) containername = "corgi crate" /datum/supply_packs/organic/cat name = "Cat Crate" cost = 50 //Cats are worth as much as corgis. containertype = /obj/structure/closet/critter/cat + contains = list(/obj/item/clothing/accessory/petcollar) containername = "cat crate" /datum/supply_packs/organic/pug name = "Pug Crate" cost = 50 containertype = /obj/structure/closet/critter/pug + contains = list(/obj/item/clothing/accessory/petcollar) containername = "pug crate" /datum/supply_packs/organic/fox name = "Fox Crate" cost = 55 //Foxes are cool. containertype = /obj/structure/closet/critter/fox + contains = list(/obj/item/clothing/accessory/petcollar) containername = "fox crate" /datum/supply_packs/organic/butterfly diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index ed0383660a9..80fc51c35ae 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -101,7 +101,10 @@ /proc/carp_migration() // -- Darem for(var/obj/effect/landmark/C in landmarks_list) if(C.name == "carpspawn") - new /mob/living/simple_animal/hostile/carp(C.loc) + if(prob(95)) + new /mob/living/simple_animal/hostile/carp(C.loc) + else + new /mob/living/simple_animal/hostile/carp/megacarp(C.loc) //sleep(100) spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes. command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert", new_sound = 'sound/AI/commandreport.ogg') diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 9915608946d..576dc2dfc5e 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -108,8 +108,8 @@ Made by Xhuis finalize_shadowling(shadow) process_shadow_objectives(shadow) //give_shadowling_abilities(shadow) - spawn (rand(waittime_l, waittime_h)) - send_intercept() + spawn (rand(waittime_l, waittime_h)) + send_intercept() ..() return diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 906610f32af..ec0abe5a60b 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -127,10 +127,10 @@ var/global/datum/controller/occupations/job_master if(istype(job, GetJob("Civilian"))) // We don't want to give him assistant, that's boring! continue - if(job in command_positions) //If you want a command position, select it! + if(job.title in command_positions) //If you want a command position, select it! continue - if(job in whitelisted_positions) // No random whitelisted job, sorry! + if(job.title in whitelisted_positions) // No random whitelisted job, sorry! continue if(jobban_isbanned(player, job.title)) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 29746472c85..80c4d5dfea7 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -252,6 +252,7 @@ update_flag if (src.health <= 10) var/atom/location = src.loc location.assume_air(air_contents) + air_update_turf() src.destroyed = 1 playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index c472711e159..bf18a7e5111 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1216,7 +1216,7 @@ /obj/item/clothing/accessory/scarf/purple=1,/obj/item/clothing/accessory/scarf/yellow=1,/obj/item/clothing/accessory/scarf/orange=1, /obj/item/clothing/accessory/scarf/lightblue=1,/obj/item/clothing/accessory/scarf/white=1,/obj/item/clothing/accessory/scarf/black=1, /obj/item/clothing/accessory/scarf/zebra=1,/obj/item/clothing/accessory/scarf/christmas=1,/obj/item/clothing/accessory/stripedredscarf=1, - /obj/item/clothing/accessory/stripedbluescarf=1,/obj/item/clothing/accessory/stripedgreenscarf=1,/obj/item/clothing/accessory/waistcoat=1, + /obj/item/clothing/accessory/stripedbluescarf=1,/obj/item/clothing/accessory/stripedgreenscarf=1,/obj/item/clothing/accessory/petcollar =3,/obj/item/clothing/accessory/waistcoat=1, /obj/item/clothing/under/sundress=2,/obj/item/clothing/under/stripeddress = 1, /obj/item/clothing/under/sailordress = 1, /obj/item/clothing/under/redeveninggown = 1, /obj/item/clothing/under/blacktango=1,/obj/item/clothing/suit/jacket=3, /obj/item/clothing/glasses/regular=2,/obj/item/clothing/head/sombrero=1,/obj/item/clothing/suit/poncho=1, /obj/item/clothing/suit/ianshirt=1,/obj/item/clothing/shoes/laceup=2,/obj/item/clothing/shoes/black=4, diff --git a/code/game/objects/items/random_items.dm b/code/game/objects/items/random_items.dm index d5f13d33c47..1d63ff3e972 100644 --- a/code/game/objects/items/random_items.dm +++ b/code/game/objects/items/random_items.dm @@ -301,12 +301,12 @@ attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/crowbar)) - var/mob/living/simple_animal/cat/Cat1 = new(loc) + var/mob/living/simple_animal/pet/cat/Cat1 = new(loc) Cat1.apply_damage(250)//,TOX) Cat1.name = "Schrodinger's Cat" Cat1.desc = "It seems it's been dead for a while." - var/mob/living/simple_animal/cat/Cat2 = new(loc) + var/mob/living/simple_animal/pet/cat/Cat2 = new(loc) Cat2.name = "Schrodinger's Cat" Cat2.desc = "It's was alive the whole time!" sleep(2) diff --git a/code/game/objects/items/weapons/grenades.dm b/code/game/objects/items/weapons/grenades.dm index 5a1c01584a5..43acc8df89b 100644 --- a/code/game/objects/items/weapons/grenades.dm +++ b/code/game/objects/items/weapons/grenades.dm @@ -389,7 +389,7 @@ /obj/item/weapon/grenade/clusterbuster/fluffy name = "Fluffy Love Bomb" desc = "Exactly as snuggly as it sounds." - payload = /mob/living/simple_animal/corgi/puppy + payload = /mob/living/simple_animal/pet/corgi/puppy /obj/item/weapon/grenade/clusterbuster/prime() var/numspawned = rand(4,8) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 58cf919b1e7..983b4dc6042 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -53,6 +53,7 @@ new /obj/item/clothing/suit/armor/vest(src) new /obj/item/weapon/gun/energy/gun(src) new /obj/item/device/flash(src) + new /obj/item/clothing/accessory/petcollar(src) return /obj/structure/closet/secure_closet/hop2 diff --git a/code/game/objects/structures/crates_lockers/crittercrate.dm b/code/game/objects/structures/crates_lockers/crittercrate.dm index cdbdacde644..0b9fa2a6425 100644 --- a/code/game/objects/structures/crates_lockers/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/crittercrate.dm @@ -42,11 +42,11 @@ /obj/structure/closet/critter/corgi name = "corgi crate" - content_mob = /mob/living/simple_animal/corgi + content_mob = /mob/living/simple_animal/pet/corgi /obj/structure/closet/critter/corgi/New() if(prob(50)) - content_mob = /mob/living/simple_animal/corgi/Lisa + content_mob = /mob/living/simple_animal/pet/corgi/Lisa ..() /obj/structure/closet/critter/cow @@ -67,20 +67,20 @@ /obj/structure/closet/critter/cat name = "cat crate" - content_mob = /mob/living/simple_animal/cat + content_mob = /mob/living/simple_animal/pet/cat /obj/structure/closet/critter/cat/New() if(prob(50)) - content_mob = /mob/living/simple_animal/cat/Proc + content_mob = /mob/living/simple_animal/pet/cat/Proc ..() /obj/structure/closet/critter/pug name = "pug crate" - content_mob = /mob/living/simple_animal/pug + content_mob = /mob/living/simple_animal/pet/pug /obj/structure/closet/critter/fox name = "fox crate" - content_mob = /mob/living/simple_animal/fox + content_mob = /mob/living/simple_animal/pet/fox /obj/structure/closet/critter/butterfly name = "butterflies crate" diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 6d2a5be7a11..4c1a4c8ab88 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -55,7 +55,7 @@ /obj/structure/largecrate/lisa/attackby(obj/item/weapon/W as obj, mob/user as mob) //ugly but oh well if(istype(W, /obj/item/weapon/crowbar)) - new /mob/living/simple_animal/corgi/Lisa(loc) + new /mob/living/simple_animal/pet/corgi/Lisa(loc) ..() /obj/structure/largecrate/cow @@ -93,5 +93,5 @@ /obj/structure/largecrate/cat/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/crowbar)) - new /mob/living/simple_animal/cat(loc) + new /mob/living/simple_animal/pet/cat(loc) ..() \ No newline at end of file diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index edbdd753ab7..a8fdfaeebd9 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -39,7 +39,7 @@ return // Adds the adjacent turfs to the current atmos processing -/turf/Destroy() +/turf/Del() if(air_master) for(var/direction in cardinal) if(atmos_adjacent_turfs & direction) @@ -254,7 +254,7 @@ lighting_clear_overlays() W.levelupdate() - W.air_update_turf(1) + W.CalculateAdjacentTurfs() return W //////Assimilate Air////// diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 28b855046e3..ec3362fa23b 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -308,10 +308,10 @@ if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob, 1 ) if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob, 1 ) if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob, 1 ) - if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob, 1 ) - if("runtime") M.change_mob_type( /mob/living/simple_animal/cat/Runtime , null, null, delmob, 1 ) - if("corgi") M.change_mob_type( /mob/living/simple_animal/corgi , null, null, delmob, 1 ) - if("ian") M.change_mob_type( /mob/living/simple_animal/corgi/Ian , null, null, delmob, 1 ) + if("cat") M.change_mob_type( /mob/living/simple_animal/pet/cat , null, null, delmob, 1 ) + if("runtime") M.change_mob_type( /mob/living/simple_animal/pet/cat/Runtime , null, null, delmob, 1 ) + if("corgi") M.change_mob_type( /mob/living/simple_animal/pet/corgi , null, null, delmob, 1 ) + if("ian") M.change_mob_type( /mob/living/simple_animal/pet/corgi/Ian , null, null, delmob, 1 ) if("crab") M.change_mob_type( /mob/living/simple_animal/crab , null, null, delmob, 1 ) if("coffee") M.change_mob_type( /mob/living/simple_animal/crab/Coffee , null, null, delmob, 1 ) if("parrot") M.change_mob_type( /mob/living/simple_animal/parrot , null, null, delmob, 1 ) diff --git a/code/modules/admin/verbs/honksquad.dm b/code/modules/admin/verbs/honksquad.dm index 5583b36435b..9b383a93d17 100644 --- a/code/modules/admin/verbs/honksquad.dm +++ b/code/modules/admin/verbs/honksquad.dm @@ -117,8 +117,11 @@ var/global/sent_honksquad = 0 equip_to_slot_or_del(new /obj/item/weapon/bikehorn(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/toy/crayon/rainbow(src), slot_in_backpack) - equip_to_slot_or_del(new /obj/item/weapon/gun/energy/clown(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/spray/waterflower(src), slot_in_backpack) + if(prob(50)) + equip_to_slot_or_del(new /obj/item/weapon/gun/energy/clown(src), slot_in_backpack) + else + equip_to_slot_or_del(new /obj/item/weapon/gun/grenadelauncher/piecannon(src), slot_in_backpack) src.mutations.Add(CLUMSY) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index ee6800f4c18..055e7e0dc65 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -53,7 +53,7 @@ name = "red tie" icon_state = "redtie" _color = "redtie" - + /obj/item/clothing/accessory/black name = "black tie" icon_state = "blacktie" @@ -64,7 +64,7 @@ desc = "A neosilk clip-on tie. This one is disgusting." icon_state = "horribletie" _color = "horribletie" - + /obj/item/clothing/accessory/waistcoat // No overlay name = "waistcoat" desc = "For some classy, murderous fun." @@ -208,7 +208,7 @@ user << "[src] rejects your insufficient access rights." return ..() - + /obj/item/clothing/accessory/holobadge/emag_act(user as mob) if (emagged) user << "\red [src] is already cracked." @@ -234,7 +234,7 @@ new /obj/item/clothing/accessory/holobadge/cord(src) ..() return - + /////////// //SCARVES// @@ -317,3 +317,12 @@ icon_state = "stripedbluescarf" _color = "stripedbluescarf" +/obj/item/clothing/accessory/petcollar + name = "pet collar" + icon_state = "petcollar" + _color = "petcollar" + var/tagname = null + +/obj/item/clothing/accessory/petcollar/attack_self(mob/user as mob) + tagname = copytext(sanitize(input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot") as null|text),1,MAX_NAME_LEN) + name = "[initial(name)] - [tagname]" \ No newline at end of file diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index 303f5686e8e..06098e5e34f 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -13,7 +13,10 @@ /datum/event/carp_migration/start() for(var/obj/effect/landmark/C in landmarks_list) if(C.name == "carpspawn") - spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(C.loc)) + if(prob(95)) + new /mob/living/simple_animal/hostile/carp(C.loc) + else + new /mob/living/simple_animal/hostile/carp/megacarp(C.loc) /datum/event/carp_migration/end() for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp) diff --git a/code/modules/holiday/christmas.dm b/code/modules/holiday/christmas.dm index 9636a1681f6..5a98288a1cd 100644 --- a/code/modules/holiday/christmas.dm +++ b/code/modules/holiday/christmas.dm @@ -4,7 +4,7 @@ for(var/turf/simulated/floor/T in orange(1,xmas)) for(var/i=1,i<=rand(1,5),i++) new /obj/item/weapon/a_gift(T) - for(var/mob/living/simple_animal/corgi/Ian/Ian in mob_list) + for(var/mob/living/simple_animal/pet/corgi/Ian/Ian in mob_list) Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) /datum/holiday/xmas/handle_event() diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index ecfb45eaa8b..194e64100e2 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -26,18 +26,17 @@ large = 1 /mob/living/carbon/alien/humanoid/sentinel/large/update_icons() - lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again update_hud() //TODO: remove the need for this to be here overlays.Cut() - if(lying) - if(resting) icon_state = "prat_sleep" - else icon_state = "prat_l" - for(var/image/I in overlays_lying) - overlays += I + if(stat == DEAD) + icon_state = "prat_dead" + else if(stat == UNCONSCIOUS || lying || resting) + icon_state = "prat_sleep" else icon_state = "prat_s" - for(var/image/I in overlays_standing) - overlays += I + + for(var/image/I in overlays_standing) + overlays += I /mob/living/carbon/alien/humanoid/sentinel/New() var/datum/reagents/R = new/datum/reagents(100) diff --git a/code/modules/mob/living/carbon/alien/humanoid/empress.dm b/code/modules/mob/living/carbon/alien/humanoid/empress.dm index 6e10ad90d9c..6d20f4e1e45 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/empress.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/empress.dm @@ -20,18 +20,19 @@ pixel_x = -32 /mob/living/carbon/alien/humanoid/empress/large/update_icons() - lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again + update_hud() //TODO: remove the need for this to be here overlays.Cut() - if(lying) - if(resting) icon_state = "empress_sleep" - else icon_state = "empress_l" - for(var/image/I in overlays_lying) - overlays += I + + if(stat == DEAD) + icon_state = "empress_dead" + else if(stat == UNCONSCIOUS || lying || resting) + icon_state = "empress_sleep" else icon_state = "empress_s" - for(var/image/I in overlays_standing) - overlays += I + + for(var/image/I in overlays_standing) + overlays += I /mob/living/carbon/alien/humanoid/empress/New() var/datum/reagents/R = new/datum/reagents(100) diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index c90ba2c2b58..eb32d6b974f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -78,18 +78,18 @@ large = 1 /mob/living/carbon/alien/humanoid/queen/large/update_icons() - lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again update_hud() //TODO: remove the need for this to be here overlays.Cut() - if(lying) - if(resting) icon_state = "queen_sleep" - else icon_state = "queen_l" - for(var/image/I in overlays_lying) - overlays += I + + if(stat == DEAD) + icon_state = "queen_dead" + else if(stat == UNCONSCIOUS || lying || resting) + icon_state = "queen_sleep" else icon_state = "queen_s" - for(var/image/I in overlays_standing) - overlays += I + + for(var/image/I in overlays_standing) + overlays += I /* diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index e9e4fd88608..549b2ce6c93 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -9,7 +9,6 @@ ///////////////////////////////// /mob/living/carbon/alien/humanoid - var/list/overlays_lying[X_TOTAL_LAYERS] var/list/overlays_standing[X_TOTAL_LAYERS] /mob/living/carbon/alien/humanoid/update_icons() @@ -63,7 +62,13 @@ update_hud() update_icons() update_fire() + update_transform() +/mob/living/carbon/alien/humanoid/update_transform() //The old method of updating lying/standing was update_icons(). Aliens still expect that. + if(lying > 0) + lying = 90 //Anything else looks retarded + ..() + update_icons() /mob/living/carbon/alien/humanoid/update_hud() @@ -74,32 +79,24 @@ client.screen |= contents /mob/living/carbon/alien/humanoid/update_fire() - overlays -= overlays_lying[X_FIRE_LAYER] overlays -= overlays_standing[X_FIRE_LAYER] if(on_fire) - overlays_lying[X_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Lying", "layer"= -X_FIRE_LAYER) overlays_standing[X_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"= -X_FIRE_LAYER) - if(src.lying) - overlays += overlays_lying[X_FIRE_LAYER] - else - overlays += overlays_standing[X_FIRE_LAYER] + overlays += overlays_standing[X_FIRE_LAYER] return else - overlays_lying[X_FIRE_LAYER] = null overlays_standing[X_FIRE_LAYER] = null /mob/living/carbon/alien/humanoid/update_inv_wear_suit(var/update_icons=1) if(wear_suit) var/t_state = wear_suit.item_state if(!t_state) t_state = wear_suit.icon_state - var/image/lying = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "[t_state]2") var/image/standing = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "[t_state]") if(wear_suit.blood_DNA) var/t_suit = "suit" if( istype(wear_suit, /obj/item/clothing/suit/armor) ) t_suit = "armor" - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "[t_suit]blood2") standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "[t_suit]blood") //TODO @@ -109,10 +106,8 @@ drop_r_hand() drop_l_hand() - overlays_lying[X_SUIT_LAYER] = lying overlays_standing[X_SUIT_LAYER] = standing else - overlays_lying[X_SUIT_LAYER] = null overlays_standing[X_SUIT_LAYER] = null if(update_icons) update_icons() @@ -121,16 +116,12 @@ if (head) var/t_state = head.item_state if(!t_state) t_state = head.icon_state - var/image/lying = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "[t_state]2") var/image/standing = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "[t_state]") if(head.blood_DNA) - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood2") standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood") head.screen_loc = ui_alien_head - overlays_lying[X_HEAD_LAYER] = lying overlays_standing[X_HEAD_LAYER] = standing else - overlays_lying[X_HEAD_LAYER] = null overlays_standing[X_HEAD_LAYER] = null if(update_icons) update_icons() @@ -164,12 +155,10 @@ //Call when target overlay should be added/removed /mob/living/carbon/alien/humanoid/update_targeted(var/update_icons=1) if (targeted_by && target_locked) - overlays_lying[TARGETED_LAYER] = target_locked overlays_standing[TARGETED_LAYER] = target_locked else if (!targeted_by && target_locked) del(target_locked) if (!targeted_by) - overlays_lying[TARGETED_LAYER] = null overlays_standing[TARGETED_LAYER] = null if(update_icons) update_icons() diff --git a/code/modules/mob/living/carbon/alien/larva/update_icons.dm b/code/modules/mob/living/carbon/alien/larva/update_icons.dm index 3ab3fb3b382..104811c4fc1 100644 --- a/code/modules/mob/living/carbon/alien/larva/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/larva/update_icons.dm @@ -12,11 +12,14 @@ if(stat == DEAD) icon_state = "larva[state]_dead" - else if (handcuffed || legcuffed) + else if (handcuffed || legcuffed) //This should be an overlay. Who made this an icon_state? icon_state = "larva[state]_cuff" + else if(stat == UNCONSCIOUS || lying || resting) + icon_state = "larva[state]_sleep" else if (stunned) icon_state = "larva[state]_stun" - else if(lying || resting) - icon_state = "larva[state]_sleep" else icon_state = "larva[state]" + +/mob/living/carbon/alien/larva/update_transform() //All this is handled in update_icons() + return update_icons() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 813c226858f..d039311fe53 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -146,9 +146,10 @@ var/const/MAX_ACTIVE_TIME = 400 if(!sterile) L.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings else if (iscorgi(M)) - var/mob/living/simple_animal/corgi/C = M + var/mob/living/simple_animal/pet/corgi/C = M loc = C C.facehugger = src + C.regenerate_icons() GoIdle() //so it doesn't jump the people that tear it off @@ -184,7 +185,7 @@ var/const/MAX_ACTIVE_TIME = 400 if(iscorgi(target)) - var/mob/living/simple_animal/corgi/C = target + var/mob/living/simple_animal/pet/corgi/C = target src.loc = get_turf(C) C.facehugger = null else diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 92c166ecbf5..f128416eb03 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -661,4 +661,11 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, return 0 /mob/living/carbon/is_muzzled() - return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) \ No newline at end of file + return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) + +/mob/living/carbon/get_standard_pixel_y_offset(lying = 0) + if(lying) + if(buckled) return initial(pixel_y) + return -6 + else + return initial(pixel_y) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 7361b4b5a75..ac83f3115d4 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -153,16 +153,15 @@ Please contact me on #coderbus IRC. ~Carn x //this proc is messy as I was forced to include some old laggy cloaking code to it so that I don't break cloakers //I'll work on removing that stuff by rewriting some of the cloaking stuff at a later date. /mob/living/carbon/human/update_icons() - lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again + update_hud() //TODO: remove the need for this - overlays.Cut() var/stealth = 0 - //cloaking devices. //TODO: get rid of this :< for(var/obj/item/weapon/cloaking_device/S in list(l_hand,r_hand,belt,l_store,r_store)) if(S.active) stealth = 1 break + if(stealth) icon = 'icons/mob/human.dmi' icon_state = "body_cloaked" @@ -172,17 +171,13 @@ Please contact me on #coderbus IRC. ~Carn x if(istype(I)) overlays += I else icon = stand_icon - for(var/image/I in overlays_standing) - overlays += I - if(lying) - var/matrix/M = matrix() - M.Turn(90) - M.Translate(1,-6) - src.transform = M - else - var/matrix/M = matrix() - src.transform = M + if(overlays.len != overlays_standing.len) + overlays.Cut() + for(var/thing in overlays_standing) + if(thing) overlays += thing + + update_transform() var/global/list/damage_icon_parts = list() diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm new file mode 100644 index 00000000000..02fe01c39a1 --- /dev/null +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -0,0 +1,31 @@ +//LOOK G-MA, I'VE JOINED CARBON PROCS THAT ARE IDENTICAL IN ALL CASES INTO ONE PROC, I'M BETTER THAN LIFE() +//I thought about mob/living but silicons and simple_animals don't want this just yet. +//Right now just handles lying down, but could handle other cases later. +//IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. +/mob/living/carbon/update_transform() + var/matrix/ntransform = matrix(transform) //aka transform.Copy() + var/final_pixel_y = pixel_y + var/final_dir = dir + var/changed = 0 + if(lying != lying_prev) + changed++ + ntransform.TurnTo(lying_prev,lying) + if(lying == 0) //Lying to standing + final_pixel_y = get_standard_pixel_y_offset() + else //if(lying != 0) + if(lying_prev == 0) //Standing to lying + pixel_y = get_standard_pixel_y_offset() + final_pixel_y = get_standard_pixel_y_offset(lying) + if(dir & (EAST|WEST)) //Facing east or west + final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass + + lying_prev = lying //so we don't try to animate until there's been another change. + + if(resize != RESIZE_DEFAULT_SIZE) + changed++ + ntransform.Scale(resize) + resize = RESIZE_DEFAULT_SIZE + + if(changed) + animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT) + floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life(). \ No newline at end of file diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 3c5c9b62a15..9dfe7d8d725 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -892,3 +892,9 @@ animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff , time = 2, loop = 6) animate(pixel_x = initial(pixel_x) , pixel_y = initial(pixel_y) , time = 2) floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement. + +/mob/living/proc/get_standard_pixel_x_offset(lying = 0) + return initial(pixel_x) + +/mob/living/proc/get_standard_pixel_y_offset(lying = 0) + return initial(pixel_y) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 684896e7d77..a3a3a73df05 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -9,7 +9,7 @@ response_disarm = "flails at" response_harm = "punches" icon_dead = "shade_dead" - speed = -1 + speed = 0 a_intent = "harm" stop_automated_movement = 1 status_flags = CANPUSH @@ -24,6 +24,7 @@ max_n2 = 0 minbodytemp = 0 faction = list("cult") + flying = 1 var/list/construct_spells = list() /mob/living/simple_animal/construct/New() @@ -40,7 +41,7 @@ if((M.client && !( M.blinded ))) M.show_message("\red [src] collapses in a shattered heap. ") ghostize() - del src + qdel(src) return /mob/living/simple_animal/construct/examine() @@ -221,7 +222,6 @@ melee_damage_lower = 25 melee_damage_upper = 25 attacktext = "slashes" - speed = -1 see_in_dark = 7 attack_sound = 'sound/weapons/bladeslice.ogg' construct_spells = list(/obj/effect/proc_holder/spell/wizard/targeted/ethereal_jaunt/shift) @@ -246,7 +246,6 @@ melee_damage_lower = 5 melee_damage_upper = 5 attacktext = "rams" - speed = 0 environment_smash = 2 attack_sound = 'sound/weapons/punch2.ogg' construct_spells = list(/obj/effect/proc_holder/spell/wizard/aoe_turf/conjure/construct/lesser, diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm index 4c4841a77e9..d55f2897f3b 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm @@ -14,7 +14,9 @@ health = 2 harm_intent_damage = 1 friendly = "nudges" - pass_flags = PASSTABLE + density = 0 + pass_flags = PASSTABLE | PASSGRILLE | PASSMOB + ventcrawler = 2 /mob/living/simple_animal/butterfly/New() ..() diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 902508c4bb8..c0633fec3a3 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -1,5 +1,5 @@ //Cat -/mob/living/simple_animal/cat +/mob/living/simple_animal/pet/cat name = "cat" desc = "Kitty!!" icon_state = "cat2" @@ -13,8 +13,8 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - simplespecies = /mob/living/simple_animal/cat - childtype = /mob/living/simple_animal/cat/kitten + simplespecies = /mob/living/simple_animal/pet/cat + childtype = /mob/living/simple_animal/pet/cat/kitten meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat meat_amount = 3 response_help = "pets" @@ -22,7 +22,7 @@ response_harm = "kicks" //RUNTIME IS ALIVE! SQUEEEEEEEE~ -/mob/living/simple_animal/cat/Runtime +/mob/living/simple_animal/pet/cat/Runtime name = "Runtime" desc = "GCAT" icon_state = "cat" @@ -32,14 +32,14 @@ var/turns_since_scan = 0 var/mob/living/simple_animal/mouse/movement_target -/mob/living/simple_animal/cat/Runtime/Life() +/mob/living/simple_animal/pet/cat/Runtime/Life() //MICE! if((src.loc) && isturf(src.loc)) if(!stat && !resting && !buckled) for(var/mob/living/simple_animal/mouse/M in view(1,src)) - if(!M.stat) + if(!M.stat && Adjacent(M)) + emote("me", 1, "splats \the [M]!") M.splat() - emote("splats \the [M]") movement_target = null stop_automated_movement = 0 break @@ -67,18 +67,20 @@ stop_automated_movement = 1 walk_to(src,movement_target,0,3) -/mob/living/simple_animal/cat/Proc +/mob/living/simple_animal/pet/cat/Proc name = "Proc" -/mob/living/simple_animal/cat/kitten +/mob/living/simple_animal/pet/cat/kitten name = "kitten" desc = "D'aaawwww" icon_state = "kitten" icon_living = "kitten" icon_dead = "kitten_dead" gender = NEUTER + density = 0 + pass_flags = PASSMOB -/mob/living/simple_animal/cat/Syndi +/mob/living/simple_animal/pet/cat/Syndi name = "SyndiCat" desc = "It's a SyndiCat droid." icon_state = "Syndicat" diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 7d5f290fc55..b2e0408b7e4 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -1,12 +1,12 @@ //Corgi -/mob/living/simple_animal/corgi +/mob/living/simple_animal/pet/corgi name = "\improper corgi" real_name = "corgi" desc = "It's a corgi." - gender = MALE icon_state = "corgi" icon_living = "corgi" icon_dead = "corgi_dead" + gender = MALE health = 30 maxHealth = 30 speak = list("YAP", "Woof!", "Bark!", "AUUUUUU") @@ -17,21 +17,22 @@ turns_per_move = 10 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi meat_amount = 3 - response_help = "pets the" - response_disarm = "bops the" - response_harm = "kicks the" + response_help = "pets" + response_disarm = "bops" + response_harm = "kicks" see_in_dark = 5 - childtype = /mob/living/simple_animal/corgi/puppy - simplespecies = /mob/living/simple_animal/corgi + childtype = /mob/living/simple_animal/pet/corgi/puppy + simplespecies = /mob/living/simple_animal/pet/corgi + var/shaved = 0 var/obj/item/inventory_head var/obj/item/inventory_back var/facehugger -/mob/living/simple_animal/corgi/New() +/mob/living/simple_animal/pet/corgi/New() ..() regenerate_icons() -/mob/living/simple_animal/corgi/Life() +/mob/living/simple_animal/pet/corgi/Life() . = ..() if(.) if(fire) @@ -59,19 +60,19 @@ if(0) healths.icon_state = "health7" regenerate_icons() -/mob/living/simple_animal/corgi/Die() +/mob/living/simple_animal/pet/corgi/Die() ..() regenerate_icons() -/mob/living/simple_animal/corgi/revive() +/mob/living/simple_animal/pet/corgi/revive() ..() regenerate_icons() -/mob/living/simple_animal/corgi/show_inv(mob/user as mob) +/mob/living/simple_animal/pet/corgi/show_inv(mob/user as mob) user.set_machine(src) if(user.stat) return - var/dat = "
Inventory of [real_name]

" + var/dat = "

Inventory of [name]

" if(inventory_head) dat += "
Head: [inventory_head] (Remove)" else @@ -81,28 +82,43 @@ else dat += "
Back: Nothing" - user << browse(dat, text("window=mob[];size=325x500", name)) + user << browse(dat, text("window=mob[];size=325x500", real_name)) onclose(user, "mob[real_name]") return -/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/mob/living/simple_animal/pet/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(inventory_head && inventory_back) //helmet and armor = 100% protection if( istype(inventory_head,/obj/item/clothing/head/helmet) && istype(inventory_back,/obj/item/clothing/suit/armor) ) if( O.force ) - usr << "\red This animal is wearing too much armor. You can't cause /him any damage." - for (var/mob/M in viewers(src, null)) - M.show_message("\red \b [user] hits [src] with the [O], however [src] is too armored.") + user << "[src] is wearing too much armor! You can't cause \him any damage." + visible_message(" [user] hits [src] with [O], however [src] is too armored.") else - usr << "\red This animal is wearing too much armor. You can't reach its skin." - for (var/mob/M in viewers(src, null)) - M.show_message("\red [user] gently taps [src] with the [O]. ") - if(prob(15)) - emote("looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression on \his face") + user << "[src] is wearing too much armor! You can't reach \his skin." + visible_message("[user] gently taps [src] with [O].") + if(health>0 && prob(15)) + emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.") return + + if (istype(O, /obj/item/weapon/razor)) + if (shaved) + user << "You can't shave this corgi, it's already been shaved!" + return + user.visible_message("[user] starts to shave [src] using \the [O].", "You start to shave [src] using \the [O]...") + if(do_after(user, 50)) + user.visible_message("[user] shaves [src]'s hair using \the [O].") + playsound(loc, 'sound/items/Welder2.ogg', 20, 1) + shaved = 1 + icon_living = "[initial(icon_living)]_shaved" + icon_dead = "[initial(icon_living)]_shaved_dead" + if(stat == CONSCIOUS) + icon_state = icon_living + else + icon_state = icon_dead + return ..() -/mob/living/simple_animal/corgi/Topic(href, href_list) +/mob/living/simple_animal/pet/corgi/Topic(href, href_list) if(usr.stat) return //Removing from inventory @@ -125,7 +141,7 @@ inventory_head = null regenerate_icons() else - usr << "\red There is nothing to remove from its [remove_from]." + usr << "There is nothing to remove from its [remove_from]." return if("back") if(inventory_back) @@ -133,97 +149,59 @@ inventory_back = null regenerate_icons() else - usr << "\red There is nothing to remove from its [remove_from]." + usr << "There is nothing to remove from its [remove_from]." return - show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying. + show_inv(usr) //Adding things to inventory else if(href_list["add_inv"]) if(!Adjacent(usr) || !(ishuman(usr) || isrobot(usr) || isalienadult(usr))) return + var/add_to = href_list["add_inv"] - if(!usr.get_active_hand()) - usr << "\red You have nothing in your hand to put on its [add_to]." - return + switch(add_to) if("head") - if(inventory_head) - usr << "\red It's is already wearing something." - return - else - place_on_head(usr.get_active_hand()) - - var/obj/item/item_to_add = usr.get_active_hand() - if(!item_to_add) - return - - //Corgis are supposed to be simpler, so only a select few objects can actually be put - //to be compatible with them. The objects are below. - //Many hats added, Some will probably be removed, just want to see which ones are popular. - - var/list/allowed_types = list( - /obj/item/clothing/head/helmet, - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/head/caphat, - /obj/item/clothing/head/collectable/captain, - /obj/item/clothing/head/that, - /obj/item/clothing/head/that, - /obj/item/clothing/head/kitty, - /obj/item/clothing/head/collectable/kitty, - /obj/item/clothing/head/rabbitears, - /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/head/beret, - /obj/item/clothing/head/collectable/beret, - /obj/item/clothing/head/det_hat, - /obj/item/clothing/head/nursehat, - /obj/item/clothing/head/pirate, - /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/ushanka, - /obj/item/clothing/head/chefhat, - /obj/item/clothing/head/collectable/chef, - /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/wizard/fake, - /obj/item/clothing/head/wizard, - /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/head/collectable/hardhat, - /obj/item/clothing/head/hardhat/white, - /obj/item/weapon/bedsheet, - /obj/item/clothing/head/helmet/space/santahat, - /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/soft, - /obj/item/clothing/head/hardhat/reindeer - ) - - if( ! ( item_to_add.type in allowed_types ) ) - usr << "\red It doesn't seem too keen on wearing that item." - return - - usr.drop_item() - - place_on_head(item_to_add) - regenerate_icons() + place_on_head(usr.get_active_hand(),usr) if("back") if(inventory_back) - usr << "\red It's already wearing something." + usr << "It's already wearing something!" return else var/obj/item/item_to_add = usr.get_active_hand() + if(!item_to_add) + usr.visible_message("[usr] pets [src].","You rest your hand on [src]'s back for a moment.") + return + if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess + item_to_add.afterattack(src,usr,1) return - //Corgis are supposed to be simpler, so only a select few objects can actually be put - //to be compatible with them. The objects are below. - + //The objects that corgis can wear on their backs. var/list/allowed_types = list( /obj/item/clothing/suit/armor/vest, - /obj/item/device/radio + /obj/item/clothing/suit/space/deathsquad, + /obj/item/device/radio, + /obj/item/device/radio/off, + /obj/item/clothing/suit/cardborg, + /obj/item/weapon/tank/oxygen, + /obj/item/weapon/tank/air, + /obj/item/weapon/extinguisher, ) if( ! ( item_to_add.type in allowed_types ) ) - usr << "\red This object won't fit." + usr << "You set [item_to_add] on [src]'s back, but \he shakes it off!" + if(!usr.drop_item()) + usr << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!" + return + item_to_add.loc = loc + if(prob(25)) + step_rand(item_to_add) + for(var/i in list(1,2,4,8,4,8,4,dir)) + dir = i + sleep(1) return usr.drop_item() @@ -231,83 +209,191 @@ src.inventory_back = item_to_add regenerate_icons() - show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying. + show_inv(usr) else ..() -/mob/living/simple_animal/corgi/proc/place_on_head(obj/item/item_to_add) - item_to_add.loc = src - src.inventory_head = item_to_add - regenerate_icons() +//Corgis are supposed to be simpler, so only a select few objects can actually be put +//to be compatible with them. The objects are below. +//Many hats added, Some will probably be removed, just want to see which ones are popular. +/mob/living/simple_animal/pet/corgi/proc/place_on_head(obj/item/item_to_add, var/mob/user as mob) - //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a HAT is removed. - switch(inventory_head && inventory_head.type) - if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain) - name = "Captain [real_name]" - desc = "Probably better than the last captain." - if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty) - name = "Runtime" - emote_see = list("coughs up a furball", "stretches") - emote_hear = list("purrs") - speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW") - desc = "It's a cute little kitty-cat! ... wait ... what the hell?" - if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears) - name = "Hoppy" - emote_see = list("twitches its nose", "hops around a bit") - desc = "This is hoppy. It's a corgi-...urmm... bunny rabbit" - if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret) - name = "Yann" - desc = "Mon dieu! C'est un chien!" - speak = list("le woof!", "le bark!", "JAPPE!!") - emote_see = list("cowers in fear", "surrenders", "plays dead","looks as though there is a wall in front of him") - if(/obj/item/clothing/head/det_hat) - name = "Detective [real_name]" - desc = "[name] sees through your lies..." - emote_see = list("investigates the area","sniffs around for clues","searches for scooby snacks") - if(/obj/item/clothing/head/nursehat) - name = "Nurse [real_name]" - desc = "[name] needs 100cc of beef jerky...STAT!" - if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate) - name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]" - desc = "Yaarghh!! Thar' be a scurvy dog!" - emote_see = list("hunts for treasure","stares coldly...","gnashes his tiny corgi teeth") - emote_hear = list("growls ferociously", "snarls") - speak = list("Arrrrgh!!","Grrrrrr!") - if(/obj/item/clothing/head/ushanka) - name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]" - desc = "A follower of Karl Barx." - emote_see = list("contemplates the failings of the capitalist economic model", "ponders the pros and cons of vangaurdism") - if(/obj/item/clothing/head/collectable/police) - name = "Officer [real_name]" - emote_see = list("drools","looks for donuts") - desc = "Stop right there criminal scum!" - if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard) - name = "Grandwizard [real_name]" - speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") - if(/obj/item/weapon/bedsheet) - name = "\improper Ghost" - speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU") - emote_see = list("stumbles around", "shivers") - emote_hear = list("howls","groans") - desc = "Spooky!" - if(/obj/item/clothing/head/helmet/space/santahat) - name = "Santa's Corgi Helper" - emote_hear = list("barks christmas songs", "yaps merrily") - emote_see = list("looks for presents", "checks his list") - desc = "He's very fond of milk and cookies." - set_light(6) - if(/obj/item/clothing/head/soft) - name = "Corgi Tech [real_name]" - desc = "The reason your yellow gloves have chew-marks." - if(/obj/item/clothing/head/hardhat/reindeer) - name = "[real_name] the red-nosed Corgi" - emote_hear = list("lights the way", "illuminates", "yaps") - desc = "He has a very shiny nose." - set_light(1) + if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess + item_to_add.afterattack(src,user,1) + return + + if(inventory_head) + if(user) user << "You can't put more than one hat on [src]!" + return + if(!item_to_add) + user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.") + return + + + var/valid = 0 + + //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed. + if(istype(item_to_add, /obj/item/clothing/accessory/scarf)) + valid = 1 + else + switch(item_to_add.type) + if( /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/head/that, /obj/item/clothing/head/collectable/paper, + /obj/item/clothing/head/hardhat, /obj/item/clothing/head/collectable/hardhat, /obj/item/clothing/head/hardhat/white, + /obj/item/weapon/paper) + valid = 1 + + if(/obj/item/clothing/head/helmet) + name = "Sergeant [real_name]" + desc = "The ever-loyal, the ever-vigilant." + valid = 1 + + if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef) + name = "Sous chef [real_name]" + desc = "Your food will be taste-tested. All of it." + valid = 1 + + if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain) + name = "Captain [real_name]" + desc = "Probably better than the last captain." + valid = 1 + + if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty) + name = "Runtime" + emote_see = list("coughs up a furball", "stretches") + emote_hear = list("purrs") + speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW") + desc = "It's a cute little kitty-cat! ... wait ... what the hell?" + valid = 1 + + if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears) + name = "Hoppy" + emote_see = list("twitches its nose", "hops around a bit") + desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit" + valid = 1 + + if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret) + name = "Yann" + desc = "Mon dieu! C'est un chien!" + speak = list("le woof!", "le bark!", "JAPPE!!") + emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.") + valid = 1 + + if(/obj/item/clothing/head/det_hat) + name = "Detective [real_name]" + desc = "[name] sees through your lies..." + emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.") + valid = 1 + + if(/obj/item/clothing/head/nursehat) + name = "Nurse [real_name]" + desc = "[name] needs 100cc of beef jerky... STAT!" + valid = 1 + + if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate) + name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]" + desc = "Yaarghh!! Thar' be a scurvy dog!" + emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!") + emote_hear = list("growls ferociously!", "snarls.") + speak = list("Arrrrgh!!","Grrrrrr!") + valid = 1 + + if(/obj/item/clothing/head/ushanka) + name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]" + desc = "A follower of Karl Barx." + emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.") + valid = 1 + + if(/obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police) + name = "Officer [real_name]" + emote_see = list("drools.","looks for donuts.") + desc = "Stop right there criminal scum!" + valid = 1 + + if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard) + name = "Grandwizard [real_name]" + speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") + valid = 1 + + if(/obj/item/clothing/head/cardborg) + name = "Borgi" + speak = list("Ping!","Beep!","Woof!") + emote_see = list("goes rogue.", "sniffs out non-humans.") + desc = "Result of robotics budget cuts." + valid = 1 + + if(/obj/item/weapon/bedsheet) + name = "\improper Ghost" + speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU") + emote_see = list("stumbles around.", "shivers.") + emote_hear = list("howls!","groans.") + desc = "Spooky!" + valid = 1 + + if(/obj/item/clothing/head/helmet/space/santahat) + name = "Santa's Corgi Helper" + emote_hear = list("barks Christmas songs.", "yaps merrily!") + emote_see = list("looks for presents.", "checks his list.") + desc = "He's very fond of milk and cookies." + valid = 1 + + if(/obj/item/clothing/head/soft) + name = "Corgi Tech [real_name]" + desc = "The reason your yellow gloves have chew-marks." + valid = 1 + + if(/obj/item/clothing/head/hardhat/reindeer) + name = "[real_name] the red-nosed Corgi" + emote_hear = list("lights the way!", "illuminates.", "yaps!") + desc = "He has a very shiny nose." + set_light(1) + valid = 1 + + if(/obj/item/clothing/head/sombrero) + name = "Segnor [real_name]" + desc = "You must respect elder [real_name]" + valid = 1 + + if(/obj/item/clothing/head/hopcap) + name = "Lieutenant [real_name]" + desc = "Can actually be trusted to not run off on his own." + valid = 1 + + if(/obj/item/clothing/head/helmet/space/deathsquad) + name = "Trooper [real_name]" + desc = "That's not red paint. That's real corgi blood." + valid = 1 + + if(valid) + if(user && !user.drop_item()) + user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!" + return 0 + if(health <= 0) + user << "There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on \him." + else if(user) + user.visible_message("[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.", + "You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.", + "You hear a friendly-sounding bark.") + item_to_add.loc = src + src.inventory_head = item_to_add + regenerate_icons() + + else + if(user && !user.drop_item()) + user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!" + return 0 + user << "You set [item_to_add] on [src]'s head, but \he shakes it off!" + item_to_add.loc = loc + if(prob(25)) + step_rand(item_to_add) + for(var/i in list(1,2,4,8,4,8,4,dir)) + dir = i + sleep(1) + + return valid //IAN! SQUEEEEEEEEE~ -/mob/living/simple_animal/corgi/Ian +/mob/living/simple_animal/pet/corgi/Ian name = "Ian" real_name = "Ian" //Intended to hold the name without altering it. gender = MALE @@ -318,7 +404,7 @@ response_disarm = "bops" response_harm = "kicks" -/mob/living/simple_animal/corgi/Ian/Life() +/mob/living/simple_animal/pet/corgi/Ian/Life() ..() //Feeding, chasing food, FOOOOODDDD @@ -357,14 +443,17 @@ else dir = SOUTH + if(!Adjacent(movement_target)) //can't reach food through windows. + return + if(isturf(movement_target.loc) ) movement_target.attack_animal(src) else if(ishuman(movement_target.loc) ) if(prob(20)) - emote("stares at [movement_target.loc]'s [movement_target] with a sad puppy-face") + emote("me", 1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face") if(prob(1)) - emote(pick("dances around","chases its tail")) + emote("me", 1, pick("dances around.","chases its tail!")) spawn(0) if (ckey == null) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) @@ -375,7 +464,7 @@ name = "Corgi meat" desc = "Tastes like... well you know..." -/mob/living/simple_animal/corgi/Ian/Bump(atom/movable/AM as mob|obj, yes) +/mob/living/simple_animal/pet/corgi/Ian/Bump(atom/movable/AM as mob|obj, yes) spawn( 0 ) if ((!( yes ) || now_pushing)) @@ -409,70 +498,60 @@ now_pushing = null return return -//PC stuff-Sieve -/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri - if(istype(O, /obj/item/weapon/newspaper)) - if(!stat) - for(var/mob/M in viewers(user, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\blue [user] baps [name] on the nose with the rolled up [O]") - spawn(0) - if (ckey == null) - for(var/i in list(1,2,4,8,4,2,1,2)) - dir = i - sleep(1) - else - ..() - -/mob/living/simple_animal/corgi/regenerate_icons() +/mob/living/simple_animal/pet/corgi/regenerate_icons() overlays.Cut() - if(inventory_head) - var/head_icon_state = inventory_head.icon_state + var/image/head_icon if(health <= 0) - head_icon_state += "2" - - var/icon/head_icon = image('icons/mob/corgi_head.dmi',head_icon_state) - if(head_icon) - overlays += head_icon - + head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state, dir = EAST) + head_icon.pixel_y = -8 + head_icon.transform = turn(head_icon.transform, 180) + else + head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state) + overlays += head_icon if(inventory_back) - var/back_icon_state = inventory_back.icon_state + var/image/back_icon if(health <= 0) - back_icon_state += "2" - - var/icon/back_icon = image('icons/mob/corgi_back.dmi',back_icon_state) - if(back_icon) - overlays += back_icon - + back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state, dir = EAST) + back_icon.pixel_y = -11 + back_icon.transform = turn(back_icon.transform, 180) + else + back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state) + overlays += back_icon if(facehugger) - if(istype(src, /mob/living/simple_animal/corgi/puppy)) + if(istype(src, /mob/living/simple_animal/pet/corgi/puppy)) overlays += image('icons/mob/mask.dmi',"facehugger_corgipuppy") else overlays += image('icons/mob/mask.dmi',"facehugger_corgi") + if(pcollar) + overlays += collar + overlays += pettag return - -/mob/living/simple_animal/corgi/puppy +/mob/living/simple_animal/pet/corgi/puppy name = "\improper corgi puppy" real_name = "corgi" desc = "It's a corgi puppy." icon_state = "puppy" icon_living = "puppy" icon_dead = "puppy_dead" + shaved = 0 + density = 0 + pass_flags = PASSMOB -//pupplies cannot wear anything. -/mob/living/simple_animal/corgi/puppy/Topic(href, href_list) +//puppies cannot wear anything. +/mob/living/simple_animal/pet/corgi/puppy/Topic(href, href_list) if(href_list["remove_inv"] || href_list["add_inv"]) - usr << "\red You can't fit this on [src]" + usr << "You can't fit this on [src]!" return ..() + //LISA! SQUEEEEEEEEE~ -/mob/living/simple_animal/corgi/Lisa +/mob/living/simple_animal/pet/corgi/Lisa name = "Lisa" real_name = "Lisa" gender = FEMALE @@ -487,27 +566,44 @@ var/puppies = 0 //Lisa already has a cute bow! -/mob/living/simple_animal/corgi/Lisa/Topic(href, href_list) +/mob/living/simple_animal/pet/corgi/Lisa/Topic(href, href_list) if(href_list["remove_inv"] || href_list["add_inv"]) usr << "\red [src] already has a cute bow!" return ..() -/mob/living/simple_animal/corgi/Lisa/Life() +/mob/living/simple_animal/pet/corgi/Lisa/Life() ..() + make_babies() if(!stat && !resting && !buckled) if(prob(1)) if (ckey == null) - emote(pick("dances around","chases her tail")) + emote("me", 1, pick("dances around.","chases her tail.")) spawn(0) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) dir = i sleep(1) -/mob/living/simple_animal/corgi/Ian/borgi +/mob/living/simple_animal/pet/corgi/attack_hand(mob/living/carbon/human/M) + . = ..() + switch(M.a_intent) + if("help") wuv(1,M) + if("harm") wuv(-1,M) + +/mob/living/simple_animal/pet/corgi/proc/wuv(change, mob/M) + if(change) + if(change > 0) + if(M && stat != DEAD) // Added check to see if this mob (the corgi) is dead to fix issue 2454 + flick_overlay(image('icons/mob/animal.dmi',src,"heart-ani2",MOB_LAYER+1), list(M.client), 20) + emote("me", 1, "yaps happily!") + else + if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case) + emote("me", 1, "growls!") + +/mob/living/simple_animal/pet/corgi/Ian/borgi name = "E-N" real_name = "E-N" //Intended to hold the name without altering it. desc = "It's a borgi." @@ -515,14 +611,14 @@ icon_living = "borgi" var/emagged = 0 -/mob/living/simple_animal/corgi/Ian/borgi/emag_act(user as mob) +/mob/living/simple_animal/pet/corgi/Ian/borgi/emag_act(user as mob) if(!emagged) emagged = 1 visible_message("[user] swipes a card through [src].", "You overload [src]s internal reactor.") spawn (1000) src.explode() -/mob/living/simple_animal/corgi/Ian/borgi/proc/explode() +/mob/living/simple_animal/pet/corgi/Ian/borgi/proc/explode() for(var/mob/M in viewers(src, null)) if (M.client) M.show_message("\red [src] makes an odd whining noise.") @@ -530,7 +626,7 @@ explosion(get_turf(src), 0, 1, 4, 7) Die() -/mob/living/simple_animal/corgi/Ian/borgi/proc/shootAt(var/atom/movable/target) +/mob/living/simple_animal/pet/corgi/Ian/borgi/proc/shootAt(var/atom/movable/target) var/turf/T = get_turf(src) var/turf/U = get_turf(target) if (!T || !U) @@ -546,7 +642,7 @@ A.process() return -/mob/living/simple_animal/corgi/Ian/borgi/Life() +/mob/living/simple_animal/pet/corgi/Ian/borgi/Life() ..() if(emagged && prob(25)) var/mob/living/carbon/target = locate() in view(10,src) @@ -559,7 +655,7 @@ s.set_up(3, 1, src) s.start() -/mob/living/simple_animal/corgi/Ian/borgi/Die() +/mob/living/simple_animal/pet/corgi/Ian/borgi/Die() ..() visible_message("[src] blows apart!") new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) diff --git a/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm b/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm index ad945390cd1..c19f3bc9fad 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm @@ -1,4 +1,4 @@ -/mob/living/simple_animal/corgi/verb/chasetail() +/mob/living/simple_animal/pet/corgi/verb/chasetail() set name = "Chase your tail" set desc = "d'awwww." set category = "Corgi" diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 5e8f8d0d54b..27c266b8a7c 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -18,6 +18,7 @@ response_harm = "stomps the" stop_automated_movement = 1 friendly = "pinches" + ventcrawler = 2 var/obj/item/inventory_head var/obj/item/inventory_mask can_hide = 1 diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index c3c7269515e..0e924a432a3 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -20,9 +20,11 @@ faction = list("neutral") attack_same = 1 attacktext = "kicks" + attack_sound = 'sound/weapons/punch1.ogg' health = 40 melee_damage_lower = 1 - melee_damage_upper = 5 + melee_damage_upper = 2 + stop_automated_movement_when_pulled = 1 var/milk_content = 0 /mob/living/simple_animal/hostile/retaliate/goat/New() @@ -54,7 +56,7 @@ var/step = get_step(src, direction) if(step) if(locate(/obj/effect/plant) in step) - Move(step) + Move(step, get_dir(src, step)) /mob/living/simple_animal/hostile/retaliate/goat/Retaliate() ..() @@ -84,6 +86,7 @@ user << "\red The udder is dry. Wait a bit longer..." else ..() + //cow /mob/living/simple_animal/cow name = "cow" @@ -105,6 +108,7 @@ response_disarm = "gently pushes aside the" response_harm = "kicks the" attacktext = "kicks" + attack_sound = 'sound/weapons/punch1.ogg' health = 50 var/milk_content = 0 @@ -159,6 +163,7 @@ speak_emote = list("cheeps") emote_hear = list("cheeps") emote_see = list("pecks at the ground","flaps its tiny wings") + density = 0 speak_chance = 2 turns_per_move = 2 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat @@ -168,8 +173,9 @@ response_harm = "kicks the" attacktext = "kicks" health = 1 + ventcrawler = 2 var/amount_grown = 0 - pass_flags = PASSTABLE | PASSGRILLE + pass_flags = PASSTABLE | PASSGRILLE | PASSMOB small = 1 can_hide = 1 @@ -186,7 +192,7 @@ amount_grown += rand(1,2) if(amount_grown >= 100) new /mob/living/simple_animal/chicken(src.loc) - del(src) + qdel(src) var/const/MAX_CHICKENS = 50 var/global/chicken_count = 0 @@ -201,6 +207,7 @@ var/global/chicken_count = 0 speak_emote = list("clucks","croons") emote_hear = list("clucks") emote_see = list("pecks at the ground","flaps its wings viciously") + density = 0 speak_chance = 2 turns_per_move = 3 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat @@ -212,7 +219,7 @@ var/global/chicken_count = 0 health = 10 var/eggsleft = 0 var/_color - pass_flags = PASSTABLE + pass_flags = PASSTABLE | PASSMOB small = 1 can_hide = 1 diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index 6b682cabc88..af2994feeef 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -1,5 +1,5 @@ //Foxxy -/mob/living/simple_animal/fox +/mob/living/simple_animal/pet/fox name = "fox" desc = "It's a fox. I wonder what it says?" icon_state = "fox" @@ -19,12 +19,12 @@ response_harm = "kicks" //Captain fox -/mob/living/simple_animal/fox/Renault +/mob/living/simple_animal/pet/fox/Renault name = "Renault" desc = "Renault, the Captain's trustworthy fox. I wonder what it says?" //Syndi fox -/mob/living/simple_animal/fox/Syndifox +/mob/living/simple_animal/pet/fox/Syndifox name = "Syndifox" desc = "Syndifox, the Syndicate's most respected mascot. I wonder what it says?" icon_state = "Syndifox" diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index 0b513d524fb..a805d06a1e4 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -16,5 +16,7 @@ response_help = "pets" response_disarm = "shoos" response_harm = "stomps on" - pass_flags = PASSTABLE + ventcrawler = 2 + density = 0 + pass_flags = PASSTABLE | PASSMOB can_hide = 1 diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 40eb01184c3..1c25a12f2c1 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -9,7 +9,6 @@ speak_emote = list("squeeks","squeeks","squiks") emote_hear = list("squeeks","squeaks","squiks") emote_see = list("runs in a circle", "shakes", "scritches at something") - pass_flags = PASSTABLE small = 1 speak_chance = 1 turns_per_move = 5 @@ -22,6 +21,8 @@ response_disarm = "gently pushes aside the" response_harm = "stamps on the" density = 0 + ventcrawler = 2 + pass_flags = PASSTABLE | PASSGRILLE | PASSMOB var/_color //brown, gray and white, leave blank for random layer = MOB_LAYER min_oxy = 16 //Require atleast 16kPA oxygen @@ -29,7 +30,6 @@ maxbodytemp = 323 //Above 50 Degrees Celcius universal_speak = 0 can_hide = 1 - ventcrawler = 2 /mob/living/simple_animal/mouse/Life() ..() diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm new file mode 100644 index 00000000000..20a8765921a --- /dev/null +++ b/code/modules/mob/living/simple_animal/friendly/pet.dm @@ -0,0 +1,46 @@ +/mob/living/simple_animal/pet + icon = 'icons/mob/pets.dmi' + var/obj/item/clothing/accessory/petcollar/pcollar = null + var/image/collar = null + var/image/pettag = null + +/mob/living/simple_animal/pet/attackby(var/obj/item/O as obj, var/mob/user as mob, params) + if(istype(O, /obj/item/clothing/accessory/petcollar) && !pcollar) + var/obj/item/clothing/accessory/petcollar/P = O + pcollar = P + collar = image('icons/mob/pets.dmi', src, "[icon_state]collar") + pettag = image('icons/mob/pets.dmi', src, "[icon_state]tag") + regenerate_icons() + user << "You put the [P] around [src]'s neck." + if(P.tagname) + name = P.tagname + qdel(P) + return + if(istype(O, /obj/item/weapon/newspaper)) + if(!stat) + user.visible_message("[user] baps [name] on the nose with the rolled up [O].") + spawn(0) + for(var/i in list(1,2,4,8,4,2,1,2)) + dir = i + sleep(1) + else + ..() + +/mob/living/simple_animal/pet/New() + ..() + if(pcollar) + pcollar = new(src) + regenerate_icons() + +/mob/living/simple_animal/pet/revive() + ..() + regenerate_icons() + +/mob/living/simple_animal/pet/Die() + ..() + regenerate_icons() + +/mob/living/simple_animal/pet/regenerate_icons() + overlays.Cut() + overlays += collar + overlays += pettag \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/pug.dm b/code/modules/mob/living/simple_animal/friendly/pug.dm index 62456ed8a8b..224d46dd8f7 100644 --- a/code/modules/mob/living/simple_animal/friendly/pug.dm +++ b/code/modules/mob/living/simple_animal/friendly/pug.dm @@ -1,5 +1,5 @@ //Corgi //best comment 2014 -/mob/living/simple_animal/pug +/mob/living/simple_animal/pet/pug name = "\improper pug" real_name = "pug" desc = "It's a pug." @@ -19,7 +19,7 @@ response_harm = "kicks" see_in_dark = 5 -/mob/living/simple_animal/pug/Life() +/mob/living/simple_animal/pet/pug/Life() ..() if(!stat && !resting && !buckled) @@ -29,14 +29,3 @@ for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) dir = i sleep(1) - -/mob/living/simple_animal/pug/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri - if(istype(O, /obj/item/weapon/newspaper)) - if(!stat) - user.visible_message("[user] baps [name] on the nose with the rolled up [O]") - spawn(0) - for(var/i in list(1,2,4,8,4,2,1,2)) - dir = i - sleep(1) - else - ..() diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index c41424649cc..c2dc78c5377 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -9,7 +9,7 @@ response_help = "pokes the" response_disarm = "shoves the" response_harm = "hits the" - speed = -1 + speed = 0 meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat meat_amount = 3 maxHealth = 100 @@ -18,6 +18,7 @@ melee_damage_lower = 25 melee_damage_upper = 25 attacktext = "slashes" + speak_emote = list("hisses") a_intent = "harm" attack_sound = 'sound/weapons/bladeslice.ogg' min_oxy = 0 @@ -33,6 +34,8 @@ faction = list("alien") status_flags = CANPUSH minbodytemp = 0 + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_MINIMUM heat_damage_per_tick = 20 @@ -44,6 +47,17 @@ health = 60 melee_damage_lower = 15 melee_damage_upper = 15 + var/plant_cooldown = 30 + var/plants_off = 0 + +/mob/living/simple_animal/hostile/alien/drone/Life() + ..() + if(!stat) + plant_cooldown-- + if(stance==HOSTILE_STANCE_IDLE) + if(!plants_off && prob(10) && plant_cooldown<=0) + plant_cooldown = initial(plant_cooldown) + SpreadPlants() /mob/living/simple_animal/hostile/alien/sentinel name = "alien sentinel" @@ -72,11 +86,43 @@ ranged = 1 retreat_distance = 5 minimum_distance = 5 - move_to_delay = 3 + move_to_delay = 4 projectiletype = /obj/item/projectile/neurotox projectilesound = 'sound/weapons/pierce.ogg' - rapid = 1 status_flags = 0 + var/sterile = 1 + var/plants_off = 0 + var/egg_cooldown = 30 + var/plant_cooldown = 30 + +/mob/living/simple_animal/hostile/alien/queen/Life() + ..() + if(!stat) + egg_cooldown-- + plant_cooldown-- + if(stance==HOSTILE_STANCE_IDLE) + if(!plants_off && prob(10) && plant_cooldown<=0) + plant_cooldown = initial(plant_cooldown) + SpreadPlants() + if(!sterile && prob(10) && egg_cooldown<=0) + egg_cooldown = initial(egg_cooldown) + LayEggs() + +/mob/living/simple_animal/hostile/alien/proc/SpreadPlants() + if(!isturf(loc) || istype(loc, /turf/space)) + return + if(locate(/obj/structure/alien/weeds/node) in get_turf(src)) + return + visible_message("[src] has planted some alien weeds!") + new /obj/structure/alien/weeds/node(loc) + +/mob/living/simple_animal/hostile/alien/proc/LayEggs() + if(!isturf(loc) || istype(loc, /turf/space)) + return + if(locate(/obj/structure/alien/egg) in get_turf(src)) + return + visible_message("[src] has laid an egg!") + new /obj/structure/alien/egg(loc) /mob/living/simple_animal/hostile/alien/queen/large name = "alien empress" @@ -89,6 +135,7 @@ health = 400 /obj/item/projectile/neurotox + name = "neurotoxin" damage = 30 icon_state = "toxin" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 25113ae500c..87447f83c1c 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -1,7 +1,7 @@ //Space bears! /mob/living/simple_animal/hostile/bear name = "space bear" - desc = "RawrRawr!!" + desc = "You don't need to be faster than a space bear, you just need to outrun your crewmates." icon_state = "bear" icon_living = "bear" icon_dead = "bear_dead" @@ -14,7 +14,7 @@ turns_per_move = 5 see_in_dark = 6 meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat - meat_amount = 6 + meat_amount = 5 response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index d7111df0db7..4575a083827 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -40,6 +40,7 @@ faction = list("carp") + flying = 1 /mob/living/simple_animal/hostile/carp/Process_Spacemove(var/check_drift = 0) return 1 //No drifting in space for space carp! //original comments do not steal @@ -47,21 +48,37 @@ /mob/living/simple_animal/hostile/carp/FindTarget() . = ..() if(.) - emote("nashes at [.]") + emote("me", 1, "gnashes at [.]!") /mob/living/simple_animal/hostile/carp/AttackingTarget() - . =..() - var/mob/living/L = . - if(istype(L)) - if(prob(15)) - L.Weaken(3) - L.visible_message("\the [src] knocks down \the [L]!") + ..() + if(ishuman(target)) + var/mob/living/carbon/human/H = target + H.adjustStaminaLoss(8) /mob/living/simple_animal/hostile/carp/holocarp icon_state = "holocarp" icon_living = "holocarp" + maxbodytemp = INFINITY /mob/living/simple_animal/hostile/carp/holocarp/Die() - del(src) - return \ No newline at end of file + ..() + ghostize() + qdel(src) + return + +/mob/living/simple_animal/hostile/carp/megacarp + icon = 'icons/mob/alienqueen.dmi' + name = "Mega Space Carp" + desc = "A ferocious, fang bearing creature that resembles a shark. This one seems especially ticked off." + icon_state = "megacarp" + icon_living = "megacarp" + icon_dead = "megacarp_dead" + icon_gib = "megacarp_gib" + maxHealth = 65 + health = 65 + pixel_x = -16 + + melee_damage_lower = 20 + melee_damage_upper = 20 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm index d72d913e6c5..9a3357e058a 100644 --- a/code/modules/mob/living/simple_animal/hostile/creature.dm +++ b/code/modules/mob/living/simple_animal/hostile/creature.dm @@ -13,4 +13,4 @@ attacktext = "chomps" attack_sound = 'sound/weapons/bite.ogg' faction = list("creature") - speed = 4 \ No newline at end of file + diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 7d0960102cc..dbf396eb7f5 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -9,7 +9,7 @@ response_help = "passes through the" response_disarm = "shoves" response_harm = "hits the" - speed = -1 + speed = 0 maxHealth = 80 health = 80 @@ -18,6 +18,7 @@ melee_damage_upper = 15 attacktext = "grips" attack_sound = 'sound/hallucinations/growl1.ogg' + speak_emote = list("growls") min_oxy = 0 max_oxy = 0 @@ -38,12 +39,13 @@ /mob/living/simple_animal/hostile/faithless/FindTarget() . = ..() if(.) - emote("wails at [.]") + emote("me", 1, "wails at [.]!") /mob/living/simple_animal/hostile/faithless/AttackingTarget() - . =..() - var/mob/living/L = . - if(istype(L)) + ..() + if(iscarbon(target)) + var/mob/living/carbon/C = target if(prob(12)) - L.Weaken(3) - L.visible_message("\the [src] knocks down \the [L]!") \ No newline at end of file + C.Weaken(3) + C.visible_message("\The [src] knocks down \the [C]!", \ + "\The [src] knocks you down!") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index ab7e50170b0..91e99507875 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -14,6 +14,7 @@ melee_damage_lower = 2 melee_damage_upper = 3 attacktext = "claws" + attack_sound = 'sound/weapons/bladeslice.ogg' projectilesound = 'sound/weapons/Gunshot.ogg' projectiletype = /obj/item/projectile/hivebotbullet faction = list("hivebot") @@ -26,7 +27,7 @@ min_n2 = 0 max_n2 = 0 minbodytemp = 0 - speed = 4 + speak_emote = list("states") /mob/living/simple_animal/hostile/hivebot/range name = "Hivebot" @@ -54,7 +55,8 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() - del src + ghostize() + qdel(src) return /mob/living/simple_animal/hostile/hivebot/tele//this still needs work diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 723146df082..74de3086a9c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -21,6 +21,7 @@ melee_damage_upper = 12 attacktext = "attacks" attack_sound = 'sound/weapons/bite.ogg' + speak_emote = list("creaks") min_oxy = 0 max_oxy = 0 @@ -43,7 +44,8 @@ /mob/living/simple_animal/hostile/mimic/Die() ..() visible_message("\red [src] stops moving!") - del(src) + ghostize() + qdel(src) @@ -177,6 +179,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca icon = O.icon icon_state = O.icon_state icon_living = icon_state + overlays = O.overlays if(istype(O, /obj/structure) || istype(O, /obj/machinery)) health = (anchored * 50) + 50 @@ -197,7 +200,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca src.creator = creator faction += "\ref[creator]" // very unique if(destroy_original) - del(O) + qdel(O) return 1 return @@ -206,13 +209,14 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca ..() /mob/living/simple_animal/hostile/mimic/copy/AttackingTarget() - . =..() + ..() if(knockdown_people) - var/mob/living/L = . - if(istype(L)) + if(iscarbon(target)) + var/mob/living/carbon/C = target if(prob(15)) - L.Weaken(1) - L.visible_message("\the [src] knocks down \the [L]!") + C.Weaken(2) + C.visible_message("\The [src] knocks down \the [C]!", \ + "\The [src] knocks you down!") // // Machine Mimics (Made by Malf AI) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index b2d8c1c37e1..8fa326b2e64 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -74,6 +74,7 @@ melee_damage_upper = 12 attacktext = "bites into" a_intent = "harm" + speak_emote = list("chitters") attack_sound = 'sound/weapons/bladeslice.ogg' ranged_cooldown_cap = 4 aggro_vision_range = 9 @@ -142,6 +143,7 @@ attacktext = "barrels into" attack_sound = 'sound/weapons/punch1.ogg' a_intent = "help" + speak_emote = list("screeches") throw_message = "sinks in slowly, before being pushed out of " status_flags = CANPUSH search_objects = 1 @@ -181,7 +183,7 @@ ore_eaten++ if(!(O.type in ore_types_eaten)) ore_types_eaten += O.type - del(O) + qdel(O) if(ore_eaten > 5)//Limit the scope of the reward you can get, or else things might get silly ore_eaten = 5 visible_message("The ore was swallowed whole!") @@ -192,7 +194,7 @@ spawn(chase_time) if(alerted) visible_message("The [src.name] buries into the ground, vanishing from sight!") - del(src) + qdel(src) /mob/living/simple_animal/hostile/asteroid/goldgrub/proc/Reward() if(!ore_eaten || ore_types_eaten.len == 0) @@ -242,6 +244,7 @@ melee_damage_upper = 0 attacktext = "lashes out at" speak_emote = list("telepathically cries") + attack_sound = 'sound/weapons/pierce.ogg' throw_message = "falls right through the strange body of the" ranged_cooldown = 0 ranged_cooldown_cap = 0 @@ -262,6 +265,7 @@ /mob/living/simple_animal/hostile/asteroid/hivelord/Die() new /obj/item/asteroid/hivelord_core(src.loc) + mouse_opacity = 1 ..() /obj/item/asteroid/hivelord_core @@ -316,6 +320,7 @@ melee_damage_upper = 2 attacktext = "slashes" speak_emote = list("telepathically cries") + attack_sound = 'sound/weapons/pierce.ogg' throw_message = "falls right through the strange body of the" environment_smash = 0 pass_flags = PASSTABLE diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index 046274a541c..0d1d16ac19a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -17,11 +17,15 @@ melee_damage_upper = 1 attack_same = 2 attacktext = "chomps" + attack_sound = 'sound/weapons/bite.ogg' faction = list("mushroom") environment_smash = 0 stat_attack = 2 mouse_opacity = 1 speed = 1 + ventcrawler = 2 + robust_searching = 1 + speak_emote = list("squeaks") var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight @@ -39,19 +43,20 @@ /mob/living/simple_animal/hostile/mushroom/Life() ..() if(!stat)//Mushrooms slowly regenerate if conscious, for people who want to save them from being eaten - health = min(health+2, maxHealth) + adjustBruteLoss(-2) /mob/living/simple_animal/hostile/mushroom/New()//Makes every shroom a little unique melee_damage_lower += rand(3, 5) melee_damage_upper += rand(10,20) maxHealth += rand(40,60) - move_to_delay = rand(2,10) + move_to_delay = rand(3,11) var/cap_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) cap_living = image('icons/mob/animal.dmi',icon_state = "mushroom_cap") cap_dead = image('icons/mob/animal.dmi',icon_state = "mushroom_cap_dead") cap_living.color = cap_color cap_dead.color = cap_color UpdateMushroomCap() + health = maxHealth ..() /mob/living/simple_animal/hostile/mushroom/adjustBruteLoss(var/damage)//Possibility to flee from a fight just to make it more visually interesting @@ -74,8 +79,8 @@ if(level_gain < 1)//So we still gain a level if two mushrooms were the same level level_gain = 1 M.LevelUp(level_gain) - M.health = M.maxHealth - del(src) + M.adjustBruteLoss(-M.maxHealth) + qdel(src) ..() /mob/living/simple_animal/hostile/mushroom/revive() @@ -97,9 +102,8 @@ /mob/living/simple_animal/hostile/mushroom/proc/Recover() visible_message("[src] slowly begins to recover.") - health = 5 faint_ticker = 0 - icon_state = icon_living + revive() UpdateMushroomCap() recovery_cooldown = 1 spawn(300) @@ -113,7 +117,7 @@ else melee_damage_upper += (level_gain * rand(1,5)) maxHealth += (level_gain * rand(1,5)) - health = maxHealth //They'll always heal, even if they don't gain a level, in case you want to keep this shroom around instead of harvesting it + adjustBruteLoss(-maxHealth) //They'll always heal, even if they don't gain a level, in case you want to keep this shroom around instead of harvesting it /mob/living/simple_animal/hostile/mushroom/proc/Bruise() if(!bruised && !stat) @@ -124,7 +128,7 @@ if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom)) if(stat == DEAD && !recovery_cooldown) Recover() - del(I) + qdel(I) else user << "[src] won't eat it!" return @@ -155,4 +159,4 @@ S.reagents.add_reagent("mushroomhallucinogen", powerlevel) S.reagents.add_reagent("omnizine", powerlevel) S.reagents.add_reagent("synaptizine", powerlevel) - del(src) \ No newline at end of file + qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index d886c0beff2..b642c5c6dda 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -9,8 +9,7 @@ response_help = "pushes the" response_disarm = "shoves" response_harm = "hits the" - speed = 4 - stop_automated_movement_when_pulled = 0 + speed = 0 maxHealth = 100 health = 100 @@ -29,6 +28,7 @@ min_n2 = 0 max_n2 = 0 unsuitable_atoms_damage = 15 + speak_emote = list("yarrs") var/corpse = /obj/effect/landmark/mobcorpse/pirate var/weapon1 = /obj/item/weapon/melee/energy/sword/pirate @@ -55,5 +55,6 @@ new corpse (src.loc) if(weapon1) new weapon1 (src.loc) - del src + ghostize() + qdel(src) return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index 68d0e3c5cdb..d62a4ba976d 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -14,15 +14,15 @@ emote_see = list("honks") speak_chance = 1 a_intent = "harm" - stop_automated_movement_when_pulled = 0 maxHealth = 75 health = 75 - speed = -1 + speed = 0 harm_intent_damage = 8 melee_damage_lower = 10 melee_damage_upper = 10 attacktext = "attacks" attack_sound = 'sound/items/bikehorn.ogg' + environment_smash = 0 min_oxy = 5 max_oxy = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index 0da2e3bf84f..b594de5e398 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -10,14 +10,14 @@ response_help = "pokes the" response_disarm = "shoves the" response_harm = "hits the" - speed = 4 - stop_automated_movement_when_pulled = 0 + speed = 0 maxHealth = 100 health = 100 harm_intent_damage = 5 melee_damage_lower = 15 melee_damage_upper = 15 attacktext = "punches" + attack_sound = 'sound/weapons/punch1.ogg' a_intent = "harm" var/corpse = /obj/effect/landmark/mobcorpse/russian var/weapon1 = /obj/item/weapon/kitchenknife diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index c5c9c24b577..d7ac5db34f6 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -10,14 +10,14 @@ response_help = "pokes the" response_disarm = "shoves the" response_harm = "hits the" - speed = 4 - stop_automated_movement_when_pulled = 0 + speed = 0 maxHealth = 100 health = 100 harm_intent_damage = 5 melee_damage_lower = 10 melee_damage_upper = 10 attacktext = "punches" + attack_sound = 'sound/weapons/punch1.ogg' a_intent = "harm" var/corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier var/weapon1 @@ -55,6 +55,7 @@ weapon1 = /obj/item/weapon/melee/energy/sword/red weapon2 = /obj/item/weapon/shield/energy attacktext = "slashes" + attack_sound = 'sound/weapons/bladeslice.ogg' status_flags = 0 /mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params) @@ -67,6 +68,7 @@ visible_message("\red \b [src] has been attacked with the [O] by [user]. ") else visible_message("\red \b [src] blocks the [O] with its shield! ") + playsound(loc, O.hitsound, 25, 1, -1) else usr << "\red This weapon is ineffective, it does no damage." visible_message("\red [user] gently taps [src] with the [O]. ") @@ -96,7 +98,7 @@ icon_living = "syndicatemeleespace" name = "Syndicate Commando" corpse = /obj/effect/landmark/mobcorpse/syndicatecommando - speed = 0 + speed = 1 /mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/check_drift = 0) return @@ -128,7 +130,7 @@ max_n2 = 0 minbodytemp = 0 corpse = /obj/effect/landmark/mobcorpse/syndicatecommando - speed = 0 + speed = 1 /mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/check_drift = 0) return @@ -158,6 +160,7 @@ min_n2 = 0 max_n2 = 0 minbodytemp = 0 + flying = 1 /mob/living/simple_animal/hostile/viscerator/Die() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 6e23603723e..c03e6dbdcb0 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -8,11 +8,10 @@ icon_gib = "pine_1" speak_chance = 0 turns_per_move = 5 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat response_help = "brushes the" response_disarm = "pushes the" response_harm = "hits the" - speed = -1 + speed = 1 maxHealth = 250 health = 250 @@ -23,6 +22,7 @@ melee_damage_upper = 12 attacktext = "bites" attack_sound = 'sound/weapons/bite.ogg' + speak_emote = list("pines") //Space carp aren't affected by atmos. min_oxy = 0 @@ -35,7 +35,7 @@ max_n2 = 0 minbodytemp = 0 - faction = list("carp") + faction = list("hostile") /mob/living/simple_animal/hostile/tree/FindTarget() . = ..() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 861df0c1c38..5d6b03d03ab 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -490,6 +490,18 @@ /mob/living/simple_animal/update_fire() return +/mob/living/simple_animal/update_transform() + var/matrix/ntransform = matrix(transform) //aka transform.Copy() + var/changed = 0 + + if(resize != RESIZE_DEFAULT_SIZE) + changed++ + ntransform.Scale(resize) + resize = RESIZE_DEFAULT_SIZE + + if(changed) + animate(src, transform = ntransform, time = 2, easing = EASE_IN|EASE_OUT) + /mob/living/simple_animal/revive() ..() health = maxHealth diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 0d766fa162b..db1fda16915 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1057,7 +1057,7 @@ var/list/slot_equipment_priority = list( \ if(istype(buckled, /obj/vehicle)) var/obj/vehicle/V = buckled if(stat || weakened || paralysis || resting || sleeping || (status_flags & FAKEDEATH)) - lying = 1 + lying = 90 canmove = 0 pixel_y = V.mob_offset_y - 5 else @@ -1070,13 +1070,13 @@ var/list/slot_equipment_priority = list( \ if( istype(buckled,/obj/structure/stool/bed/chair) ) lying = 0 else - lying = 1 + lying = 90 else if(buckled && is_movable) anchored = 0 canmove = 1 lying = 0 else if( stat || weakened || paralysis || resting || sleeping || (status_flags & FAKEDEATH)) - lying = 1 + lying = 90 canmove = 0 else if( stunned ) canmove = 0 @@ -1102,9 +1102,8 @@ var/list/slot_equipment_priority = list( \ if(update_icon) //forces a full overlay update update_icon = 0 regenerate_icons() - else if( lying != lying_prev ) - update_icons() - + update_transform() + lying_prev = lying return canmove /mob/proc/fall(var/forced) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 583075472e0..394d098fdc8 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -232,3 +232,5 @@ var/list/active_genes=list() var/last_movement = -100 // Last world.time the mob actually moved of its own accord. + + var/resize = 1 //Badminnery resize \ No newline at end of file diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 49420198f26..5dfa7fe46db 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -58,7 +58,7 @@ proc/isembryo(A) return 0 /proc/iscorgi(A) - if(istype(A, /mob/living/simple_animal/corgi)) + if(istype(A, /mob/living/simple_animal/pet/corgi)) return 1 return 0 @@ -68,7 +68,7 @@ proc/isembryo(A) return 0 /proc/iscat(A) - if(istype(A, /mob/living/simple_animal/cat)) + if(istype(A, /mob/living/simple_animal/pet/cat)) return 1 return 0 diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm index a32e373fccd..53946a3eb1d 100644 --- a/code/modules/mob/new_player/login.dm +++ b/code/modules/mob/new_player/login.dm @@ -34,3 +34,12 @@ if(client) handle_privacy_poll() client.playtitlemusic() + + if(config.player_overflow_cap && config.overflow_server_url) //Overflow rerouting, if set, forces players to be moved to a different server once a player cap is reached. Less rough than a pure kick. + if(src.client.holder) return //admins are immune to overflow rerouting + if(config.overflow_whitelist.Find(lowertext(src.ckey))) return //Whitelisted people are immune to overflow rerouting. + var/tally = 0 + for(var/client/C in clients) + tally++ + if(tally > config.player_overflow_cap) + src << link(config.overflow_server_url) \ No newline at end of file diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 4a6138e094a..0aa42b25e2e 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -318,7 +318,7 @@ for(var/t in organs) //this really should not be necessary del(t) - var/mob/living/simple_animal/corgi/new_corgi = new /mob/living/simple_animal/corgi (loc) + var/mob/living/simple_animal/pet/corgi/new_corgi = new /mob/living/simple_animal/pet/corgi (loc) new_corgi.a_intent = "harm" new_corgi.key = key @@ -408,9 +408,9 @@ return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype //Good mobs! - if(ispath(MP, /mob/living/simple_animal/cat)) + if(ispath(MP, /mob/living/simple_animal/pet/cat)) return 1 - if(ispath(MP, /mob/living/simple_animal/corgi)) + if(ispath(MP, /mob/living/simple_animal/pet/corgi)) return 1 if(ispath(MP, /mob/living/simple_animal/crab)) return 1 @@ -430,11 +430,11 @@ return 1 //Parrots are no longer unfinished! -Nodrak if(ispath(MP, /mob/living/simple_animal/pony)) return 1 // ZOMG PONIES WHEEE - if(ispath(MP, /mob/living/simple_animal/fox)) + if(ispath(MP, /mob/living/simple_animal/pet/fox)) return 1 if(ispath(MP, /mob/living/simple_animal/chick)) return 1 - if(ispath(MP, /mob/living/simple_animal/pug)) + if(ispath(MP, /mob/living/simple_animal/pet/pug)) return 1 if(ispath(MP, /mob/living/simple_animal/butterfly)) return 1 @@ -447,9 +447,9 @@ return 0 //Sanity, this should never happen. //Animals! - if(ispath(MP, /mob/living/simple_animal/cat)) + if(ispath(MP, /mob/living/simple_animal/pet/cat)) return 1 - if(ispath(MP, /mob/living/simple_animal/corgi)) + if(ispath(MP, /mob/living/simple_animal/pet/corgi)) return 1 if(ispath(MP, /mob/living/simple_animal/crab)) return 1 @@ -461,11 +461,11 @@ return 1 if(ispath(MP, /mob/living/simple_animal/pony)) return 1 - if(ispath(MP, /mob/living/simple_animal/fox)) + if(ispath(MP, /mob/living/simple_animal/pet/fox)) return 1 if(ispath(MP, /mob/living/simple_animal/chick)) return 1 - if(ispath(MP, /mob/living/simple_animal/pug)) + if(ispath(MP, /mob/living/simple_animal/pet/pug)) return 1 if(ispath(MP, /mob/living/simple_animal/butterfly)) return 1 diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index ef0c3461fd7..0362ffa6097 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -69,3 +69,6 @@ mob/proc/update_inv_wear_pda() /mob/proc/update_targeted() return + +/mob/proc/update_transform() + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 01b425c9140..0f36f012b71 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -163,6 +163,7 @@ obj/item/weapon/gun/energy/staff/focus icon_state = "energy" projectile_type = "/obj/item/projectile/clown" fire_sound = 'sound/weapons/Gunshot_smg.ogg' + clumsy_check = 0 diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index e06ee2faa12..8a3b326c018 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -47,7 +47,7 @@ A.real_name = O.real_name A.name = O.name if(iscorgi(O)) - var/mob/living/simple_animal/corgi/C = O + var/mob/living/simple_animal/pet/corgi/C = O if(C.inventory_head) C.inventory_head.loc = C.loc if(C.inventory_back) @@ -194,15 +194,15 @@ proc/wabbajack(mob/living/M) var/animal = pick("parrot","corgi","crab","pug","cat","tomato","mouse","chicken","cow","lizard","chick","fox") switch(animal) if("parrot") new_mob = new /mob/living/simple_animal/parrot(M.loc) - if("corgi") new_mob = new /mob/living/simple_animal/corgi(M.loc) + if("corgi") new_mob = new /mob/living/simple_animal/pet/corgi(M.loc) if("crab") new_mob = new /mob/living/simple_animal/crab(M.loc) - if("cat") new_mob = new /mob/living/simple_animal/cat(M.loc) + if("cat") new_mob = new /mob/living/simple_animal/pet/cat(M.loc) if("tomato") new_mob = new /mob/living/simple_animal/tomato(M.loc) if("mouse") new_mob = new /mob/living/simple_animal/mouse(M.loc) if("chicken") new_mob = new /mob/living/simple_animal/chicken(M.loc) if("cow") new_mob = new /mob/living/simple_animal/cow(M.loc) if("lizard") new_mob = new /mob/living/simple_animal/lizard(M.loc) - if("fox") new_mob = new /mob/living/simple_animal/fox(M.loc) + if("fox") new_mob = new /mob/living/simple_animal/pet/fox(M.loc) else new_mob = new /mob/living/simple_animal/chick(M.loc) new_mob.universal_speak = 1 if("human") diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm index 54538e57a7b..38a996775cb 100644 --- a/code/modules/reagents/grenade_launcher.dm +++ b/code/modules/reagents/grenade_launcher.dm @@ -11,26 +11,30 @@ force = 5.0 var/list/grenades = new/list() var/max_grenades = 3 + var/ammo_name = "grenade" + var/ammo_type = /obj/item/weapon/grenade + var/unloaded + m_amt = 2000 examine() set src in view() ..() if (!(usr in view(2)) && usr!=src.loc) return - usr << "\icon [src] Grenade launcher:" - usr << "\blue [grenades] / [max_grenades] Grenades." + usr << "\icon [src] [name]:" + usr << "\blue [grenades.len] / [max_grenades] [ammo_name]s." attackby(obj/item/I as obj, mob/user as mob, params) - if((istype(I, /obj/item/weapon/grenade))) + if((istype(I, ammo_type))) if(grenades.len < max_grenades) user.drop_item() I.loc = src grenades += I - user << "\blue You put the grenade in the grenade launcher." - user << "\blue [grenades.len] / [max_grenades] Grenades." + user << "\blue You put the [ammo_name] in the [name]." + user << "\blue [grenades.len] / [max_grenades] [ammo_name]s." else - usr << "\red The grenade launcher cannot hold more grenades." + usr << "\red The grenade launcher cannot hold more [ammo_name]s." afterattack(obj/target, mob/user , flag) @@ -46,21 +50,68 @@ if(grenades.len) spawn(0) fire_grenade(target,user) else - usr << "\red The grenade launcher is empty." + usr << "\red The [name] is empty." proc fire_grenade(atom/target, mob/user) for(var/mob/O in viewers(world.view, user)) - O.show_message(text("\red [] fired a grenade!", user), 1) - user << "\red You fire the grenade launcher!" + O.show_message(text("\red [] fired a [ammo_name]!", user), 1) + user << "\red You fire the [name]!" var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta! grenades -= F F.loc = user.loc F.throw_at(target, 30, 2, user) - message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).") - log_game("[key_name_admin(user)] used a grenade ([src.name]).") + message_admins("[key_name_admin(user)] fired a [ammo_name] ([F.name]) from a launcher ([src.name]).") + log_game("[key_name_admin(user)] used a [ammo_name] ([src.name]).") F.active = 1 F.icon_state = initial(icon_state) + "_active" playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) spawn(15) - F.prime() \ No newline at end of file + F.prime() + +/obj/item/weapon/gun/grenadelauncher/piecannon + name = "pie cannon" + icon = 'icons/obj/gun.dmi' + icon_override = 'icons/mob/in-hand/guns.dmi' + icon_state = "piecannon0" + item_state = "piecannon0" + w_class = 4.0 + throw_speed = 2 + throw_range = 10 + force = 5.0 + clumsy_check = 0 + grenades = new/list() + max_grenades = 5 + ammo_name = "cream pie" + ammo_type = /obj/item/weapon/reagent_containers/food/snacks/pie + +/obj/item/weapon/gun/grenadelauncher/piecannon/New() + ..() + for(var/i=0, i < max_grenades, i++) + var/obj/item/weapon/reagent_containers/food/snacks/pie/P = new /obj/item/weapon/reagent_containers/food/snacks/pie(src) + grenades += P + +/obj/item/weapon/gun/grenadelauncher/piecannon/attackby(obj/item/I as obj, mob/user as mob, params) + if((istype(I, ammo_type))) + if(grenades.len < max_grenades) + user.drop_item() + I.loc = src + grenades += I + user << "\blue You put the [ammo_name] in the [name]." + user << "\blue [grenades.len] / [max_grenades] [ammo_name]s." + icon_state = "piecannon1" + else + usr << "\red The grenade launcher cannot hold more [ammo_name]s." + +/obj/item/weapon/gun/grenadelauncher/piecannon/fire_grenade(atom/target, mob/user) + for(var/mob/O in viewers(world.view, user)) + O.show_message(text("\red [] fired a [ammo_name]!", user), 1) + user << "\red You fire the [name]!" + var/obj/item/weapon/reagent_containers/food/snacks/pie/P = grenades[1] //Now with less copypasta! + grenades -= P + P.loc = user.loc + P.throw_at(target, 30, 2, user) + message_admins("[key_name_admin(user)] fired a [ammo_name] ([P.name]) from a launcher ([src.name]).") + log_game("[key_name_admin(user)] used a [ammo_name] ([src.name]).") + if(!grenades.len) + icon_state = "piecannon0" diff --git a/code/modules/reagents/newchem/other.dm b/code/modules/reagents/newchem/other.dm index 6012f1a4bbb..64f2fa56419 100644 --- a/code/modules/reagents/newchem/other.dm +++ b/code/modules/reagents/newchem/other.dm @@ -153,7 +153,7 @@ datum/reagent/corgium /datum/chemical_reaction/corgium/on_reaction(var/datum/reagents/holder, var/created_volume) var/location = get_turf(holder.my_atom) - new /mob/living/simple_animal/corgi(location) + new /mob/living/simple_animal/pet/corgi(location) ..() return diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 28df860f078..da6bb4a97c9 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -243,7 +243,7 @@ if(bitecount >= 4) M.visible_message("[M] [pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where \the [src] was")].","You swallow up the last part of \the [src].") playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1) - var/mob/living/simple_animal/corgi/C = M + var/mob/living/simple_animal/pet/corgi/C = M if (C.health <= C.maxHealth + 5) C.health += 5 else diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm b/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm index 3242d7a73ef..8fb51c6f690 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm @@ -32,9 +32,9 @@ ) else spawn_type = pick(\ - /mob/living/simple_animal/cat,\ - /mob/living/simple_animal/corgi,\ - /mob/living/simple_animal/corgi/puppy,\ + /mob/living/simple_animal/pet/cat,\ + /mob/living/simple_animal/pet/corgi,\ + /mob/living/simple_animal/pet/corgi/puppy,\ /mob/living/simple_animal/chicken,\ /mob/living/simple_animal/cow,\ /mob/living/simple_animal/parrot,\ diff --git a/code/modules/store/items.dm b/code/modules/store/items.dm index 39629f10131..0005b74fe9c 100644 --- a/code/modules/store/items.dm +++ b/code/modules/store/items.dm @@ -57,6 +57,12 @@ typepath = /obj/item/weapon/storage/box/dice cost = 200 +/datum/storeitem/collar + name = "Pet Collar" + desc = "A box containing a pet collar; perfect for claiming a pet as your own personal accessory." + typepath = /obj/item/clothing/accessory/petcollar + cost = 350 + /datum/storeitem/crayons name = "Crayons" desc = "Let security know how they're doing by scrawling lovenotes all over their hallways." diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index 33b8fd46f6c..4a2ac380a55 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -104,22 +104,6 @@ ////////////////////////STAGE 4///////////////////////////////// -/datum/disease2/effect/borg - name = "Borgification Disorder" - stage = 4 - badness = 2 - activate(var/mob/living/carbon/mob,var/multiplier) - mob << "\red You feel like booping and beeping." - if(prob(50)) - var/location = get_turf(mob.loc) - if(mob.client) - mob.client.mob = new/mob/living/silicon/robot(location) - else - new/mob/living/silicon/robot(location) - var/datum/disease2/disease/D = mob.virus2 - mob.gib() - del D - /datum/disease2/effect/omnizine name = "Panacea Effect" stage = 4 diff --git a/code/world.dm b/code/world.dm index d216b314751..e1e99b18d2f 100644 --- a/code/world.dm +++ b/code/world.dm @@ -313,6 +313,7 @@ var/world_topic_spam_protect_time = world.timeofday config.load("config/game_options.txt","game_options") config.loadsql("config/dbconfig.txt") config.loadforumsql("config/forumdbconfig.txt") + config.loadoverflowwhitelist("config/ofwhitelist.txt") // apply some settings from config.. /hook/startup/proc/loadMods() diff --git a/config/example/config.txt b/config/example/config.txt index 4f4b034718b..e8987e51795 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -273,4 +273,13 @@ EVENT_DELAY_UPPER 15;45;70 EVENT_CUSTOM_START_MAJOR 80;100 ## Strength of ambient star light. Set to 0 or less to turn off. -STARLIGHT 0 \ No newline at end of file +STARLIGHT 0 + +## Player rerouting stuff +## If not 0, players can be rerouted to an overflow server after a certain cap is reached + +## Cap before players start being rerouted +PLAYER_REROUTE_CAP 0 + +## Server to reroute to +#OVERFLOW_SERVER_URL byond://example.org:1111 \ No newline at end of file diff --git a/config/example/ofwhitelist.txt b/config/example/ofwhitelist.txt new file mode 100644 index 00000000000..7588d3b698e --- /dev/null +++ b/config/example/ofwhitelist.txt @@ -0,0 +1,2 @@ +#Any ckeys in this file will be ignored by the overflow system. +example142 \ No newline at end of file diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index a5e120020a2..71ec10e420b 100644 Binary files a/icons/mob/alien.dmi and b/icons/mob/alien.dmi differ diff --git a/icons/mob/alienhuge.dmi b/icons/mob/alienhuge.dmi index 93eae9e1ec8..0ebb470822e 100644 Binary files a/icons/mob/alienhuge.dmi and b/icons/mob/alienhuge.dmi differ diff --git a/icons/mob/alienlarge.dmi b/icons/mob/alienlarge.dmi index 340eba5337f..d6726914c20 100644 Binary files a/icons/mob/alienlarge.dmi and b/icons/mob/alienlarge.dmi differ diff --git a/icons/mob/alienqueen.dmi b/icons/mob/alienqueen.dmi new file mode 100644 index 00000000000..72449bc2ea7 Binary files /dev/null and b/icons/mob/alienqueen.dmi differ diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index ec772952a9c..2a5f2b10d94 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/corgi_back.dmi b/icons/mob/corgi_back.dmi index 81626df0333..657a7c01a54 100644 Binary files a/icons/mob/corgi_back.dmi and b/icons/mob/corgi_back.dmi differ diff --git a/icons/mob/corgi_head.dmi b/icons/mob/corgi_head.dmi index f158d1bd160..2a7e92f3fcb 100644 Binary files a/icons/mob/corgi_head.dmi and b/icons/mob/corgi_head.dmi differ diff --git a/icons/mob/in-hand/guns.dmi b/icons/mob/in-hand/guns.dmi index 619a7e534ef..da0a3a89699 100644 Binary files a/icons/mob/in-hand/guns.dmi and b/icons/mob/in-hand/guns.dmi differ diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi new file mode 100644 index 00000000000..8a14c1e3602 Binary files /dev/null and b/icons/mob/pets.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index 513a38421e6..50c3e562887 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index 1c1bbdf449f..a92834cb159 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index ba0ca07b908..ebef770d77a 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/paradise.dme b/paradise.dme index 7d95b27c84f..a4711b96195 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1256,6 +1256,7 @@ #include "code\modules\mob\living\carbon\life.dm" #include "code\modules\mob\living\carbon\shock.dm" #include "code\modules\mob\living\carbon\superheroes.dm" +#include "code\modules\mob\living\carbon\update_icons.dm" #include "code\modules\mob\living\carbon\alien\alien.dm" #include "code\modules\mob\living\carbon\alien\alien_defenses.dm" #include "code\modules\mob\living\carbon\alien\death.dm" @@ -1402,6 +1403,7 @@ #include "code\modules\mob\living\simple_animal\friendly\fox.dm" #include "code\modules\mob\living\simple_animal\friendly\lizard.dm" #include "code\modules\mob\living\simple_animal\friendly\mouse.dm" +#include "code\modules\mob\living\simple_animal\friendly\pet.dm" #include "code\modules\mob\living\simple_animal\friendly\pug.dm" #include "code\modules\mob\living\simple_animal\friendly\slime.dm" #include "code\modules\mob\living\simple_animal\friendly\spiderbot.dm"