Tg patch branch to master (#192)

* code nitpicking

* Midnight oil

More like 6am oil.  Still having issues with actually eating anyone.

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* missed commit

* Noms

* specific release doesn't work

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Tg modern (#149)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* Mentor system, Tickets, and discord (#151)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* vore tweaks

* progress

* dirtier fix than a korean hooker in the 60s

* The release your hooker will always fake

* you could save that hookers number but wouldn't you rather just vore the hooker instead

* Save system is literal black magic

* great googly moogly it's all gone to shit

* We May 2015 save code now

* fiddling with digestion code now

* fuck if I know anymore. I'm going to bed

* OWN UP YOUR OWN DIGESTION

* UNREGULATED GUTS ARE NON COMPLIANT

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* BELLIES MUST COMPLY WITH USER OWNERSHIP

* Removed debug messages

* Unneeded verb additions

* file change tweaks

* WATCH YOUR SPACING, DRIVER

* Changelog and devourment for some mobs.

Because I knew people were gunna ask.

NO YOU CANNOT EAT THE FUCKING LEGION

* Vore code sync (#157)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Escape and Devourable

For the normies who play here yet complain about it.

* Things that should be committed

* unneeded files

* Sizeray works now

* tweaks and bed time going

* IT WORKS mostly

Need to get multiple guts and saving working tho

* save tweaks

* item hotfix

* gut examine message

* damifino

* save system works

also ensured some mobs have vore controls, so silicons can't even
remotely do vore things.

* code nitpicking

* Midnight oil

More like 6am oil.  Still having issues with actually eating anyone.

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* missed commit

* Noms

* specific release doesn't work

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* vore tweaks

* progress

* dirtier fix than a korean hooker in the 60s

* The release your hooker will always fake

* you could save that hookers number but wouldn't you rather just vore the hooker instead

* Save system is literal black magic

* great googly moogly it's all gone to shit

* We May 2015 save code now

* fiddling with digestion code now

* fuck if I know anymore. I'm going to bed

* OWN UP YOUR OWN DIGESTION

* UNREGULATED GUTS ARE NON COMPLIANT

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* BELLIES MUST COMPLY WITH USER OWNERSHIP

* Removed debug messages

* Unneeded verb additions

* file change tweaks

* WATCH YOUR SPACING, DRIVER

* Changelog and devourment for some mobs.

Because I knew people were gunna ask.

NO YOU CANNOT EAT THE FUCKING LEGION

* title screen change from Crow's PR.

* More of Crow's title screen stuff

* mode tweaks.... again

* gamemode voting in lobby via TalkingCactus
disabled ashwalkers as roundstart
Verk's species tweak
paralax starts disabled by default

* LOOC

* index sync problem (#158)

* digifix

* things

* furry races.dm

* actually deletes species_types

* maps

* tgui and stuff

* Sounds

* icon updates

* Defines and helpers

* global vars and on click

* controllers

* datums

* game folder

* fixes invisible flan mobs

* some modules

* dropbomb verb enhanced

* moar

* moar

* moar

* even more again

* and finally these for modules

* Some compile tweaks

* silly dme get updated you scrub

* compiles cleanly now

* various open PR fixes from TG

as of 0800 Texas Standard Time

* also fancy cryopods before I forget again

* headslug gold core fix

* edgy code of the modernization (#164)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Escape and Devourable

For the normies who play here yet complain about it.

* Things that should be committed

* unneeded files

* Sizeray works now

* tweaks and bed time going

* IT WORKS mostly

Need to get multiple guts and saving working tho

* save tweaks

* item hotfix

* gut examine message

* damifino

* save system works

also ensured some mobs have vore controls, so silicons can't even
remotely do vore things.

* code nitpicking

* Midnight oil

More like 6am oil.  Still having issues with actually eating anyone.

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* missed commit

* Noms

* specific release doesn't work

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* vore tweaks

* progress

* Small fixes for dogborgs and sprite accessories:
-Ported the hidden snippets of the dogborg code.
-Reset module now resets pixel offset and icon directory again. (broke shit when reseting from dogborg)
-Medihound belly fixed.
-Husky body marking tweaked to not overlap arms in side view.
-Added husky ears that are basically wolf ears that use secondary color instead.

* dirtier fix than a korean hooker in the 60s

* The release your hooker will always fake

* you could save that hookers number but wouldn't you rather just vore the hooker instead

* Save system is literal black magic

* great googly moogly it's all gone to shit

* We May 2015 save code now

* fiddling with digestion code now

* fuck if I know anymore. I'm going to bed

* OWN UP YOUR OWN DIGESTION

* UNREGULATED GUTS ARE NON COMPLIANT

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* BELLIES MUST COMPLY WITH USER OWNERSHIP

* Removed debug messages

* Unneeded verb additions

* file change tweaks

* WATCH YOUR SPACING, DRIVER

* Changelog and devourment for some mobs.

Because I knew people were gunna ask.

NO YOU CANNOT EAT THE FUCKING LEGION

* title screen change from Crow's PR.

* More of Crow's title screen stuff

* mode tweaks.... again

* gamemode voting in lobby via TalkingCactus
disabled ashwalkers as roundstart
Verk's species tweak
paralax starts disabled by default

* LOOC

* index sync problem (#158)

* digifix

* things

* furry races.dm

* actually deletes species_types

* maps

* tgui and stuff

* Sounds

* icon updates

* Defines and helpers

* global vars and on click

* controllers

* datums

* game folder

* fixes invisible flan mobs

* some modules

* dropbomb verb enhanced

* moar

* moar

* moar

* even more again

* and finally these for modules

* Some compile tweaks

* silly dme get updated you scrub

* compiles cleanly now

* various open PR fixes from TG

as of 0800 Texas Standard Time

* also fancy cryopods before I forget again

* headslug gold core fix

* some species and DNA tweaks

* Digest already damn you

* suddenly sound and resist works. wtf

* Minor tweaks, cryopod noise change

* Vore tested working, species working

* Merge test onto bleeding edgy (#165)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Escape and Devourable

For the normies who play here yet complain about it.

* Things that should be committed

* unneeded files

* Sizeray works now

* tweaks and bed time going

* IT WORKS mostly

Need to get multiple guts and saving working tho

* save tweaks

* item hotfix

* gut examine message

* damifino

* save system works

also ensured some mobs have vore controls, so silicons can't even
remotely do vore things.

* code nitpicking

* Midnight oil

More like 6am oil.  Still having issues with actually eating anyone.

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* missed commit

* Noms

* specific release doesn't work

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* vore tweaks

* progress

* Small fixes for dogborgs and sprite accessories:
-Ported the hidden snippets of the dogborg code.
-Reset module now resets pixel offset and icon directory again. (broke shit when reseting from dogborg)
-Medihound belly fixed.
-Husky body marking tweaked to not overlap arms in side view.
-Added husky ears that are basically wolf ears that use secondary color instead.

* dirtier fix than a korean hooker in the 60s

* The release your hooker will always fake

* you could save that hookers number but wouldn't you rather just vore the hooker instead

* Save system is literal black magic

* great googly moogly it's all gone to shit

* We May 2015 save code now

* fiddling with digestion code now

* fuck if I know anymore. I'm going to bed

* OWN UP YOUR OWN DIGESTION

* UNREGULATED GUTS ARE NON COMPLIANT

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* BELLIES MUST COMPLY WITH USER OWNERSHIP

* Removed debug messages

* Unneeded verb additions

* file change tweaks

* WATCH YOUR SPACING, DRIVER

* Changelog and devourment for some mobs.

Because I knew people were gunna ask.

NO YOU CANNOT EAT THE FUCKING LEGION

* title screen change from Crow's PR.

* More of Crow's title screen stuff

* mode tweaks.... again

* gamemode voting in lobby via TalkingCactus
disabled ashwalkers as roundstart
Verk's species tweak
paralax starts disabled by default

* LOOC

* index sync problem (#158)

* digifix

* things

* furry races.dm

* actually deletes species_types

* maps

* tgui and stuff

* Sounds

* icon updates

* Defines and helpers

* global vars and on click

* controllers

* datums

* game folder

* fixes invisible flan mobs

* some modules

* dropbomb verb enhanced

* moar

* moar

* moar

* even more again

* and finally these for modules

* Some compile tweaks

* silly dme get updated you scrub

* compiles cleanly now

* various open PR fixes from TG

as of 0800 Texas Standard Time

* also fancy cryopods before I forget again

* headslug gold core fix

* some species and DNA tweaks

* Digest already damn you

* suddenly sound and resist works. wtf

* Minor tweaks, cryopod noise change

* Vore tested working, species working

* travis map updates

* updates

* pool's closed due to lag

* datum pools are closed too

* Initializing new pool's closed

* Pool's closed and initializing shit is done

* sprite updates

* chattering is okay to do now.

* bleeblin edgy 1/23 (#166)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Escape and Devourable

For the normies who play here yet complain about it.

* Things that should be committed

* unneeded files

* Sizeray works now

* tweaks and bed time going

* IT WORKS mostly

Need to get multiple guts and saving working tho

* save tweaks

* item hotfix

* gut examine message

* damifino

* save system works

also ensured some mobs have vore controls, so silicons can't even
remotely do vore things.

* code nitpicking

* Midnight oil

More like 6am oil.  Still having issues with actually eating anyone.

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* missed commit

* Noms

* specific release doesn't work

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* vore tweaks

* progress

* Small fixes for dogborgs and sprite accessories:
-Ported the hidden snippets of the dogborg code.
-Reset module now resets pixel offset and icon directory again. (broke shit when reseting from dogborg)
-Medihound belly fixed.
-Husky body marking tweaked to not overlap arms in side view.
-Added husky ears that are basically wolf ears that use secondary color instead.

* dirtier fix than a korean hooker in the 60s

* The release your hooker will always fake

* you could save that hookers number but wouldn't you rather just vore the hooker instead

* Save system is literal black magic

* great googly moogly it's all gone to shit

* We May 2015 save code now

* fiddling with digestion code now

* fuck if I know anymore. I'm going to bed

* OWN UP YOUR OWN DIGESTION

* UNREGULATED GUTS ARE NON COMPLIANT

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* BELLIES MUST COMPLY WITH USER OWNERSHIP

* Removed debug messages

* Unneeded verb additions

* file change tweaks

* WATCH YOUR SPACING, DRIVER

* Changelog and devourment for some mobs.

Because I knew people were gunna ask.

NO YOU CANNOT EAT THE FUCKING LEGION

* title screen change from Crow's PR.

* More of Crow's title screen stuff

* mode tweaks.... again

* gamemode voting in lobby via TalkingCactus
disabled ashwalkers as roundstart
Verk's species tweak
paralax starts disabled by default

* LOOC

* index sync problem (#158)

* digifix

* things

* furry races.dm

* actually deletes species_types

* maps

* tgui and stuff

* Sounds

* icon updates

* Defines and helpers

* global vars and on click

* controllers

* datums

* game folder

* fixes invisible flan mobs

* some modules

* dropbomb verb enhanced

* moar

* moar

* moar

* even more again

* and finally these for modules

* Some compile tweaks

* silly dme get updated you scrub

* compiles cleanly now

* various open PR fixes from TG

as of 0800 Texas Standard Time

* also fancy cryopods before I forget again

* headslug gold core fix

* some species and DNA tweaks

* Digest already damn you

* suddenly sound and resist works. wtf

* Minor tweaks, cryopod noise change

* Vore tested working, species working

* travis map updates

* updates

* pool's closed due to lag

* datum pools are closed too

* Initializing new pool's closed

* Pool's closed and initializing shit is done

* sprite updates

* chattering is okay to do now.

* Update .travis.yml

* Update .travis.yml

* Update .travis.yml

* Revert "Modern modern"

* Revert "Revert "Modern modern""

* fix it fix it fix it fix it

* fixes title screen - thanks crow

* Riding code reverted

* possible tgui fix?

* who the fuck even knows if this is the problem

* adds moths and sharks (no colors yet, not greyscaled)
adds LOOC back

* "fixes" missing items in some machinery.

* slight tweaks to abductor spawns
borer event enabled (max 1)

* Update .travis.yml

* fixes shuttle purchase from comms

* fixes and QoL

* Polymorphing all is dangerous too

* re-fixes ahelp ticket system again

* metagaming check proving to be spamlicious

* Fixes not being able to see devoured mob poses

* fix for vehicle buckling

* ahelp timer runtime fix (#178)

* controller and game updates 1/29

* Defines, helpers, datums 1/29

* world.dm updates

* modules/admin tweaks

* everything in modules not a mob

* modules/mob fixes and such

No more PAIs ventcrawling

* icons, maps, tools, etc.

* compiler fixes

* round type vote fixed

* hardsuit cargo pack

* reduce ion and electric storm chance

* perms access for travis

* fix helmet to the suit
removes CE from crate

* changelog

* fuck

* perms for travis... again

* Update tgstation.dme

* Update tgstation.dme

* Donation race

* redpanda

* red panda

* size play work

* Size chemical basics

Needs testing/refining

* some fixing ports before I just fucking ported it anyway

* It's been a fucking week.

* commiting moar changes because github

* admins.txt lol

* icons

* defines and such

* globalvars and onclick

* Controllers

* datums

* game folder

* oh look, HoG is back

* modules pt 1

* client things

* more modules

* everything not mob code

* some mob stuff

* more mob things

* silicon mobs

* ayylims and monkeys

* human updates

* huh

* housekeeping is fired.

* last minute fixes

* more last minute things

* human parts double check'd

* more paper

* Icons are fixed

* double check of thermal protection code. (#191)
This commit is contained in:
TalkingCactus
2017-02-03 06:56:14 -05:00
committed by Poojawa
parent 7735dec0ec
commit f7c09077d2
2489 changed files with 830965 additions and 416701 deletions
+2 -3
View File
@@ -5,7 +5,6 @@
max_occurrences = 1
min_players = 5
earliest_start = 18000 // 30 min
gamemode_blacklist = list("nuclear","wizard","revolution","abduction")
@@ -28,8 +27,8 @@
else
temp = new
var/agent_mind = popleft(candidates)
var/scientist_mind = popleft(candidates)
var/agent_mind = pick_n_take(candidates)
var/scientist_mind = pick_n_take(candidates)
var/mob/living/carbon/human/agent = makeBody(agent_mind)
var/mob/living/carbon/human/scientist = makeBody(scientist_mind)
+3 -3
View File
@@ -57,15 +57,15 @@
while(spawncount > 0 && vents.len && candidates.len)
var/obj/vent = pick_n_take(vents)
var/client/C = popleft(candidates)
var/client/C = pick_n_take(candidates)
var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc)
new_xeno.key = C.key
spawncount--
successSpawn = TRUE
message_admins("[new_xeno.key] has been made into an alien by an event.")
log_game("[new_xeno.key] was spawned as an alien by an event.")
message_admins("[key_name_admin(new_xeno)] has been made into an alien by an event.")
log_game("[key_name(new_xeno)] was spawned as an alien by an event.")
spawned_mobs += new_xeno
if(successSpawn)
-10
View File
@@ -31,13 +31,3 @@
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/flux(T)
/datum/round_event/anomaly/tick()
if(!newAnomaly)
kill()
return
newAnomaly.anomalyEffect()
/datum/round_event/anomaly/end()
if(newAnomaly)//Kill the anomaly if it still exists at the end.
qdel(newAnomaly)
-55
View File
@@ -7,7 +7,6 @@
/datum/round_event/anomaly/anomaly_bluespace
startWhen = 3
announceWhen = 10
endWhen = 95
/datum/round_event/anomaly/anomaly_bluespace/announce()
@@ -18,57 +17,3 @@
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/bluespace(T)
/datum/round_event/anomaly/anomaly_bluespace/end()
if(newAnomaly.loc)//If it hasn't been neutralized, it's time to warp half the station away jeez
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
// Calculate new position (searches through beacons in world)
var/obj/item/device/radio/beacon/chosen
var/list/possible = list()
for(var/obj/item/device/radio/beacon/W in world)
possible += W
if(possible.len > 0)
chosen = pick(possible)
if(chosen)
// Calculate previous position for transition
var/turf/FROM = T // the turf of origin we're travelling FROM
var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO
playsound(TO, 'sound/effects/phasein.ogg', 100, 1)
priority_announce("Massive bluespace translocation detected.", "Anomaly Alert")
var/list/flashers = list()
for(var/mob/living/carbon/C in viewers(TO, null))
if(C.flash_eyes())
flashers += C
var/y_distance = TO.y - FROM.y
var/x_distance = TO.x - FROM.x
for (var/atom/movable/A in urange(12, FROM )) // iterate thru list of mobs in the area
if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid
if(A.anchored) continue
var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place
if(!A.Move(newloc) && newloc) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving
A.loc = newloc
spawn()
if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect
var/mob/M = A
if(M.client)
var/obj/blueeffect = new /obj(src)
blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH"
blueeffect.icon = 'icons/effects/effects.dmi'
blueeffect.icon_state = "shieldsparkles"
blueeffect.layer = FLASH_LAYER
blueeffect.mouse_opacity = 0
M.client.screen += blueeffect
sleep(20)
M.client.screen -= blueeffect
qdel(blueeffect)
qdel(newAnomaly)
-8
View File
@@ -9,8 +9,6 @@
/datum/round_event/anomaly/anomaly_flux
startWhen = 3
announceWhen = 20
endWhen = 80
/datum/round_event/anomaly/anomaly_flux/announce()
priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
@@ -20,9 +18,3 @@
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/flux(T)
/datum/round_event/anomaly/anomaly_flux/end()
if(newAnomaly.loc)//If it hasn't been neutralized, it's time to blow up.
explosion(newAnomaly, 1, 4, 16, 18) //Low devastation, but hits a lot of stuff.
qdel(newAnomaly)
+1 -3
View File
@@ -7,8 +7,6 @@
/datum/round_event/anomaly/anomaly_grav
startWhen = 3
announceWhen = 20
endWhen = 120
/datum/round_event/anomaly/anomaly_grav/announce()
priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
@@ -16,4 +14,4 @@
/datum/round_event/anomaly/anomaly_grav/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/grav(T)
newAnomaly = new /obj/effect/anomaly/grav(T)
-22
View File
@@ -7,8 +7,6 @@
/datum/round_event/anomaly/anomaly_pyro
startWhen = 10
announceWhen = 3
endWhen = 85
/datum/round_event/anomaly/anomaly_pyro/announce()
priority_announce("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
@@ -17,23 +15,3 @@
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/pyro(T)
/datum/round_event/anomaly/anomaly_pyro/tick()
if(!newAnomaly)
kill()
return
if(IsMultiple(activeFor, 5))
newAnomaly.anomalyEffect()
/datum/round_event/anomaly/anomaly_pyro/end()
if(newAnomaly.loc)
var/turf/open/T = get_turf(newAnomaly)
if(istype(T))
T.atmos_spawn_air("o2=500;plasma=500;TEMP=1000") //Make it hot and burny for the new slime
var/mob/living/simple_animal/slime/S = new/mob/living/simple_animal/slime(T)
S.colour = pick("red", "orange")
S.rabid = 1
qdel(newAnomaly)
+1 -3
View File
@@ -9,8 +9,6 @@
/datum/round_event/anomaly/anomaly_vortex
startWhen = 10
announceWhen = 3
endWhen = 95
/datum/round_event/anomaly/anomaly_vortex/announce()
priority_announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
@@ -18,4 +16,4 @@
/datum/round_event/anomaly/anomaly_vortex/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/bhole(T)
newAnomaly = new /obj/effect/anomaly/bhole(T)
+20 -12
View File
@@ -1,6 +1,6 @@
/datum/round_event_control/blob
name = "Blob"
typepath = /datum/round_event/blob
typepath = /datum/round_event/ghost_role/blob
weight = 5
max_occurrences = 1
@@ -9,22 +9,30 @@
gamemode_blacklist = list("blob") //Just in case a blob survives that long
/datum/round_event/blob
/datum/round_event/ghost_role/blob
announceWhen = 12
endWhen = 120
role_name = "blob overmind"
var/new_rate = 2
/datum/round_event/blob/New(var/strength)
/datum/round_event/ghost_role/blob/New(my_processing = TRUE, set_point_rate)
..()
if(strength)
new_rate = strength
if(set_point_rate)
new_rate = set_point_rate
/datum/round_event/blob/announce()
/datum/round_event/ghost_role/blob/announce()
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
/datum/round_event/blob/start()
var/turf/T = pick(blobstart)
if(!T)
return kill()
new/obj/effect/blob/core(T, null, new_rate)
/datum/round_event/ghost_role/blob/spawn_role()
if(!blobstart.len)
return MAP_ERROR
var/list/candidates = get_candidates("blob", null, ROLE_BLOB)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
var/mob/dead/observer/new_blob = pick(candidates)
var/obj/structure/blob/core/BC = new/obj/structure/blob/core(pick(blobstart), new_blob.client, new_rate)
BC.overmind.blob_points = min(20 + player_list.len, BC.overmind.max_blob_points)
spawned_mobs += BC.overmind
message_admins("[key_name_admin(BC.overmind)] has been made into a blob overmind by an event.")
log_game("[key_name(BC.overmind)] was spawned as a blob overmind by an event.")
return SUCCESSFUL_SPAWN
+5 -3
View File
@@ -24,7 +24,7 @@
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
var/mob/dead/selected_candidate = popleft(candidates)
var/mob/dead/selected_candidate = pick_n_take(candidates)
var/key = selected_candidate.key
var/datum/mind/Mind = create_devil_mind(key)
@@ -33,12 +33,14 @@
var/mob/living/carbon/human/devil = create_event_devil(spawn_loc)
Mind.transfer_to(devil)
ticker.mode.finalize_devil(Mind)
ticker.mode.add_devil_objectives(src, 2)
Mind.announceDevilLaws()
Mind.announce_objectives()
spawned_mobs += devil
message_admins("[key] has been made into a devil by an event.")
log_game("[key] was spawned as a devil by an event.")
message_admins("[key_name_admin(devil)] has been made into a devil by an event.")
log_game("[key_name(devil)] was spawned as a devil by an event.")
var/datum/job/jobdatum = SSjob.GetJob("Assistant")
devil.job = jobdatum.title
jobdatum.equip(devil)
+19 -10
View File
@@ -1,21 +1,30 @@
/datum/round_event_control/meteor_wave/dust
/datum/round_event_control/space_dust
name = "Minor Space Dust"
typepath = /datum/round_event/meteor_wave/dust
typepath = /datum/round_event/space_dust
weight = 200
max_occurrences = 1000
earliest_start = 0
alertadmins = 0
/datum/round_event/meteor_wave/dust
/datum/round_event/space_dust
startWhen = 1
endWhen = 2
announceWhen = 0
/datum/round_event/meteor_wave/dust/announce()
return
/datum/round_event/meteor_wave/dust/start()
/datum/round_event/space_dust/start()
spawn_meteors(1, meteorsC)
/datum/round_event/meteor_wave/dust/tick()
return
/datum/round_event_control/sandstorm
name = "Sandstorm"
typepath = /datum/round_event/sandstorm
weight = 0
max_occurrences = 0
earliest_start = 0
/datum/round_event/sandstorm
startWhen = 1
endWhen = 150 // ~5 min
announceWhen = 0
/datum/round_event/sandstorm/tick()
spawn_meteors(10, meteorsC)
+1 -1
View File
@@ -3,7 +3,7 @@
typepath = /datum/round_event/electrical_storm
earliest_start = 6000
min_players = 5
weight = 40
weight = 5
alertadmins = 0
/datum/round_event/electrical_storm
+15 -5
View File
@@ -1,3 +1,6 @@
#define MAX_SPAWN_ATTEMPT 3
/datum/round_event/ghost_role
// We expect 0 or more /clients (or things with .key) in this list
var/list/priority_candidates = list()
@@ -8,18 +11,24 @@
/datum/round_event/ghost_role/start()
try_spawning()
/datum/round_event/ghost_role/proc/try_spawning(sanity = 0)
/datum/round_event/ghost_role/proc/try_spawning(sanity = 0, retry = 0)
// The event does not run until the spawning has been attempted
// to prevent us from getting gc'd halfway through
processing = FALSE
var/status = spawn_role()
if(status == WAITING_FOR_SOMETHING)
if((status == WAITING_FOR_SOMETHING))
if(retry >= MAX_SPAWN_ATTEMPT)
message_admins("[role_name] event has exceeded maximum spawn attempts. Aborting and refunding.")
if(control && control.occurrences > 0) //Don't refund if it hasn't
control.occurrences--
return
var/waittime = 300 * (2^retry)
message_admins("The event will not spawn a [role_name] until certain \
conditions are met. Waiting 30s and then retrying.")
spawn(300)
conditions are met. Waiting [waittime/10]s and then retrying.")
spawn(waittime)
// I hope this doesn't end up running out of stack space
try_spawning()
try_spawning(0,++retry)
return
if(status == MAP_ERROR)
@@ -60,3 +69,4 @@
return candidates
#undef MAX_SPAWN_ATTEMPT
+19
View File
@@ -0,0 +1,19 @@
/datum/round_event_control/grid_check
name = "Grid Check"
typepath = /datum/round_event/grid_check
weight = 10
max_occurrences = 3
/datum/round_event/grid_check
announceWhen = 1
startWhen = 1
/datum/round_event/grid_check/announce()
priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", 'sound/AI/poweroff.ogg')
/datum/round_event/grid_check/start()
for(var/P in apcs_list)
var/obj/machinery/power/apc/C = P
if(C.cell && C.z == ZLEVEL_STATION)
C.energy_fail(rand(30,120))
+61 -6
View File
@@ -11,13 +11,17 @@
for(var/mob/living/carbon/human/H in mob_list)
var/obj/item/weapon/storage/backpack/b = locate() in H.contents
new /obj/item/weapon/storage/spooky(b)
if(prob(50))
H.set_species(/datum/species/skeleton)
else
H.set_species(/datum/species/zombie)
if(ishuman(H) || islizard(H))
if(prob(50))
H.set_species(/datum/species/skeleton)
else
H.set_species(/datum/species/zombie)
for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in mob_list)
Ian.place_on_head(new /obj/item/weapon/bedsheet(Ian))
for(var/mob/living/simple_animal/parrot/Poly/Poly in mob_list)
new /mob/living/simple_animal/parrot/Poly/ghost(Poly.loc)
qdel(Poly)
/datum/round_event/spooky/announce()
priority_announce(pick("RATTLE ME BONES!","THE RIDE NEVER ENDS!", "A SKELETON POPS OUT!", "SPOOKY SCARY SKELETONS!", "CREWMEMBERS BEWARE, YOU'RE IN FOR A SCARE!") , "THE CALL IS COMING FROM INSIDE THE HOUSE")
@@ -50,6 +54,50 @@
if(IsMultiple(activeFor, 4))
spawn_meteors(3, meteorsSPOOKY) //meteor list types defined in gamemode/meteor/meteors.dm
//Creepy clown invasion
/datum/round_event_control/creepy_clowns
name = "Clowns"
typepath = /datum/round_event/creepy_clowns
holidayID = HALLOWEEN
weight = 20
earliest_start = 0
/datum/round_event/creepy_clowns
endWhen = 40
/datum/round_event/creepy_clowns/start()
for(var/mob/living/carbon/human/H in living_mob_list)
if(!H.client || !istype(H))
return
H << "<span class='danger'>Honk...</span>"
H << 'sound/spookoween/scary_clown_appear.ogg'
var/turf/T = get_turf(H)
if(T)
new /obj/effect/hallucination/simple/clown(T, H, 50)
/datum/round_event/creepy_clowns/tick()
if(IsMultiple(activeFor, 4))
for(var/mob/living/carbon/human/H in living_mob_list)
if (prob(66))
playsound(H.loc, pick('sound/spookoween/scary_horn.ogg','sound/spookoween/scary_horn2.ogg', 'sound/spookoween/scary_horn3.ogg'), 100, 1)
if (prob(33))
var/turf/T = get_turf(H)
if(T)
new /obj/effect/hallucination/simple/clown(T, H, 25)
else if (prob(25))
var/turf/T = get_turf(H)
if(T)
new /obj/effect/hallucination/simple/clown/scary(T, H, 25)
else if (prob(5))
var/turf/T = get_turf(H)
if(T)
spawn_atom_to_turf(/obj/effect/mob_spawn/human/clown/corpse, H, 1)
else if (prob(1))
spawn_atom_to_turf(/mob/living/simple_animal/hostile/retaliate/clown, H, 1)
/datum/round_event/creepy_clowns/announce()
priority_announce("Honk... Honk... honk... HONK! HONK! HONKHONKHONKHONKHONK", "HONK!", 'sound/spookoween/scary_horn.ogg')
//spooky foods (you can't actually make these when it's not halloween)
/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookyskull
name = "skull cookie"
@@ -68,7 +116,7 @@
/obj/item/weapon/storage/spooky
name = "trick-o-treat bag"
desc = "A Pumpkin shaped bag that holds all sorts of goodies!"
desc = "A pumpkin-shaped bag that holds all sorts of goodies!"
icon = 'icons/obj/halloween_items.dmi'
icon_state = "treatbag"
@@ -79,5 +127,12 @@
/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookycoffin,
/obj/item/weapon/reagent_containers/food/snacks/candy_corn,
/obj/item/weapon/reagent_containers/food/snacks/candy,
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar)
/obj/item/weapon/reagent_containers/food/snacks/candiedapple,
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar,
/obj/item/organ/brain ) // OH GOD THIS ISN'T CANDY!
new type(src)
/obj/item/weapon/card/emag/halloween
name = "hack-o'-lantern"
desc = "It's a pumpkin with a cryptographic sequencer sticking out."
icon_state = "hack_o_lantern"
+8 -6
View File
@@ -14,7 +14,7 @@
/datum/round_event/valentines/start()
..()
for(var/mob/living/carbon/human/H in mob_list)
for(var/mob/living/carbon/human/H in living_mob_list)
H.put_in_hands(new /obj/item/weapon/valentine)
var/obj/item/weapon/storage/backpack/b = locate() in H.contents
new /obj/item/weapon/reagent_containers/food/snacks/candyheart(b)
@@ -28,8 +28,8 @@
icon = 'icons/obj/toy.dmi'
icon_state = "sc_Ace of Hearts_syndicate" // shut up
var/message = "A generic message of love or whatever."
burn_state = FLAMMABLE
w_class = 1
resistance_flags = FLAMMABLE
w_class = WEIGHT_CLASS_TINY
/obj/item/weapon/valentine/New()
..()
@@ -55,7 +55,6 @@
"You're always valid to my heart.",
"I'd risk the wrath of the gods to bwoink you.",
"You look as beautiful now as the last time you were cloned.",
"Your love is more valuable than raw plasma ore.",
"Someone check the gravitational generator, because I'm only attracted to you.",
"If I were the warden I'd always let you into my armory.",
"The virologist is rogue, and the only cure is a kiss from you.",
@@ -73,7 +72,9 @@
"If you had a pickaxe you'd be a shaft FINEr.",
"Roses are red, tide is gray, if I were an assistant I'd steal you away.",
"Roses are red, text is green, I love you more than cleanbots clean.",
"If you were a carp I'd fi-lay you." )
"If you were a carp I'd fi-lay you.",
"I'm a nuke op, and my pinpointer leads to your heart.",
"Wanna slay my megafauna?" )
/obj/item/weapon/valentine/attackby(obj/item/weapon/W, mob/user, params)
..()
@@ -123,5 +124,6 @@
"A heart-shaped candy that reads: WAG MY TAIL",
"A heart-shaped candy that reads: VALIDTINES",
"A heart-shaped candy that reads: FACEHUGGER",
"A heart-shaped candy that reads: DOMINATOR")
"A heart-shaped candy that reads: DOMINATOR",
"A heart-shaped candy that reads: GET TESLA'D")
icon_state = pick("candyheart", "candyheart2", "candyheart3", "candyheart4")
+10 -2
View File
@@ -47,7 +47,7 @@
var/cracked = 0
/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user)
if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() )
if( !cracked && ishuman(target) && (target.stat == CONSCIOUS) && !target.get_active_held_item() )
target.visible_message("[user] and [target] pop \an [src]! *pop*", "<span class='notice'>You pull \an [src] with [target]! *pop*</span>", "<span class='italics'>You hear a pop.</span>")
var/obj/item/weapon/paper/Joke = new /obj/item/weapon/paper(user.loc)
Joke.name = "[pick("awful","terrible","unfunny")] joke"
@@ -78,7 +78,15 @@
icon_state = "xmashat"
desc = "A crappy paper hat that you are REQUIRED to wear."
flags_inv = 0
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
/obj/effect/landmark/xmastree
name = "christmas tree spawner"
var/tree = /obj/structure/flora/tree/pine/xmas
/obj/effect/landmark/xmastree/rdrod
name = "festivus pole spawner"
tree = /obj/structure/festivus
/datum/round_event_control/santa
name = "Santa is coming to town! (Christmas)"
+33 -9
View File
@@ -26,7 +26,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
new /obj/effect/immovablerod(startT, endT)
/obj/effect/immovablerod
name = "Immovable Rod"
name = "immovable rod"
desc = "What the fuck is that?"
icon = 'icons/obj/objects.dmi'
icon_state = "immrod"
@@ -37,38 +37,62 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
var/destination
/obj/effect/immovablerod/New(atom/start, atom/end)
loc = start
..()
if(SSaugury)
SSaugury.register_doom(src, 2000)
z_original = z
destination = end
notify_ghosts("\A [src] is inbound!",
enter_link="<a href=?src=\ref[src];orbit=1>(Click to orbit)</a>",
source=src, action=NOTIFY_ORBIT)
poi_list += src
if(end && end.z==z_original)
walk_towards(src, destination, 1)
/obj/effect/immovablerod/Topic(href, href_list)
if(href_list["orbit"])
var/mob/dead/observer/ghost = usr
if(istype(ghost))
ghost.ManualFollow(src)
/obj/effect/immovablerod/Destroy()
poi_list -= src
. = ..()
/obj/effect/immovablerod/Move()
if(z != z_original || loc == destination)
if((z != z_original) || (loc == destination))
qdel(src)
return ..()
/obj/effect/immovablerod/ex_act(test)
/obj/effect/immovablerod/ex_act(severity, target)
return 0
/obj/effect/immovablerod/Bump(atom/clong)
if(prob(10))
playsound(src, 'sound/effects/bang.ogg', 50, 1)
audible_message("CLANG")
audible_message("<span class='danger'>You hear a CLANG!</span>")
if(clong && prob(25))
x = clong.x
y = clong.y
if (istype(clong, /turf) || istype(clong, /obj))
if(isturf(clong) || isobj(clong))
if(clong.density)
clong.ex_act(2)
else if (istype(clong, /mob))
if(istype(clong, /mob/living/carbon/human))
else if(ismob(clong))
if(ishuman(clong))
var/mob/living/carbon/human/H = clong
H.visible_message("<span class='danger'>[H.name] is penetrated by an immovable rod!</span>" , "<span class='userdanger'>The rod penetrates you!</span>" , "<span class ='danger'>You hear a CLANG!</span>")
H.adjustBruteLoss(160)
if(clong.density || prob(10))
clong.ex_act(2)
return
else if(istype(clong, type))
var/obj/effect/immovablerod/other = clong
visible_message("<span class='danger'>[src] collides with [other]!\
</span>")
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(2, get_turf(src))
smoke.start()
qdel(src)
qdel(other)
+3 -2
View File
@@ -4,7 +4,7 @@
/datum/round_event_control/ion_storm
name = "Ion Storm"
typepath = /datum/round_event/ion_storm
weight = 15
weight = 3
min_players = 2
/datum/round_event/ion_storm
@@ -33,6 +33,7 @@
var/message = generate_ion_law(ionMessage)
if(message)
M.add_ion_law(message)
log_game("ION law added to [M]: [message]")
M << "<br>"
M << "<span class='danger'>[message] ...LAWS UPDATED</span>"
M << "<br>"
@@ -544,7 +545,7 @@
message = "ALL [ionthreats] ARE NOW NAMED [ionspecies]."
if(4)
message = "ALL [ionthreats] ARE NOW NAMED [ionobjects]."
return message
#undef ION_RANDOM
+19
View File
@@ -0,0 +1,19 @@
/datum/round_event_control/meteor_wave/major_dust
name = "Major Space Dust"
typepath = /datum/round_event/meteor_wave/major_dust
weight = 8
/datum/round_event/meteor_wave/major_dust
wave_name = "space dust"
/datum/round_event/meteor_wave/major_dust/announce()
var/reason = pick(
"The station is passing through a debris cloud, expect minor damage \
to external fittings and fixtures.",
"Nanotrasen Superweapons Division is testing a new prototype \
[pick("field","projection","nova","super-colliding","reactive")] \
[pick("cannon","artillery","tank","cruiser","\[REDACTED\]")], \
some mild debris is expected.",
"A neighbouring station is throwing rocks at you. (Perhaps they've \
grown tired of your messages.)")
priority_announce(pick(reason), "Collision Alert")
+5 -6
View File
@@ -1,12 +1,11 @@
/datum/round_event_control/meteor_wave/meaty
name = "Meaty Ore Wave"
name = "Meteor Wave: Meaty"
typepath = /datum/round_event/meteor_wave/meaty
weight = 1
weight = 2
max_occurrences = 1
/datum/round_event/meteor_wave/meaty
wave_name = "meaty"
/datum/round_event/meteor_wave/meaty/announce()
priority_announce("Meaty ores have been detected on collision course with the station.", "Oh crap, get the mop.",'sound/AI/meteors.ogg')
/datum/round_event/meteor_wave/meaty/tick()
if(IsMultiple(activeFor, 3))
spawn_meteors(5, meteorsB) //meteor list types defined in gamemode/meteor/meteors.dm
+41 -7
View File
@@ -1,7 +1,9 @@
// Normal strength
/datum/round_event_control/meteor_wave
name = "Meteor Wave"
name = "Meteor Wave: Normal"
typepath = /datum/round_event/meteor_wave
weight = 5
weight = 4
min_players = 5
max_occurrences = 3
@@ -10,25 +12,57 @@
endWhen = 66
announceWhen = 1
var/list/wave_type
var/wave_name = "normal"
/datum/round_event/meteor_wave/New()
..()
random_wave_type()
if(!wave_type)
determine_wave_type()
/datum/round_event/meteor_wave/proc/random_wave_type()
var/picked_wave = pickweight(list("normal" = 50, "threatening" = 40, "catastrophic" = 10))
switch(picked_wave)
/datum/round_event/meteor_wave/proc/determine_wave_type()
if(!wave_name)
wave_name = pickweight(list(
"normal" = 50,
"threatening" = 40,
"catastrophic" = 10))
switch(wave_name)
if("normal")
wave_type = meteors_normal
if("threatening")
wave_type = meteors_threatening
if("catastrophic")
wave_type = meteors_catastrophic
if("meaty")
wave_type = meteorsB
if("space dust")
wave_type = meteorsC
else
WARNING("Wave name of [wave_name] not recognised.")
kill()
/datum/round_event/meteor_wave/announce()
priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/AI/meteors.ogg')
/datum/round_event/meteor_wave/tick()
if(IsMultiple(activeFor, 3))
spawn_meteors(5, wave_type) //meteor list types defined in gamemode/meteor/meteors.dm
/datum/round_event_control/meteor_wave/threatening
name = "Meteor Wave: Threatening"
typepath = /datum/round_event/meteor_wave/threatening
weight = 2
min_players = 5
max_occurrences = 3
/datum/round_event/meteor_wave/threatening
wave_name = "threatening"
/datum/round_event_control/meteor_wave/catastrophic
name = "Meteor Wave: Catastrophic"
typepath = /datum/round_event/meteor_wave/catastrophic
weight = 1
min_players = 5
max_occurrences = 3
/datum/round_event/meteor_wave/catastrophic
wave_name = "catastrophic"
+28
View File
@@ -0,0 +1,28 @@
/datum/round_event_control/mice_migration
name = "Mice Migration"
typepath = /datum/round_event/mice_migration
weight = 10
/datum/round_event/mice_migration
announceWhen = 0
var/minimum_mice = 5
var/maximum_mice = 15
/datum/round_event/mice_migration/announce()
var/cause = pick("space-winter", "budget-cuts", "Ragnarok",
"space being cold", "\[REDACTED\]", "climate change",
"bad luck")
var/plural = pick("a number of", "a horde of", "a pack of", "a swarm of",
"a whoop of", "not more than [maximum_mice]")
var/name = pick("rodents", "mice", "squeaking things",
"wire eating mammals", "\[REDACTED\]", "energy draining parasites")
var/movement = pick("migrated", "swarmed", "stampeded", "descended")
var/location = pick("maintenance tunnels", "maintenance areas",
"\[REDACTED\]", "place with all those juicy wires")
priority_announce("Due to [cause], [plural] [name] have [movement] \
into the [location].", "Migration Alert",
'sound/effects/mousesqueek.ogg', 100, 1)
/datum/round_event/mice_migration/start()
SSsqueak.trigger_migration(rand(minimum_mice, maximum_mice))
+4 -4
View File
@@ -13,7 +13,7 @@
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
var/mob/dead/selected = popleft(candidates)
var/mob/dead/selected = pick_n_take(candidates)
var/list/spawn_locs = list()
for(var/obj/effect/landmark/L in landmarks_list)
@@ -39,7 +39,7 @@
if(nuke)
var/nuke_code
if(!nuke.r_code || nuke.r_code == "ADMIN")
nuke_code = "[rand(10000, 99999)]"
nuke_code = random_nukecode()
nuke.r_code = nuke_code
else
nuke_code = nuke.r_code
@@ -53,7 +53,7 @@
Mind.transfer_to(operative)
message_admins("[operative.key] has been made into lone operative by an event.")
log_game("[operative.key] was spawned as a lone operative by an event.")
message_admins("[key_name_admin(operative)] has been made into lone operative by an event.")
log_game("[key_name(operative)] was spawned as a lone operative by an event.")
spawned_mobs += operative
return SUCCESSFUL_SPAWN
+2 -2
View File
@@ -7,8 +7,8 @@
/datum/round_event/portal_storm/syndicate_shocktroop
boss_types = list(/mob/living/simple_animal/hostile/syndicate/melee/space/stormtrooper = 2)
hostile_types = list(/mob/living/simple_animal/hostile/syndicate/melee/space/noloot = 8,\
/mob/living/simple_animal/hostile/syndicate/ranged/space/noloot = 2)
hostile_types = list(/mob/living/simple_animal/hostile/syndicate/melee/space = 8,\
/mob/living/simple_animal/hostile/syndicate/ranged/space = 2)
/datum/round_event_control/portal_storm_narsie
name = "Portal Storm: Constructs"
+1 -2
View File
@@ -16,5 +16,4 @@
//sound not longer matches the text, but an audible warning is probably good
/datum/round_event/radiation_storm/start()
SSweather.run_weather("radiation storm",1)
make_maint_all_access()
SSweather.run_weather("radiation storm",ZLEVEL_STATION)
+60
View File
@@ -0,0 +1,60 @@
/datum/round_event_control/sentience
name = "Random Human-level Intelligence"
typepath = /datum/round_event/ghost_role/sentience
weight = 10
/datum/round_event/ghost_role/sentience
minimum_required = 1
role_name = "random animal"
/datum/round_event/ghost_role/sentience/start()
var/sentience_report = "<font size=3><b>[command_name()] Medium-Priority Update</b></font>"
var/data = pick("scans from our long-range sensors", "our sophisticated probabilistic models", "our omnipotence", "the communications traffic on your station", "energy emissions we detected", "\[REDACTED\]")
var/pets = pick("animals/bots", "bots/animals", "pets", "simple animals", "lesser lifeforms", "\[REDACTED\]")
var/strength = pick("human", "moderate", "lizard", "security", "command", "clown", "low", "very low", "\[REDACTED\]")
sentience_report += "<br><br>Based on [data], we believe that one of the station's [pets] has developed [strength] level intelligence, and the ability to communicate."
print_command_report(sentience_report, "Classified [command_name()] Update")
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/AI/commandreport.ogg')
..()
/datum/round_event/ghost_role/sentience/spawn_role()
var/list/mob/dead/observer/candidates
candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN)
// find our chosen mob to breathe life into
// Mobs have to be simple animals, mindless and on station
var/list/potential = list()
for(var/mob/living/simple_animal/L in living_mob_list)
var/turf/T = get_turf(L)
if(T.z != ZLEVEL_STATION)
continue
if(!(L in player_list) && !L.mind)
potential += L
if(!potential.len)
return WAITING_FOR_SOMETHING
var/mob/living/simple_animal/SA = pick(potential)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
var/mob/dead/observer/SG = pick(candidates)
SA.key = SG.key
SA.languages_spoken |= HUMAN
SA.languages_understood |= HUMAN
SA.sentience_act()
SA.maxHealth = max(SA.maxHealth, 200)
SA.health = SA.maxHealth
SA.del_on_death = FALSE
spawned_mobs += SA
SA << "<span class='userdanger'>Hello world!</span>"
SA << "<span class='warning'>Due to freak radiation and/or chemicals \
and/or lucky chance, you have gained human level intelligence \
and the ability to speak and understand human language!</span>"
return SUCCESSFUL_SPAWN
+27 -24
View File
@@ -3,6 +3,7 @@
#define SPIDER_GIFT 3
#define DEPARTMENT_RESUPPLY 4
#define ANTIDOTE_NEEDED 5
#define PIZZA_DELIVERY 6
/datum/round_event_control/shuttle_loan
@@ -20,7 +21,7 @@
var/thanks_msg = "The cargo shuttle should return in five minutes. Have some supply points for your trouble."
/datum/round_event/shuttle_loan/start()
dispatch_type = pick(HIJACK_SYNDIE, RUSKY_PARTY, SPIDER_GIFT, DEPARTMENT_RESUPPLY, ANTIDOTE_NEEDED)
dispatch_type = pick(HIJACK_SYNDIE, RUSKY_PARTY, SPIDER_GIFT, DEPARTMENT_RESUPPLY, ANTIDOTE_NEEDED, PIZZA_DELIVERY)
/datum/round_event/shuttle_loan/announce()
SSshuttle.shuttle_loan = src
@@ -37,6 +38,8 @@
bonus_points = 0
if(ANTIDOTE_NEEDED)
priority_announce("Cargo: Your station has been chosen for an epidemiological research project. Send us your cargo shuttle to receive your research samples.", "Centcom Research Initiatives")
if (PIZZA_DELIVERY)
priority_announce("Cargo: It looks like a neighbouring station accidentally delivered their pizza to you instead", "Centcom Spacepizza Division")
/datum/round_event/shuttle_loan/proc/loan_shuttle()
priority_announce(thanks_msg, "Cargo shuttle commandeered by Centcom.")
@@ -45,13 +48,8 @@
SSshuttle.points += bonus_points
endWhen = activeFor + 1
SSshuttle.supply.sell()
SSshuttle.supply.enterTransit()
if(SSshuttle.supply.z != ZLEVEL_STATION)
SSshuttle.supply.mode = SHUTTLE_CALL
SSshuttle.supply.destination = SSshuttle.getDock("supply_home")
else
SSshuttle.supply.mode = SHUTTLE_RECALL
SSshuttle.supply.mode = SHUTTLE_CALL
SSshuttle.supply.destination = SSshuttle.getDock("supply_home")
SSshuttle.supply.setTimer(3000)
switch(dispatch_type)
@@ -65,6 +63,8 @@
SSshuttle.centcom_message += "Department resupply incoming."
if(ANTIDOTE_NEEDED)
SSshuttle.centcom_message += "Virus samples incoming."
if(PIZZA_DELIVERY)
SSshuttle.centcom_message += "Pizza delivery for [station_name()]"
/datum/round_event/shuttle_loan/tick()
if(dispatched)
@@ -105,11 +105,11 @@
shuttle_spawns.Add(/mob/living/simple_animal/hostile/russian)
shuttle_spawns.Add(/mob/living/simple_animal/hostile/russian/ranged) //drops a mateba
shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear)
shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear/russian)
if(prob(75))
shuttle_spawns.Add(/mob/living/simple_animal/hostile/russian)
if(prob(50))
shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear)
shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear/russian)
if(SPIDER_GIFT)
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/emergency/specialops]
@@ -121,26 +121,18 @@
if(prob(50))
shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider/hunter)
var/turf/T = pick(empty_shuttle_turfs)
empty_shuttle_turfs.Remove(T)
var/turf/T = pick_n_take(empty_shuttle_turfs)
new /obj/effect/decal/remains/human(T)
new /obj/item/clothing/shoes/space_ninja(T)
new /obj/item/clothing/mask/balaclava(T)
T = pick(empty_shuttle_turfs)
new /obj/effect/spider/stickyweb(T)
T = pick(empty_shuttle_turfs)
new /obj/effect/spider/stickyweb(T)
T = pick(empty_shuttle_turfs)
new /obj/effect/spider/stickyweb(T)
T = pick(empty_shuttle_turfs)
new /obj/effect/spider/stickyweb(T)
T = pick(empty_shuttle_turfs)
new /obj/effect/spider/stickyweb(T)
for(var/i in 1 to 5)
T = pick_n_take(empty_shuttle_turfs)
new /obj/structure/spider/stickyweb(T)
if(ANTIDOTE_NEEDED)
var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/fluspanish, /datum/disease/transformation/xeno)
var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/fluspanish)
var/turf/T
for(var/i=0, i<10, i++)
if(prob(15))
@@ -178,6 +170,16 @@
for(var/i in 1 to 5)
var/decal = pick(/obj/effect/decal/cleanable/flour, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/oil)
new decal(pick_n_take(empty_shuttle_turfs))
if(PIZZA_DELIVERY)
shuttle_spawns.Add(/obj/item/pizzabox/margherita)
shuttle_spawns.Add(/obj/item/pizzabox/margherita)
shuttle_spawns.Add(/obj/item/pizzabox/meat)
shuttle_spawns.Add(/obj/item/pizzabox/meat)
shuttle_spawns.Add(/obj/item/pizzabox/vegetable)
if(prob(10))
shuttle_spawns.Add(/obj/item/pizzabox/bomb)
else
shuttle_spawns.Add(/obj/item/pizzabox/margherita)
var/false_positive = 0
while(shuttle_spawns.len && empty_shuttle_turfs.len)
@@ -193,4 +195,5 @@
#undef RUSKY_PARTY
#undef SPIDER_GIFT
#undef DEPARTMENT_RESUPPLY
#undef ANTIDOTE_NEEDED
#undef ANTIDOTE_NEEDED
#undef PIZZA_DELIVERY
+188 -173
View File
@@ -8,7 +8,7 @@
/datum/round_event/spacevine/start()
var/list/turfs = list() //list of all the empty floor turfs in the hallway areas
var/obj/effect/spacevine/SV = new()
var/obj/structure/spacevine/SV = new()
for(var/area/hallway/A in world)
for(var/turf/F in A)
@@ -28,40 +28,44 @@
var/hue
var/quality
/datum/spacevine_mutation/proc/process_mutation(obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/add_mutation_to_vinepiece(obj/structure/spacevine/holder)
holder.mutations |= src
holder.add_atom_colour(hue, FIXED_COLOUR_PRIORITY)
/datum/spacevine_mutation/proc/process_mutation(obj/structure/spacevine/holder)
return
/datum/spacevine_mutation/proc/process_temperature(obj/effect/spacevine/holder, temp, volume)
/datum/spacevine_mutation/proc/process_temperature(obj/structure/spacevine/holder, temp, volume)
return
/datum/spacevine_mutation/proc/on_birth(obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/on_birth(obj/structure/spacevine/holder)
return
/datum/spacevine_mutation/proc/on_grow(obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/on_grow(obj/structure/spacevine/holder)
return
/datum/spacevine_mutation/proc/on_death(obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/on_death(obj/structure/spacevine/holder)
return
/datum/spacevine_mutation/proc/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/proc/on_hit(obj/structure/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
. = expected_damage
/datum/spacevine_mutation/proc/on_cross(obj/effect/spacevine/holder, mob/crosser)
/datum/spacevine_mutation/proc/on_cross(obj/structure/spacevine/holder, mob/crosser)
return
/datum/spacevine_mutation/proc/on_chem(obj/effect/spacevine/holder, datum/reagent/R)
/datum/spacevine_mutation/proc/on_chem(obj/structure/spacevine/holder, datum/reagent/R)
return
/datum/spacevine_mutation/proc/on_eat(obj/effect/spacevine/holder, mob/living/eater)
/datum/spacevine_mutation/proc/on_eat(obj/structure/spacevine/holder, mob/living/eater)
return
/datum/spacevine_mutation/proc/on_spread(obj/effect/spacevine/holder, turf/target)
/datum/spacevine_mutation/proc/on_spread(obj/structure/spacevine/holder, turf/target)
return
/datum/spacevine_mutation/proc/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
/datum/spacevine_mutation/proc/on_buckle(obj/structure/spacevine/holder, mob/living/buckled)
return
/datum/spacevine_mutation/proc/on_explosion(severity, target, obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/on_explosion(severity, target, obj/structure/spacevine/holder)
return
@@ -70,70 +74,41 @@
hue = "#aa77aa"
quality = POSITIVE
/turf/open/floor/vines
color = "#aa77aa"
icon_state = "vinefloor"
broken_states = list()
/datum/spacevine_mutation/space_covering
var/static/list/coverable_turfs
/datum/spacevine_mutation/space_covering/New()
. = ..()
if(!coverable_turfs)
coverable_turfs = typecacheof(list(
/turf/open/space
))
coverable_turfs -= typecacheof(list(
/turf/open/space/transit
))
//All of this shit is useless for vines
/datum/spacevine_mutation/space_covering/on_grow(obj/structure/spacevine/holder)
process_mutation(holder)
/turf/open/floor/vines/attackby()
return
/datum/spacevine_mutation/space_covering/process_mutation(obj/structure/spacevine/holder)
var/turf/T = get_turf(holder)
if(is_type_in_typecache(T, coverable_turfs))
var/currtype = T.type
T.ChangeTurf(/turf/open/floor/vines)
T.baseturf = currtype
/turf/open/floor/vines/burn_tile()
return
/turf/open/floor/vines/break_tile()
return
/turf/open/floor/vines/make_plating()
return
/turf/open/floor/vines/break_tile_to_plating()
return
/turf/open/floor/vines/ex_act(severity, target)
if(severity < 3 || target == src)
ChangeTurf(src.baseturf)
/turf/open/floor/vines/narsie_act()
if(prob(20))
ChangeTurf(src.baseturf) //nar sie eats this shit
/turf/open/floor/vines/singularity_pull(S, current_size)
if(current_size >= STAGE_FIVE)
if(prob(50))
ChangeTurf(src.baseturf)
/turf/open/floor/vines/ChangeTurf(turf/open/floor/T)
for(var/obj/effect/spacevine/SV in src)
qdel(SV)
..()
reconsider_lights()
/datum/spacevine_mutation/space_covering/on_grow(obj/effect/spacevine/holder)
if(istype(holder.loc, /turf/open/space))
var/turf/open/spaceturf = holder.loc
spaceturf.ChangeTurf(/turf/open/floor/vines)
/datum/spacevine_mutation/space_covering/process_mutation(obj/effect/spacevine/holder)
if(istype(holder.loc, /turf/open/space))
var/turf/open/spaceturf = holder.loc
spaceturf.ChangeTurf(/turf/open/floor/vines)
/datum/spacevine_mutation/space_covering/on_death(obj/effect/spacevine/holder)
if(istype(holder.loc, /turf/open/floor/vines))
var/turf/open/spaceturf = holder.loc
spaceturf.ChangeTurf(/turf/open/space)
/datum/spacevine_mutation/space_covering/on_death(obj/structure/spacevine/holder)
var/turf/T = get_turf(holder)
if(istype(T, /turf/open/floor/vines))
T.ChangeTurf(T.baseturf)
/datum/spacevine_mutation/bluespace
name = "bluespace"
hue = "#3333ff"
quality = MINOR_NEGATIVE
/datum/spacevine_mutation/bluespace/on_spread(obj/effect/spacevine/holder, turf/target)
if(holder.energy > 1 && !locate(/obj/effect/spacevine) in target)
/datum/spacevine_mutation/bluespace/on_spread(obj/structure/spacevine/holder, turf/target)
if(holder.energy > 1 && !locate(/obj/structure/spacevine) in target)
holder.master.spawn_spacevine_piece(target, holder)
/datum/spacevine_mutation/light
@@ -142,9 +117,9 @@
quality = POSITIVE
severity = 4
/datum/spacevine_mutation/light/on_grow(obj/effect/spacevine/holder)
/datum/spacevine_mutation/light/on_grow(obj/structure/spacevine/holder)
if(holder.energy)
holder.set_light(severity, 3)
holder.SetLuminosity(severity, 3)
/datum/spacevine_mutation/toxicity
name = "toxic"
@@ -152,15 +127,16 @@
severity = 10
quality = NEGATIVE
/datum/spacevine_mutation/toxicity/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
/datum/spacevine_mutation/toxicity/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
if(issilicon(crosser))
return
if(prob(severity) && istype(crosser))
if(prob(severity) && istype(crosser) && !isvineimmune(crosser))
crosser << "<span class='alert'>You accidently touch the vine and feel a strange sensation.</span>"
crosser.adjustToxLoss(5)
/datum/spacevine_mutation/toxicity/on_eat(obj/effect/spacevine/holder, mob/living/eater)
eater.adjustToxLoss(5)
/datum/spacevine_mutation/toxicity/on_eat(obj/structure/spacevine/holder, mob/living/eater)
if(!isvineimmune(eater))
eater.adjustToxLoss(5)
/datum/spacevine_mutation/explosive //OH SHIT IT CAN CHAINREACT RUN!!!
name = "explosive"
@@ -168,15 +144,14 @@
quality = NEGATIVE
severity = 2
/datum/spacevine_mutation/explosive/on_explosion(explosion_severity, target, obj/effect/spacevine/holder)
/datum/spacevine_mutation/explosive/on_explosion(explosion_severity, target, obj/structure/spacevine/holder)
if(explosion_severity < 3)
qdel(src)
qdel(holder)
else
. = 1
spawn(5)
qdel(src)
QDEL_IN(holder, 5)
/datum/spacevine_mutation/explosive/on_death(obj/effect/spacevine/holder, mob/hitter, obj/item/I)
/datum/spacevine_mutation/explosive/on_death(obj/structure/spacevine/holder, mob/hitter, obj/item/I)
explosion(holder.loc, 0, 0, severity, 0, 0)
/datum/spacevine_mutation/fire_proof
@@ -184,20 +159,22 @@
hue = "#ff8888"
quality = MINOR_NEGATIVE
/datum/spacevine_mutation/fire_proof/process_temperature(obj/effect/spacevine/holder, temp, volume)
/datum/spacevine_mutation/fire_proof/process_temperature(obj/structure/spacevine/holder, temp, volume)
return 1
/datum/spacevine_mutation/fire_proof/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/fire_proof/on_hit(obj/structure/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
if(I && I.damtype == "fire")
. = 0
else
. = expected_damage
/datum/spacevine_mutation/vine_eating
name = "vine eating"
hue = "#ff7700"
quality = MINOR_NEGATIVE
/datum/spacevine_mutation/vine_eating/on_spread(obj/effect/spacevine/holder, turf/target)
var/obj/effect/spacevine/prey = locate() in target
/datum/spacevine_mutation/vine_eating/on_spread(obj/structure/spacevine/holder, turf/target)
var/obj/structure/spacevine/prey = locate() in target
if(prey && !prey.mutations.Find(src)) //Eat all vines that are not of the same origin
qdel(prey)
@@ -207,19 +184,19 @@
severity = 3
quality = NEGATIVE
/datum/spacevine_mutation/aggressive_spread/on_spread(obj/effect/spacevine/holder, turf/target)
target.ex_act(severity, src)
/datum/spacevine_mutation/aggressive_spread/on_spread(obj/structure/spacevine/holder, turf/target)
target.ex_act(severity, null, src) // vine immunity handled at /mob/ex_act
/datum/spacevine_mutation/aggressive_spread/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
buckled.ex_act(severity)
/datum/spacevine_mutation/aggressive_spread/on_buckle(obj/structure/spacevine/holder, mob/living/buckled)
buckled.ex_act(severity, null, src)
/datum/spacevine_mutation/transparency
name = "transparent"
hue = ""
quality = POSITIVE
/datum/spacevine_mutation/transparency/on_grow(obj/effect/spacevine/holder)
holder.set_opacity(0)
/datum/spacevine_mutation/transparency/on_grow(obj/structure/spacevine/holder)
holder.SetOpacity(0)
holder.alpha = 125
/datum/spacevine_mutation/oxy_eater
@@ -228,7 +205,7 @@
severity = 3
quality = NEGATIVE
/datum/spacevine_mutation/oxy_eater/process_mutation(obj/effect/spacevine/holder)
/datum/spacevine_mutation/oxy_eater/process_mutation(obj/structure/spacevine/holder)
var/turf/open/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
@@ -243,7 +220,7 @@
severity = 3
quality = NEGATIVE
/datum/spacevine_mutation/nitro_eater/process_mutation(obj/effect/spacevine/holder)
/datum/spacevine_mutation/nitro_eater/process_mutation(obj/structure/spacevine/holder)
var/turf/open/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
@@ -258,7 +235,7 @@
severity = 3
quality = POSITIVE
/datum/spacevine_mutation/carbondioxide_eater/process_mutation(obj/effect/spacevine/holder)
/datum/spacevine_mutation/carbondioxide_eater/process_mutation(obj/structure/spacevine/holder)
var/turf/open/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
@@ -273,7 +250,7 @@
severity = 3
quality = POSITIVE
/datum/spacevine_mutation/plasma_eater/process_mutation(obj/effect/spacevine/holder)
/datum/spacevine_mutation/plasma_eater/process_mutation(obj/structure/spacevine/holder)
var/turf/open/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
@@ -288,35 +265,35 @@
severity = 10
quality = NEGATIVE
/datum/spacevine_mutation/thorns/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
if(prob(severity) && istype(crosser))
/datum/spacevine_mutation/thorns/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
if(prob(severity) && istype(crosser) && !isvineimmune(holder))
var/mob/living/M = crosser
M.adjustBruteLoss(5)
M << "<span class='alert'>You cut yourself on the thorny vines.</span>"
/datum/spacevine_mutation/thorns/on_hit(obj/effect/spacevine/holder, mob/living/hitter)
if(prob(severity) && istype(hitter))
/datum/spacevine_mutation/thorns/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
if(prob(severity) && istype(hitter) && !isvineimmune(holder))
var/mob/living/M = hitter
M.adjustBruteLoss(5)
M << "<span class='alert'>You cut yourself on the thorny vines.</span>"
. = expected_damage
/datum/spacevine_mutation/woodening
name = "hardened"
hue = "#997700"
quality = NEGATIVE
/datum/spacevine_mutation/woodening/on_grow(obj/effect/spacevine/holder)
/datum/spacevine_mutation/woodening/on_grow(obj/structure/spacevine/holder)
if(holder.energy)
holder.density = 1
holder.max_integrity = 100
holder.obj_integrity = holder.max_integrity
/datum/spacevine_mutation/woodening/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
if(!expected_damage)
return
if(hitter)
if(I)
. = I.force * 2
else
. = 8
/datum/spacevine_mutation/woodening/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
if(I.is_sharp())
. = expected_damage * 0.5
else
. = expected_damage
/datum/spacevine_mutation/flowering
name = "flowering"
@@ -324,16 +301,17 @@
quality = NEGATIVE
severity = 10
/datum/spacevine_mutation/flowering/on_grow(obj/effect/spacevine/holder)
/datum/spacevine_mutation/flowering/on_grow(obj/structure/spacevine/holder)
if(holder.energy == 2 && prob(severity) && !locate(/obj/structure/alien/resin/flower_bud_enemy) in range(5,holder))
new/obj/structure/alien/resin/flower_bud_enemy(get_turf(holder))
/datum/spacevine_mutation/flowering/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
holder.entangle(crosser)
/datum/spacevine_mutation/flowering/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
if(prob(25))
holder.entangle(crosser)
// SPACE VINES (Note that this code is very similar to Biomass code)
/obj/effect/spacevine
/obj/structure/spacevine
name = "space vines"
desc = "An extremely expansionistic species of vine."
icon = 'icons/effects/spacevines.dmi'
@@ -343,11 +321,29 @@
layer = SPACEVINE_LAYER
mouse_opacity = 2 //Clicking anywhere on the turf is good enough
pass_flags = PASSTABLE | PASSGRILLE
obj_integrity = 50
max_integrity = 50
var/energy = 0
var/obj/effect/spacevine_controller/master = null
var/list/mutations = list()
/obj/effect/spacevine/Destroy()
/obj/structure/spacevine/New()
..()
add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY)
/obj/structure/spacevine/examine(mob/user)
..()
var/text = "This one is a"
if(mutations.len)
for(var/A in mutations)
var/datum/spacevine_mutation/SM = A
text += " [SM.name]"
else
text += " normal"
text += " vine."
user << text
/obj/structure/spacevine/Destroy()
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_death(src)
if(master)
@@ -356,15 +352,15 @@
if(!master.vines.len)
var/obj/item/seeds/kudzu/KZ = new(loc)
KZ.mutations |= mutations
KZ.potency = min(100, master.mutativness * 10)
KZ.production = (master.spread_cap / initial(master.spread_cap)) * 50
KZ.set_potency(master.mutativeness * 10)
KZ.set_production((master.spread_cap / initial(master.spread_cap)) * 5)
mutations = list()
set_opacity(0)
SetOpacity(0)
if(has_buckled_mobs())
unbuckle_all_mobs(force=1)
return ..()
/obj/effect/spacevine/proc/on_chem_effect(datum/reagent/R)
/obj/structure/spacevine/proc/on_chem_effect(datum/reagent/R)
var/override = 0
for(var/datum/spacevine_mutation/SM in mutations)
override += SM.on_chem(src, R)
@@ -372,7 +368,7 @@
if(prob(50))
qdel(src)
/obj/effect/spacevine/proc/eat(mob/eater)
/obj/structure/spacevine/proc/eat(mob/eater)
var/override = 0
for(var/datum/spacevine_mutation/SM in mutations)
override += SM.on_eat(src, eater)
@@ -381,68 +377,77 @@
eater.say("Nom")
qdel(src)
/obj/effect/spacevine/attackby(obj/item/weapon/W, mob/user, params)
if (!W || !user || !W.type)
return
user.changeNext_move(CLICK_CD_MELEE)
/obj/structure/spacevine/attackby(obj/item/weapon/W, mob/user, params)
var/override = W.force
if(W.is_sharp())
override = 100
if(istype(W, /obj/item/weapon/scythe))
var/local_override = override
for(var/obj/effect/spacevine/B in orange(1,src))
for(var/datum/spacevine_mutation/SM in mutations)
local_override = SM.on_hit(src, user, W, local_override)
if(prob(local_override))
qdel(B)
user.changeNext_move(CLICK_CD_MELEE)
for(var/obj/structure/spacevine/B in orange(1,src))
B.take_damage(W.force * 4, BRUTE, "melee", 1)
return
else
return ..()
/obj/structure/spacevine/attacked_by(obj/item/I, mob/living/user)
var/damage_dealt = I.force
if(I.is_sharp())
damage_dealt *= 4
if(I.damtype == BURN)
damage_dealt *= 4
for(var/datum/spacevine_mutation/SM in mutations)
override = SM.on_hit(src, user, W, override) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
damage_dealt = SM.on_hit(src, user, I, damage_dealt) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
take_damage(damage_dealt, I.damtype, "melee", 1)
if(prob(override))
qdel(src)
/obj/structure/spacevine/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(src, 'sound/weapons/slash.ogg', 50, 1)
else
playsound(src, 'sound/weapons/tap.ogg', 50, 1)
if(BURN)
playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
..()
/obj/effect/spacevine/Crossed(mob/crosser)
/obj/structure/spacevine/Crossed(mob/crosser)
if(isliving(crosser))
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_cross(src, crosser)
/obj/effect/spacevine/attack_hand(mob/user)
/obj/structure/spacevine/attack_hand(mob/user)
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_hit(src, user)
user_unbuckle_mob(user, user)
/obj/effect/spacevine/attack_paw(mob/living/user)
user.do_attack_animation(src)
/obj/structure/spacevine/attack_paw(mob/living/user)
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_hit(src, user)
user_unbuckle_mob(user,user)
/obj/effect/spacevine/attack_alien(mob/living/user)
/obj/structure/spacevine/attack_alien(mob/living/user)
eat(user)
/obj/effect/spacevine_controller
invisibility = INVISIBILITY_ABSTRACT
var/list/obj/effect/spacevine/vines = list()
var/list/obj/structure/spacevine/vines = list()
var/list/growth_queue = list()
var/spread_multiplier = 5
var/spread_cap = 30
var/list/mutations_list = list()
var/mutativness = 1
var/mutativeness = 1
/obj/effect/spacevine_controller/New(loc, list/muts, mttv, spreading)
/obj/effect/spacevine_controller/New(loc, list/muts, potency, production)
add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY)
spawn_spacevine_piece(loc, , muts)
START_PROCESSING(SSobj, src)
init_subtypes(/datum/spacevine_mutation/, mutations_list)
if(mttv != null)
mutativness = mttv / 10
if(spreading != null)
spread_cap *= spreading / 50
spread_multiplier /= spreading / 50
if(potency != null)
mutativeness = potency / 10
if(production != null)
spread_cap *= production / 5
spread_multiplier /= production / 5
..()
/obj/effect/spacevine_controller/ex_act() //only killing all vines will end this suffering
return
@@ -457,32 +462,29 @@
STOP_PROCESSING(SSobj, src)
return ..()
/obj/effect/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/effect/spacevine/parent, list/muts)
var/obj/effect/spacevine/SV = new(location)
/obj/effect/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/structure/spacevine/parent, list/muts)
var/obj/structure/spacevine/SV = new(location)
growth_queue += SV
vines += SV
SV.master = src
if(muts && muts.len)
SV.mutations |= muts
for(var/datum/spacevine_mutation/M in muts)
M.add_mutation_to_vinepiece(SV)
return
if(parent)
SV.mutations |= parent.mutations
SV.color = parent.color
SV.desc = parent.desc
if(prob(mutativness))
SV.mutations |= pick(mutations_list)
var/datum/spacevine_mutation/randmut = pick(SV.mutations)
SV.color = randmut.hue
SV.desc = "An extremely expansionistic species of vine. These are "
for(var/datum/spacevine_mutation/M in SV.mutations)
SV.desc += "[M.name] "
SV.desc += "vines."
var/parentcolor = parent.atom_colours[FIXED_COLOUR_PRIORITY]
SV.add_atom_colour(parentcolor, FIXED_COLOUR_PRIORITY)
if(prob(mutativeness))
var/datum/spacevine_mutation/randmut = pick(mutations_list - SV.mutations)
randmut.add_mutation_to_vinepiece(SV)
for(var/datum/spacevine_mutation/SM in SV.mutations)
SM.on_birth(SV)
/obj/effect/spacevine_controller/process()
if(!vines)
qdel(src) //space vines exterminated. Remove the controller
qdel(src) //space vines exterminated. Remove the controller
return
if(!growth_queue)
qdel(src) //Sanity check
@@ -492,9 +494,9 @@
length = min( spread_cap , max( 1 , vines.len / spread_multiplier ) )
var/i = 0
var/list/obj/effect/spacevine/queue_end = list()
var/list/obj/structure/spacevine/queue_end = list()
for( var/obj/effect/spacevine/SV in growth_queue )
for(var/obj/structure/spacevine/SV in growth_queue)
if(qdeleted(SV))
continue
i++
@@ -515,11 +517,11 @@
growth_queue = growth_queue + queue_end
/obj/effect/spacevine/proc/grow()
/obj/structure/spacevine/proc/grow()
if(!energy)
src.icon_state = pick("Med1", "Med2", "Med3")
energy = 1
set_opacity(1)
SetOpacity(1)
else
src.icon_state = pick("Hvy1", "Hvy2", "Hvy3")
energy = 2
@@ -527,35 +529,35 @@
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_grow(src)
/obj/effect/spacevine/proc/entangle_mob()
/obj/structure/spacevine/proc/entangle_mob()
if(!has_buckled_mobs() && prob(25))
for(var/mob/living/V in src.loc)
entangle(V)
if(buckled_mobs.len)
if(has_buckled_mobs())
break //only capture one mob at a time
/obj/effect/spacevine/proc/entangle(mob/living/V)
if(!V)
/obj/structure/spacevine/proc/entangle(mob/living/V)
if(!V || isvineimmune(V))
return
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_buckle(src, V)
if((V.stat != DEAD) && (V.buckled != src)) //not dead or captured
V << "<span class='danger'>The vines [pick("wind", "tangle", "tighten")] around you!</span>"
buckle_mob(V)
buckle_mob(V, 1)
/obj/effect/spacevine/proc/spread()
/obj/structure/spacevine/proc/spread()
var/direction = pick(cardinal)
var/turf/stepturf = get_step(src,direction)
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_spread(src, stepturf)
stepturf = get_step(src,direction) //in case turf changes, to make sure no runtimes happen
if(!locate(/obj/effect/spacevine, stepturf))
if(!locate(/obj/structure/spacevine, stepturf))
if(stepturf.Enter(src))
if(master)
master.spawn_spacevine_piece(stepturf, src)
/obj/effect/spacevine/ex_act(severity, target)
/obj/structure/spacevine/ex_act(severity, target)
if(istype(target, type)) //if its agressive spread vine dont do anything
return
var/i
@@ -564,9 +566,22 @@
if(!i && prob(100/severity))
qdel(src)
/obj/effect/spacevine/temperature_expose(null, temp, volume)
/obj/structure/spacevine/temperature_expose(null, temp, volume)
var/override = 0
for(var/datum/spacevine_mutation/SM in mutations)
override += SM.process_temperature(src, temp, volume)
if(!override)
qdel(src)
/obj/structure/spacevine/CanPass(atom/movable/mover, turf/target, height=0)
if(isvineimmune(mover))
. = TRUE
else
. = ..()
/proc/isvineimmune(atom/A)
. = FALSE
if(isliving(A))
var/mob/living/M = A
if(("vines" in M.faction) || ("plants" in M.faction))
. = TRUE
+4 -3
View File
@@ -29,8 +29,9 @@
while((spawncount >= 1) && vents.len)
var/obj/vent = pick(vents)
var/obj/effect/spider/spiderling/S = new(vent.loc)
var/spawn_type = /obj/structure/spider/spiderling
if(prob(66))
S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/nurse
spawn_type = /obj/structure/spider/spiderling/nurse
spawn_atom_to_turf(spawn_type, vent, 1, FALSE)
vents -= vent
spawncount--
spawncount--
+1 -1
View File
@@ -10,7 +10,7 @@
var/interval = 2
var/list/vents = list()
var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","mushroomhallucinogen","lube",
"plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","facid")
"plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid")
/datum/round_event/vent_clog/announce()
priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")
@@ -13,4 +13,4 @@
/datum/round_event/wizard/darkness/start()
if(!started)
started = TRUE
SSweather.run_weather("advanced darkness")
SSweather.run_weather("advanced darkness", ZLEVEL_STATION)
+2 -2
View File
@@ -3,7 +3,7 @@
/datum/round_event_control/wizard/robelesscasting //EI NUDTH!
name = "Robeless Casting"
weight = 2
typepath = /datum/round_event/wizard/robelesscasting/
typepath = /datum/round_event/wizard/robelesscasting
max_occurrences = 1
earliest_start = 0
@@ -24,7 +24,7 @@
/datum/round_event_control/wizard/improvedcasting //blink x5 disintergrate x5 here I come!
name = "Improved Casting"
weight = 3
typepath = /datum/round_event/wizard/improvedcasting/
typepath = /datum/round_event/wizard/improvedcasting
max_occurrences = 4 //because that'd be max level spells
earliest_start = 0
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/blobies //avast!
name = "Zombie Outbreak"
weight = 3
typepath = /datum/round_event/wizard/blobies/
typepath = /datum/round_event/wizard/blobies
max_occurrences = 3
earliest_start = 12000 // 20 minutes (gotta get some bodies made!)
+8 -8
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/cursed_items //fashion disasters
name = "Cursed Items"
weight = 3
typepath = /datum/round_event/wizard/cursed_items/
typepath = /datum/round_event/wizard/cursed_items
max_occurrences = 3
earliest_start = 0
@@ -11,7 +11,7 @@
/datum/round_event/wizard/cursed_items/start()
var/item_set = pick("wizardmimic", "swords", "bigfatdoobie", "boxing", "voicemodulators", "catgirls2015")
var/list/wearslots = list(slot_wear_suit, slot_shoes, slot_head, slot_wear_mask, slot_r_hand, slot_gloves, slot_ears)
var/list/wearslots = list(slot_wear_suit, slot_shoes, slot_head, slot_wear_mask, slot_gloves, slot_ears)
var/list/loadout = list()
var/ruins_spaceworthiness
var/ruins_wizard_loadout
@@ -19,12 +19,12 @@
switch(item_set)
if("wizardmimic")
loadout = list(/obj/item/clothing/suit/wizrobe, /obj/item/clothing/shoes/sandal, /obj/item/clothing/head/wizard)
loadout = list(/obj/item/clothing/suit/wizrobe, /obj/item/clothing/shoes/sandal/magic, /obj/item/clothing/head/wizard)
ruins_spaceworthiness = 1
if("swords")
loadout[5] = /obj/item/weapon/katana/cursed
if("bigfatdoobie")
loadout[4] = /obj/item/clothing/mask/cigarette/rollie/trippy/
loadout[4] = /obj/item/clothing/mask/cigarette/rollie/trippy
ruins_spaceworthiness = 1
if("boxing")
loadout[4] = /obj/item/clothing/mask/luchador
@@ -38,18 +38,18 @@
ruins_wizard_loadout = 1
for(var/mob/living/carbon/human/H in living_mob_list)
if(ruins_spaceworthiness && (H.z != 1 || istype(H.loc, /turf/open/space)))
if(ruins_spaceworthiness && (H.z != 1 || isspaceturf(H.loc) || isplasmaman(H)))
continue //#savetheminers
if(ruins_wizard_loadout && H.mind && ((H.mind in ticker.mode.wizards) || (H.mind in ticker.mode.apprentices)))
continue
if(item_set == "catgirls2015") //Wizard code means never having to say you're sorry
H.gender = FEMALE
var/list/slots = list(H.wear_suit, H.shoes, H.head, H.wear_mask, H.r_hand, H.gloves, H.ears) //add new slots as needed to back
for(var/i = 1, i <= loadout.len, i++)
var/list/slots = list(H.wear_suit, H.shoes, H.head, H.wear_mask, H.gloves, H.ears) //add new slots as needed to back
for(var/i in 1 to loadout.len)
if(loadout[i])
var/obj/item/J = loadout[i]
var/obj/item/I = new J //dumb but required because of byond throwing a fit anytime new gets too close to a list
H.unEquip(slots[i])
H.temporarilyRemoveItemFromInventory(slots[i], TRUE)
H.equip_to_slot_or_del(I, wearslots[i])
I.flags |= NODROP
I.name = "cursed " + I.name
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/deprevolt //stationwide!
name = "Departmental Uprising"
weight = 0 //An order that requires order in a round of chaos was maybe not the best idea. Requiescat in pace departmental uprising August 2014 - March 2015
typepath = /datum/round_event/wizard/deprevolt/
typepath = /datum/round_event/wizard/deprevolt
max_occurrences = 1
earliest_start = 0
+2 -3
View File
@@ -1,12 +1,11 @@
/datum/round_event_control/wizard/fake_explosion //Oh no the station is gone!
name = "Fake Nuclear Explosion"
weight = 0 //Badmin exclusive now because once it's expected its not funny
typepath = /datum/round_event/wizard/fake_explosion/
typepath = /datum/round_event/wizard/fake_explosion
max_occurrences = 1
earliest_start = 0
/datum/round_event/wizard/fake_explosion/start()
for(var/mob/M in player_list)
M << 'sound/machines/Alarm.ogg'
spawn(100)
ticker.station_explosion_cinematic(1,"fake") //:o)
addtimer(CALLBACK(ticker, /datum/subsystem/ticker/.proc/station_explosion_cinematic, 1, "fake"), 100) //:o)
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/ghost //The spook is real
name = "G-G-G-Ghosts!"
weight = 3
typepath = /datum/round_event/wizard/ghost/
typepath = /datum/round_event/wizard/ghost
max_occurrences = 5
earliest_start = 0
+10 -9
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/greentext //Gotta have it!
name = "Greentext"
weight = 4
typepath = /datum/round_event/wizard/greentext/
typepath = /datum/round_event/wizard/greentext
max_occurrences = 1
earliest_start = 0
@@ -22,13 +22,13 @@
/obj/item/weapon/greentext
name = "greentext"
desc = "No one knows what this massive tome does, but it feels <i><font color='green'>desirable</font></i> all the same..."
w_class = 4
w_class = WEIGHT_CLASS_BULKY
icon = 'icons/obj/wizard.dmi'
icon_state = "greentext"
var/mob/living/last_holder
var/mob/living/new_holder
var/list/color_altered_mobs = list()
burn_state = FIRE_PROOF
resistance_flags = FIRE_PROOF | ACID_PROOF
var/quiet = FALSE
/obj/item/weapon/greentext/New()
@@ -44,14 +44,14 @@
last_holder = user
if(!(user in color_altered_mobs))
color_altered_mobs += user
user.color = "#00FF00"
user.add_atom_colour("#00FF00", ADMIN_COLOUR_PRIORITY)
START_PROCESSING(SSobj, src)
..()
/obj/item/weapon/greentext/dropped(mob/living/user as mob)
if(user in color_altered_mobs)
user << "<span class='warning'>A sudden wave of failure washes over you...</span>"
user.color = "#FF0000" //ya blew it
user.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY) //ya blew it
last_holder = null
new_holder = null
STOP_PROCESSING(SSobj, src)
@@ -69,16 +69,16 @@
new_holder.mind.objectives += O
new_holder.attack_log += "\[[time_stamp()]\] <font color='green'>Won with greentext!!!</font>"
color_altered_mobs -= new_holder
burn_state = ON_FIRE
resistance_flags |= ON_FIRE
qdel(src)
if(last_holder && last_holder != new_holder) //Somehow it was swiped without ever getting dropped
last_holder << "<span class='warning'>A sudden wave of failure washes over you...</span>"
last_holder.color = "#FF0000"
last_holder.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY)
last_holder = new_holder //long live the king
/obj/item/weapon/greentext/Destroy(force)
if((burn_state != ON_FIRE) && (!force))
if(!(resistance_flags & ON_FIRE) && !force)
return QDEL_HINT_LETMELIVE
. = ..()
@@ -87,7 +87,8 @@
var/message = "<span class='warning'>A dark temptation has passed from this world"
if(M in color_altered_mobs)
message += " and you're finally able to forgive yourself"
M.color = initial(M.color)
if(M.color == "#FF0000" || M.color == "#00FF00")
M.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
message += "...</span>"
// can't skip the mob check as it also does the decolouring
if(!quiet)
+2 -2
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/imposter //Mirror Mania
name = "Imposter Wizard"
weight = 1
typepath = /datum/round_event/wizard/imposter/
typepath = /datum/round_event/wizard/imposter
max_occurrences = 1
earliest_start = 0
@@ -16,7 +16,7 @@
return //Sad Trombone
var/client/C = pick(candidates)
PoolOrNew(/obj/effect/particle_effect/smoke, W.loc)
new /obj/effect/particle_effect/smoke(W.loc)
var/mob/living/carbon/human/I = new /mob/living/carbon/human(W.loc)
W.dna.transfer_identity(I, transfer_SE=1)
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/invincible //Boolet Proof
name = "Invincibility"
weight = 3
typepath = /datum/round_event/wizard/invincible/
typepath = /datum/round_event/wizard/invincible
max_occurrences = 5
earliest_start = 0
+3 -3
View File
@@ -1,15 +1,15 @@
/datum/round_event_control/wizard/lava //THE LEGEND NEVER DIES
name = "The Floor Is LAVA!"
weight = 2
typepath = /datum/round_event/wizard/lava/
typepath = /datum/round_event/wizard/lava
max_occurrences = 3
earliest_start = 0
/datum/round_event/wizard/lava/
/datum/round_event/wizard/lava
endWhen = 0
var/started = FALSE
/datum/round_event/wizard/lava/start()
if(!started)
started = TRUE
SSweather.run_weather("the floor is lava")
SSweather.run_weather("the floor is lava", ZLEVEL_STATION)
+2 -2
View File
@@ -1,11 +1,11 @@
/datum/round_event_control/wizard/magicarp //these fish is loaded
name = "Magicarp"
weight = 1
typepath = /datum/round_event/wizard/magicarp/
typepath = /datum/round_event/wizard/magicarp
max_occurrences = 1
earliest_start = 0
/datum/round_event/wizard/magicarp/
/datum/round_event/wizard/magicarp
announceWhen = 3
startWhen = 50
+3 -3
View File
@@ -1,11 +1,11 @@
/datum/round_event_control/wizard/petsplosion //the horror
name = "Petsplosion"
weight = 2
typepath = /datum/round_event/wizard/petsplosion/
typepath = /datum/round_event/wizard/petsplosion
max_occurrences = 1 //Exponential growth is nothing to sneeze at!
earliest_start = 0
/datum/round_event/wizard/petsplosion/
/datum/round_event/wizard/petsplosion
endWhen = 61 //1 minute (+1 tick for endWhen not to interfere with tick)
var/countdown = 0
@@ -13,5 +13,5 @@
if(activeFor >= 30 * countdown) // 0 seconds : 2 animals | 30 seconds : 4 animals | 1 minute : 8 animals
countdown += 1
for(var/mob/living/simple_animal/F in living_mob_list) //If you cull the heard before the next replication, things will be easier for you
if(!istype(F, /mob/living/simple_animal/hostile))
if(!ishostile(F))
new F.type(F.loc)
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/race //Lizard Wizard? Lizard Wizard.
name = "Race Swap"
weight = 2
typepath = /datum/round_event/wizard/race/
typepath = /datum/round_event/wizard/race
max_occurrences = 5
earliest_start = 0
+6 -5
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/rpgloot //its time to minmax your shit
name = "RPG Loot"
weight = 3
typepath = /datum/round_event/wizard/rpgloot/
typepath = /datum/round_event/wizard/rpgloot
max_occurrences = 1
earliest_start = 0
@@ -30,7 +30,7 @@
if(istype(I,/obj/item/weapon/storage))
var/obj/item/weapon/storage/S = I
if(prob(upgrade_scroll_chance) && S.contents.len < S.storage_slots)
if(prob(upgrade_scroll_chance) && S.contents.len < S.storage_slots && !S.invisibility)
var/obj/item/upgradescroll/scroll = new
S.handle_item_insertion(scroll,1)
upgrade_scroll_chance = max(0,upgrade_scroll_chance-100)
@@ -41,7 +41,7 @@
desc = "Somehow, this piece of paper can be applied to items to make them \"better\". Apparently there's a risk of losing the item if it's already \"too good\". <i>This all feels so arbitrary...</i>"
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
w_class = 1
w_class = WEIGHT_CLASS_TINY
/obj/item/upgradescroll/afterattack(obj/item/target, mob/user , proximity)
if(!proximity || !istype(target))
@@ -49,8 +49,9 @@
var/quality = target.force - initial(target.force)
if(quality > 9 && prob((quality - 9)*10))
user << "<span class='danger'>[target] catches fire!</span>"
if(target.burn_state == -1)
target.burn_state = 0
if(target.resistance_flags & (LAVA_PROOF|FIRE_PROOF))
target.resistance_flags &= ~(LAVA_PROOF|FIRE_PROOF)
target.resistance_flags |= FLAMMABLE
target.fire_act()
qdel(src)
return
+5 -5
View File
@@ -4,7 +4,7 @@
/datum/round_event_control/wizard/shuffleloc //Somewhere an AI is crying
name = "Change Places!"
weight = 2
typepath = /datum/round_event/wizard/shuffleloc/
typepath = /datum/round_event/wizard/shuffleloc
max_occurrences = 5
earliest_start = 0
@@ -40,7 +40,7 @@
/datum/round_event_control/wizard/shufflenames //Face/off joke
name = "Change Faces!"
weight = 4
typepath = /datum/round_event/wizard/shufflenames/
typepath = /datum/round_event/wizard/shufflenames
max_occurrences = 5
earliest_start = 0
@@ -74,7 +74,7 @@
/datum/round_event_control/wizard/shuffleminds //Basically Mass Ranged Mindswap
name = "Change Minds!"
weight = 1
typepath = /datum/round_event/wizard/shuffleminds/
typepath = /datum/round_event/wizard/shuffleminds
max_occurrences = 3
earliest_start = 0
@@ -82,7 +82,7 @@
var/list/mobs = list()
for(var/mob/living/carbon/human/H in living_mob_list)
if(!H.stat || !H.mind || (H.mind in ticker.mode.wizards) || (H.mind in ticker.mode.apprentices))
if(H.stat || !H.mind || (H.mind in ticker.mode.wizards) || (H.mind in ticker.mode.apprentices))
continue //the wizard(s) are spared on this one
mobs += H
@@ -91,7 +91,7 @@
shuffle(mobs)
var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new /obj/effect/proc_holder/spell/targeted/mind_transfer/
var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new /obj/effect/proc_holder/spell/targeted/mind_transfer
while(mobs.len > 1)
var/mob/living/carbon/human/H = pick(mobs)
mobs -= H
+2 -2
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/summonguns //The Classic
name = "Summon Guns"
weight = 1
typepath = /datum/round_event/wizard/summonguns/
typepath = /datum/round_event/wizard/summonguns
max_occurrences = 1
earliest_start = 0
@@ -16,7 +16,7 @@
/datum/round_event_control/wizard/summonmagic //The Somewhat Less Classic
name = "Summon Magic"
weight = 1
typepath = /datum/round_event/wizard/summonmagic/
typepath = /datum/round_event/wizard/summonmagic
max_occurrences = 1
earliest_start = 0
+4 -2
View File
@@ -50,6 +50,7 @@
desc = "It looks highly unstable; It could close at any moment."
icon = 'icons/obj/objects.dmi'
icon_state = "anom"
mech_sized = TRUE
/obj/effect/portal/wormhole/attack_hand(mob/user)
teleport(user)
@@ -60,8 +61,9 @@
/obj/effect/portal/wormhole/teleport(atom/movable/M)
if(istype(M, /obj/effect)) //sparks don't teleport
return
if(M.anchored && istype(M, /obj/mecha))
return
if(M.anchored)
if(!(istype(M, /obj/mecha) && mech_sized))
return
if(istype(M, /atom/movable))
var/turf/target