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
+15 -12
View File
@@ -1,10 +1,11 @@
#define ARTILLERY_RELOAD_TIME 60
#define EXPLOSION_SIZE 3
/obj/machinery/artillerycontrol
var/reload = ARTILLERY_RELOAD_TIME
var/explosionsize = EXPLOSION_SIZE
var/reload = 60
var/reload_cooldown = 60
var/explosiondev = 3
var/explosionmed = 6
var/explosionlight = 12
name = "bluespace artillery control"
icon_state = "control_boxp1"
icon = 'icons/obj/machines/particle_accelerator.dmi'
@@ -12,8 +13,8 @@
anchored = 1
/obj/machinery/artillerycontrol/process()
if(src.reload<ARTILLERY_RELOAD_TIME)
src.reload++
if(reload < reload_cooldown)
reload++
/obj/structure/artilleryplaceholder
name = "artillery"
@@ -28,7 +29,7 @@
user.set_machine(src)
var/dat = "<B>Bluespace Artillery Control:</B><BR>"
dat += "Locked on<BR>"
dat += "<B>Charge progress: [reload]/[ARTILLERY_RELOAD_TIME]:</B><BR>"
dat += "<B>Charge progress: [reload]/[reload_cooldown]:</B><BR>"
dat += "<A href='byond://?src=\ref[src];fire=1'>Open Fire</A><BR>"
dat += "Deployment of weapon authorized by <br>Nanotrasen Naval Command<br><br>Remember, friendly fire is grounds for termination of your contract and life.<HR>"
user << browse(dat, "window=scroll")
@@ -39,18 +40,20 @@
if(..())
return
var/A
A = input("Area to jump bombard", "Open Fire", A) in teleportlocs
A = input("Area to bombard", "Open Fire", A) in teleportlocs
var/area/thearea = teleportlocs[A]
if (usr.stat || usr.restrained()) return
if(src.reload < ARTILLERY_RELOAD_TIME) return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
if(usr.stat || usr.restrained())
return
if(reload < reload_cooldown)
return
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
priority_announce("Bluespace artillery fire detected. Brace for impact.")
message_admins("[key_name_admin(usr)] has launched an artillery strike.")
var/list/L = list()
for(var/turf/T in get_area_turfs(thearea.type))
L+=T
var/loc = pick(L)
explosion(loc,explosionsize,explosionsize*2,explosionsize*4)
explosion(loc,explosiondev,explosionmed,explosionlight)
reload = 0
/*/mob/proc/openfire()
+191 -84
View File
@@ -4,10 +4,11 @@
#define FLAG_RETURN_TIME 200 // 20 seconds
#define INSTAGIB_RESPAWN 50 //5 seconds
#define DEFAULT_RESPAWN 150 //15 seconds
#define AMMO_DROP_LIFETIME 300
/obj/item/weapon/twohanded/required/ctf
/obj/item/weapon/twohanded/ctf
name = "banner"
icon = 'icons/obj/items.dmi'
icon_state = "banner"
@@ -18,6 +19,7 @@
throw_range = 1
force = 200
armour_penetration = 1000
resistance_flags = INDESTRUCTIBLE
anchored = TRUE
flags = HANDSLOW
var/team = WHITE_TEAM
@@ -25,21 +27,18 @@
var/obj/effect/ctf/flag_reset/reset
var/reset_path = /obj/effect/ctf/flag_reset
/obj/item/weapon/twohanded/required/ctf/New()
if(!reset)
reset = new reset_path(get_turf(src))
/obj/item/weapon/twohanded/required/ctf/Destroy()
/obj/item/weapon/twohanded/ctf/Destroy()
if(reset)
qdel(reset)
reset = null
. = ..()
/obj/item/weapon/twohanded/required/ctf/initialize()
/obj/item/weapon/twohanded/ctf/Initialize()
..()
if(!reset)
reset = new reset_path(get_turf(src))
/obj/item/weapon/twohanded/required/ctf/process()
/obj/item/weapon/twohanded/ctf/process()
if(world.time > reset_cooldown)
forceMove(get_turf(src.reset))
for(var/mob/M in player_list)
@@ -49,28 +48,30 @@
to base!</span>"
STOP_PROCESSING(SSobj, src)
/obj/item/weapon/twohanded/required/ctf/attack_hand(mob/living/user)
/obj/item/weapon/twohanded/ctf/attack_hand(mob/living/user)
if(!user)
return
if(team in user.faction)
user << "You can't move your own flag!"
return
if(loc == user)
if(!user.unEquip(src))
if(!user.dropItemToGround(src))
return
anchored = FALSE
pickup(user)
if(!user.put_in_active_hand(src))
dropped(user)
return
user.anchored = TRUE
for(var/mob/M in player_list)
var/area/mob_area = get_area(M)
if(istype(mob_area, /area/ctf))
M << "<span class='userdanger'>\The [src] has been taken!</span>"
STOP_PROCESSING(SSobj, src)
/obj/item/weapon/twohanded/required/ctf/dropped(mob/user)
/obj/item/weapon/twohanded/ctf/dropped(mob/user)
..()
user.anchored = FALSE
reset_cooldown = world.time + 200 //20 seconds
START_PROCESSING(SSobj, src)
for(var/mob/M in player_list)
@@ -80,7 +81,7 @@
anchored = TRUE
/obj/item/weapon/twohanded/required/ctf/red
/obj/item/weapon/twohanded/ctf/red
name = "red flag"
icon_state = "banner-red"
item_state = "banner-red"
@@ -89,7 +90,7 @@
reset_path = /obj/effect/ctf/flag_reset/red
/obj/item/weapon/twohanded/required/ctf/blue
/obj/item/weapon/twohanded/ctf/blue
name = "blue flag"
icon_state = "banner-blue"
item_state = "banner-blue"
@@ -122,6 +123,7 @@
icon = 'icons/obj/device.dmi'
icon_state = "syndbeacon"
anchored = 1
resistance_flags = INDESTRUCTIBLE
var/team = WHITE_TEAM
//Capture the Flag scoring
var/points = 0
@@ -131,6 +133,8 @@
var/control_points = 0
var/control_points_to_win = 180
var/list/team_members = list()
var/list/spawned_mobs = list()
var/list/recently_dead_ckeys = list()
var/ctf_enabled = FALSE
var/ctf_gear = /datum/outfit/ctf
var/instagib_gear = /datum/outfit/ctf/instagib
@@ -149,7 +153,7 @@
/obj/machinery,
/obj/structure,
/obj/effect/ctf,
/obj/item/weapon/twohanded/required/ctf
/obj/item/weapon/twohanded/ctf
))
poi_list |= src
@@ -157,6 +161,21 @@
poi_list.Remove(src)
..()
/obj/machinery/capture_the_flag/process()
for(var/i in spawned_mobs)
if(!i)
spawned_mobs -= i
continue
// Anyone in crit, automatically reap
var/mob/living/M = i
if(M.InCritical() || M.stat == DEAD)
ctf_dust_old(M)
else
// The changes that you've been hit with no shield but not
// instantly critted are low, but have some healing.
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
/obj/machinery/capture_the_flag/red
name = "Red CTF Controller"
icon_state = "syndbeacon"
@@ -177,11 +196,12 @@
if(ticker.current_state != GAME_STATE_PLAYING)
return
if(user.ckey in team_members)
if(user.mind.current && user.mind.current.timeofdeath + respawn_cooldown > world.time)
if(user.ckey in recently_dead_ckeys)
user << "It must be more than [respawn_cooldown/10] seconds from your last death to respawn!"
return
var/client/new_team_member = user.client
dust_old(user)
if(user.mind && user.mind.current)
ctf_dust_old(user.mind.current)
spawn_team_member(new_team_member)
return
@@ -196,15 +216,20 @@
return
team_members |= user.ckey
var/client/new_team_member = user.client
dust_old(user)
if(user.mind && user.mind.current)
ctf_dust_old(user.mind.current)
spawn_team_member(new_team_member)
/obj/machinery/capture_the_flag/proc/dust_old(mob/user)
if(user.mind && user.mind.current && user.mind.current.z == src.z)
new /obj/item/ammo_box/magazine/recharge/ctf (get_turf(user.mind.current))
new /obj/item/ammo_box/magazine/recharge/ctf (get_turf(user.mind.current))
user.mind.current.dust()
/obj/machinery/capture_the_flag/proc/ctf_dust_old(mob/living/body)
if(isliving(body) && (team in body.faction))
var/turf/T = get_turf(body)
new /obj/effect/ctf/ammo(T)
recently_dead_ckeys += body.ckey
addtimer(CALLBACK(src, .proc/clear_cooldown, body.ckey), respawn_cooldown, TIMER_UNIQUE)
body.dust()
/obj/machinery/capture_the_flag/proc/clear_cooldown(var/ckey)
recently_dead_ckeys -= ckey
/obj/machinery/capture_the_flag/proc/spawn_team_member(client/new_team_member)
var/mob/living/carbon/human/M = new/mob/living/carbon/human(get_turf(src))
@@ -212,6 +237,7 @@
M.key = new_team_member.key
M.faction += team
M.equipOutfit(ctf_gear)
spawned_mobs += M
/obj/machinery/capture_the_flag/Topic(href, href_list)
if(href_list["join"])
@@ -220,11 +246,10 @@
attack_ghost(ghost)
/obj/machinery/capture_the_flag/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/twohanded/required/ctf))
var/obj/item/weapon/twohanded/required/ctf/flag = I
if(istype(I, /obj/item/weapon/twohanded/ctf))
var/obj/item/weapon/twohanded/ctf/flag = I
if(flag.team != src.team)
user.unEquip(flag)
flag.loc = get_turf(flag.reset)
user.transferItemToLoc(flag, get_turf(flag.reset), TRUE)
points++
for(var/mob/M in player_list)
var/area/mob_area = get_area(M)
@@ -239,8 +264,8 @@
if(istype(mob_area, /area/ctf))
M << "<span class='narsie'>[team] team wins!</span>"
M << "<span class='userdanger'>The game has been reset! Teams have been cleared. The machines will be active again in 30 seconds.</span>"
for(var/obj/item/weapon/twohanded/required/ctf/W in M)
M.unEquip(W)
for(var/obj/item/weapon/twohanded/ctf/W in M)
M.dropItemToGround(W)
M.dust()
for(var/obj/machinery/control_point/control in machines)
control.icon_state = "dominator"
@@ -252,7 +277,7 @@
CTF.ctf_enabled = FALSE
CTF.team_members = list()
CTF.arena_cleared = FALSE
addtimer(CTF, "start_ctf", 300)
addtimer(CALLBACK(CTF, .proc/start_ctf), 300)
/obj/machinery/capture_the_flag/proc/toggle_ctf()
if(!ctf_enabled)
@@ -281,12 +306,15 @@
/obj/machinery/capture_the_flag/proc/stop_ctf()
ctf_enabled = FALSE
arena_cleared = FALSE
var/area/A = get_area(src)
for(var/i in mob_list)
var/mob/M = i
if((get_area(A) == A) && (M.ckey in team_members))
M.dust()
team_members.Cut()
spawned_mobs.Cut()
recently_dead_ckeys.Cut()
/obj/machinery/capture_the_flag/proc/instagib_mode()
for(var/obj/machinery/capture_the_flag/CTF in machines)
@@ -300,11 +328,34 @@
CTF.ctf_gear = initial(ctf_gear)
CTF.respawn_cooldown = DEFAULT_RESPAWN
/obj/item/weapon/gun/projectile/automatic/pistol/deagle/CTF
/obj/item/weapon/gun/ballistic/automatic/pistol/deagle/ctf
desc = "This looks like it could really hurt in melee."
force = 75
mag_type = /obj/item/ammo_box/magazine/m50/ctf
/obj/item/weapon/gun/projectile/automatic/laser/ctf
/obj/item/weapon/gun/ballistic/automatic/pistol/deagle/ctf/dropped()
. = ..()
addtimer(CALLBACK(src, .proc/floor_vanish), 1)
/obj/item/weapon/gun/ballistic/automatic/pistol/deagle/ctf/proc/floor_vanish()
if(isturf(loc))
qdel(src)
/obj/item/ammo_box/magazine/m50/ctf
ammo_type = /obj/item/ammo_casing/a50/ctf
/obj/item/ammo_casing/a50/ctf
projectile_type = /obj/item/projectile/bullet/ctf
/obj/item/projectile/bullet/ctf
damage = 0
/obj/item/projectile/bullet/ctf/prehit(atom/target)
if(is_ctf_target(target))
damage = 60
. = ..()
/obj/item/weapon/gun/ballistic/automatic/laser/ctf
mag_type = /obj/item/ammo_box/magazine/recharge/ctf
desc = "This looks like it could really hurt in melee."
force = 50
@@ -312,13 +363,38 @@
/obj/item/ammo_box/magazine/recharge/ctf
ammo_type = /obj/item/ammo_casing/caseless/laser/ctf
/obj/item/ammo_box/magazine/recharge/ctf/dropped()
. = ..()
addtimer(CALLBACK(src, .proc/floor_vanish), 1)
/obj/item/ammo_box/magazine/recharge/ctf/proc/floor_vanish()
if(isturf(loc))
qdel(src)
/obj/item/ammo_casing/caseless/laser/ctf
projectile_type = /obj/item/projectile/beam/ctf
/obj/item/projectile/beam/ctf
damage = 150
damage = 0
icon_state = "omnilaser"
/obj/item/weapon/gun/projectile/automatic/laser/ctf/red
/obj/item/projectile/beam/ctf/prehit(atom/target)
if(is_ctf_target(target))
damage = 150
. = ..()
/proc/is_ctf_target(atom/target)
. = FALSE
if(istype(target, /obj/structure/barricade/security/ctf))
. = TRUE
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit/shielded/ctf))
. = TRUE
// RED TEAM GUNS
/obj/item/weapon/gun/ballistic/automatic/laser/ctf/red
mag_type = /obj/item/ammo_box/magazine/recharge/ctf/red
/obj/item/ammo_box/magazine/recharge/ctf/red
@@ -330,7 +406,9 @@
/obj/item/projectile/beam/ctf/red
icon_state = "laser"
/obj/item/weapon/gun/projectile/automatic/laser/ctf/blue
// BLUE TEAM GUNS
/obj/item/weapon/gun/ballistic/automatic/laser/ctf/blue
mag_type = /obj/item/ammo_box/magazine/recharge/ctf/blue
/obj/item/ammo_box/magazine/recharge/ctf/blue
@@ -344,16 +422,34 @@
/datum/outfit/ctf
name = "CTF"
/obj/item/device/radio/headset
ears = /obj/item/device/radio/headset
uniform = /obj/item/clothing/under/syndicate
suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
id = /obj/item/weapon/card/id/syndicate
belt = /obj/item/weapon/gun/projectile/automatic/pistol/deagle/CTF
belt = /obj/item/weapon/gun/ballistic/automatic/pistol/deagle/ctf
l_pocket = /obj/item/ammo_box/magazine/recharge/ctf
r_pocket = /obj/item/ammo_box/magazine/recharge/ctf
r_hand = /obj/item/weapon/gun/projectile/automatic/laser/ctf
r_hand = /obj/item/weapon/gun/ballistic/automatic/laser/ctf
/datum/outfit/ctf/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE)
if(visualsOnly)
return
var/list/no_drops = list()
var/obj/item/weapon/card/id/W = H.wear_id
no_drops += W
W.registered_name = H.real_name
W.update_label(W.registered_name, W.assignment)
// The shielded hardsuit is already NODROP
no_drops += H.get_item_by_slot(slot_gloves)
no_drops += H.get_item_by_slot(slot_shoes)
no_drops += H.get_item_by_slot(slot_w_uniform)
no_drops += H.get_item_by_slot(slot_ears)
for(var/i in no_drops)
var/obj/item/I = i
I.flags |= NODROP
/datum/outfit/ctf/instagib
r_hand = /obj/item/weapon/gun/energy/laser/instakill
@@ -362,7 +458,9 @@
/datum/outfit/ctf/red
ears = /obj/item/device/radio/headset/syndicate/alt
suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/red
r_hand = /obj/item/weapon/gun/projectile/automatic/laser/ctf/red
r_hand = /obj/item/weapon/gun/ballistic/automatic/laser/ctf/red
l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/red
r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/red
/datum/outfit/ctf/red/instagib
r_hand = /obj/item/weapon/gun/energy/laser/instakill/red
@@ -371,49 +469,51 @@
/datum/outfit/ctf/blue
ears = /obj/item/device/radio/headset/headset_cent/commander
suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue
r_hand = /obj/item/weapon/gun/projectile/automatic/laser/ctf/blue
r_hand = /obj/item/weapon/gun/ballistic/automatic/laser/ctf/blue
l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/blue
r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/blue
/datum/outfit/ctf/blue/instagib
r_hand = /obj/item/weapon/gun/energy/laser/instakill/blue
shoes = /obj/item/clothing/shoes/jackboots/fast
/datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H)
..()
var/obj/item/device/radio/R = H.ears
R.set_frequency(SYND_FREQ)
R.freqlock = 1
/datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H)
..()
var/obj/item/device/radio/R = H.ears
R.set_frequency(CENTCOM_FREQ)
R.freqlock = 1
/obj/structure/divine/trap/ctf
/obj/structure/trap/ctf
name = "Spawn protection"
desc = "Stay outta the enemy spawn!"
icon_state = "trap"
health = INFINITY
maxhealth = INFINITY
resistance_flags = INDESTRUCTIBLE
var/team = WHITE_TEAM
constructable = FALSE
time_between_triggers = 1
anchored = TRUE
alpha = 255
/obj/structure/divine/trap/examine(mob/user)
/obj/structure/trap/examine(mob/user)
return
/obj/structure/divine/trap/ctf/trap_effect(mob/living/L)
/obj/structure/trap/ctf/trap_effect(mob/living/L)
if(!(src.team in L.faction))
L << "<span class='danger'><B>Stay out of the enemy spawn!</B></span>"
L.dust()
L.death()
/obj/structure/divine/trap/ctf/red
/obj/structure/trap/ctf/red
team = RED_TEAM
icon_state = "trap-fire"
/obj/structure/divine/trap/ctf/blue
/obj/structure/trap/ctf/blue
team = BLUE_TEAM
icon_state = "trap-frost"
@@ -429,8 +529,49 @@
anchored = TRUE
invisibility = INVISIBILITY_OBSERVER
alpha = 100
resistance_flags = INDESTRUCTIBLE
/obj/effect/ctf/ammo
name = "ammo pickup"
desc = "You like revenge, right? Everybody likes revenge! Well, \
let's go get some!"
icon = 'icons/effects/effects.dmi'
icon_state = "at_shield1"
layer = ABOVE_MOB_LAYER
alpha = 255
invisibility = 0
/obj/effect/ctf/ammo/New()
..()
QDEL_IN(src, AMMO_DROP_LIFETIME)
/obj/effect/ctf/ammo/Crossed(atom/movable/AM)
reload(AM)
/obj/effect/ctf/ammo/Bump(atom/movable/AM)
reload(AM)
/obj/effect/ctf/ammo/Bumped(atom/movable/AM)
reload(AM)
/obj/effect/ctf/ammo/proc/reload(mob/living/M)
if(!ishuman(M))
return
for(var/obj/machinery/capture_the_flag/CTF in machines)
if(M in CTF.spawned_mobs)
var/outfit = CTF.ctf_gear
var/datum/outfit/O = new outfit
for(var/obj/item/weapon/gun/G in M)
qdel(G)
O.equip(M)
M << "<span class='notice'>Ammunition reloaded!</span>"
playsound(get_turf(M), 'sound/weapons/shotgunpump.ogg', 50, 1, -1)
qdel(src)
break
/obj/effect/ctf/dead_barricade
name = "dead barrier"
desc = "It provided cover in fire fights. And now it's gone."
icon = 'icons/obj/objects.dmi'
icon_state = "barrier0"
@@ -443,41 +584,6 @@
new /obj/structure/barricade/security/ctf(get_turf(src))
qdel(src)
//Areas
/area/ctf
name = "Capture the Flag"
icon_state = "yellow"
requires_power = 0
has_gravity = 1
/area/ctf/control_room
name = "Control Room A"
/area/ctf/control_room2
name = "Control Room B"
/area/ctf/central
name = "Central"
/area/ctf/main_hall
name = "Main Hall A"
/area/ctf/main_hall2
name = "Main Hall B"
/area/ctf/corridor
name = "Corridor A"
/area/ctf/corridor2
name = "Corridor B"
/area/ctf/flag_room
name = "Flag Room A"
/area/ctf/flag_room2
name = "Flag Room B"
//Control Point
@@ -487,6 +593,7 @@
icon = 'icons/obj/machines/dominator.dmi'
icon_state = "dominator"
anchored = 1
resistance_flags = INDESTRUCTIBLE
var/obj/machinery/capture_the_flag/controlling
var/team = "none"
var/point_rate = 1
+55 -91
View File
@@ -27,30 +27,26 @@
if(!uses)
user << "<span class='warning'>This spawner is out of charges!</span>"
return
if(jobban_isbanned(user, "lavaland"))
user << "<span class='warning'>You are jobanned!</span>"
return
var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No")
if(ghost_role == "No" || !loc)
return
log_game("[user.ckey] became [mob_name]")
create(ckey = user.ckey)
/obj/effect/mob_spawn/spawn_atom_to_world()
//We no longer need to spawn mobs, deregister ourself
SSobj.atom_spawners -= src
if(roundstart)
/obj/effect/mob_spawn/Initialize(mapload)
if(roundstart && (mapload || (ticker && ticker.current_state > GAME_STATE_SETTING_UP)))
create()
else
poi_list |= src
/obj/effect/mob_spawn/New()
..()
if(roundstart)
//Add to the atom spawners register for roundstart atom spawning
SSobj.atom_spawners += src
if(instant)
create()
else
poi_list |= src
/obj/effect/mob_spawn/Destroy()
poi_list.Remove(src)
@@ -96,8 +92,9 @@
/obj/effect/mob_spawn/human
mob_type = /mob/living/carbon/human
//Human specific stuff.
var/mob_species = null //Set to make them a mutant race such as lizard or skeleton. Uses the datum typepath instead of the ID.
var/uniform = null //Set this to an object path to have the slot filled with said object on the corpse.
var/mob_species = null //Set to make them a mutant race such as lizard or skeleton. Uses the datum typepath instead of the ID.
var/outfit_type = null //Will start with this if exists then apply specific slots. Job outfits are generated with IDs and disabled PDAs.
var/uniform = null //Set this to an object path to have the slot filled with said object on the corpse.
var/r_hand = null
var/l_hand = null
var/suit = null
@@ -106,17 +103,18 @@
var/radio = null
var/glasses = null
var/mask = null
var/neck = null
var/helmet = null
var/belt = null
var/pocket1 = null
var/pocket2 = null
var/back = null
var/has_id = 0 //Just set to 1 if you want them to have an ID
var/id_job = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
var/id_access = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
var/id_icon = null //For setting it to be a gold, silver, centcom etc ID
var/has_id = FALSE //Set to TRUE if you want them to have an ID
var/id_job = null //Such as "Clown" or "Chef." This just determines what the ID reads as, not their access
var/id_access = null //This is for access. See access.dm for which jobs give what access. Use "Captain" if you want it to be all access.
var/id_access_list = null //Allows you to manually add access to an ID card.
var/id_icon = null //For setting it to be a gold, silver, centcom etc ID
var/husk = null
var/outfit_type = null // Will start with this if exists then apply specific slots
var/list/implants = list()
/obj/effect/mob_spawn/human/equip(mob/living/carbon/human/H)
@@ -124,8 +122,15 @@
H.set_species(mob_species)
if(husk)
H.Drain()
if(outfit_type)
H.equipOutfit(outfit_type)
// We don't want corpse PDAs to show up in the messenger list.
var/obj/item/device/pda/PDA = locate(/obj/item/device/pda) in H
if(PDA)
PDA.toff = TRUE
if(uniform)
H.equip_to_slot_or_del(new uniform(H), slot_w_uniform)
if(suit)
@@ -140,6 +145,8 @@
H.equip_to_slot_or_del(new glasses(H), slot_glasses)
if(mask)
H.equip_to_slot_or_del(new mask(H), slot_wear_mask)
if(neck)
H.equip_to_slot_or_del(new neck(H), slot_neck)
if(helmet)
H.equip_to_slot_or_del(new helmet(H), slot_head)
if(belt)
@@ -151,24 +158,23 @@
if(back)
H.equip_to_slot_or_del(new back(H), slot_back)
if(l_hand)
H.equip_to_slot_or_del(new l_hand(H), slot_l_hand)
H.put_in_hands_or_del(new l_hand(H))
if(r_hand)
H.equip_to_slot_or_del(new r_hand(H), slot_r_hand)
H.put_in_hands_or_del(new r_hand(H))
if(has_id)
var/obj/item/weapon/card/id/W = new(H)
if(id_icon)
W.icon_state = id_icon
if(id_access)
var/datum/job/jobdatum
for(var/jobtype in typesof(/datum/job))
var/datum/job/J = new jobtype
if(J.title == id_access)
jobdatum = J
W.access = J.get_access()
break
if(jobdatum)
W.access = jobdatum.get_access()
else
if(id_access_list)
if(!islist(W.access))
W.access = list()
W.access |= id_access_list
if(id_job)
W.assignment = id_job
W.registered_name = H.real_name
@@ -179,6 +185,10 @@
var/obj/item/weapon/implant/X = new I
X.implant(H)
if(!H.head && istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_suit
HS.ToggleHelmet()
//Instant version - use when spawning corpses during runtime
/obj/effect/mob_spawn/human/corpse
roundstart = FALSE
@@ -200,9 +210,7 @@
var/A = locate(/mob/living/silicon/ai) in loc
if(A)
return
var/L = new /datum/ai_laws/default/asimov
var/B = new /obj/item/device/mmi
var/mob/living/silicon/ai/M = new(src.loc, L, B, 1) //spawn new AI at landmark as var M
var/mob/living/silicon/ai/spawned/M = new(loc) //spawn new AI at landmark as var M
M.name = src.name
M.real_name = src.name
M.aiPDA.toff = 1 //turns the AI's PDA messenger off, stopping it showing up on player PDAs
@@ -255,7 +263,7 @@
back = /obj/item/weapon/storage/backpack
has_id = 1
id_job = "Operative"
id_access = "Syndicate"
id_access_list = list(access_syndicate)
/obj/effect/mob_spawn/human/syndicatecommando
name = "Syndicate Commando"
@@ -265,39 +273,23 @@
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/syndicate
helmet = /obj/item/clothing/head/helmet/space/hardsuit/syndi
back = /obj/item/weapon/tank/jetpack/oxygen
pocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
has_id = 1
id_job = "Operative"
id_access = "Syndicate"
id_access_list = list(access_syndicate)
///////////Civilians//////////////////////
/obj/effect/mob_spawn/human/cook
name = "Cook"
uniform = /obj/item/clothing/under/rank/chef
suit = /obj/item/clothing/suit/apron/chef
shoes = /obj/item/clothing/shoes/sneakers/black
helmet = /obj/item/clothing/head/chefhat
back = /obj/item/weapon/storage/backpack
radio = /obj/item/device/radio/headset
has_id = 1
id_job = "Cook"
id_access = "Cook"
outfit_type = /datum/outfit/job/cook
/obj/effect/mob_spawn/human/doctor
name = "Doctor"
radio = /obj/item/device/radio/headset/headset_med
uniform = /obj/item/clothing/under/rank/medical
suit = /obj/item/clothing/suit/toggle/labcoat
back = /obj/item/weapon/storage/backpack/medic
pocket1 = /obj/item/device/flashlight/pen
shoes = /obj/item/clothing/shoes/sneakers/black
has_id = 1
id_job = "Medical Doctor"
id_access = "Medical Doctor"
outfit_type = /datum/outfit/job/doctor
/obj/effect/mob_spawn/human/doctor/alive
death = FALSE
@@ -310,68 +302,40 @@
icon_state = "sleeper"
flavour_text = "You are a space doctor!"
/obj/effect/mob_spawn/human/doctor/alive/equip(mob/living/carbon/human/H)
..()
// Remove radio and PDA so they wouldn't annoy station crew.
var/list/del_types = list(/obj/item/device/pda, /obj/item/device/radio/headset)
for(var/del_type in del_types)
var/obj/item/I = locate(del_type) in H
qdel(I)
/obj/effect/mob_spawn/human/engineer
name = "Engineer"
radio = /obj/item/device/radio/headset/headset_eng
uniform = /obj/item/clothing/under/rank/engineer
back = /obj/item/weapon/storage/backpack/industrial
shoes = /obj/item/clothing/shoes/sneakers/orange
belt = /obj/item/weapon/storage/belt/utility/full
outfit_type = /datum/outfit/job/engineer
gloves = /obj/item/clothing/gloves/color/yellow
helmet = /obj/item/clothing/head/hardhat
has_id = 1
id_job = "Station Engineer"
id_access = "Station Engineer"
/obj/effect/mob_spawn/human/engineer/rig
suit = /obj/item/clothing/suit/space/hardsuit/engine
mask = /obj/item/clothing/mask/breath
outfit_type = /datum/outfit/job/engineer/rig
/obj/effect/mob_spawn/human/clown
name = "Clown"
uniform = /obj/item/clothing/under/rank/clown
shoes = /obj/item/clothing/shoes/clown_shoes
radio = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/clown_hat
pocket1 = /obj/item/weapon/bikehorn
back = /obj/item/weapon/storage/backpack/clown
has_id = 1
id_job = "Clown"
id_access = "Clown"
outfit_type = /datum/outfit/job/clown
/obj/effect/mob_spawn/human/scientist
name = "Scientist"
radio = /obj/item/device/radio/headset/headset_sci
uniform = /obj/item/clothing/under/rank/scientist
suit = /obj/item/clothing/suit/toggle/labcoat/science
back = /obj/item/weapon/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/white
has_id = 1
id_job = "Scientist"
id_access = "Scientist"
outfit_type = /datum/outfit/job/scientist
/obj/effect/mob_spawn/human/miner
radio = /obj/item/device/radio/headset/headset_cargo/mining
uniform = /obj/item/clothing/under/rank/miner
gloves = /obj/item/clothing/gloves/color/black
back = /obj/item/weapon/storage/backpack/industrial
shoes = /obj/item/clothing/shoes/sneakers/black
has_id = 1
id_job = "Shaft Miner"
id_access = "Shaft Miner"
name = "Shaft Miner"
outfit_type = /datum/outfit/job/miner/asteroid
/obj/effect/mob_spawn/human/miner/rig
suit = /obj/item/clothing/suit/space/hardsuit/mining
mask = /obj/item/clothing/mask/breath
outfit_type = /datum/outfit/job/miner/equipped/asteroid
/obj/effect/mob_spawn/human/miner/explorer
uniform = /obj/item/clothing/under/rank/miner/lavaland
back = /obj/item/weapon/storage/backpack/explorer
shoes = /obj/item/clothing/shoes/workboots/mining
suit = /obj/item/clothing/suit/hooded/explorer
mask = /obj/item/clothing/mask/gas/explorer
belt = /obj/item/weapon/gun/energy/kinetic_accelerator
outfit_type = /datum/outfit/job/miner/equipped
/obj/effect/mob_spawn/human/plasmaman
mob_species = /datum/species/plasmaman
-31
View File
@@ -1,34 +1,3 @@
//Exile implants will allow you to use the station gate, but not return home.
//This will allow security to exile badguys/for badguys to exile their kill targets
/obj/item/weapon/implant/exile
name = "exile implant"
desc = "Prevents you from returning from away missions"
origin_tech = "materials=2;biotech=3;magnets=2;bluespace=3"
activated = 0
/obj/item/weapon/implant/exile/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Nanotrasen Employee Exile Implant<BR>
<b>Implant Details:</b> The onboard gateway system has been modified to reject entry by individuals containing this implant<BR>"}
return dat
/obj/item/weapon/implanter/exile
name = "implanter (exile)"
/obj/item/weapon/implanter/exile/New()
imp = new /obj/item/weapon/implant/exile( src )
..()
/obj/item/weapon/implantcase/exile
name = "implant case - 'Exile'"
desc = "A glass case containing an exile implant."
/obj/item/weapon/implantcase/exile/New()
imp = new /obj/item/weapon/implant/exile(src)
..()
/obj/structure/closet/secure_closet/exile
name = "exile implants"
+91 -138
View File
@@ -7,23 +7,50 @@ var/obj/machinery/gateway/centerstation/the_gateway = null
icon_state = "off"
density = 1
anchored = 1
unacidable = 1
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
var/active = 0
var/checkparts = TRUE
var/list/obj/effect/landmark/randomspawns = list()
var/calibrated = TRUE
var/list/linked = list()
var/can_link = FALSE //Is this the centerpiece?
/obj/machinery/gateway/centerstation/New()
/obj/machinery/gateway/Initialize()
..()
if(!the_gateway)
the_gateway = src
randomspawns = awaydestinations
/obj/machinery/gateway/proc/toggleoff()
for(var/obj/machinery/gateway/G in linked)
G.active = 0
G.update_icon()
active = 0
update_icon()
/obj/machinery/gateway/centerstation/Destroy()
if(the_gateway == src)
the_gateway = null
return ..()
/obj/machinery/gateway/proc/detect()
if(!can_link)
return FALSE
linked = list() //clear the list
var/turf/T = loc
var/ready = FALSE
for(var/i in alldirs)
T = get_step(loc, i)
var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T
if(G)
linked.Add(G)
continue
/obj/machinery/gateway/initialize()
//this is only done if we fail to find a part
ready = FALSE
toggleoff()
break
if((linked.len == 8) || !checkparts)
ready = TRUE
return ready
/obj/machinery/gateway/Initialize()
..()
update_icon()
switch(dir)
if(SOUTH,SOUTHEAST,SOUTHWEST)
@@ -40,65 +67,61 @@ var/obj/machinery/gateway/centerstation/the_gateway = null
/obj/machinery/gateway/shuttleRotate()
return
/obj/machinery/gateway/attack_hand(mob/user)
if(!detect())
return
if(!active)
toggleon(user)
return
toggleoff()
/obj/machinery/gateway/proc/toggleon(mob/user)
return FALSE
/obj/machinery/gateway/centerstation/New()
..()
if(!the_gateway)
the_gateway = src
/obj/machinery/gateway/centerstation/Destroy()
if(the_gateway == src)
the_gateway = null
return ..()
//this is da important part wot makes things go
/obj/machinery/gateway/centerstation
density = 1
density = TRUE
icon_state = "offcenter"
use_power = 1
use_power = TRUE
//warping vars
var/list/linked = list()
var/ready = 0 //have we got all the parts for a gateway?
var/wait = 0 //this just grabs world.time at world start
var/obj/machinery/gateway/centeraway/awaygate = null
can_link = TRUE
/obj/machinery/gateway/centerstation/initialize()
/obj/machinery/gateway/centerstation/Initialize()
..()
update_icon()
wait = world.time + config.gateway_delay //+ thirty minutes default
awaygate = locate(/obj/machinery/gateway/centeraway)
/obj/machinery/gateway/centerstation/update_icon()
if(active)
icon_state = "oncenter"
return
icon_state = "offcenter"
/obj/machinery/gateway/centerstation/process()
if(stat & (NOPOWER))
if(active) toggleoff()
if((stat & (NOPOWER)) && use_power)
if(active)
toggleoff()
return
if(active)
use_power(5000)
/obj/machinery/gateway/centerstation/proc/detect()
linked = list() //clear the list
var/turf/T = loc
for(var/i in alldirs)
T = get_step(loc, i)
var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T
if(G)
linked.Add(G)
continue
//this is only done if we fail to find a part
ready = 0
toggleoff()
break
if(linked.len == 8)
ready = 1
/obj/machinery/gateway/centerstation/proc/toggleon(mob/user)
if(!ready)
return
if(linked.len != 8)
/obj/machinery/gateway/centerstation/toggleon(mob/user)
if(!detect())
return
if(!powered())
return
@@ -115,31 +138,12 @@ var/obj/machinery/gateway/centerstation/the_gateway = null
active = 1
update_icon()
/obj/machinery/gateway/centerstation/proc/toggleoff()
for(var/obj/machinery/gateway/G in linked)
G.active = 0
G.update_icon()
active = 0
update_icon()
/obj/machinery/gateway/centerstation/attack_hand(mob/user)
if(!ready)
detect()
return
if(!active)
toggleon(user)
return
toggleoff()
//okay, here's the good teleporting stuff
/obj/machinery/gateway/centerstation/Bumped(atom/movable/AM)
if(!ready)
return
if(!active)
return
if(!detect())
return
if(!awaygate || qdeleted(awaygate))
return
@@ -152,34 +156,36 @@ var/obj/machinery/gateway/centerstation/the_gateway = null
M.client.move_delay = max(world.time + 5, M.client.move_delay)
return
else
var/obj/effect/landmark/dest = pick(awaydestinations)
var/obj/effect/landmark/dest = pick(randomspawns)
if(dest)
AM.forceMove(get_turf(dest))
AM.setDir(SOUTH)
use_power(5000)
return
/obj/machinery/gateway/centerstation/attackby(obj/item/device/W, mob/user, params)
/obj/machinery/gateway/centeraway/attackby(obj/item/device/W, mob/user, params)
if(istype(W,/obj/item/device/multitool))
user << "\black The gate is already calibrated, there is no work for you to do here."
return
if(calibrated)
user << "\black The gate is already calibrated, there is no work for you to do here."
return
else
user << "<span class='boldnotice'>Recalibration successful!</span>: \black This gate's systems have been fine tuned. Travel to this gate will now be on target."
calibrated = TRUE
return
/////////////////////////////////////Away////////////////////////
/obj/machinery/gateway/centeraway
density = 1
density = TRUE
icon_state = "offcenter"
use_power = 0
var/calibrated = 1
var/list/linked = list() //a list of the connected gateway chunks
var/ready = 0
use_power = FALSE
var/obj/machinery/gateway/centeraway/stationgate = null
can_link = TRUE
/obj/machinery/gateway/centeraway/initialize()
/obj/machinery/gateway/centeraway/Initialize()
..()
update_icon()
stationgate = locate(/obj/machinery/gateway/centerstation)
@@ -190,31 +196,8 @@ var/obj/machinery/gateway/centerstation/the_gateway = null
return
icon_state = "offcenter"
/obj/machinery/gateway/centeraway/proc/detect()
linked = list() //clear the list
var/turf/T = loc
for(var/i in alldirs)
T = get_step(loc, i)
var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T
if(G)
linked.Add(G)
continue
//this is only done if we fail to find a part
ready = 0
toggleoff()
break
if(linked.len == 8)
ready = 1
/obj/machinery/gateway/centeraway/proc/toggleon(mob/user)
if(!ready)
return
if(linked.len != 8)
/obj/machinery/gateway/centeraway/toggleon(mob/user)
if(!detect())
return
if(!stationgate)
user << "<span class='notice'>Error: No destination found.</span>"
@@ -226,51 +209,21 @@ var/obj/machinery/gateway/centerstation/the_gateway = null
active = 1
update_icon()
/obj/machinery/gateway/centeraway/proc/toggleoff()
for(var/obj/machinery/gateway/G in linked)
G.active = 0
G.update_icon()
active = 0
update_icon()
/obj/machinery/gateway/centeraway/attack_hand(mob/user)
if(!ready)
detect()
return
if(!active)
toggleon(user)
return
toggleoff()
/obj/machinery/gateway/centeraway/Bumped(atom/movable/AM)
if(!ready)
if(!detect())
return
if(!active)
return
if(!stationgate || qdeleted(stationgate))
return
if(istype(AM, /mob/living/carbon))
for(var/obj/item/weapon/implant/exile/E in AM)//Checking that there is an exile implant in the contents
if(E.imp_in == AM)//Checking that it's actually implanted vs just in their pocket
AM << "\black The station gate has detected your exile implant and is blocking your entry."
return
var/mob/living/carbon/C = AM
for(var/obj/item/weapon/implant/exile/E in C.implants)//Checking that there is an exile implant
AM << "\black The station gate has detected your exile implant and is blocking your entry."
return
AM.forceMove(get_step(stationgate.loc, SOUTH))
AM.setDir(SOUTH)
if (ismob(AM))
var/mob/M = AM
if (M.client)
M.client.move_delay = max(world.time + 5, M.client.move_delay)
/obj/machinery/gateway/centeraway/attackby(obj/item/device/W, mob/user, params)
if(istype(W,/obj/item/device/multitool))
if(calibrated)
user << "\black The gate is already calibrated, there is no work for you to do here."
return
else
user << "<span class='boldnotice'>Recalibration successful!</span>: \black This gate's systems have been fine tuned. Travel to this gate will now be on target."
calibrated = 1
return
+13 -10
View File
@@ -41,8 +41,9 @@ var/global/dmm_suite/preloader/_preloader = new
var/list/grid_models = list()
var/key_len = 0
dmmRegex.next = 1
while(dmmRegex.Find(tfile, dmmRegex.next))
var/stored_index = 1
while(dmmRegex.Find(tfile, stored_index))
stored_index = dmmRegex.next
// "aa" = (/type{vars=blah})
if(dmmRegex.group[1]) // Model
@@ -241,6 +242,8 @@ var/global/dmm_suite/preloader/_preloader = new
while(!ispath(members[first_turf_index],/turf)) //find first /turf object in members
first_turf_index++
//turn off base new Initialization until the whole thing is loaded
SSobj.map_loader_begin()
//instanciate the first /turf
var/turf/T
if(members[first_turf_index] != /turf/template_noop)
@@ -258,7 +261,14 @@ var/global/dmm_suite/preloader/_preloader = new
//finally instance all remainings objects/mobs
for(index in 1 to first_turf_index-1)
instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)
CHECK_TICK
//custom CHECK_TICK here because we don't want things created while we're sleeping to not initialize
if(world.tick_usage > CURRENT_TICKLIMIT)
SSobj.map_loader_stop()
stoplag()
SSobj.map_loader_begin()
//Restore initialization to the previous value
SSobj.map_loader_stop()
////////////////
//Helpers procs
@@ -361,13 +371,6 @@ var/global/dmm_suite/preloader/_preloader = new
return to_return
//atom creation method that preloads variables at creation
/atom/New()
if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New()
_preloader.load(src)
. = ..()
/dmm_suite/Destroy()
..()
return QDEL_HINT_HARDDEL_NOW
+13 -13
View File
@@ -1,4 +1,4 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/*
SwapMaps library by Lummox JR
@@ -509,7 +509,7 @@ var/swapmaps_initialized
var/swapmaps_loaded
var/swapmaps_byname
proc/InitializeSwapMaps()
/proc/InitializeSwapMaps()
if(swapmaps_initialized) return
swapmaps_initialized=1
swapmaps_compiled_maxx=world.maxx
@@ -523,16 +523,16 @@ proc/InitializeSwapMaps()
// so you can look up an icon file by name or vice-versa
swapmaps_iconcache[swapmaps_iconcache[V]]=V
proc/SwapMaps_AddIconToCache(name,icon)
/proc/SwapMaps_AddIconToCache(name,icon)
if(!swapmaps_iconcache) swapmaps_iconcache=list()
swapmaps_iconcache[name]=icon
swapmaps_iconcache[icon]=name
proc/SwapMaps_Find(id)
/proc/SwapMaps_Find(id)
InitializeSwapMaps()
return swapmaps_byname[id]
proc/SwapMaps_Load(id)
/proc/SwapMaps_Load(id)
InitializeSwapMaps()
var/swapmap/M=swapmaps_byname[id]
if(!M)
@@ -553,29 +553,29 @@ proc/SwapMaps_Load(id)
M.mode=text
return M
proc/SwapMaps_Save(id)
/proc/SwapMaps_Save(id)
InitializeSwapMaps()
var/swapmap/M=swapmaps_byname[id]
if(M) M.Save()
return M
proc/SwapMaps_Save_All()
/proc/SwapMaps_Save_All()
InitializeSwapMaps()
for(var/swapmap/M in swapmaps_loaded)
if(M) M.Save()
proc/SwapMaps_Unload(id)
/proc/SwapMaps_Unload(id)
InitializeSwapMaps()
var/swapmap/M=swapmaps_byname[id]
if(!M) return // return silently from an error
M.Unload()
return 1
proc/SwapMaps_DeleteFile(id)
/proc/SwapMaps_DeleteFile(id)
fdel("map_[id].sav")
fdel("map_[id].txt")
proc/SwapMaps_CreateFromTemplate(template_id)
/proc/SwapMaps_CreateFromTemplate(template_id)
var/swapmap/M=new
var/savefile/S
var/text=0
@@ -602,7 +602,7 @@ proc/SwapMaps_CreateFromTemplate(template_id)
while(M.locked) sleep(1)
return M
proc/SwapMaps_LoadChunk(chunk_id,turf/locorner)
/proc/SwapMaps_LoadChunk(chunk_id,turf/locorner)
var/swapmap/M=new
var/savefile/S
var/text=0
@@ -629,7 +629,7 @@ proc/SwapMaps_LoadChunk(chunk_id,turf/locorner)
qdel(M)
return 1
proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2)
/proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2)
if(!corner1 || !corner2)
world.log << "SwapMaps error in SwapMaps_SaveChunk():"
if(!corner1) world.log << " corner1 turf is null"
@@ -650,7 +650,7 @@ proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2)
qdel(M)
return 1
proc/SwapMaps_GetSize(id)
/proc/SwapMaps_GetSize(id)
var/savefile/S
var/text=0
if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[id].txt"))
@@ -1,32 +1,3 @@
//Academy Areas
/area/awaymission/academy
name = "Academy Asteroids"
icon_state = "away"
/area/awaymission/academy/headmaster
name = "Academy Fore Block"
icon_state = "away1"
/area/awaymission/academy/classrooms
name = "Academy Classroom Block"
icon_state = "away2"
/area/awaymission/academy/academyaft
name = "Academy Ship Aft Block"
icon_state = "away3"
/area/awaymission/academy/academygate
name = "Academy Gateway"
icon_state = "away4"
/area/awaymission/academy/academycellar
name = "Academy Cellar"
icon_state = "away4"
/area/awaymission/academy/academyengine
name = "Academy Engine"
icon_state = "away4"
//Academy Items
@@ -57,17 +28,22 @@
icon = 'icons/obj/cult.dmi'
icon_state = "forge"
anchored = 1
var/health = 200
obj_integrity = 200
max_integrity = 200
var/mob/living/current_wizard = null
var/next_check = 0
var/cooldown = 600
var/faction = "wizard"
var/broken = 0
var/braindead_check = 0
/obj/structure/academy_wizard_spawner/New()
START_PROCESSING(SSobj, src)
/obj/structure/academy_wizard_spawner/Destroy()
if(!broken)
STOP_PROCESSING(SSobj, src)
return ..()
/obj/structure/academy_wizard_spawner/process()
if(next_check < world.time)
if(!current_wizard)
@@ -91,7 +67,7 @@
if(!current_wizard)
return
spawn(0)
var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as Wizard Academy Defender?", "wizard", null, ROLE_WIZARD)
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as Wizard Academy Defender?", "wizard", null, ROLE_WIZARD, current_wizard)
var/mob/dead/observer/chosen = null
if(candidates.len)
@@ -121,34 +97,18 @@
wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt)
wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile)
wizmind.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball)
wizmind.AddSpell(new /obj/effect/proc_holder/spell/fireball)
current_wizard = wizbody
give_control()
/obj/structure/academy_wizard_spawner/proc/update_status()
if(health<0)
/obj/structure/academy_wizard_spawner/deconstruct(disassembled = TRUE)
if(!broken)
broken = 1
visible_message("<span class='warning'>[src] breaks down!</span>")
icon_state = "forge_off"
STOP_PROCESSING(SSobj, src)
broken = 1
/obj/structure/academy_wizard_spawner/attackby(obj/item/weapon/W, mob/living/user, params)
add_fingerprint(user)
user.changeNext_move(CLICK_CD_MELEE)
if(!broken)
health -= W.force
update_status()
..()
/obj/structure/academy_wizard_spawner/bullet_act(obj/item/projectile/Proj)
if(!broken)
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
health -= Proj.damage
update_status()
..()
return
/datum/outfit/wizard/academy
name = "Academy Wizard"
@@ -163,9 +123,9 @@
desc = "A die with twenty sides. You can feel unearthly energies radiating from it. Using this might be VERY risky."
icon_state = "d20"
sides = 20
can_be_rigged = FALSE
var/reusable = 1
var/used = 0
var/rigged = -1
/obj/item/weapon/dice/d20/fate/one_use
reusable = 0
@@ -176,7 +136,7 @@
if(!ishuman(user) || !user.mind || (user.mind in ticker.mode.wizards))
user << "<span class='warning'>You feel the magic of the dice is restricted to ordinary humans!</span>"
return
if(rigged > 0)
if(rigged)
effect(user,rigged)
else
effect(user,result)
@@ -253,7 +213,7 @@
new /obj/item/weapon/coin/gold(M)
if(14)
//Free Gun
new /obj/item/weapon/gun/projectile/revolver/mateba(get_turf(src))
new /obj/item/weapon/gun/ballistic/revolver/mateba(get_turf(src))
if(15)
//Random One-use spellbook
new /obj/item/weapon/spellbook/oneuse/random(get_turf(src))
@@ -266,7 +226,7 @@
servant_mind.objectives += O
servant_mind.transfer_to(H)
var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as [user.real_name] Servant?", "wizard")
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [user.real_name] Servant?", "wizard", mob = H)
var/mob/dead/observer/chosen = null
if(candidates.len)
+34 -48
View File
@@ -1,74 +1,56 @@
/*Cabin areas*/
/area/awaymission/snowforest
name = "Snow Forest"
icon_state = "away"
requires_power = 0
luminosity = 1
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
/area/awaymission/cabin
name = "Cabin"
icon_state = "away2"
requires_power = 1
luminosity = 0
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
/area/awaymission/snowforest/lumbermill
name = "Lumbermill"
icon_state = "away3"
/*Cabin code*/
/obj/structure/fireplace
name = "fireplace"
/obj/structure/firepit
name = "firepit"
desc = "warm and toasty"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "fireplace-active"
icon = 'icons/obj/fireplace.dmi'
icon_state = "firepit-active"
density = 0
var/active = 1
/obj/structure/fireplace/initialize()
/obj/structure/firepit/Initialize()
..()
toggleFireplace()
toggleFirepit()
/obj/structure/fireplace/attack_hand(mob/living/user)
/obj/structure/firepit/attack_hand(mob/living/user)
if(active)
active = 0
toggleFireplace()
toggleFirepit()
else
..()
/obj/structure/fireplace/attackby(obj/item/W,mob/living/user,params)
/obj/structure/firepit/attackby(obj/item/W,mob/living/user,params)
if(!active)
if(W.is_hot())
active = 1
toggleFireplace()
var/msg = W.ignition_effect(src, user)
if(msg)
active = TRUE
visible_message(msg)
toggleFirepit()
else
return ..()
else
W.fire_act()
/obj/structure/fireplace/proc/toggleFireplace()
/obj/structure/firepit/proc/toggleFirepit()
if(active)
set_light(8)
icon_state = "fireplace-active"
SetLuminosity(8)
icon_state = "firepit-active"
else
set_light(0)
icon_state = "fireplace"
SetLuminosity(0)
icon_state = "firepit"
/obj/structure/fireplace/extinguish()
/obj/structure/firepit/extinguish()
if(active)
active = 0
toggleFireplace()
active = FALSE
toggleFirepit()
/obj/structure/fireplace/fire_act()
/obj/structure/firepit/fire_act(exposed_temperature, exposed_volume)
if(!active)
active = 1
toggleFireplace()
active = TRUE
toggleFirepit()
//other Cabin Stuff//
/obj/machinery/recycler/lumbermill
name = "lumbermill saw"
@@ -96,7 +78,8 @@
/*Cabin's forest*/
/datum/mapGenerator/snowy
modules = list(/datum/mapGeneratorModule/snow/pineTrees, \
modules = list(/datum/mapGeneratorModule/bottomlayer/snow, \
/datum/mapGeneratorModule/snow/pineTrees, \
/datum/mapGeneratorModule/snow/deadTrees, \
/datum/mapGeneratorModule/snow/randBushes, \
/datum/mapGeneratorModule/snow/randIceRocks, \
@@ -107,6 +90,9 @@
return ..(T)
return 0
/datum/mapGeneratorModule/bottomlayer/snow
spawnableTurfs = list(/turf/open/floor/plating/asteroid/snow/atmosphere = 100)
/datum/mapGeneratorModule/snow/pineTrees
spawnableAtoms = list(/obj/structure/flora/tree/pine = 30)
@@ -1,22 +0,0 @@
//Packer Ship Areas
/area/awaymission/BMPship
name = "BMP Asteroids"
icon_state = "away"
luminosity = 0
/area/awaymission/BMPship/Aft
name = "Aft Block"
icon_state = "away1"
requires_power = 1
/area/awaymission/BMPship/Midship
name = "Midship Block"
icon_state = "away2"
requires_power = 1
/area/awaymission/BMPship/Fore
name = "Fore Block"
icon_state = "away3"
requires_power = 1
@@ -1,38 +1,4 @@
//centcomAway areas
/area/awaymission/centcomAway
name = "XCC-P5831"
icon_state = "away"
requires_power = 0
/area/awaymission/centcomAway/general
name = "XCC-P5831"
music = "music/ambigen3.ogg"
/area/awaymission/centcomAway/maint
name = "XCC-P5831 Maintenance"
icon_state = "away1"
music = "music/ambisin1.ogg"
/area/awaymission/centcomAway/thunderdome
name = "XCC-P5831 Thunderdome"
icon_state = "away2"
music = "music/ambisin2.ogg"
/area/awaymission/centcomAway/cafe
name = "XCC-P5831 Kitchen Arena"
icon_state = "away3"
music = "music/ambisin3.ogg"
/area/awaymission/centcomAway/courtroom
name = "XCC-P5831 Courtroom"
icon_state = "away4"
music = "music/ambisin4.ogg"
/area/awaymission/centcomAway/hangar
name = "XCC-P5831 Hangars"
icon_state = "away4"
music = "music/ambigen5.ogg"
//centcomAway items
@@ -1,19 +1,3 @@
//Challenge Areas
/area/awaymission/challenge/start
name = "Where Am I?"
icon_state = "away"
/area/awaymission/challenge/main
name = "Danger Room"
icon_state = "away1"
requires_power = 0
/area/awaymission/challenge/end
name = "Administration"
icon_state = "away2"
requires_power = 0
/obj/machinery/power/emitter/energycannon
name = "Energy Cannon"
@@ -22,6 +6,7 @@
icon_state = "emitter"
anchored = 1
density = 1
resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF
use_power = 0
idle_power_usage = 0
@@ -1,64 +0,0 @@
//Research Base Areas//--
/area/awaymission/research
name = "Research Outpost"
icon_state = "away"
luminosity = 0
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
/area/awaymission/research/interior
name = "Research Inside"
requires_power = 1
icon_state = "away2"
/area/awaymission/research/interior/cryo
name = "Research Cryostasis Room"
icon_state = "medbay"
/area/awaymission/research/interior/clonestorage
name = "Research Clone Storage"
icon_state = "cloning"
/area/awaymission/research/interior/genetics
name = "Research Genetics Research"
icon_state = "genetics"
/area/awaymission/research/interior/engineering
name = "Research Engineering"
icon_state = "engine"
/area/awaymission/research/interior/security
name = "Research Security"
icon_state = "security"
/area/awaymission/research/interior/secure
name = "Research Secure Vault"
/area/awaymission/research/interior/maint
name = "Research Maintenance"
icon_state = "maintcentral"
/area/awaymission/research/interior/dorm
name = "Research Dorms"
icon_state = "Sleep"
/area/awaymission/research/interior/escapepods
name = "Research Escape Wing"
icon_state = "exit"
/area/awaymission/research/interior/gateway
name = "Research Gateway"
icon_state = "start"
/area/awaymission/research/interior/bathroom
name = "Research Bathrooms"
icon_state = "restrooms"
/area/awaymission/research/interior/medbay
name = "Research Medbay"
icon_state = "medbay"
/area/awaymission/research/exterior
name = "Research Exterior"
icon_state = "unknown"
@@ -1,51 +1,15 @@
//Snow Valley Areas//--
/area/awaymission/snowdin
name = "Snowdin Tundra Plains"
icon_state = "away"
requires_power = 0
luminosity = 1
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
/area/awaymission/snowdin/post
name = "Snowdin Outpost"
requires_power = 1
/area/awaymission/snowdin/igloo
name = "Snowdin Igloos"
icon_state = "away2"
/area/awaymission/snowdin/cave
name = "Snowdin Caves"
icon_state = "away2"
luminosity = 0
/area/awaymission/snowdin/base
name = "Snowdin Main Base"
icon_state = "away3"
requires_power = 1
/area/awaymission/snowdin/dungeon1
name = "Snowdin Depths"
icon_state = "away2"
luminosity = 0
/area/awaymission/snowdin/sekret
name = "Snowdin Operations"
icon_state = "away3"
requires_power = 1
//notes for lore or treasure hints wow//--
/obj/item/weapon/paper/crumpled/snowdin/snowdingatewaynotice
name = "scribbled note"
info = {"The gateway has been inactive for months, engineers think its due to the recent drop in tempature fucking with the
info = {"The gateway has been inactive for months, engineers think it's due to the recent drop in tempature fucking with the
circuitry or something. Without a constant supply of resources from central command, our stock is getting awfully low. Some of the security members have taken to
using the sparse rifle ammo left to hunting some of the wildlife to try and keep our food supply from emptying. God forbid if the heating goes out, I don't want to
die as a fucking popsicle down here."}
/obj/item/weapon/paper/crumpled/snowdin/misc1
name = "Mission Prologe"
name = "Mission Prologue"
info = {"Holy shit, what a rush! Those Nanotrasen bastards didn't even know what hit 'em! All five of us dropped in right on the captain, didn't even have time to yell! We were in and out with that disk in mere minutes!
Crew didn't even know what was happening till the delta alert went down and by then were were already gone. We got a case to drink on the way home to celebrate, fuckin' job well done!"}
@@ -62,45 +26,45 @@
freezing shut along with a couple storage crates with supplies. Nothing on the radio so far, what the hell do they even expect to hear down here, anyway?<br><br><b>September 15th</b>
<br>Another supply shipment through the gateway, they've sent some heavier sets of clothes for the coming winter months. Central said they might encounter issues with shipments
during December to Feburary, so we should try to be frugal with the next shipment.<br><br><b>November 20th</b><br>Final shipment from central for the next few months. Going outside
for more than 10-15 minutes without losing feeling in your fingers is difficult. We've finally gotten a signal on the radio, its mostly some weird static though. One of the researchers is trying to decypher it.
<br><br><b>December 10th</b><br>Signal has gotten much stronger, it almost seems like its coming from under us according to what the researcher managed to decypher. We're waiting from the go from central before investigating.<br><br>
<i>The rest of the paper seems to be a mixture of scribles and smudged ink.</i> "}
for more than 10-15 minutes without losing feeling in your fingers is difficult. We've finally gotten a signal on the radio, it's mostly some weird static though. One of the researchers is trying to decypher it.
<br><br><b>December 10th</b><br>Signal has gotten much stronger, it almost seems like it's coming from under us according to what the researcher managed to decypher. We're waiting from the go from central before investigating.<br><br>
<i>The rest of the paper seems to be a mixture of scribbles and smudged ink.</i> "}
/obj/item/weapon/paper/snowdin/snowdinlog2
name = "Activity Log"
info = {"<b><center>ACTIVITY LOG</b></center><br><br><b>June 14th</b><br>Movement to the second post is finally done. We're located on the most-southern area of the valley with a similar objective as the northen post.
Theres two mid-way stops on the eastern and western sides of the valley so movement inbetween bases isn't horrible. Not too big of a fan of relying on the northen base for
info = {"<b><center>ACTIVITY LOG</b></center><br><br><b>June 14th</b><br>Movement to the second post is finally done. We're located on the southernmost area of the valley with a similar objective as the northern post.
There are two mid-way stops on the eastern and western sides of the valley so movement in between bases isn't horrible. Not too big of a fan of relying on the northern base for
equal supply distribution, though.<br><br><b>August 27h</b><br>First shipment arrived finally, about 4 days after the gateway shipped. Insulation on these buildings is awful, thank god for the spare heaters at least.<br><br>
<b>September 20th</b><br>Another shipment arrival, standard shit. Our radios have been picking up a weird signal during the nights recently, we've sent the transcripts over to the northen
<b>September 20th</b><br>Another shipment arrival, standard shit. Our radios have been picking up a weird signal during the nights recently, we've sent the transcripts over to the northern
base to be decyphered. Probably some drunk russians or something equally stupid.<br><br><b>November 24th</b><br>We've lost communications with the northern base after recieving the last
shipment of supplies. The snow has really kicked up recently, shits almost like a constant blizzard right now. Maybe it'll drop down soon so we can get a word in.<br><br>
<i>The rest of the paper seems to be a mixture of scribles and smudged ink.</i> "}
<i>The rest of the paper seems to be a mixture of scribbles and smudged ink.</i> "}
obj/item/weapon/paper/snowdin/secnotice
/obj/item/weapon/paper/snowdin/secnotice
name = "Security Notice"
info = {"You have been assigned a postion on a listening outpost. Here you'll be watching over a several crewmembers assigned to watching signals of the general area.
info = {"You have been assigned a position on a listening outpost. Here you'll be watching over several crewmembers assigned to watching signals of the general area.
As not much is expected in terms of issues, we've only assigned one guard per outpost. Crewmembers are expected to keep to their regulated work schedules and may be
disciplined properly if found slacking. Food hording is heavily discouraged as all outposts will be sharing from the same shipment every 2-3 months. Hording of supplies
disciplined properly if found slacking. Food hoarding is heavily discouraged as all outposts will be sharing from the same shipment every 2-3 months. Hoarding of supplies
should be punished severely as to prevent future incidients. Mutiny and/or rioting should be reported to central and dealt with swiftly. You're here to secure and protect
Nanotrasen assets, not be a police officer. Do what you must, but make sure its not messy."}
Nanotrasen assets, not be a police officer. Do what you must, but make sure it's not messy."}
obj/item/weapon/paper/snowdin/syndienotice
/obj/item/weapon/paper/snowdin/syndienotice
name = "Assignment Notice"
info = {"You've been assigned as an agent to listen in on Nanotrasen activities from passing ships and nearby stations. The outpost you've been assigned to is under lays of solid
ice and we've supplied you with a scrambler to help avoid Nanotrasen discovery, as they've recently built a listening post of their own aboveground. Get aquainted with your new
crewmates, because you're gonna be here for awhile. Enjoy the free syndicakes."}
obj/item/weapon/paper/crumpled/snowdin/syndielava
/obj/item/weapon/paper/crumpled/snowdin/syndielava
name = "scribbled note"
info = {"Some cracks in the ice nearby have exposed some sort of hidden magma stream under all this shit ice. I don't know whats worse at this point honestly; freezing to death or
burning alive."}
obj/item/weapon/paper/crumpled/snowdin/lootstructures
/obj/item/weapon/paper/crumpled/snowdin/lootstructures
name = "scribbled note"
info = {"From what we've seen so far, theres a ton of iced over ruins down here in the caves. We sent a few men out to check things out and they never came back, so we decided to
info = {"From what we've seen so far, theres a ton of iced-over ruins down here in the caves. We sent a few men out to check things out and they never came back, so we decided to
border up majority of the ruins. We've heard some weird shit coming out of these caves and I'm not gonna find out the hard way myself."}
obj/item/weapon/paper/crumpled/snowdin/shovel
/obj/item/weapon/paper/crumpled/snowdin/shovel
name = "shoveling duties"
info = {"Snow piles up bad here all-year round, even worse during the winter months. Keeping a constant rotation of shoveling that shit out of the way of the airlocks and keeping the paths decently clear
is a good step towards not getting stuck walking through knee-deep snow."}
@@ -166,7 +130,7 @@ obj/item/weapon/paper/crumpled/snowdin/shovel
/obj/item/organ/brain/alien = 17,
/obj/item/weapon/twohanded/dualsaber = 15,
/obj/item/organ/heart/demon = 7,
/obj/item/weapon/gun/projectile/automatic/c20r/unrestricted = 16,
/obj/item/weapon/gun/ballistic/automatic/c20r/unrestricted = 16,
/obj/item/weapon/gun/magic/wand/resurrection/inert = 15,
/obj/item/weapon/gun/magic/wand/resurrection = 10,
/obj/item/device/radio/uplink/old = 2,
@@ -193,7 +157,7 @@ obj/item/weapon/paper/crumpled/snowdin/shovel
/obj/item/clothing/under/syndicate/coldres
name = "insulated tactical turtleneck"
desc = "A non-descript and slightly suspicious looking turtleneck with digital camouflage cargo pants. The interior has been padded with special insulation for both warmth and protection"
armor = list(melee = 20, bullet = 10, laser = 0,energy = 5, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 20, bullet = 10, laser = 0,energy = 5, bomb = 0, bio = 0, rad = 0, fire = 25, acid = 25)
cold_protection = CHEST|GROIN|ARMS|LEGS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
/obj/item/clothing/shoes/combat/coldres
@@ -220,16 +184,16 @@ obj/item/weapon/paper/crumpled/snowdin/shovel
hidden_uplink.name = "dusty radio"
hidden_uplink.telecrystals = 10
obj/effect/mob_spawn/human/syndicatesoldier/coldres
/obj/effect/mob_spawn/human/syndicatesoldier/coldres
name = "Syndicate Snow Operative"
uniform = /obj/item/clothing/under/syndicate/coldres
shoes = /obj/item/clothing/shoes/combat/coldres
radio = /obj/item/device/radio/headset/syndicate/alt
pocket1 = /obj/item/weapon/gun/projectile/automatic/pistol
pocket1 = /obj/item/weapon/gun/ballistic/automatic/pistol
pocket2 = /obj/item/weapon/card/id/syndicate
has_id = 0
obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive
/obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive
name = "sleeper"
mob_name = "Syndicate Snow Operative"
icon = 'icons/obj/Cryogenic2.dmi'
@@ -241,7 +205,7 @@ obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive
flavour_text = {"You are a syndicate operative recently awoken from cyrostatis in an underground outpost. Monitor Nanotrasen communications and record infomation. All intruders should be
disposed of swirfly to assure no gathered infomation is stolen or lost. Try not to wander too far from the outpost as the caves can be a deadly place even for a trained operative such as yourself."}
obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female
/obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female
mob_gender = FEMALE
//mobs//--
@@ -277,3 +241,4 @@ obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female
name = "icey rocks"
color = rgb(114,228,250)
@@ -1,33 +0,0 @@
//Spacebattle Areas
/area/awaymission/spacebattle
name = "Space Battle"
icon_state = "away"
requires_power = 0
/area/awaymission/spacebattle/cruiser
name = "Nanotrasen Cruiser"
/area/awaymission/spacebattle/syndicate1
name = "Syndicate Assault Ship 1"
/area/awaymission/spacebattle/syndicate2
name = "Syndicate Assault Ship 2"
/area/awaymission/spacebattle/syndicate3
name = "Syndicate Assault Ship 3"
/area/awaymission/spacebattle/syndicate4
name = "Syndicate War Sphere 1"
/area/awaymission/spacebattle/syndicate5
name = "Syndicate War Sphere 2"
/area/awaymission/spacebattle/syndicate6
name = "Syndicate War Sphere 3"
/area/awaymission/spacebattle/syndicate7
name = "Syndicate Fighter"
/area/awaymission/spacebattle/secret
name = "Hidden Chamber"
@@ -7,7 +7,6 @@
* for anyone who wants to make their own stuff.
*
* Contains:
* Areas
* Landmarks
* Guns
* Safe code hints
@@ -15,29 +14,6 @@
* Modified Nar-Sie
*/
/*
* Areas
*/
//Gateroom gets its own APC specifically for the gate
/area/awaymission/gateroom
//Library, medbay, storage room
/area/awaymission/southblock
//Arrivals, security, hydroponics, shuttles (since they dont move, they dont need specific areas)
/area/awaymission/arrivalblock
//Crew quarters, cafeteria, chapel
/area/awaymission/midblock
//engineering, bridge (not really north but it doesnt really need its own APC)
/area/awaymission/northblock
//That massive research room
/area/awaymission/research
//Syndicate shuttle
/area/awaymission/syndishuttle
/*
@@ -60,7 +36,7 @@
* Guns - I'm making these specifically so that I dont spawn a pile of fully loaded weapons on the map.
*/
//Captain's retro laser - Fires practice laser shots instead.
obj/item/weapon/gun/energy/laser/retro/sc_retro
/obj/item/weapon/gun/energy/laser/retro/sc_retro
name ="retro laser"
icon_state = "retro"
desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces."
@@ -68,18 +44,18 @@ obj/item/weapon/gun/energy/laser/retro/sc_retro
clumsy_check = 0 //No sense in having a harmless gun blow up in the clowns face
//Syndicate sub-machine guns.
/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r
/obj/item/weapon/gun/ballistic/automatic/c20r/sc_c20r
/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r/New()
/obj/item/weapon/gun/ballistic/automatic/c20r/sc_c20r/New()
..()
for(var/ammo in magazine.stored_ammo)
if(prob(95)) //95% chance
magazine.stored_ammo -= ammo
//Barman's shotgun
/obj/item/weapon/gun/projectile/shotgun/sc_pump
/obj/item/weapon/gun/ballistic/shotgun/sc_pump
/obj/item/weapon/gun/projectile/shotgun/sc_pump/New()
/obj/item/weapon/gun/ballistic/shotgun/sc_pump/New()
..()
for(var/ammo in magazine.stored_ammo)
if(prob(95)) //95% chance
@@ -175,7 +151,7 @@ var/sc_safecode5 = "[rand(0,9)]"
/obj/singularity/narsie/sc_Narsie/consume(atom/A)
if(is_type_in_list(A, uneatable))
return 0
if (istype(A,/mob/living))
if(isliving(A))
var/mob/living/L = A
L.gib()
else if(istype(A,/obj/))
@@ -4,36 +4,6 @@
* Meat Grinder
*/
//Wild West Areas
/area/awaymission/wwmines
name = "Wild West Mines"
icon_state = "away1"
luminosity = 1
requires_power = 0
/area/awaymission/wwgov
name = "Wild West Mansion"
icon_state = "away2"
luminosity = 1
requires_power = 0
/area/awaymission/wwrefine
name = "Wild West Refinery"
icon_state = "away3"
luminosity = 1
requires_power = 0
/area/awaymission/wwvault
name = "Wild West Vault"
icon_state = "away3"
luminosity = 0
/area/awaymission/wwvaultdoors
name = "Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power
icon_state = "away2"
requires_power = 0
luminosity = 0
/*
* Wish Granter
@@ -58,7 +28,7 @@
user << "The Wish Granter lies silent."
return
else if(!istype(user, /mob/living/carbon/human))
else if(!ishuman(user))
user << "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's."
return
@@ -100,10 +70,7 @@
hijack.owner = user.mind
user.mind.objectives += hijack
user << "<B>Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!</B>"
var/obj_count = 1
for(var/datum/objective/OBJ in user.mind.objectives)
user << "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]"
obj_count++
user.mind.announce_objectives()
user.set_species(/datum/species/shadow)
if("Peace")
user << "<B>Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence.</B>"
@@ -124,15 +91,15 @@
icon_state = "blobpod"
var/triggered = 0
/obj/effect/meatgrinder/Crossed(AM as mob|obj)
/obj/effect/meatgrinder/Crossed(AM)
Bumped(AM)
/obj/effect/meatgrinder/Bumped(mob/M as mob|obj)
/obj/effect/meatgrinder/Bumped(mob/M)
if(triggered)
return
if(istype(M, /mob/living/carbon/human) && M.stat != DEAD && M.ckey)
if(ishuman(M) && M.stat != DEAD && M.ckey)
for(var/mob/O in viewers(world.view, src.loc))
visible_message("<span class='warning'>[M] triggered the [src]!</span>")
triggered = 1
+1 -1
View File
@@ -9,7 +9,7 @@
/obj/structure/signpost/New()
. = ..()
set_light(2)
SetLuminosity(2)
/obj/structure/signpost/attackby(obj/item/weapon/W, mob/user, params)
return attack_hand(user)
@@ -0,0 +1,121 @@
/obj/structure/speaking_tile
name = "strange tile"
desc = "A weird tile that beckons you towards it. Maybe it can help you get out of this mess..."
verb_say = "intones"
icon = 'icons/obj/structures.dmi'
icon_state = "speaking_tile"
layer = 5
var/speaking = FALSE
var/times_spoken_to = 0
var/list/shenanigans = list()
/obj/structure/speaking_tile/New()
var/savefile/S = new /savefile("data/npc_saves/Poly.sav")
S["phrases"] >> shenanigans
..()
/obj/structure/speaking_tile/interact(mob/user)
if(!isliving(user) || speaking)
return
speaking = TRUE
switch(times_spoken_to)
if(0)
SpeakPeace(list("Welcome to the error handling room.","Something's goofed up bad to send you here.","You should probably tell an admin what you were doing, or make a bug report."))
for(var/obj/structure/signpost/salvation/S in orange(7))
S.invisibility = 0
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(1, S.loc)
smoke.start()
break
if(1)
SpeakPeace(list("Take that ladder up.","It'll send you back to the station.","Hopefully you'll never need to see this place again."))
if(2)
SpeakPeace(list("Curious about what happened?","Somehow your corporeal form was sent to nullspace with you still in it.","Lucky for you this room exists to save you from that horrible fate."))
if(3)
SpeakPeace(list("So yeah, you're welcome.","Anyway don't you have things to do?","There's no real point to sticking around here forever."))
if(4)
SpeakPeace(list("I'm flattered you care this much about this room.","However it's not proper to just stand in here all shift and see what I'll say.","I'm going to work hard to be more boring so you'll leave."))
if(5 to 8)
SpeakPeace(list("..."))
if(9)
SpeakPeace(list("Alright maybe that's <b>too</b> boring.", "I can't keep manually typing these lines out though.", "It's hard to explain but the code structure I'm using is kind of terrible."))
if(10)
SpeakPeace(list("Oh I have an idea!", "Lets outsource this endless banter to Poly!", "Then you'll be able to keep listening to this without getting bored!"))
if(isnull(shenanigans))
shenanigans = list("Except the poly file is missing...")
if(11 to 14, 16 to 50, 52 to 99, 103 to 107, 109 to 203, 205 to 249, 252 to 665, 667 to 999, 1001 to 5642)
SpeakPeace(list(pick(shenanigans),pick(shenanigans),pick(shenanigans)))
if(times_spoken_to * 0.1 == round(times_spoken_to * 0.1))
SpeakPeace(list("That's [times_spoken_to] times you've spoken to me by the way."))
if(15)
SpeakPeace(list("See? Isn't this fun?","Now you can mash this for hours without getting bored.","Anyway I'll leave you it."))
if(51)
SpeakPeace(list("The fun never ends around here.", "The Poly text files stores up to 500 statements.", "But you've probably heard a few repeats by now."))
if(100)
SpeakPeace(list("And that's a solid hundred.", "Good hustle I guess.", "You've probably heard a lot of repeats by now."))
if(101)
SpeakPeace(list("I hope you're getting the reference this room is presenting.", "As well as the more obscure meta reference this conversation is presenting.", "This stuff has layers."))
if(102)
SpeakPeace(list("I am very tempted to just stretch this out forever.","It's technically easier than doing this.","Just an option."))
if(108)
SpeakPeace(list("But you have my respect for being this dedicated to the joke.", "So tell you what we're going to do, we're going to set a goal.", "250 is your final mission."))
if(204)
SpeakPeace(list("Notice how there was no special message at 200?", "The slow automation of what used to be meaningful milestones?","It's all part of the joke."))
if(250)
SpeakPeace(list("Congratulations.", "By my very loose calculations you've now wasted a decent chunk of the round doing this.", "But you've seen this meme to its conclusion, and that's a experience in itself, right?"))
if(251)
SpeakPeace(list("Anyway, here.", "I can't give you anything that would impact the progression of the round.","But you've earned this at least."))
var/obj/item/weapon/reagent_containers/food/drinks/trophy/silver_cup/the_ride = new(get_turf(user))
the_ride.name = "Overextending The Joke: Second Place"
the_ride.desc = "There's a point where this needed to stop, and we've clearly passed it."
if(252)
SpeakPeace(list("You know what this means right?", "Of course it's not over!", "The question becomes now is it more impressive to solider on to an unknown finish, or to have to common sense to stop here?"))
if(666)
SpeakPeace(list("The darkness in your heart won't be filled by simple platitudes.","You won't stop now, you're in this to the end.", "Will you reach the finish line before the round ends?"))
if(1000)
SpeakPeace(list("The ends exists somewhere beyond meaningful milestones.", "There will be no more messages until then.", "You disgust me."))
if(5643)
var/obj/item/weapon/reagent_containers/food/drinks/trophy/gold_cup/never_ends = new(get_turf(user))
never_ends.name = "Overextending The Joke: First Place"
never_ends.desc = "And so we are left alone with our regrets."
else
y += 2
speaking = FALSE
times_spoken_to++
/obj/structure/speaking_tile/proc/SpeakPeace(list/statements)
for(var/i in 1 to statements.len)
say("<span class='deadsay'>[statements[i]]</span>")
if(i != statements.len)
sleep(30)
/obj/item/rupee
name = "weird crystal"
desc = "Your excitement boils away as you realize it's just colored glass. Why would someone hoard these things?"
icon = 'icons/obj/economy.dmi'
icon_state = "rupee"
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_GLASS = 500)
/obj/item/rupee/New()
var/newcolor = color2hex(pick(10;"green", 5;"blue", 3;"red", 1;"purple"))
add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
..()
/obj/item/rupee/Crossed(mob/M)
if(!istype(M))
return
if(M.put_in_hands(src))
if(src != M.get_active_held_item())
M.swap_hand()
equip_to_best_slot(M)
..()
/obj/item/rupee/equipped(mob/user, slot)
playsound(get_turf(loc), 'sound/misc/server-ready.ogg', 50, 1, -1)
..()
/obj/effect/landmark/error
name = "error"
+45 -17
View File
@@ -7,24 +7,37 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
if(potentialRandomZlevels && potentialRandomZlevels.len)
world << "<span class='boldannounce'>Loading away mission...</span>"
var/map = pick(potentialRandomZlevels)
var/file = file(map)
if(isfile(file))
maploader.load_map(file)
smooth_zlevel(world.maxz)
world.log << "away mission loaded: [map]"
map_transition_config.Add(AWAY_MISSION_LIST)
for(var/obj/effect/landmark/L in landmarks_list)
if (L.name != "awaystart")
continue
awaydestinations.Add(L)
load_new_z_level(file)
world << "<span class='boldannounce'>Away mission loaded.</span>"
SortAreas() //To add recently loaded areas
/proc/load_new_z_level(var/file)
if(!isfile(file))
return FALSE
maploader.load_map(file)
smooth_zlevel(world.maxz)
SortAreas()
world.log << "loaded [file] as z-level [world.maxz]"
/proc/reset_gateway_spawns(reset = FALSE)
for(var/obj/machinery/gateway/G in world)
if(reset)
G.randomspawns = awaydestinations
else
G.randomspawns.Add(awaydestinations)
/obj/effect/landmark/awaystart
name = "away mission spawn"
desc = "Randomly picked away mission spawn points"
/obj/effect/landmark/awaystart/New()
awaydestinations += src
..()
/obj/effect/landmark/awaystart/Destroy()
awaydestinations -= src
..()
/proc/generateMapList(filename)
var/list/potentialMaps = list()
@@ -61,13 +74,26 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins = space_ruins_templates)
if(!z_levels || !z_levels.len)
z_levels = list(1)
WARNING("No Z levels provided - Not generating ruins")
return
for(var/zl in z_levels)
var/turf/T = locate(1, 1, zl)
if(!T)
WARNING("Z level [zl] does not exist - Not generating ruins")
return
var/overall_sanity = 100
var/ruins = potentialRuins.Copy()
var/list/ruins = potentialRuins.Copy()
while(budget > 0 && overall_sanity > 0)
// Pick a ruin
var/datum/map_template/ruin/ruin = ruins[pick(ruins)]
var/datum/map_template/ruin/ruin = null
if(ruins && ruins.len)
ruin = ruins[pick(ruins)]
else
world.log << "Ruin loader had no ruins to pick from with [budget] left to spend."
break
// Can we afford it
if(ruin.cost > budget)
overall_sanity--
@@ -127,6 +153,8 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
var/turf/T = i
for(var/mob/living/simple_animal/monster in T)
qdel(monster)
for(var/obj/structure/flora/ash/plant in T)
qdel(plant)
template.load(central_turf,centered = TRUE)
template.loaded++
var/datum/map_template/ruin = template