mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
* first bow powercreep edition * first patch * description updates * added the stuff * follow-up edits * very mild voicebox updates * all the stuff * some value/wording changes + shifts shadow cloak to nukies * halve bow slowdown * aaaa * uhoh * cloak charge rate changes * remove redundant line * upgrades break bow damage to middle finger * spellbook adjustments * tribal armor tweaks (I'm looking at you pathfinder cloak and you're gonna get slapped soon) * aaa * more stuff * agh * done? * minor tweaks + craftable gloves * adds bone crossbow crafting recipe * maybe fix cornflakes * Squashed commit of the following: commit414af05928Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 18 22:05:17 2023 -0500 Automatic changelog generation #17965 [ci skip] commit4dbd995239Author: adamsong <adamsong@users.noreply.github.com> Date: Sat Feb 18 22:05:15 2023 -0500 Fix apply_innate_effects not getting mob refs like its supposed to, fixes veil health not being modified (#17965) commit8f9f915f69Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 18 22:04:08 2023 -0500 Automatic changelog generation #17970 [ci skip] commit50ed5323a5Author: ynot01 <ynot000001@gmail.com> Date: Sat Feb 18 22:04:06 2023 -0500 Easier wounds on unclosed surgery sites (#17970) * Update _bodyparts.dm * Update code/modules/surgery/bodyparts/_bodyparts.dm commit9c4d0652dbAuthor: Changelogs <action@github.com> Date: Sat Feb 18 14:07:01 2023 +0000 Automatic changelog compile [ci skip] commit03aae8b4cfAuthor: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 18 01:58:51 2023 -0500 Automatic changelog generation #17934 [ci skip] commit2761924c1bAuthor: ynot01 <ynot000001@gmail.com> Date: Sat Feb 18 01:58:49 2023 -0500 pvp enabled (#17934) commitcfe754a9a5Author: Changelogs <action@github.com> Date: Sat Feb 18 06:10:32 2023 +0000 Automatic changelog compile [ci skip] commit491ba04913Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 17 18:08:00 2023 -0500 Automatic changelog generation #17949 [ci skip] commita65d885b53Author: ynot01 <ynot000001@gmail.com> Date: Fri Feb 17 18:07:57 2023 -0500 Fixes energy sword dupe exploit (#17949) * Update SuperBeepsky.dm * Update code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm Co-authored-by: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> * Update SuperBeepsky.dm --------- Co-authored-by: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> commit7a8a6689b6Author: Changelogs <action@github.com> Date: Fri Feb 17 22:17:32 2023 +0000 Automatic changelog compile [ci skip] commite43f06f61cAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 17 15:41:43 2023 -0500 Automatic changelog generation #17924 [ci skip] commita4229d8acbAuthor: ynot01 <ynot000001@gmail.com> Date: Fri Feb 17 15:41:40 2023 -0500 [BOUNTY] Holy Light sect, dedicated to healing (#17924) * you defy the light * revive and be less bad flavor * Update code/modules/religion/religion_sects.dm Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com> --------- Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com> commitad64a89f0aAuthor: ktlwjec <122807629+ktlwjec0@users.noreply.github.com> Date: Fri Feb 17 18:04:42 2023 +0000 removes plate from greeneggsandham (#17883) commitb0c3ca40a8Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 17 10:59:34 2023 -0500 Automatic changelog generation #17969 [ci skip] commiteefceef5edAuthor: wejengin2 <48154165+wejengin2@users.noreply.github.com> Date: Fri Feb 17 16:59:31 2023 +0100 [box] fixes opacity on psych doors (#17969) * windows * opac commit4b75b528eeAuthor: Changelogs <action@github.com> Date: Fri Feb 17 14:07:57 2023 +0000 Automatic changelog compile [ci skip] commit0a5d72beafAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 17 01:56:41 2023 -0500 Automatic changelog generation #17880 [ci skip] commitf6ed8e4b0bAuthor: adamsong <adamsong@users.noreply.github.com> Date: Fri Feb 17 01:56:39 2023 -0500 Makes vote weight and preferred map actually work (#17880) commit22657a9023Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 17 01:50:20 2023 -0500 Automatic changelog generation #17901 [ci skip] commit783f444541Author: Aquizit <70451213+Aquizit@users.noreply.github.com> Date: Fri Feb 17 00:50:17 2023 -0600 Adds new access define for Secure Tech Storage (#17901) * creates secure tech storage define, gives it to CE and adds it to appropriate lists * sets new access to secure tech storage doors * added secure tech storage to ID modification access * reverting map changes, will be changed in another pr per wej commitb306a6f4c3Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 17 01:33:16 2023 -0500 Automatic changelog generation #17935 [ci skip] commit32cdd383e4Author: SapphicOverload <93578146+SapphicOverload@users.noreply.github.com> Date: Fri Feb 17 01:33:14 2023 -0500 Malfunctioning AIs no longer need to kill androids or synthetics (#17935) * Update objective.dm * Update Malf_Modules.dm commitd83cc04e94Author: Changelogs <action@github.com> Date: Fri Feb 17 06:11:59 2023 +0000 Automatic changelog compile [ci skip] commitb89713fa7cAuthor: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 16 22:40:04 2023 -0500 Automatic changelog generation #17861 [ci skip] commit818973e1e9Author: wejengin2 <48154165+wejengin2@users.noreply.github.com> Date: Fri Feb 17 04:40:02 2023 +0100 fixes some issues in infiltrator base (#17861) * huh * man * adds griddle * that's really funny but fuck you --------- Co-authored-by: Byemoh <baiomurang@gmail.com> commitaf417335c1Author: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 16 22:32:01 2023 -0500 Automatic changelog generation #17942 [ci skip] commit4e6037ec58Author: wejengin2 <48154165+wejengin2@users.noreply.github.com> Date: Fri Feb 17 04:31:58 2023 +0100 [box] Fixes some map issues (#17942) * eo * more * more fixes * damn * cargo double lights * rogue cable and wrong id on ai core door * derwalls a random rwall * tile commit2e52265500Author: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 16 20:08:21 2023 -0500 Automatic changelog generation #17917 [ci skip] commit6ebf0318d9Author: Theos <theubernyan@gmail.com> Date: Thu Feb 16 20:08:18 2023 -0500 Removes the knockout from high level bloodsucker mesmerize since it makes the ability weaker (#17917) * Removes the knockout from high level bloodsucker mesmerize since it makes the ability weaker * Update mesmerize.dm * killing you commit7d664d3af5Author: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 16 20:06:53 2023 -0500 Automatic changelog generation #17918 [ci skip] commitdc8148dcb1Author: ynot01 <ynot000001@gmail.com> Date: Thu Feb 16 20:06:51 2023 -0500 Update roundend.dm (#17918) commita46d618224Author: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 16 20:06:21 2023 -0500 Automatic changelog generation #17928 [ci skip] commitf04bc81f0cAuthor: LazennG <58535870+LazennG@users.noreply.github.com> Date: Thu Feb 16 17:06:18 2023 -0800 Update kinetic_crusher.dm (#17928) commit18fa2ae7afAuthor: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 16 20:05:51 2023 -0500 Automatic changelog generation #17946 [ci skip] commit6857bacb76Author: SapphicOverload <93578146+SapphicOverload@users.noreply.github.com> Date: Thu Feb 16 20:05:48 2023 -0500 Update mousetrap.dm (#17946) commit1751af026cAuthor: Changelogs <action@github.com> Date: Thu Feb 16 22:17:07 2023 +0000 Automatic changelog compile [ci skip] commite005525535Author: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 16 12:19:45 2023 -0500 Automatic changelog generation #17922 [ci skip] commitbc8ae716abAuthor: Ling <lingbleed@gmail.com> Date: Thu Feb 16 18:19:42 2023 +0100 Fixes Atmos fire fighting backpack (#17922) commite04fc1b6a8Author: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 16 12:18:03 2023 -0500 Automatic changelog generation #17939 [ci skip] commit93daa6c361Author: ynot01 <ynot000001@gmail.com> Date: Thu Feb 16 12:18:00 2023 -0500 Bloodsucker Brawn knockdown patch (#17939) * Update brawn.dm * Update brawn.dm * Update brawn.dm commit1ef9484767Author: Changelogs <action@github.com> Date: Thu Feb 16 14:09:56 2023 +0000 Automatic changelog compile [ci skip] commiteaff1fdb1bAuthor: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 16 05:52:39 2023 -0500 Automatic changelog generation #17936 [ci skip] commit3d42d664bcAuthor: adamsong <adamsong@users.noreply.github.com> Date: Thu Feb 16 05:52:36 2023 -0500 Fixes editing bans in game (#17936) * Fixes editing bans in game * Fixes other error commit69ea8d6ca9Author: Changelogs <action@github.com> Date: Thu Feb 16 06:11:47 2023 +0000 Automatic changelog compile [ci skip] commit4e6a16b426Author: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 16 00:37:02 2023 -0500 Automatic changelog generation #17923 [ci skip] commit2a7da8c107Author: ynot01 <ynot000001@gmail.com> Date: Thu Feb 16 00:37:00 2023 -0500 fixes clown sect not healing (#17923) commit890bc91805Author: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 15 20:56:34 2023 -0500 Automatic changelog generation #17945 [ci skip] commitb2b39d3ed8Author: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com> Date: Wed Feb 15 20:56:32 2023 -0500 Update revolution.dm (#17945) commitec2cbd2c89Author: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 15 20:48:13 2023 -0500 Automatic changelog generation #17864 [ci skip] commitcd14d86ed6Author: Theos <theubernyan@gmail.com> Date: Wed Feb 15 20:48:10 2023 -0500 Buffs the ebow to be faster (#17864) * ebow buff?? * obliterate ebow polonium * reduced cooldown commitdf7f9bc020Author: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 15 20:47:28 2023 -0500 Automatic changelog generation #17870 [ci skip] commit232aa3fa55Author: ynot01 <ynot000001@gmail.com> Date: Wed Feb 15 20:47:26 2023 -0500 Update bloodsuckers.dm (#17870) commitd679caad3cAuthor: Changelogs <action@github.com> Date: Wed Feb 15 22:17:39 2023 +0000 Automatic changelog compile [ci skip] commit9678f1f65aAuthor: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 15 14:58:11 2023 -0500 Automatic changelog generation #17930 [ci skip] commit039792ea37Author: Byemoh <baiomurang@gmail.com> Date: Wed Feb 15 13:58:09 2023 -0600 NVS Gax Incinerator Expansion (#17930) commita0fe3e174cAuthor: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 15 11:04:14 2023 -0500 Automatic changelog generation #17941 [ci skip] commita263586d88Author: wejengin2 <48154165+wejengin2@users.noreply.github.com> Date: Wed Feb 15 17:04:08 2023 +0100 eee (#17941) commitf8b90faa17Author: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 15 10:11:12 2023 -0500 Automatic changelog generation #17721 [ci skip] commit1d22d7da18Author: ynot01 <ynot000001@gmail.com> Date: Wed Feb 15 10:11:07 2023 -0500 Long Awaited Psychiatrist Rework (#17721) * PART FIVE * Update brain_trauma.dm * Update examine.dm * Update mild.dm * Update brain_trauma.dm * Update brain_trauma.dm * anomalous floating lightswitch * undo unintended map changes I am sorry I don't know what happened to asteroid station I don't know what changed on the AI satellite I am sorry mapper man * can no longer cure things u shouldnt wound traumas traumas that require the aheal staff traumas that come from quirks * wej * wej 2 * Update YogStation.dmm * Update brain_trauma.dm * Update brain_trauma.dm * Update brain_trauma.dm commit85de433d2dAuthor: Changelogs <action@github.com> Date: Wed Feb 15 14:08:21 2023 +0000 Automatic changelog compile [ci skip] commita8bd8c2280Author: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 15 07:32:49 2023 -0500 Automatic changelog generation #17916 [ci skip] commit3b587559a5Author: Molti <108117184+Moltijoe@users.noreply.github.com> Date: Wed Feb 15 06:32:46 2023 -0600 Who approved this (#17916) commit6828c4758dAuthor: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 15 06:58:56 2023 -0500 Automatic changelog generation #17914 [ci skip] commit3e3ab2b4d6Author: ktlwjec <122807629+ktlwjec0@users.noreply.github.com> Date: Wed Feb 15 11:58:53 2023 +0000 fixes processor recipes (#17914) commit601ce3f675Author: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 15 06:41:26 2023 -0500 Automatic changelog generation #17888 [ci skip] commitbf8867a331Author: Molti <108117184+Moltijoe@users.noreply.github.com> Date: Wed Feb 15 05:41:24 2023 -0600 no hardcritdamage (#17888) commite1a500ec62Author: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 15 05:28:58 2023 -0500 Automatic changelog generation #17781 [ci skip] commit874db73a73Author: ynot01 <ynot000001@gmail.com> Date: Wed Feb 15 05:28:55 2023 -0500 Revert commit64a6c3a(#17781) This reverts64a6c3ac21commit734d6ec0fcAuthor: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 15 05:28:03 2023 -0500 Automatic changelog generation #17772 [ci skip] commit30d564c8dcAuthor: Manatee <74586965+MajManatee@users.noreply.github.com> Date: Wed Feb 15 04:28:00 2023 -0600 A vain attempt to make the minigun more viable (#17772) * mmm minigun * Update minigun.dm commite7542e1f55Author: Changelogs <action@github.com> Date: Wed Feb 15 06:11:58 2023 +0000 Automatic changelog compile [ci skip] commitb5ed98fe7cAuthor: Ling <lingbleed@gmail.com> Date: Wed Feb 15 02:18:53 2023 +0100 Fix crew monitor runtime (#17921) commit4c7b5535b6Author: Changelogs <action@github.com> Date: Tue Feb 14 14:08:13 2023 +0000 Automatic changelog compile [ci skip] commitcfb81a4b91Author: Yogbot-13 <admin@yogstation.net> Date: Tue Feb 14 04:06:15 2023 -0500 Automatic changelog generation #17919 [ci skip] commit5268119ca6Author: ynot01 <ynot000001@gmail.com> Date: Tue Feb 14 04:06:12 2023 -0500 Update recharger.dm (#17919) commit06acbae28dAuthor: Changelogs <action@github.com> Date: Tue Feb 14 06:12:20 2023 +0000 Automatic changelog compile [ci skip] commit369dba9990Author: Changelogs <action@github.com> Date: Mon Feb 13 22:17:26 2023 +0000 Automatic changelog compile [ci skip] commita8b8df1868Author: Yogbot-13 <admin@yogstation.net> Date: Mon Feb 13 16:51:13 2023 -0500 Automatic changelog generation #17887 [ci skip] commit991c54d7e3Author: wejengin2 <48154165+wejengin2@users.noreply.github.com> Date: Mon Feb 13 22:51:10 2023 +0100 yeah (#17887) commitd9aec4444dAuthor: Changelogs <action@github.com> Date: Mon Feb 13 06:12:20 2023 +0000 Automatic changelog compile [ci skip] commitbad039c45fAuthor: Yogbot-13 <admin@yogstation.net> Date: Sun Feb 12 17:52:39 2023 -0500 Automatic changelog generation #17897 [ci skip] commitf251ff8187Author: Skrem_7 <98909416+Skrem7@users.noreply.github.com> Date: Sun Feb 12 17:52:36 2023 -0500 better metashield (#17897) commit1c7d28f658Author: Yogbot-13 <admin@yogstation.net> Date: Sun Feb 12 17:51:22 2023 -0500 Automatic changelog generation #17889 [ci skip] commit4f4d2d8bbbAuthor: LazennG <58535870+LazennG@users.noreply.github.com> Date: Sun Feb 12 14:51:19 2023 -0800 cooldown actions isavailable now calls parent pro (#17889) commit5e3f4b08a7Author: Yogbot-13 <admin@yogstation.net> Date: Sun Feb 12 17:50:40 2023 -0500 Automatic changelog generation #17894 [ci skip] commit062f0a2fd5Author: Manatee <74586965+MajManatee@users.noreply.github.com> Date: Sun Feb 12 16:50:37 2023 -0600 augh (#17894) commit494bbd1982Author: ynot01 <ynot000001@gmail.com> Date: Sun Feb 12 07:41:24 2023 -0500 Update yogstation.dme (#17903) commit596b836652Author: Changelogs <action@github.com> Date: Sun Feb 12 06:10:28 2023 +0000 Automatic changelog compile [ci skip] commitdc689f3715Author: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Sun Feb 12 01:30:21 2023 +0100 Moves some config settings around which should make debug builds from github run faster (#17900) * config update * opos commit80284d7ca0Author: Changelogs <action@github.com> Date: Sat Feb 11 22:15:52 2023 +0000 Automatic changelog compile [ci skip] commit56e85c55c3Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 13:38:04 2023 -0500 Automatic changelog generation #17833 [ci skip] commit80afe50f46Author: ynot01 <ynot000001@gmail.com> Date: Sat Feb 11 13:38:01 2023 -0500 Darkspawn is now a midround instead of a gamemode (#17833) * dspawn midround * disable * performance * move sec counting down * disable nightmare * changes S to H * runtime safety * H and D to var names commit435823b827Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 12:49:50 2023 -0500 Automatic changelog generation #17878 [ci skip] commitfa4b2b98a3Author: ynot01 <ynot000001@gmail.com> Date: Sat Feb 11 12:49:47 2023 -0500 You can no longer change directions while dead (#17878) * Update bindings_atom.dm * Update bindings_atom.dm * Update bindings_atom.dm commit75cfed640fAuthor: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 12:17:44 2023 -0500 Automatic changelog generation #17842 [ci skip] commit291a70fb8fAuthor: Molti <108117184+Moltijoe@users.noreply.github.com> Date: Sat Feb 11 11:17:42 2023 -0600 Removes appendix from darkspawn (#17842) * no appendix please * just uses nohunger * thing * might as well remove it from shadowpeople they have enough going against them as is commit1cc076d57aAuthor: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 12:14:44 2023 -0500 Automatic changelog generation #17828 [ci skip] commitfef1aed09bAuthor: Molti <108117184+Moltijoe@users.noreply.github.com> Date: Sat Feb 11 11:14:42 2023 -0600 IPC martial buffs (#17828) * IPC martial tweak * update the movespeed * it's the mob that does it * bit more uplink stuff * no other guns commitbf62a065f5Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 12:01:19 2023 -0500 Automatic changelog generation #17824 [ci skip] commit20c67e451bAuthor: ynot01 <ynot000001@gmail.com> Date: Sat Feb 11 12:01:16 2023 -0500 Antag Reputation Redux (#17824) * antag repwork * check centcom specifically * GLOB.player_list * Update antag_rep.txt * Update antag_rep.txt * better loop * set miner to 6 * set AI to 6 * cook 5 * psyfch 5 commit866c4f0e97Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 11:39:29 2023 -0500 Automatic changelog generation #17814 [ci skip] commit64726b0798Author: Redd <36747151+ReddicusDragon@users.noreply.github.com> Date: Sat Feb 11 11:39:26 2023 -0500 Changes lizard hiss and increases staff, mentor, and donor retention by allowing felinids to hiss. (#17814) * adds sound * felinids can hiss * felinids can purr * You can no longer purr at people NanoTrasen has noticed an increase in harassment complaints from stations that employ felinids. The reports indicate that felinids would purr at people. NanoTrasen has since banned workplace purring at people. * removes purring * update lizard hiss commitb956f2caaeAuthor: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 11:36:59 2023 -0500 Automatic changelog generation #17809 [ci skip] commit00769859a2Author: Molti <108117184+Moltijoe@users.noreply.github.com> Date: Sat Feb 11 10:36:57 2023 -0600 Nanite heart buff (#17809) commit87bd1794dbAuthor: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 11:36:15 2023 -0500 Automatic changelog generation #17805 [ci skip] commitf286bdb997Author: SapphicOverload <93578146+SapphicOverload@users.noreply.github.com> Date: Sat Feb 11 11:36:12 2023 -0500 you are a good (#17805) commita737b7291eAuthor: Ling <lingbleed@gmail.com> Date: Sat Feb 11 17:35:33 2023 +0100 Fix a ton of harddels (#17803) * Fix a ton of harddels * Out of scope * Stupid commitf77eb885d9Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 11:34:47 2023 -0500 Automatic changelog generation #17724 [ci skip] commit8f4993ae0bAuthor: Molti <108117184+Moltijoe@users.noreply.github.com> Date: Sat Feb 11 10:34:45 2023 -0600 Miners wormhole jaunter location shuffle (#17724) * Gives mining medic a jaunter * in the outfit rather than the locker --------- Co-authored-by: Jamie D <993128+JamieD1@users.noreply.github.com> commita6779b3a77Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 11:27:41 2023 -0500 Automatic changelog generation #17778 [ci skip] commit402e2d775aAuthor: Xander3359 <66163761+Xander3359@users.noreply.github.com> Date: Sat Feb 11 11:27:38 2023 -0500 One handed crusher (With new sprites) (#17778) * 1-Handed Crusher The crusher can now be held in 1 hand, wield it to use it. * one-handed crusher one-handed crusher * Update dynamic.json commitfa67c930d0Author: Jamie D <993128+JamieD1@users.noreply.github.com> Date: Sat Feb 11 16:23:06 2023 +0000 Update dynamic_rulesets_roundstart.dm commit0e05a643a6Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 11:20:01 2023 -0500 Automatic changelog generation #17720 [ci skip] commit738aac2d74Author: Manatee <74586965+MajManatee@users.noreply.github.com> Date: Sat Feb 11 10:19:59 2023 -0600 Revert "replaces chasm spawn from tendrils with lava (#17340)" (#17720) This reverts commitd0abdd2d33. commit0679f56ea6Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 11:19:12 2023 -0500 Automatic changelog generation #17609 [ci skip] commita5660a07e6Author: Theos <theubernyan@gmail.com> Date: Sat Feb 11 11:19:10 2023 -0500 Increase wizard playercount from 27 to 34 so its not syndicate station 2 (the second one) (#17609) * Increase wizard playercount from 27 to 37 so its not syndicate station 2 (the second one) * Update wizard.dm * Update dynamic_rulesets_roundstart.dm commitd1ec159cf3Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 10:50:38 2023 -0500 Automatic changelog generation #17610 [ci skip] commitf49b009b1dAuthor: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Sat Feb 11 07:50:35 2023 -0800 Increase nuke op from 27 to 37 so its not syndicate station 3 (the third one) (#17610) commit75b0447f82Author: Changelogs <action@github.com> Date: Sat Feb 11 14:07:34 2023 +0000 Automatic changelog compile [ci skip] commitab07a0c5caAuthor: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 04:18:21 2023 -0500 Automatic changelog generation #17739 [ci skip] commited09aa658dAuthor: Manatee <74586965+MajManatee@users.noreply.github.com> Date: Sat Feb 11 03:18:18 2023 -0600 Removes mod disks from loot pool, and makes them orderable from cargo. Also adds a KA crate. (#17739) * fug * no more disks commitf6cd327077Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 04:07:17 2023 -0500 Automatic changelog generation #17873 [ci skip] commit09a038e850Author: LazennG <58535870+LazennG@users.noreply.github.com> Date: Sat Feb 11 01:07:15 2023 -0800 no more curveballs (#17873) commit186fedce46Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 04:05:05 2023 -0500 Automatic changelog generation #17865 [ci skip] commit422a595d6cAuthor: Skrem_7 <98909416+Skrem7@users.noreply.github.com> Date: Sat Feb 11 04:05:02 2023 -0500 makes darkspawn mindshield text a little less cringe (#17865) * makes this text a little less cringe * i love repetition of sound commitc4217e2080Author: Yogbot-13 <admin@yogstation.net> Date: Sat Feb 11 04:04:45 2023 -0500 Automatic changelog generation #17867 [ci skip] commit20fc9d7f33Author: Theos <theubernyan@gmail.com> Date: Sat Feb 11 04:04:42 2023 -0500 Reduces drakeling attack cooldowns slightly to match the mining equipment they are meant to upgrade (#17867) commitfdf31d11a7Author: Changelogs <action@github.com> Date: Sat Feb 11 06:10:17 2023 +0000 Automatic changelog compile [ci skip] commit6b0ddaf194Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 20:45:30 2023 -0500 Automatic changelog generation #17863 [ci skip] commit484a70bdc6Author: Skrem_7 <98909416+Skrem7@users.noreply.github.com> Date: Fri Feb 10 20:45:27 2023 -0500 hammer fix (#17863) commitc3f4bee6a9Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 20:43:51 2023 -0500 Automatic changelog generation #17866 [ci skip] commit44d935e116Author: Mqiib <43766432+Mqiib@users.noreply.github.com> Date: Fri Feb 10 20:43:49 2023 -0500 Unfucks darkspawn veils but they're still weaker (#17866) * brtuh * Update yogstation/code/game/gamemodes/darkspawn/veil.dm whoops Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com> --------- Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com> commit80045a2877Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 19:56:54 2023 -0500 Automatic changelog generation #17770 [ci skip] commit40564ae7f4Author: githubuser4141 <61243846+githubuser4141@users.noreply.github.com> Date: Sat Feb 11 13:56:51 2023 +1300 Buffs the MK-II Ripley's speed (#17770) * dir * Update mecha_defense.dm * Update uplink_items.dm * Update uplink_items.dm * Update uplink_items.dm * Update ripley.dm * Update ripley.dm * Update uplink_items.dm commitbece519a8bAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 18:45:30 2023 -0500 Automatic changelog generation #17784 [ci skip] commit4a499be90fAuthor: Skrem_7 <98909416+Skrem7@users.noreply.github.com> Date: Fri Feb 10 18:45:27 2023 -0500 True semi-auto shotguns + racking medium/heavy ballistics requires both hands + removes outdated stechkin animations (#17784) * shotguns actually semi-auto now * updates desc * removes stechkin animations * fixes rack sound * Update code/modules/projectiles/guns/ballistic.dm Co-authored-by: tattax <71668564+tattax@users.noreply.github.com> * slight fixes --------- Co-authored-by: tattax <71668564+tattax@users.noreply.github.com> commit24ad52b6bdAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 18:22:35 2023 -0500 Automatic changelog generation #17835 [ci skip] commit053f8bf856Author: Redd <36747151+ReddicusDragon@users.noreply.github.com> Date: Fri Feb 10 18:22:32 2023 -0500 Typo fix (#17835) * Update swarmer.dm * Update scripture_scripts.dm * Update golems.dm * Update pen.dm * Update touch_attacks.dm * Update uplink_items.dm * Update explosive_fist.dm * Update garden_warfare.dm * Update stealth.dm * Update uplink_item.dm * Update code/modules/mob/living/carbon/human/species_types/golems.dm Co-authored-by: ynot01 <ynot000001@gmail.com> * Update scripture_scripts.dm --------- Co-authored-by: ynot01 <ynot000001@gmail.com> commitd0e1c6f1f9Author: Ling <lingbleed@gmail.com> Date: Sat Feb 11 00:09:14 2023 +0100 Actually fixes gas mixer sprite for real this time (#17840) commit66545d3beeAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 18:07:46 2023 -0500 Automatic changelog generation #17847 [ci skip] commitb04412e57eAuthor: Molti <108117184+Moltijoe@users.noreply.github.com> Date: Fri Feb 10 17:07:42 2023 -0600 Removes #1 cause of suicide in Lizards (#17847) * CarkFetishContent * 20 minutes and chat message * no dead lizards * optimization commitc6ab8818ffAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 18:01:32 2023 -0500 Automatic changelog generation #17854 [ci skip] commit0c13569569Author: Molti <108117184+Moltijoe@users.noreply.github.com> Date: Fri Feb 10 17:01:20 2023 -0600 Gives mining medic a laptop to keep track of bodycams (#17854) * Gives mining medic a laptop * upgraded network card commit9a3512a44bAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 17:59:29 2023 -0500 Automatic changelog generation #17836 [ci skip] commit606c9ced8fAuthor: Aquizit <70451213+Aquizit@users.noreply.github.com> Date: Fri Feb 10 16:59:27 2023 -0600 Adds Personnel HUD Type, gives HoP and Cap a pair of sunglasses with it (#17836) * adds personnel hud type, sunglasses for HoP and Cap with it * renames CMO shades for HoP/Cap, made new shades for CMO * forgot to make the sunglasses tint blue commitfc4a64ed52Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 17:58:53 2023 -0500 Automatic changelog generation #17871 [ci skip] commitab089cfae7Author: ynot01 <ynot000001@gmail.com> Date: Fri Feb 10 17:58:51 2023 -0500 Cult tiles now block atmos like everyone though it did (#17871) * Update reinf_floor.dm * Update cult_structures.dm * Update cult_structures.dm commit20af730457Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 17:58:27 2023 -0500 Automatic changelog generation #17819 [ci skip] commit3e918a5658Author: Mqiib <43766432+Mqiib@users.noreply.github.com> Date: Fri Feb 10 17:58:25 2023 -0500 Unstupidify (#17819) commit411c213dcdAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 17:58:11 2023 -0500 Automatic changelog generation #17818 [ci skip] commit919a2686b6Author: Ling <lingbleed@gmail.com> Date: Fri Feb 10 23:58:08 2023 +0100 Prevents wormholes from spawning in syndicate shuttles (#17818) commitb66d0720bbAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 17:56:47 2023 -0500 Automatic changelog generation #17811 [ci skip] commitb9eb469042Author: Molti <108117184+Moltijoe@users.noreply.github.com> Date: Fri Feb 10 16:56:44 2023 -0600 Reduces body temp increase from being on fire (#17811) * Greatly reduces heat from being on fire * even less commitcdb38b84fdAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 17:49:43 2023 -0500 Automatic changelog generation #17804 [ci skip] commit1f02d82d27Author: ynot01 <ynot000001@gmail.com> Date: Fri Feb 10 17:49:41 2023 -0500 from fortnite (#17804) do the thing commit0c64a222c8Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 17:47:18 2023 -0500 Automatic changelog generation #17801 [ci skip] commitf6bf19009fAuthor: Ezhan <39889035+Ethan4303@users.noreply.github.com> Date: Fri Feb 10 17:47:15 2023 -0500 rotates the gas simulator in yogstation turbine (#17801) commit7c9b4054a0Author: ynot01 <ynot000001@gmail.com> Date: Fri Feb 10 17:46:46 2023 -0500 Protects events from being faked random by admins (#17790) * Update _event.dm * Update _event.dm commitcf793830ecAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 17:46:06 2023 -0500 Automatic changelog generation #17785 [ci skip] commit15bb9f53b7Author: Skrem_7 <98909416+Skrem7@users.noreply.github.com> Date: Fri Feb 10 17:46:03 2023 -0500 adds a spare mag to oddjob kit (#17785) commitc69563273bAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 17:45:23 2023 -0500 Automatic changelog generation #17769 [ci skip] commit367cf38f16Author: ynot01 <ynot000001@gmail.com> Date: Fri Feb 10 17:45:20 2023 -0500 Purchasable autosurgeon for 5TC (#17769) * syndi cat * Update uplink_items.dm commit247a50bc9fAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 17:43:58 2023 -0500 Automatic changelog generation #17735 [ci skip] commit167ab6af2bAuthor: SapphicOverload <93578146+SapphicOverload@users.noreply.github.com> Date: Fri Feb 10 17:43:55 2023 -0500 Multilingual quirk can no longer give you centcom encrypted language and costs 2 points instead of 3 (#17735) * guh * Update good.dm commitbb77f2d6a3Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 17:22:33 2023 -0500 Automatic changelog generation #17856 [ci skip] commitf13f241426Author: Redd <36747151+ReddicusDragon@users.noreply.github.com> Date: Fri Feb 10 17:22:31 2023 -0500 Revert "Removes felinid language (#17825)" (#17856) This reverts commite75cb0ad00. commitc53b3bc784Author: Changelogs <action@github.com> Date: Fri Feb 10 22:17:13 2023 +0000 Automatic changelog compile [ci skip] commitbf214dad30Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 15:57:59 2023 -0500 Automatic changelog generation #17832 [ci skip] commit0144098f5cAuthor: Addust <80979251+Addust@users.noreply.github.com> Date: Fri Feb 10 20:57:56 2023 +0000 Gives onehalf a blue oxygen tank instead of a red one inside the safe (#17832) yes commit84c1ff3331Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 13:08:39 2023 -0500 Automatic changelog generation #17881 [ci skip] commite2ce0336ffAuthor: wejengin2 <48154165+wejengin2@users.noreply.github.com> Date: Fri Feb 10 19:08:36 2023 +0100 ye (#17881) commit596ac490f7Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 12:29:57 2023 -0500 Automatic changelog generation #17812 [ci skip] commit2047871e5bAuthor: Molti <108117184+Moltijoe@users.noreply.github.com> Date: Fri Feb 10 11:29:53 2023 -0600 Adds a chemical that purges nanites (#17812) * NaniteRemovalChemical * rename * Update code/modules/reagents/chemistry/reagents/medicine_reagents.dm Co-authored-by: Ling <lingbleed@gmail.com> --------- Co-authored-by: Ling <lingbleed@gmail.com> commitbb0d420b09Author: wejengin2 <48154165+wejengin2@users.noreply.github.com> Date: Fri Feb 10 16:04:20 2023 +0100 Massacres the unused maps. (#17764) * someone has to do it * camels * order * ok no commit0424f5f5e4Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 09:40:37 2023 -0500 Automatic changelog generation #17823 [ci skip] commit611fc49e0bAuthor: Jamie D <993128+JamieD1@users.noreply.github.com> Date: Fri Feb 10 14:40:33 2023 +0000 e (#17823) commitadda8bc9a0Author: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Fri Feb 10 15:17:47 2023 +0100 Update unique_donator_items.dm (#17874) commit3a8ad081f9Author: Changelogs <action@github.com> Date: Fri Feb 10 14:08:30 2023 +0000 Automatic changelog compile [ci skip] commitff2f15a395Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 05:01:24 2023 -0500 Automatic changelog generation #17848 [ci skip] commit58a00ef32dAuthor: Waterpig <49160555+Majkl-J@users.noreply.github.com> Date: Fri Feb 10 11:01:21 2023 +0100 Adds barricading of airlocks and doors (#17848) * I like wood 😩 * Makes them faster to remove * 😩 * I hate molti Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com> --------- Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com> commit726c31fd2fAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 04:29:51 2023 -0500 Automatic changelog generation #17807 [ci skip] commit9d4d28edd3Author: Redd <36747151+ReddicusDragon@users.noreply.github.com> Date: Fri Feb 10 04:29:48 2023 -0500 Removes corn syrup from catsip (#17807) commita995a0e6fdAuthor: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 04:28:25 2023 -0500 Automatic changelog generation #17831 [ci skip] commitd35292c3d4Author: Ling <lingbleed@gmail.com> Date: Fri Feb 10 10:28:20 2023 +0100 RPD now builds even when clicked on another pipe (#17831) commit51fd6de808Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 03:53:48 2023 -0500 Automatic changelog generation #17852 [ci skip] commit9f91e2edf7Author: Manatee <74586965+MajManatee@users.noreply.github.com> Date: Fri Feb 10 02:53:45 2023 -0600 les go (#17852) commita55a6d4297Author: Changelogs <action@github.com> Date: Fri Feb 10 06:11:39 2023 +0000 Automatic changelog compile [ci skip] commit380e400cb3Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 01:04:58 2023 -0500 Automatic changelog generation #17837 [ci skip] commit861567f4dbAuthor: Byemoh <baiomurang@gmail.com> Date: Fri Feb 10 00:04:56 2023 -0600 Update airlock.dm (#17837) commit08cec4a012Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 01:01:14 2023 -0500 Automatic changelog generation #17813 [ci skip] commit5cf47b2580Author: ynot01 <ynot000001@gmail.com> Date: Fri Feb 10 01:01:12 2023 -0500 Update hologram.dm (#17813) commitef783cb856Author: Yogbot-13 <admin@yogstation.net> Date: Fri Feb 10 00:58:35 2023 -0500 Automatic changelog generation #17834 [ci skip] commita00b6ce757Author: ynot01 <ynot000001@gmail.com> Date: Fri Feb 10 00:58:33 2023 -0500 Update medbeam.dm (#17834) commitd5b72b2259Author: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 9 20:22:06 2023 -0500 Automatic changelog generation #17723 [ci skip] commit4a6973a465Author: Byemoh <baiomurang@gmail.com> Date: Thu Feb 9 19:22:03 2023 -0600 Falling into a chasm doesn't delete your body and someone can fish you up (#17723) * eeeee * e * map * break * eeeee * cope * Update chasm.dm commit229d6664efAuthor: Changelogs <action@github.com> Date: Thu Feb 9 22:17:48 2023 +0000 Automatic changelog compile [ci skip] commitf606eaac8eAuthor: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 9 10:41:20 2023 -0500 Automatic changelog generation #17670 [ci skip] commit26ad93fd58Author: ynot01 <ynot000001@gmail.com> Date: Thu Feb 9 10:41:17 2023 -0500 Big Heretic revamp (finally) (#17670) * heresy * Update eldritch_book.dm * heat resistant lizards * 5 tile range only! * delete the shield dummy! * Update eldritch_items.dm * new sounds * Update eldritch_antag.dm * Update eldritch_items.dm * sanity * Update code/modules/antagonists/eldritch_cult/eldritch_book.dm Co-authored-by: Ling <lingbleed@gmail.com> --------- Co-authored-by: Ling <lingbleed@gmail.com> commit2264d7e6bcAuthor: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 9 10:36:18 2023 -0500 Automatic changelog generation #17795 [ci skip] commit6e401075bdAuthor: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu Feb 9 16:36:15 2023 +0100 It now takes 6 seconds to cremate someone, and 3 seconds to break out if they're conscious (#17795) * Update morgue.dm * Update morgue.dm * Update code/game/objects/structures/morgue.dm * Update code/game/objects/structures/morgue.dm commitc28d359784Author: Yogbot-13 <admin@yogstation.net> Date: Thu Feb 9 10:27:17 2023 -0500 Automatic changelog generation #17766 [ci skip] commita0c31d2aeeAuthor: Skrem_7 <98909416+Skrem7@users.noreply.github.com> Date: Thu Feb 9 10:27:13 2023 -0500 brrrt (#17766) commit9ff2bc445aAuthor: Changelogs <action@github.com> Date: Thu Feb 9 06:11:19 2023 +0000 Automatic changelog compile [ci skip] commitd268cadedaAuthor: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 8 18:44:13 2023 -0500 Automatic changelog generation #17806 [ci skip] commitc223e28c9dAuthor: Ling <lingbleed@gmail.com> Date: Thu Feb 9 00:44:11 2023 +0100 Fix 'id in pda' pref (#17806) commit44decca884Author: Changelogs <action@github.com> Date: Wed Feb 8 22:16:57 2023 +0000 Automatic changelog compile [ci skip] commitd750b905ddAuthor: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 8 13:17:57 2023 -0500 Automatic changelog generation #17777 [ci skip] commit00a527192bAuthor: Manatee <74586965+MajManatee@users.noreply.github.com> Date: Wed Feb 8 12:17:54 2023 -0600 More snowflake items - Boxta (#17777) * all non spritework * Quirky first hat * mmm sprites commitf028dd3418Author: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 8 12:31:26 2023 -0500 Automatic changelog generation #17825 [ci skip] commite75cb0ad00Author: Redd <36747151+ReddicusDragon@users.noreply.github.com> Date: Wed Feb 8 12:31:23 2023 -0500 Removes felinid language (#17825) * Removes felinid language from silicons * Removes multilingual (felinid) trait * Removes felinid from being granted upon using cat ears * Redd moment * removes felinid from tongue's possible language base. * removes felinid from telecomms * removes felinid from language holders * removes the felinid language as it provides a material benefit to donors * gives felinids the english language holder * removes felinid language icon commit060c415b04Author: Changelogs <action@github.com> Date: Wed Feb 8 14:08:15 2023 +0000 Automatic changelog compile [ci skip] commit7345f0e82dAuthor: Yogbot-13 <admin@yogstation.net> Date: Wed Feb 8 05:39:07 2023 -0500 Automatic changelog generation #17846 [ci skip] commit3e51ef4f8bAuthor: Molti <108117184+Moltijoe@users.noreply.github.com> Date: Wed Feb 8 04:39:03 2023 -0600 Update lavaland_surface_maze.dmm (#17846) commite7823cfc39Author: Changelogs <action@github.com> Date: Wed Feb 8 06:11:43 2023 +0000 Automatic changelog compile [ci skip] commitd927ebc03dAuthor: Yogbot-13 <admin@yogstation.net> Date: Tue Feb 7 20:39:04 2023 -0500 Automatic changelog generation #17802 [ci skip] commit0fd7dcfc9dAuthor: cuackles <68789204+cuackles@users.noreply.github.com> Date: Tue Feb 7 22:39:01 2023 -0300 monkey energy no longer becomes invisible when crushed (#17802) * Update janitor.dmi * Update janitor.dmi * Update janitor.dmi commit61601d937eAuthor: Yogbot-13 <admin@yogstation.net> Date: Tue Feb 7 19:57:01 2023 -0500 Automatic changelog generation #17791 [ci skip] commit902e743274Author: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Tue Feb 7 16:56:58 2023 -0800 MALF is no longer continuous (#17791) commit81c0963f74Author: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Wed Feb 8 01:56:07 2023 +0100 Update adminhelp.dm (#17783) commit95947d2fe2Author: Yogbot-13 <admin@yogstation.net> Date: Tue Feb 7 19:53:00 2023 -0500 Automatic changelog generation #17742 [ci skip] commitf83723c389Author: Ling <lingbleed@gmail.com> Date: Wed Feb 8 01:52:57 2023 +0100 Ports SSfoam and SSsmoke (#17742) * Ports SSfoam and SSsmoke * Remove dupe define commit9bb63a7577Author: Yogbot-13 <admin@yogstation.net> Date: Tue Feb 7 19:52:22 2023 -0500 Automatic changelog generation #17738 [ci skip] commit0cf7ecf050Author: Ling <lingbleed@gmail.com> Date: Wed Feb 8 01:52:19 2023 +0100 Actually adds passive vent to RPD (#17738) * Actually adds passive vent to RPD * Fixed and re-added passive vents commit5b9d198f6fAuthor: Yogbot-13 <admin@yogstation.net> Date: Tue Feb 7 18:37:58 2023 -0500 Automatic changelog generation #17816 [ci skip] commit148e80f8ecAuthor: ynot01 <ynot000001@gmail.com> Date: Tue Feb 7 18:37:55 2023 -0500 Fixes foam darts not doing any stamina damage (#17816) * Update foam_dart.dm * Update foam_dart.dm commit42165a9806Author: Changelogs <action@github.com> Date: Tue Feb 7 22:17:04 2023 +0000 Automatic changelog compile [ci skip] commitb9f7613d59Author: Yogbot-13 <admin@yogstation.net> Date: Tue Feb 7 14:59:58 2023 -0500 Automatic changelog generation #17748 [ci skip] commit1cfbe0fd48Author: Byemoh <baiomurang@gmail.com> Date: Tue Feb 7 13:59:54 2023 -0600 adds det's sunglasses and shit on his desk on gax and other misc stuff (#17748) * eeeeeeeeee * shudders * readds stuff commit3947b4ac5aAuthor: Yogbot-13 <admin@yogstation.net> Date: Tue Feb 7 11:46:17 2023 -0500 Automatic changelog generation #17799 [ci skip] commitc3cfad4913Author: ynot01 <ynot000001@gmail.com> Date: Tue Feb 7 11:46:14 2023 -0500 weird (#17799) commit8de1275a99Author: Changelogs <action@github.com> Date: Tue Feb 7 14:08:44 2023 +0000 Automatic changelog compile [ci skip] commit198c9f89aaAuthor: Yogbot-13 <admin@yogstation.net> Date: Tue Feb 7 06:52:05 2023 -0500 Automatic changelog generation #17822 [ci skip] commit63928e7f87Author: Jamie D <993128+JamieD1@users.noreply.github.com> Date: Tue Feb 7 11:52:02 2023 +0000 Update game_options.txt (#17822) commit7daad46a71Author: Yogbot-13 <admin@yogstation.net> Date: Tue Feb 7 05:15:44 2023 -0500 Automatic changelog generation #17776 [ci skip] commitb01613407aAuthor: Byemoh <baiomurang@gmail.com> Date: Tue Feb 7 04:15:40 2023 -0600 Alternate Gax Arrivals design for free miner ship (#17776) * Update GaxStation.dmm * Update GaxStation.dmm * e commit23abc5abd2Author: Changelogs <action@github.com> Date: Tue Feb 7 06:11:41 2023 +0000 Automatic changelog compile [ci skip] commitd170eab0aaAuthor: Yogbot-13 <admin@yogstation.net> Date: Mon Feb 6 19:03:32 2023 -0500 Automatic changelog generation #17797 [ci skip] commit1aac303800Author: Redd <36747151+ReddicusDragon@users.noreply.github.com> Date: Mon Feb 6 19:03:29 2023 -0500 Updates inventory procs to allow silent pickup (#17797) * adds make_sound parameter to put_in_hands, first step to making items able to be picked up with or without sound * adds make_sound parameter to put_in_active_hand, second step in allowing items to be picked up with or without sound * adds make_sound parameter to put_in_hand, third step * redd moment * weeeeeeee * NukeOps nuke code papers spawning are now silent commit57283fa900Author: Yogbot-13 <admin@yogstation.net> Date: Mon Feb 6 18:17:08 2023 -0500 Automatic changelog generation #17712 [ci skip] commitb2c06b0866Author: Byemoh <baiomurang@gmail.com> Date: Mon Feb 6 17:17:05 2023 -0600 Lavaland Corn Maze Ruin (#17712) * eeee * yep * Update lavaruinblacklist.txt --------- Co-authored-by: wejengin2 <48154165+wejengin2@users.noreply.github.com> commit0d00d7457cAuthor: Changelogs <action@github.com> Date: Mon Feb 6 22:16:37 2023 +0000 Automatic changelog compile [ci skip] commit7955f64f79Author: Yogbot-13 <admin@yogstation.net> Date: Mon Feb 6 10:52:52 2023 -0500 Automatic changelog generation #17582 [ci skip] commit8df29b5392Author: 00ze-cyclone <96987868+00ze-cyclone@users.noreply.github.com> Date: Mon Feb 6 16:52:48 2023 +0100 Uranium eating aegun, second try (#17582) * new aegun * it just work * Update code/modules/projectiles/guns/energy/energy_gun.dm Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com> * Add files via upload * dfuisqbdusq --------- Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com> commit498e4e6ae4Author: Changelogs <action@github.com> Date: Mon Feb 6 14:09:30 2023 +0000 Automatic changelog compile [ci skip] commite37654707eAuthor: Yogbot-13 <admin@yogstation.net> Date: Mon Feb 6 07:43:42 2023 -0500 Automatic changelog generation #17768 [ci skip] commit5725a33174Author: ynot01 <ynot000001@gmail.com> Date: Mon Feb 6 07:43:39 2023 -0500 Foam darts now deal stamina damage if you're holding a toy foam gun (#17768) * Update foam_dart.dm * Update foam_dart.dm commitd7f3ee4734Author: Yogbot-13 <admin@yogstation.net> Date: Mon Feb 6 06:38:11 2023 -0500 Automatic changelog generation #17707 [ci skip] commita6c0573423Author: Mqiib <43766432+Mqiib@users.noreply.github.com> Date: Mon Feb 6 06:38:08 2023 -0500 Shimmyjimmies ion bolts to be less "why are they like that" and more "hey that kinda makes sense" (#17707) * NEW IONS * forgor * hos gun shooty commitcc868113c1Author: Changelogs <action@github.com> Date: Sun Feb 5 22:15:50 2023 +0000 Automatic changelog compile [ci skip] commit0343eb61c8Author: Yogbot-13 <admin@yogstation.net> Date: Sun Feb 5 14:37:43 2023 -0500 Automatic changelog generation #17749 [ci skip] commite9bb5b6679Author: ynot01 <ynot000001@gmail.com> Date: Sun Feb 5 14:37:41 2023 -0500 Adds the rest of the roundstart race languages to multilingual quirks (#17749) * Update good.dm * Update code/datums/traits/good.dm Co-authored-by: 00ze-cyclone <96987868+00ze-cyclone@users.noreply.github.com> --------- Co-authored-by: 00ze-cyclone <96987868+00ze-cyclone@users.noreply.github.com> commit00d55013b1Author: Yogbot-13 <admin@yogstation.net> Date: Sun Feb 5 12:14:21 2023 -0500 Automatic changelog generation #17779 [ci skip] commit85661c5d71Author: LazennG <58535870+LazennG@users.noreply.github.com> Date: Sun Feb 5 09:14:18 2023 -0800 buster arm patch (#17779) commit20b3adaae3Author: Changelogs <action@github.com> Date: Sun Feb 5 14:07:35 2023 +0000 Automatic changelog compile [ci skip] commit123638a50eAuthor: Yogbot-13 <admin@yogstation.net> Date: Sun Feb 5 01:21:47 2023 -0500 Automatic changelog generation #17774 [ci skip] commit707b8379f9Author: ktlwjec <122807629+ktlwjec0@users.noreply.github.com> Date: Sun Feb 5 06:21:45 2023 +0000 blue burger uses patty (#17774) commit6ba5dd3f5fAuthor: Changelogs <action@github.com> Date: Sun Feb 5 06:10:13 2023 +0000 Automatic changelog compile [ci skip] * Revert "Squashed commit of the following:" This reverts commit294dc43cff. * makes anomaly quiver printable * running it back * DIE ICON CORNFLAKES DIE * Revert "DIE ICON CORNFLAKES DIE" This reverts commita5294ffab4. * if this does not work I will scream * i forgor lazenn redid this * linter fixes? * weh * adds returning variable to break bow * fixes quiver/hardlight outlines * resets dmi files * hello? * indentation my beloathed * icons? please don't github * fixes gumballs/lollipops * fixes foam force shotguns * Revert "fixes foam force shotguns" This reverts commit37d079dc91. * fixes foam force for real * tidies up some sprites * agh * fixes bone-tipped nocked sprite * makes it so beanbag "slugs" don't look like syringes * fixes in-hand bone-tipped * removes message_admins from debugging (oops) * fixes an oversight with bone crossbow crafting * aaa * agh * Agh x2 * should fix icon cornflakes * killing * holy shit i think i learned something today * a g h --------- Co-authored-by: nmajask <nmajask@gmail.com>
1282 lines
39 KiB
Plaintext
1282 lines
39 KiB
Plaintext
/**
|
|
* Delete a mob
|
|
*
|
|
* Removes mob from the following global lists
|
|
* * GLOB.mob_list
|
|
* * GLOB.dead_mob_list
|
|
* * GLOB.alive_mob_list
|
|
* * GLOB.all_clockwork_mobs
|
|
* * GLOB.mob_directory
|
|
*
|
|
* Unsets the focus var
|
|
*
|
|
* Clears alerts for this mob
|
|
*
|
|
* Resets all the observers perspectives to the tile this mob is on
|
|
*
|
|
* qdels any client colours in place on this mob
|
|
*
|
|
* Ghostizes the client attached to this mob
|
|
*
|
|
* Parent call
|
|
*
|
|
* Returns QDEL_HINT_HARDDEL (don't change this)
|
|
*/
|
|
/mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game.
|
|
remove_from_mob_list()
|
|
remove_from_dead_mob_list()
|
|
remove_from_alive_mob_list()
|
|
remove_from_mob_suicide_list()
|
|
|
|
focus = null
|
|
|
|
if(length(progressbars))
|
|
stack_trace("[src] destroyed with elements in its progressbars list")
|
|
progressbars = null
|
|
|
|
for (var/alert in alerts)
|
|
clear_alert(alert, TRUE)
|
|
|
|
if(observers?.len)
|
|
for(var/mob/dead/observe as anything in observers)
|
|
observe.reset_perspective(null)
|
|
|
|
qdel(hud_used)
|
|
QDEL_LIST(client_colours)
|
|
ghostize() //False, since we're deleting it currently
|
|
|
|
if(mind?.current == src) //Let's just be safe yeah? This will occasionally be cleared, but not always. Can't do it with ghostize without changing behavior
|
|
mind.current = null
|
|
|
|
return ..()
|
|
|
|
/**
|
|
* Intialize a mob
|
|
*
|
|
* Sends global signal COMSIG_GLOB_MOB_CREATED
|
|
*
|
|
* Adds to global lists
|
|
* * GLOB.mob_list
|
|
* * GLOB.mob_directory (by tag)
|
|
* * GLOB.dead_mob_list - if mob is dead
|
|
* * GLOB.alive_mob_list - if the mob is alive
|
|
*
|
|
* Other stuff:
|
|
* * Sets the mob focus to itself
|
|
* * Generates huds
|
|
* * If there are any global alternate apperances apply them to this mob
|
|
* * set a random nutrition level
|
|
* * Intialize the movespeed of the mob
|
|
*/
|
|
/mob/Initialize()
|
|
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_MOB_CREATED, src)
|
|
add_to_mob_list()
|
|
if(stat == DEAD)
|
|
remove_from_alive_mob_list()
|
|
else
|
|
add_to_alive_mob_list()
|
|
set_focus(src)
|
|
prepare_huds()
|
|
for(var/v in GLOB.active_alternate_appearances)
|
|
if(!v)
|
|
continue
|
|
var/datum/atom_hud/alternate_appearance/AA = v
|
|
AA.onNewMob(src)
|
|
set_nutrition(rand(NUTRITION_LEVEL_START_MIN, NUTRITION_LEVEL_START_MAX))
|
|
. = ..()
|
|
update_config_movespeed()
|
|
update_movespeed(TRUE)
|
|
|
|
/**
|
|
* Generate the tag for this mob
|
|
*
|
|
* This is simply "mob_"+ a global incrementing counter that goes up for every mob
|
|
*/
|
|
/mob/GenerateTag()
|
|
tag = "mob_[next_mob_id++]"
|
|
|
|
/**
|
|
* Prepare the huds for this atom
|
|
*
|
|
* Goes through hud_possible list and adds the images to the hud_list variable (if not already
|
|
* cached)
|
|
*/
|
|
/atom/proc/prepare_huds()
|
|
hud_list = list()
|
|
for(var/hud in hud_possible)
|
|
var/hint = hud_possible[hud]
|
|
switch(hint)
|
|
if(HUD_LIST_LIST)
|
|
hud_list[hud] = list()
|
|
else
|
|
var/image/I = image('icons/mob/hud.dmi', src, "")
|
|
I.appearance_flags = RESET_COLOR|RESET_TRANSFORM
|
|
hud_list[hud] = I
|
|
|
|
/**
|
|
* Some kind of debug verb that gives atmosphere environment details
|
|
*/
|
|
/mob/proc/Cell()
|
|
set category = "Misc.Server Debug"
|
|
set hidden = 1
|
|
|
|
if(!loc)
|
|
return 0
|
|
|
|
var/datum/gas_mixture/environment = loc.return_air()
|
|
|
|
var/t = span_notice("Coordinates: [x],[y] \n")
|
|
t += span_danger("Temperature: [environment.return_temperature()] \n")
|
|
for(var/id in environment.get_gases())
|
|
if(environment.get_moles(id))
|
|
t+=span_notice("[GLOB.meta_gas_info[id][META_GAS_NAME]]: [environment.get_moles(id)] \n")
|
|
|
|
to_chat(usr, t)
|
|
|
|
/**
|
|
* Return the desc of this mob for a photo
|
|
*/
|
|
/mob/proc/get_photo_description(obj/item/camera/camera)
|
|
return "a ... thing?"
|
|
|
|
/**
|
|
* Show a message to this mob (visual)
|
|
*/
|
|
/mob/proc/show_message(msg, type, alt_msg, alt_type, avoid_highlighting = FALSE)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
|
|
|
|
if(!client)
|
|
return
|
|
|
|
msg = copytext_char(msg, 1, MAX_MESSAGE_LEN)
|
|
|
|
if(type)
|
|
if(type & 1 && eye_blind )//Vision related
|
|
if(!alt_msg)
|
|
return
|
|
else
|
|
msg = alt_msg
|
|
type = alt_type
|
|
|
|
if(type & 2 && !can_hear())//Hearing related
|
|
if(!alt_msg)
|
|
return
|
|
else
|
|
msg = alt_msg
|
|
type = alt_type
|
|
if(type & 1 && eye_blind)
|
|
return
|
|
// voice muffling
|
|
if(stat == UNCONSCIOUS)
|
|
if(type & 2) //audio
|
|
to_chat(src, "<I>... You can almost hear something ...</I>")
|
|
else
|
|
to_chat(src, msg, avoid_highlighting = avoid_highlighting)
|
|
|
|
/**
|
|
* Generate a visible message from this atom
|
|
*
|
|
* Show a message to all player mobs who sees this atom
|
|
*
|
|
* Show a message to the src mob (if the src is a mob)
|
|
*
|
|
* Use for atoms performing visible actions
|
|
*
|
|
* message is output to anyone who can see, e.g. "The [src] does something!"
|
|
*
|
|
* Vars:
|
|
* * self_message (optional) is what the src mob sees e.g. "You do something!"
|
|
* * blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
|
* * vision_distance (optional) define how many tiles away the message can be seen.
|
|
* * ignored_mob (optional) doesn't show any message to a given mob if TRUE.
|
|
*/
|
|
/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE)
|
|
var/turf/T = get_turf(src)
|
|
if(!T)
|
|
return
|
|
|
|
if(!islist(ignored_mobs))
|
|
ignored_mobs = list(ignored_mobs)
|
|
var/list/hearers = get_hearers_in_view(vision_distance, src) //caches the hearers and then removes ignored mobs.
|
|
hearers -= ignored_mobs
|
|
|
|
if(self_message)
|
|
hearers -= src
|
|
|
|
var/raw_msg = message
|
|
if(visible_message_flags & EMOTE_MESSAGE)
|
|
message = "<b>[src]</b> [message]"
|
|
|
|
for(var/mob/M in hearers)
|
|
if(!M.client)
|
|
continue
|
|
|
|
//This entire if/else chain could be in two lines but isn't for readibilties sake.
|
|
var/msg = message
|
|
if(M.see_invisible < invisibility)//if src is invisible to M
|
|
msg = blind_message
|
|
else if(T != loc && T != src) //if src is inside something and not a turf.
|
|
msg = blind_message
|
|
else if(M.lighting_alpha > LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE && T.is_softly_lit() && !in_range(T,M)) //if it is too dark.
|
|
msg = blind_message
|
|
if(!msg)
|
|
continue
|
|
|
|
if(visible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, visible_message_flags) && !is_blind(M))
|
|
M.create_chat_message(src, raw_message = raw_msg, runechat_flags = visible_message_flags)
|
|
|
|
M.show_message(msg, MSG_VISUAL, blind_message, MSG_AUDIBLE)
|
|
|
|
|
|
|
|
|
|
/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE)
|
|
. = ..()
|
|
if(self_message)
|
|
show_message(self_message, MSG_VISUAL, blind_message, MSG_AUDIBLE)
|
|
|
|
/**
|
|
* Show a message to all mobs in earshot of this atom
|
|
*
|
|
* Use for objects performing audible actions
|
|
*
|
|
* vars:
|
|
* * message is the message output to anyone who can hear.
|
|
* * deaf_message (optional) is what deaf people will see.
|
|
* * hearing_distance (optional) is the range, how many tiles away the message can be heard.
|
|
*/
|
|
|
|
/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE)
|
|
var/list/hearers = get_hearers_in_view(hearing_distance, src)
|
|
if(self_message)
|
|
hearers -= src
|
|
var/raw_msg = message
|
|
if(audible_message_flags & EMOTE_MESSAGE)
|
|
message = "<b>[src]</b> [message]"
|
|
for(var/mob/M in hearers)
|
|
if(audible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, audible_message_flags) && M.can_hear())
|
|
M.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags)
|
|
M.show_message(message, MSG_AUDIBLE, deaf_message, MSG_VISUAL)
|
|
|
|
/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE)
|
|
. = ..()
|
|
if(self_message)
|
|
show_message(self_message, MSG_AUDIBLE, deaf_message, MSG_VISUAL)
|
|
|
|
///Returns the client runechat visible messages preference according to the message type.
|
|
/atom/proc/runechat_prefs_check(mob/target, visible_message_flags = NONE)
|
|
if(!target.client?.prefs.read_preference(/datum/preference/toggle/enable_runechat))
|
|
return FALSE
|
|
if (!target.client?.prefs.read_preference(/datum/preference/toggle/enable_runechat_non_mobs))
|
|
return FALSE
|
|
if(visible_message_flags & EMOTE_MESSAGE && !target.client.prefs.read_preference(/datum/preference/toggle/see_rc_emotes))
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/mob/runechat_prefs_check(mob/target, visible_message_flags = NONE)
|
|
if(!target.client?.prefs.read_preference(/datum/preference/toggle/enable_runechat))
|
|
return FALSE
|
|
if(visible_message_flags & EMOTE_MESSAGE && !target.client.prefs.read_preference(/datum/preference/toggle/see_rc_emotes))
|
|
return FALSE
|
|
return TRUE
|
|
|
|
///Get the item on the mob in the storage slot identified by the id passed in
|
|
/mob/proc/get_item_by_slot(slot_id)
|
|
return null
|
|
|
|
///Is the mob restrained
|
|
/mob/proc/restrained(ignore_grab)
|
|
return
|
|
|
|
///Is the mob incapacitated
|
|
/mob/proc/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, check_immobilized = FALSE)
|
|
return
|
|
|
|
/**
|
|
* This proc is called whenever someone clicks an inventory ui slot.
|
|
*
|
|
* Mostly tries to put the item into the slot if possible, or call attack hand
|
|
* on the item in the slot if the users active hand is empty
|
|
*/
|
|
/mob/proc/attack_ui(slot)
|
|
var/obj/item/W = get_active_held_item()
|
|
|
|
if(istype(W))
|
|
if(equip_to_slot_if_possible(W, slot,0,0,0))
|
|
return 1
|
|
|
|
if(!W)
|
|
// Activate the item
|
|
var/obj/item/I = get_item_by_slot(slot)
|
|
if(istype(I))
|
|
I.attack_hand(src)
|
|
|
|
return 0
|
|
|
|
/**
|
|
* Try to equip an item to a slot on the mob
|
|
*
|
|
* This is a SAFE proc. Use this instead of equip_to_slot()!
|
|
*
|
|
* set qdel_on_fail to have it delete W if it fails to equip
|
|
*
|
|
* set disable_warning to disable the 'you are unable to equip that' warning.
|
|
*
|
|
* unset redraw_mob to prevent the mob icons from being redrawn at the end.
|
|
*/
|
|
/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, qdel_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, bypass_equip_delay_self = FALSE, initial = FALSE)
|
|
if(!istype(W))
|
|
return FALSE
|
|
if(!W.mob_can_equip(src, null, slot, disable_warning, bypass_equip_delay_self))
|
|
if(qdel_on_fail)
|
|
qdel(W)
|
|
else
|
|
if(!disable_warning)
|
|
to_chat(src, span_warning("You are unable to equip that!"))
|
|
return FALSE
|
|
equip_to_slot(W, slot, redraw_mob, initial) //This proc should not ever fail.
|
|
return TRUE
|
|
|
|
/**
|
|
* Actually equips an item to a slot (UNSAFE)
|
|
*
|
|
* This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on
|
|
* whether you can or can't equip need to be done before! Use mob_can_equip() for that task.
|
|
*
|
|
*In most cases you will want to use equip_to_slot_if_possible()
|
|
*/
|
|
/mob/proc/equip_to_slot(obj/item/W, slot)
|
|
return
|
|
|
|
/**
|
|
* Equip an item to the slot or delete
|
|
*
|
|
* This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to
|
|
* equip people when the round starts and when events happen and such.
|
|
*
|
|
* Also bypasses equip delay checks, since the mob isn't actually putting it on.
|
|
*/
|
|
/mob/proc/equip_to_slot_or_del(obj/item/W, slot, initial = FALSE)
|
|
return equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, TRUE, initial)
|
|
|
|
/**
|
|
* Auto equip the passed in item the appropriate slot based on equipment priority
|
|
*
|
|
* puts the item "W" into an appropriate slot in a human's inventory
|
|
*
|
|
* returns 0 if it cannot, 1 if successful
|
|
*/
|
|
/mob/proc/equip_to_appropriate_slot(obj/item/W)
|
|
if(!istype(W))
|
|
return 0
|
|
var/slot_priority = W.slot_equipment_priority
|
|
|
|
if(!slot_priority)
|
|
slot_priority = list( \
|
|
SLOT_BACK, SLOT_WEAR_ID,\
|
|
SLOT_W_UNIFORM, SLOT_WEAR_SUIT,\
|
|
SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\
|
|
SLOT_SHOES, SLOT_GLOVES,\
|
|
SLOT_EARS, SLOT_GLASSES,\
|
|
SLOT_BELT, SLOT_S_STORE,\
|
|
SLOT_L_STORE, SLOT_R_STORE,\
|
|
SLOT_GENERC_DEXTROUS_STORAGE\
|
|
)
|
|
|
|
for(var/slot in slot_priority)
|
|
if(equip_to_slot_if_possible(W, slot, 0, 1, 1)) //qdel_on_fail = 0; disable_warning = 1; redraw_mob = 1
|
|
return 1
|
|
|
|
return 0
|
|
/**
|
|
* Reset the attached clients perspective (viewpoint)
|
|
*
|
|
* reset_perspective() set eye to common default : mob on turf, loc otherwise
|
|
* reset_perspective(thing) set the eye to the thing (if it's equal to current default reset to mob perspective)
|
|
*/
|
|
/mob/proc/reset_perspective(atom/A)
|
|
if(client)
|
|
if(A)
|
|
if(ismovable(A))
|
|
//Set the the thing unless it's us
|
|
if(A != src)
|
|
client.perspective = EYE_PERSPECTIVE
|
|
client.eye = A
|
|
else
|
|
client.eye = client.mob
|
|
client.perspective = MOB_PERSPECTIVE
|
|
else if(isturf(A))
|
|
//Set to the turf unless it's our current turf
|
|
if(A != loc)
|
|
client.perspective = EYE_PERSPECTIVE
|
|
client.eye = A
|
|
else
|
|
client.eye = client.mob
|
|
client.perspective = MOB_PERSPECTIVE
|
|
else
|
|
//Do nothing
|
|
else
|
|
//Reset to common defaults: mob if on turf, otherwise current loc
|
|
if(isturf(loc))
|
|
client.eye = client.mob
|
|
client.perspective = MOB_PERSPECTIVE
|
|
else
|
|
client.perspective = EYE_PERSPECTIVE
|
|
client.eye = loc
|
|
return 1
|
|
|
|
/// Show the mob's inventory to another mob
|
|
/mob/proc/show_inv(mob/user)
|
|
return
|
|
|
|
/**
|
|
* Examine a mob
|
|
*
|
|
* mob verbs are faster than object verbs. See
|
|
* [this byond forum post](https://secure.byond.com/forum/?post=1326139&page=2#comment8198716)
|
|
* for why this isn't atom/verb/examine()
|
|
*/
|
|
/mob/verb/examinate(atom/A as mob|obj|turf in view()) //It used to be oview(12), but I can't really say why
|
|
set name = "Examine"
|
|
set category = "IC"
|
|
|
|
if(isturf(A) && !(sight & SEE_TURFS) && !(A in view(client ? client.view : world.view, src)))
|
|
// shift-click catcher may issue examinate() calls for out-of-sight turfs
|
|
return
|
|
|
|
if(is_blind(src) && !blind_examine_check(A))
|
|
return
|
|
|
|
face_atom(A)
|
|
var/list/result
|
|
if(client)
|
|
if(istype(src, /mob/living/silicon/ai) && istype(A, /mob/living/carbon/human)) //Override for AI's examining humans
|
|
var/mob/living/carbon/human/H = A
|
|
result = H.examine_simple(src)
|
|
else
|
|
LAZYINITLIST(client.recent_examines)
|
|
if(!(isnull(client.recent_examines[A]) || client.recent_examines[A] < world.time)) // originally this wasn't an assoc list, but sometimes the timer failed and atoms stayed in a client's recent_examines, so we check here manually
|
|
var/extra_info = A.examine_more(src)
|
|
result = extra_info
|
|
if(!result)
|
|
client.recent_examines[A] = world.time + EXAMINE_MORE_WINDOW
|
|
result = A.examine(src)
|
|
addtimer(CALLBACK(src, .proc/clear_from_recent_examines, A), RECENT_EXAMINE_MAX_WINDOW)
|
|
handle_eye_contact(A)
|
|
else
|
|
result = A.examine(src) // if a tree is examined but no client is there to see it, did the tree ever really exist?
|
|
|
|
if(result.len)
|
|
for(var/i in 1 to (length(result) - 1))
|
|
result[i] = "[result[i]]\n"
|
|
|
|
to_chat(src, examine_block("<span class='infoplain'>[result.Join()]</span>"))
|
|
SEND_SIGNAL(src, COMSIG_MOB_EXAMINATE, A)
|
|
|
|
|
|
/mob/proc/clear_from_recent_examines(atom/A)
|
|
if(QDELETED(A) || !client)
|
|
return
|
|
LAZYREMOVE(client.recent_examines, A)
|
|
|
|
/mob/proc/blind_examine_check(atom/examined_thing)
|
|
return TRUE
|
|
|
|
/mob/living/blind_examine_check(atom/examined_thing)
|
|
//need to be next to something and awake
|
|
if(!Adjacent(examined_thing) || incapacitated())
|
|
to_chat(src, span_warning("Something is there, but you can't see it!"))
|
|
return FALSE
|
|
|
|
var/active_item = get_active_held_item()
|
|
if(active_item && active_item != examined_thing)
|
|
to_chat(src, span_warning("Your hands are too full to examine this!"))
|
|
return FALSE
|
|
|
|
//you can only initiate exaimines if you have a hand, it's not disabled, and only as many examines as you have hands
|
|
/// our active hand, to check if it's disabled/detatched
|
|
var/obj/item/bodypart/active_hand = has_active_hand()? get_active_hand() : null
|
|
if(!active_hand || active_hand.bodypart_disabled || LAZYLEN(do_afters) >= get_num_arms())
|
|
to_chat(src, span_warning("You don't have a free hand to examine this!"))
|
|
return FALSE
|
|
|
|
//you can only queue up one examine on something at a time
|
|
if(examined_thing in do_afters)
|
|
return FALSE
|
|
|
|
to_chat(src, span_notice("You start feeling around for something..."))
|
|
visible_message(span_notice(" [name] begins feeling around for \the [examined_thing.name]..."))
|
|
|
|
/// how long it takes for the blind person to find the thing they're examining
|
|
var/examine_delay_length = rand(1 SECONDS, 2 SECONDS)
|
|
if(isobj(examined_thing))
|
|
examine_delay_length *= 1.5
|
|
else if(ismob(examined_thing) && examined_thing != src)
|
|
examine_delay_length *= 2
|
|
|
|
if(examine_delay_length > 0 && !do_after(src, examine_delay_length, examined_thing))
|
|
to_chat(src, span_notice("You can't get a good feel for what is there."))
|
|
return FALSE
|
|
|
|
//now we touch the thing we're examining
|
|
/// our current intent, so we can go back to it after touching
|
|
var/previous_intent = a_intent
|
|
a_intent = INTENT_HELP
|
|
examined_thing.attack_hand(src)
|
|
a_intent = previous_intent
|
|
|
|
return TRUE
|
|
|
|
/**
|
|
* handle_eye_contact() is called when we examine() something. If we examine an alive mob with a mind who has examined us in the last 2 seconds within 5 tiles, we make eye contact!
|
|
*
|
|
* Note that if either party has their face obscured, the other won't get the notice about the eye contact
|
|
* Also note that examine_more() doesn't proc this or extend the timer, just because it's simpler this way and doesn't lose much.
|
|
* The nice part about relying on examining is that we don't bother checking visibility, because we already know they were both visible to each other within the last second, and the one who triggers it is currently seeing them
|
|
*/
|
|
/mob/proc/handle_eye_contact(mob/living/examined_mob)
|
|
return
|
|
|
|
/mob/living/handle_eye_contact(mob/living/examined_mob)
|
|
if(!istype(examined_mob) || src == examined_mob || examined_mob.stat >= UNCONSCIOUS || !client)
|
|
return
|
|
|
|
var/imagined_eye_contact = FALSE
|
|
if(!LAZYACCESS(examined_mob.client?.recent_examines, src))
|
|
// even if you haven't looked at them recently, if you have the shift eyes trait, they may still imagine the eye contact
|
|
if(HAS_TRAIT(examined_mob, TRAIT_SHIFTY_EYES) && prob(10 - get_dist(src, examined_mob)))
|
|
imagined_eye_contact = TRUE
|
|
else
|
|
return
|
|
|
|
if(get_dist(src, examined_mob) > EYE_CONTACT_RANGE)
|
|
return
|
|
|
|
// check to see if their face is blocked or, if not, a signal blocks it
|
|
if(examined_mob.is_face_visible() && SEND_SIGNAL(src, COMSIG_MOB_EYECONTACT, examined_mob, TRUE) != COMSIG_BLOCK_EYECONTACT)
|
|
var/msg = span_smallnotice("You make eye contact with [examined_mob].")
|
|
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, src, msg), 3) // so the examine signal has time to fire and this will print after
|
|
|
|
if(!imagined_eye_contact && is_face_visible() && SEND_SIGNAL(examined_mob, COMSIG_MOB_EYECONTACT, src, FALSE) != COMSIG_BLOCK_EYECONTACT)
|
|
var/msg = span_smallnotice("[src] makes eye contact with you.")
|
|
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, examined_mob, msg), 3)
|
|
|
|
/**
|
|
* Point at an atom
|
|
*
|
|
* mob verbs are faster than object verbs. See
|
|
* [this byond forum post](https://secure.byond.com/forum/?post=1326139&page=2#comment8198716)
|
|
* for why this isn't atom/verb/pointed()
|
|
*
|
|
* note: ghosts can point, this is intended
|
|
*
|
|
* visible_message will handle invisibility properly
|
|
*
|
|
* overridden here and in /mob/dead/observer for different point span classes and sanity checks
|
|
*/
|
|
/mob/verb/pointed(atom/A as mob|obj|turf in view())
|
|
set name = "Point To"
|
|
set category = "Object"
|
|
|
|
if(!src || !isturf(src.loc) || !(A in view(src.loc)))
|
|
return FALSE
|
|
if(istype(A, /obj/effect/temp_visual/point))
|
|
return FALSE
|
|
|
|
var/turf/tile = get_turf(A)
|
|
if (!tile)
|
|
return FALSE
|
|
|
|
var/turf/our_tile = get_turf(src)
|
|
var/obj/visual = new /obj/effect/temp_visual/point(our_tile, invisibility)
|
|
animate(visual, pixel_x = (tile.x - our_tile.x) * world.icon_size + A.pixel_x, pixel_y = (tile.y - our_tile.y) * world.icon_size + A.pixel_y, time = 0.17 SECONDS, easing = EASE_OUT)
|
|
|
|
return TRUE
|
|
|
|
///Can this mob resist (default FALSE)
|
|
/mob/proc/can_resist()
|
|
return FALSE //overridden in living.dm
|
|
|
|
///Spin this mob around it's central axis
|
|
/mob/proc/spin(spintime, speed)
|
|
set waitfor = 0
|
|
var/D = dir
|
|
if((spintime < 1)||(speed < 1)||!spintime||!speed)
|
|
return
|
|
while(spintime >= speed)
|
|
sleep(speed)
|
|
switch(D)
|
|
if(NORTH)
|
|
D = EAST
|
|
if(SOUTH)
|
|
D = WEST
|
|
if(EAST)
|
|
D = SOUTH
|
|
if(WEST)
|
|
D = NORTH
|
|
setDir(D)
|
|
spintime -= speed
|
|
|
|
///Update the pulling hud icon
|
|
/mob/proc/update_pull_hud_icon()
|
|
if(hud_used)
|
|
if(hud_used.pull_icon)
|
|
hud_used.pull_icon.update_icon(src)
|
|
|
|
///Update the resting hud icon
|
|
/mob/proc/update_rest_hud_icon()
|
|
if(hud_used)
|
|
if(hud_used.rest_icon)
|
|
hud_used.rest_icon.update_icon(src)
|
|
|
|
/**
|
|
* Verb to activate the object in your held hand
|
|
*
|
|
* Calls attack self on the item and updates the inventory hud for hands
|
|
*/
|
|
/mob/verb/mode()
|
|
set name = "Activate Held Object"
|
|
set category = "Object"
|
|
set src = usr
|
|
|
|
if(HAS_TRAIT(src, TRAIT_NOINTERACT)) // INTERCEPTED
|
|
to_chat(src, span_danger("You can't interact with anything right now!"))
|
|
return
|
|
|
|
if(ismecha(loc))
|
|
return
|
|
|
|
if(incapacitated())
|
|
return
|
|
|
|
var/obj/item/I = get_active_held_item()
|
|
if(I)
|
|
I.attack_self(src)
|
|
update_inv_hands()
|
|
|
|
/**
|
|
* Get the notes of this mob
|
|
*
|
|
* This actually gets the mind datums notes
|
|
*/
|
|
/mob/verb/memory()
|
|
set name = "Notes"
|
|
set category = "IC"
|
|
set desc = "View your character's notes memory."
|
|
if(mind)
|
|
mind.show_memory(src)
|
|
else
|
|
to_chat(src, "You don't have a mind datum for some reason, so you can't look at your notes, if you had any.")
|
|
|
|
/**
|
|
* Add a note to the mind datum
|
|
*/
|
|
/mob/verb/add_memory(msg as message)
|
|
set name = "Add Note"
|
|
set category = "IC"
|
|
|
|
if(memory_amt > 50)
|
|
return
|
|
|
|
if(memory_amt == 50)
|
|
log_game("[key_name(src)] might be trying to crash the server by spamming memories, rate-limiting them.")
|
|
message_admins("[ADMIN_LOOKUPFLW(src)] [ADMIN_KICK(usr)] might be trying to crash the server by spamming memories, rate-limiting them.</span>")
|
|
|
|
memory_amt++
|
|
|
|
msg = copytext_char(msg, 1, MAX_MESSAGE_LEN)
|
|
msg = sanitize(msg)
|
|
|
|
if(mind)
|
|
mind.store_memory(msg)
|
|
else
|
|
to_chat(src, "You don't have a mind datum for some reason, so you can't add a note to it.")
|
|
|
|
/**
|
|
* Allows you to respawn, abandoning your current mob
|
|
*
|
|
* This sends you back to the lobby creating a new dead mob
|
|
*
|
|
* Only works if flag/norespawn is allowed in config
|
|
*/
|
|
/mob/verb/abandon_mob()
|
|
set name = "Respawn"
|
|
set category = "OOC"
|
|
|
|
if (CONFIG_GET(flag/norespawn) && (!check_rights_for(usr.client, R_ADMIN) || tgui_alert(usr, "Respawn configs disabled. Do you want to use your permissions to circumvent it?", "Respawn", list("Yes", "No")) != "Yes"))
|
|
return
|
|
if ((stat != DEAD || !( SSticker )))
|
|
to_chat(usr, span_boldnotice("You must be dead to use this!"))
|
|
return
|
|
|
|
log_game("[key_name(usr)] used abandon mob.")
|
|
|
|
to_chat(usr, span_boldnotice("Please roleplay correctly!"))
|
|
|
|
if(!client)
|
|
log_game("[key_name(usr)] AM failed due to disconnect.")
|
|
return
|
|
client.screen.Cut()
|
|
client.screen += client.void
|
|
if(!client)
|
|
log_game("[key_name(usr)] AM failed due to disconnect.")
|
|
return
|
|
|
|
var/mob/dead/new_player/M = new /mob/dead/new_player()
|
|
if(!client)
|
|
log_game("[key_name(usr)] AM failed due to disconnect.")
|
|
qdel(M)
|
|
return
|
|
|
|
M.key = key
|
|
// M.Login() //wat
|
|
return
|
|
|
|
|
|
/**
|
|
* Sometimes helps if the user is stuck in another perspective or camera
|
|
*/
|
|
/mob/verb/cancel_camera()
|
|
set name = "Cancel Camera View"
|
|
set category = "OOC"
|
|
reset_perspective(null)
|
|
unset_machine()
|
|
|
|
//suppress the .click/dblclick macros so people can't use them to identify the location of items or aimbot
|
|
/mob/verb/DisClick(argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num)
|
|
set name = ".click"
|
|
set hidden = TRUE
|
|
set category = null
|
|
return
|
|
|
|
/mob/verb/DisDblClick(argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num)
|
|
set name = ".dblclick"
|
|
set hidden = TRUE
|
|
set category = null
|
|
return
|
|
/**
|
|
* Topic call back for any mob
|
|
*
|
|
* * Unset machines if "mach_close" sent
|
|
* * refresh the inventory of machines in range if "refresh" sent
|
|
* * handles the strip panel equip and unequip as well if "item" sent
|
|
*/
|
|
/mob/Topic(href, href_list)
|
|
if(href_list["mach_close"])
|
|
var/t1 = text("window=[href_list["mach_close"]]")
|
|
unset_machine()
|
|
src << browse(null, t1)
|
|
|
|
if(href_list["refresh"])
|
|
if(machine && in_range(src, usr))
|
|
show_inv(machine)
|
|
|
|
|
|
if(href_list["item"] && usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
|
|
var/slot = text2num(href_list["item"])
|
|
var/hand_index = text2num(href_list["hand_index"])
|
|
var/obj/item/what
|
|
if(hand_index)
|
|
what = get_item_for_held_index(hand_index)
|
|
slot = list(slot,hand_index)
|
|
else
|
|
what = get_item_by_slot(slot)
|
|
if(what)
|
|
if(!(what.item_flags & ABSTRACT))
|
|
usr.stripPanelUnequip(what,src,slot)
|
|
else
|
|
usr.stripPanelEquip(what,src,slot)
|
|
|
|
if(usr.machine == src)
|
|
if(Adjacent(usr))
|
|
show_inv(usr)
|
|
else
|
|
usr << browse(null,"window=mob[REF(src)]")
|
|
|
|
// The src mob is trying to strip an item from someone
|
|
// Defined in living.dm
|
|
/mob/proc/stripPanelUnequip(obj/item/what, mob/who)
|
|
return
|
|
|
|
// The src mob is trying to place an item on someone
|
|
// Defined in living.dm
|
|
/mob/proc/stripPanelEquip(obj/item/what, mob/who)
|
|
return
|
|
|
|
/**
|
|
* Controls if a mouse drop succeeds (return null if it doesnt)
|
|
*/
|
|
/mob/MouseDrop(mob/M)
|
|
. = ..()
|
|
if(M != usr)
|
|
return
|
|
if(usr == src)
|
|
return
|
|
if(!Adjacent(usr))
|
|
return
|
|
if(isAI(M))
|
|
return
|
|
|
|
/mob/MouseDrop_T(atom/dropping, atom/user)
|
|
. = ..()
|
|
if(ismob(dropping) && dropping != user && user == src)
|
|
var/mob/M = dropping
|
|
M.show_inv(user)
|
|
|
|
/**
|
|
* Handle the result of a click drag onto this mob
|
|
*
|
|
* For mobs this just shows the inventory
|
|
*/
|
|
|
|
///Is the mob muzzled (default false)
|
|
/mob/proc/is_muzzled()
|
|
return 0
|
|
|
|
|
|
/// Adds this list to the output to the stat browser
|
|
/mob/proc/get_status_tab_items()
|
|
. = list()
|
|
var/list/objectives = mind?.get_all_objectives()
|
|
if(LAZYLEN(objectives))
|
|
var/obj_count = 1
|
|
. += "<B>Objectives:</B>"
|
|
for(var/datum/objective/objective in mind?.get_all_objectives())
|
|
. += "<B>[obj_count]</B>: <font color=[objective.check_completion() ? "green" : "red"]>[objective.explanation_text][objective.check_completion() ? " (COMPLETED)" : ""]</font>"
|
|
obj_count++
|
|
|
|
/mob/proc/get_proc_holders()
|
|
. = list()
|
|
if(mind)
|
|
. += get_spells_for_statpanel(mind.spell_list)
|
|
. += get_spells_for_statpanel(mob_spell_list)
|
|
|
|
/**
|
|
* Convert a list of spells into a displyable list for the statpanel
|
|
*
|
|
* Shows charge and other important info
|
|
*/
|
|
/mob/proc/get_spells_for_statpanel(list/spells)
|
|
var/list/L = list()
|
|
for(var/obj/effect/proc_holder/spell/S in spells)
|
|
if(S.can_be_cast_by(src))
|
|
switch(S.charge_type)
|
|
if(SPELL_CHARGE_TYPE_RECHARGE)
|
|
L[++L.len] = list("[S.panel]", "[S.charge_counter/10.0]/[S.charge_max/10]", S.name, REF(S))
|
|
if(SPELL_CHARGE_TYPE_CHARGES)
|
|
L[++L.len] = list("[S.panel]", "[S.charge_counter]/[S.charge_max]", S.name, REF(S))
|
|
if(SPELL_CHARGE_TYPE_HOLDERVAR)
|
|
L[++L.len] = list("[S.panel]", "[S.holder_var_type] [S.holder_var_amount]", S.name, REF(S))
|
|
return L
|
|
|
|
#define MOB_FACE_DIRECTION_DELAY 1
|
|
|
|
// facing verbs
|
|
/**
|
|
* Returns true if a mob can turn to face things
|
|
*
|
|
* Conditions:
|
|
* * client.last_turn > world.time
|
|
* * not dead or unconscious
|
|
* * not anchored
|
|
* * no transform not set
|
|
* * we are not restrained
|
|
*/
|
|
/mob/proc/canface()
|
|
if(world.time < client.last_turn)
|
|
return FALSE
|
|
if(stat == DEAD || stat == UNCONSCIOUS)
|
|
return FALSE
|
|
if(anchored)
|
|
return FALSE
|
|
if(notransform)
|
|
return FALSE
|
|
if(restrained())
|
|
return FALSE
|
|
return TRUE
|
|
|
|
///Checks mobility move as well as parent checks
|
|
/mob/living/canface()
|
|
if(!(mobility_flags & MOBILITY_MOVE))
|
|
return FALSE
|
|
return ..()
|
|
|
|
/mob/setShift(dir)
|
|
if (!canface())
|
|
return FALSE
|
|
|
|
is_shifted = TRUE
|
|
|
|
return ..()
|
|
|
|
///This might need a rename but it should replace the can this mob use things check
|
|
/mob/proc/IsAdvancedToolUser()
|
|
return FALSE
|
|
|
|
/mob/proc/swap_hand()
|
|
return
|
|
|
|
/mob/proc/activate_hand(selhand)
|
|
return
|
|
|
|
/mob/proc/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) //For sec bot threat assessment
|
|
return 0
|
|
|
|
///Get the ghost of this mob (from the mind)
|
|
/mob/proc/get_ghost(even_if_they_cant_reenter, ghosts_with_clients)
|
|
if(mind)
|
|
return mind.get_ghost(even_if_they_cant_reenter, ghosts_with_clients)
|
|
|
|
///Force get the ghost from the mind
|
|
/mob/proc/grab_ghost(force)
|
|
if(mind)
|
|
return mind.grab_ghost(force = force)
|
|
|
|
///Notify a ghost that it's body is being cloned
|
|
/mob/proc/notify_ghost_cloning(var/message = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!", var/sound = 'sound/effects/genetics.ogg', var/atom/source = null, flashwindow)
|
|
var/mob/dead/observer/ghost = get_ghost()
|
|
if(ghost)
|
|
ghost.notify_cloning(message, sound, source, flashwindow)
|
|
return ghost
|
|
|
|
///Add a spell to the mobs spell list
|
|
/mob/proc/AddSpell(obj/effect/proc_holder/spell/S)
|
|
mob_spell_list += S
|
|
S.action?.Grant(src)
|
|
|
|
///Remove a spell from the mobs spell list
|
|
/mob/proc/RemoveSpell(obj/effect/proc_holder/spell/spell)
|
|
if(!spell)
|
|
return
|
|
for(var/X in mob_spell_list)
|
|
var/obj/effect/proc_holder/spell/S = X
|
|
if(istype(S, spell))
|
|
mob_spell_list -= S
|
|
qdel(S)
|
|
if(client)
|
|
client << output(null, "statbrowser:check_spells")
|
|
|
|
///Return any anti magic atom on this mob that matches the magic type
|
|
/mob/proc/anti_magic_check(magic = TRUE, holy = FALSE, tinfoil = FALSE, chargecost = 1, self = FALSE)
|
|
return
|
|
|
|
/**
|
|
* Buckle to another mob
|
|
*
|
|
* You can buckle on mobs if you're next to them since most are dense
|
|
*
|
|
* Turns you to face the other mob too
|
|
*/
|
|
/mob/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE)
|
|
if(M.buckled)
|
|
return 0
|
|
var/turf/T = get_turf(src)
|
|
if(M.loc != T)
|
|
var/old_density = density
|
|
density = FALSE
|
|
var/can_step = step_towards(M, T)
|
|
density = old_density
|
|
if(!can_step)
|
|
return 0
|
|
return ..()
|
|
|
|
///Call back post buckle to a mob to offset your visual height
|
|
/mob/post_buckle_mob(mob/living/M)
|
|
var/height = M.get_mob_buckling_height(src)
|
|
M.pixel_y = initial(M.pixel_y) + height
|
|
if(M.layer < layer)
|
|
M.layer = layer + 0.1
|
|
///Call back post unbuckle from a mob, (reset your visual height here)
|
|
/mob/post_unbuckle_mob(mob/living/M)
|
|
M.layer = initial(M.layer)
|
|
M.pixel_y = initial(M.pixel_y)
|
|
|
|
///returns the height in pixel the mob should have when buckled to another mob.
|
|
/mob/proc/get_mob_buckling_height(mob/seat)
|
|
if(isliving(seat))
|
|
var/mob/living/L = seat
|
|
if(L.mob_size <= MOB_SIZE_SMALL) //being on top of a small mob doesn't put you very high.
|
|
return 0
|
|
return 9
|
|
|
|
///can the mob be buckled to something by default?
|
|
/mob/proc/can_buckle()
|
|
return 1
|
|
|
|
///can the mob be unbuckled from something by default?
|
|
/mob/proc/can_unbuckle()
|
|
return 1
|
|
|
|
///Can the mob interact() with an atom?
|
|
/mob/proc/can_interact_with(atom/A)
|
|
return IsAdminGhost(src) || Adjacent(A)
|
|
|
|
///Can the mob use Topic to interact with machines
|
|
/mob/proc/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE)
|
|
return
|
|
|
|
///Can this mob use storage
|
|
/mob/proc/canUseStorage()
|
|
return FALSE
|
|
/**
|
|
* Check if the other mob has any factions the same as us
|
|
*
|
|
* If exact match is set, then all our factions must match exactly
|
|
*/
|
|
/mob/proc/faction_check_mob(mob/target, exact_match)
|
|
if(exact_match) //if we need an exact match, we need to do some bullfuckery.
|
|
var/list/faction_src = faction.Copy()
|
|
var/list/faction_target = target.faction.Copy()
|
|
if(!("[REF(src)]" in faction_target)) //if they don't have our ref faction, remove it from our factions list.
|
|
faction_src -= "[REF(src)]" //if we don't do this, we'll never have an exact match.
|
|
if(!("[REF(target)]" in faction_src))
|
|
faction_target -= "[REF(target)]" //same thing here.
|
|
return faction_check(faction_src, faction_target, TRUE)
|
|
return faction_check(faction, target.faction, FALSE)
|
|
/*
|
|
* Compare two lists of factions, returning true if any match
|
|
*
|
|
* If exact match is passed through we only return true if both faction lists match equally
|
|
*/
|
|
/proc/faction_check(list/faction_A, list/faction_B, exact_match)
|
|
var/list/match_list
|
|
if(exact_match)
|
|
match_list = faction_A&faction_B //only items in both lists
|
|
var/length = LAZYLEN(match_list)
|
|
if(length)
|
|
return (length == LAZYLEN(faction_A)) //if they're not the same len(gth) or we don't have a len, then this isn't an exact match.
|
|
else
|
|
match_list = faction_A&faction_B
|
|
return LAZYLEN(match_list)
|
|
return FALSE
|
|
|
|
|
|
/**
|
|
* Fully update the name of a mob
|
|
*
|
|
* This will update a mob's name, real_name, mind.name, GLOB.data_core records, pda, id and traitor text
|
|
*
|
|
* Calling this proc without an oldname will only update the mob and skip updating the pda, id and records ~Carn
|
|
*/
|
|
/mob/proc/fully_replace_character_name(oldname,newname)
|
|
log_message("[src] name changed from [oldname] to [newname]", LOG_OWNERSHIP)
|
|
if(!newname)
|
|
return 0
|
|
|
|
log_played_names(ckey,newname)
|
|
|
|
real_name = newname
|
|
name = newname
|
|
if(mind)
|
|
mind.name = newname
|
|
if(mind.key)
|
|
log_played_names(mind.key,newname) //Just in case the mind is unsynced at the moment.
|
|
|
|
if(oldname)
|
|
//update the datacore records! This is goig to be a bit costly.
|
|
replace_records_name(oldname,newname)
|
|
|
|
//update our pda and id if we have them on our person
|
|
replace_identification_name(oldname,newname)
|
|
|
|
for(var/datum/mind/T in SSticker.minds)
|
|
for(var/datum/objective/obj in T.get_all_objectives())
|
|
// Only update if this player is a target
|
|
if(obj.target && obj.target.current && obj.target.current.real_name == name)
|
|
obj.update_explanation_text()
|
|
return 1
|
|
|
|
///Updates GLOB.data_core records with new name , see mob/living/carbon/human
|
|
/mob/proc/replace_records_name(oldname,newname)
|
|
return
|
|
|
|
///update the ID name of this mob
|
|
/mob/proc/replace_identification_name(oldname,newname)
|
|
var/list/searching = GetAllContents()
|
|
var/search_id = 1
|
|
var/search_pda = 1
|
|
|
|
for(var/A in searching)
|
|
if( search_id && istype(A, /obj/item/card/id) )
|
|
var/obj/item/card/id/ID = A
|
|
if(ID.registered_name == oldname)
|
|
ID.registered_name = newname
|
|
ID.update_label()
|
|
if(istype(ID.loc, /obj/item/computer_hardware/card_slot))
|
|
var/obj/item/computer_hardware/card_slot/CS = ID.loc
|
|
CS.holder?.update_label()
|
|
if(ID.registered_account?.account_holder == oldname)
|
|
ID.registered_account.account_holder = newname
|
|
if(!search_pda)
|
|
break
|
|
search_id = 0
|
|
|
|
else if( search_pda && istype(A, /obj/item/pda) )
|
|
var/obj/item/pda/PDA = A
|
|
if(PDA.owner == oldname)
|
|
PDA.owner = newname
|
|
PDA.update_label()
|
|
if(!search_id)
|
|
break
|
|
search_pda = 0
|
|
|
|
/mob/proc/update_stat()
|
|
return
|
|
|
|
/mob/proc/update_health_hud()
|
|
return
|
|
|
|
/// Changes the stamina HUD based on new information
|
|
/mob/proc/update_stamina_hud()
|
|
return
|
|
|
|
///Update the lighting plane and sight of this mob (sends COMSIG_MOB_UPDATE_SIGHT)
|
|
/mob/proc/update_sight()
|
|
SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT)
|
|
sync_lighting_plane_alpha()
|
|
|
|
///Set the lighting plane hud alpha to the mobs lighting_alpha var
|
|
/mob/proc/sync_lighting_plane_alpha()
|
|
if(hud_used)
|
|
var/atom/movable/screen/plane_master/lighting/L = hud_used.plane_masters["[LIGHTING_PLANE]"]
|
|
if (L)
|
|
L.alpha = lighting_alpha
|
|
|
|
///Update the mouse pointer of the attached client in this mob
|
|
/mob/proc/update_mouse_pointer()
|
|
if (!client)
|
|
return
|
|
client.mouse_pointer_icon = initial(client.mouse_pointer_icon)
|
|
if (ismecha(loc))
|
|
var/obj/mecha/M = loc
|
|
if(M.mouse_pointer)
|
|
client.mouse_pointer_icon = M.mouse_pointer
|
|
else if (istype(loc, /obj/vehicle/sealed))
|
|
var/obj/vehicle/sealed/E = loc
|
|
if(E.mouse_pointer)
|
|
client.mouse_pointer_icon = E.mouse_pointer
|
|
|
|
|
|
///This mob is abile to read books
|
|
/mob/proc/is_literate()
|
|
return FALSE
|
|
|
|
///Can this mob read (is literate and not blind)
|
|
/mob/proc/can_read(obj/O)
|
|
if(is_blind(src))
|
|
to_chat(src, span_warning("As you are trying to read [O], you suddenly feel very stupid!"))
|
|
return
|
|
if(!is_literate())
|
|
to_chat(src, span_notice("You try to read [O], but can't comprehend any of it."))
|
|
return
|
|
return TRUE
|
|
|
|
///Can this mob hold items
|
|
/mob/proc/can_hold_items()
|
|
return FALSE
|
|
|
|
///Get the id card on this mob
|
|
/mob/proc/get_idcard(hand_first)
|
|
return
|
|
|
|
/mob/proc/get_id_in_hand()
|
|
return
|
|
|
|
/**
|
|
* Get the mob VV dropdown extras
|
|
*/
|
|
/mob/vv_get_dropdown()
|
|
. = ..()
|
|
VV_DROPDOWN_SEPERATOR
|
|
VV_DROPDOWN_OPTION(VV_HK_GIB, "Gib")
|
|
VV_DROPDOWN_OPTION(VV_HK_GIVE_SPELL, "Give Spell")
|
|
VV_DROPDOWN_OPTION(VV_HK_REMOVE_SPELL, "Remove Spell")
|
|
VV_DROPDOWN_OPTION(VV_HK_GIVE_DISEASE, "Give Disease")
|
|
VV_DROPDOWN_OPTION(VV_HK_GODMODE, "Toggle Godmode")
|
|
VV_DROPDOWN_OPTION(VV_HK_DROP_ALL, "Drop Everything")
|
|
VV_DROPDOWN_OPTION(VV_HK_REGEN_ICONS, "Regenerate Icons")
|
|
VV_DROPDOWN_OPTION(VV_HK_PLAYER_PANEL, "Show player panel")
|
|
VV_DROPDOWN_OPTION(VV_HK_BUILDMODE, "Toggle Buildmode")
|
|
VV_DROPDOWN_OPTION(VV_HK_DIRECT_CONTROL, "Assume Direct Control")
|
|
VV_DROPDOWN_OPTION(VV_HK_OFFER_GHOSTS, "Offer Control to Ghosts")
|
|
VV_DROPDOWN_OPTION(VV_HK_SET_AFK_TIMER, "Set AFK Timer")
|
|
|
|
|
|
/mob/vv_do_topic(list/href_list)
|
|
. = ..()
|
|
if(href_list[VV_HK_REGEN_ICONS] && check_rights(R_VAREDIT))
|
|
regenerate_icons()
|
|
if(href_list[VV_HK_PLAYER_PANEL])
|
|
usr.client.holder.show_player_panel(src)
|
|
if(href_list[VV_HK_GODMODE] && check_rights(R_ADMIN))
|
|
usr.client.cmd_admin_godmode(src)
|
|
if(href_list[VV_HK_GIVE_SPELL] && check_rights(R_VAREDIT))
|
|
usr.client.give_spell(src)
|
|
if(href_list[VV_HK_REMOVE_SPELL] && check_rights(R_VAREDIT))
|
|
usr.client.remove_spell(src)
|
|
if(href_list[VV_HK_GIVE_DISEASE] && check_rights(R_VAREDIT))
|
|
usr.client.give_disease(src)
|
|
if(href_list[VV_HK_GIB] && check_rights(R_FUN))
|
|
usr.client.cmd_admin_gib(src)
|
|
if(href_list[VV_HK_BUILDMODE] && check_rights(R_BUILDMODE))
|
|
togglebuildmode(src)
|
|
if(href_list[VV_HK_DROP_ALL] && check_rights(R_ADMIN))
|
|
usr.client.cmd_admin_drop_everything(src)
|
|
if(href_list[VV_HK_DIRECT_CONTROL] && check_rights(R_VAREDIT))
|
|
usr.client.cmd_assume_direct_control(src)
|
|
if(href_list[VV_HK_OFFER_GHOSTS] && check_rights(R_ADMIN))
|
|
offer_control(src)
|
|
if(href_list[VV_HK_SET_AFK_TIMER] && check_rights(R_ADMIN))
|
|
if(!mind)
|
|
to_chat(usr, "This cannot be used on mobs without a mind")
|
|
return
|
|
|
|
var/timer = input("Input AFK length in minutes, 0 to cancel the current timer", text("Input")) as num|null
|
|
if(timer == null) // Explicit null check for cancel, rather than generic truthyness, so 0 is handled differently
|
|
return
|
|
|
|
deltimer(mind.afk_verb_timer)
|
|
mind.afk_verb_used = FALSE
|
|
|
|
if(!timer)
|
|
return
|
|
|
|
mind.afk_verb_used = TRUE
|
|
mind.afk_verb_timer = addtimer(VARSET_CALLBACK(mind, afk_verb_used, FALSE), timer MINUTES, TIMER_STOPPABLE);
|
|
|
|
|
|
/**
|
|
* extra var handling for the logging var
|
|
*/
|
|
/mob/vv_get_var(var_name)
|
|
switch(var_name)
|
|
if("logging")
|
|
return debug_variable(var_name, logging, 0, src, FALSE)
|
|
. = ..()
|
|
|
|
/mob/vv_auto_rename(new_name)
|
|
//Do not do parent's actions, as we *usually* do this differently.
|
|
fully_replace_character_name(real_name, new_name)
|
|
usr.client.vv_update_display(src, "name", new_name)
|
|
usr.client.vv_update_display(src, "real_name", real_name || "No real name")
|
|
|
|
///Show the language menu for this mob
|
|
/mob/verb/open_language_menu()
|
|
set name = "Open Language Menu"
|
|
set category = "IC"
|
|
|
|
var/datum/language_holder/H = get_language_holder()
|
|
H.open_language_menu(usr)
|
|
|
|
///Adjust the nutrition of a mob
|
|
/mob/proc/adjust_nutrition(var/change) //Honestly FUCK the oldcoders for putting nutrition on /mob someone else can move it up because holy hell I'd have to fix SO many typechecks
|
|
nutrition = max(0, nutrition + change)
|
|
|
|
///Force set the mob nutrition
|
|
/mob/proc/set_nutrition(var/change) //Seriously fuck you oldcoders.
|
|
nutrition = max(0, change)
|
|
|
|
///Set the movement type of the mob and update it's movespeed
|
|
/mob/setMovetype(newval)
|
|
. = ..()
|
|
update_movespeed(FALSE)
|