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:
@@ -0,0 +1,226 @@
|
||||
|
||||
#define A_BIG_NUMBER 9999999
|
||||
#define STATE_COUNT_NORMAL 4
|
||||
#define STATE_COUNT_DIAGONAL 7
|
||||
|
||||
|
||||
/mob/verb/ChooseDMI(dmi as file)
|
||||
var/dmifile = file(dmi)
|
||||
if(isfile(dmifile) && (copytext("[dmifile]",-4) == ".dmi"))
|
||||
SliceNDice(dmifile)
|
||||
else
|
||||
world << "\red Bad DMI file '[dmifile]'"
|
||||
|
||||
|
||||
/proc/SliceNDice(dmifile as file)
|
||||
var/icon/sourceIcon = icon(dmifile)
|
||||
var/list/states = sourceIcon.IconStates()
|
||||
world << "<B>[dmifile] - states: [states.len]</B>"
|
||||
|
||||
switch(states.len)
|
||||
if(0 to (STATE_COUNT_NORMAL - 1))
|
||||
var/cont = alert(usr, "Too few states: [states.len], expected [STATE_COUNT_NORMAL] (Non-Diagonal) or [STATE_COUNT_DIAGONAL] (Diagonal), Continue?", "Unexpected Amount of States", "Yes", "No")
|
||||
if(cont == "No")
|
||||
return
|
||||
if(STATE_COUNT_NORMAL)
|
||||
world << "4 States, running in Non-Diagonal mode"
|
||||
if(STATE_COUNT_DIAGONAL)
|
||||
world << "5 States, running in Diagonal mode"
|
||||
if((STATE_COUNT_DIAGONAL + 1) to A_BIG_NUMBER)
|
||||
var/cont = alert(usr, "Too many states: [states.len], expected [STATE_COUNT_NORMAL] (Non-Diagonal) or [STATE_COUNT_DIAGONAL] (Diagonal), Continue?", "Unexpected Amount of States", "Yes", "No")
|
||||
if(cont == "No")
|
||||
return
|
||||
|
||||
|
||||
var/icon/outputIcon = new /icon()
|
||||
|
||||
var/filename = "[copytext("[dmifile]", 1, -4)]-smooth.dmi"
|
||||
fdel(filename) //force refresh
|
||||
|
||||
for(var/state in states)
|
||||
var/statename = lowertext(state)
|
||||
outputIcon = icon(filename) //open the icon again each iteration, to work around byond memory limits
|
||||
|
||||
switch(statename)
|
||||
if("box")
|
||||
var/icon/box = icon(sourceIcon, state)
|
||||
|
||||
var/icon/corner1i = icon(box)
|
||||
corner1i.DrawBox(null, 1, 1, 32, 16)
|
||||
corner1i.DrawBox(null, 17, 1, 32, 32)
|
||||
outputIcon.Insert(corner1i, "1-i")
|
||||
|
||||
var/icon/corner2i = icon(box)
|
||||
corner2i.DrawBox(null, 1, 1, 16, 32)
|
||||
corner2i.DrawBox(null, 17, 1, 32, 16)
|
||||
outputIcon.Insert(corner2i, "2-i")
|
||||
|
||||
var/icon/corner3i = icon(box)
|
||||
corner3i.DrawBox(null, 1, 32, 32, 17)
|
||||
corner3i.DrawBox(null, 17, 32, 32, 1)
|
||||
outputIcon.Insert(corner3i, "3-i")
|
||||
|
||||
var/icon/corner4i = icon(box)
|
||||
corner4i.DrawBox(null, 1, 1, 16, 32)
|
||||
corner4i.DrawBox(null, 17, 17, 32, 32)
|
||||
outputIcon.Insert(corner4i, "4-i")
|
||||
|
||||
world << "Box: \icon[box] -> \icon[corner1i] \icon[corner2i] \icon[corner3i] \icon[corner4i]"
|
||||
|
||||
if("line")
|
||||
var/icon/line = icon(sourceIcon, state)
|
||||
|
||||
//Vertical
|
||||
var/icon/line1n = icon(line)
|
||||
line1n.DrawBox(null, 1, 1, 32, 16)
|
||||
line1n.DrawBox(null, 17, 1, 32, 32)
|
||||
outputIcon.Insert(line1n, "1-n")
|
||||
|
||||
var/icon/line2n = icon(line)
|
||||
line2n.DrawBox(null, 1, 1, 16, 32)
|
||||
line2n.DrawBox(null, 17, 1, 32, 16)
|
||||
outputIcon.Insert(line2n, "2-n")
|
||||
|
||||
var/icon/line3s = icon(line)
|
||||
line3s.DrawBox(null, 1, 32, 32, 17)
|
||||
line3s.DrawBox(null, 17, 32, 32, 1)
|
||||
outputIcon.Insert(line3s, "3-s")
|
||||
|
||||
var/icon/line4s = icon(line)
|
||||
line4s.DrawBox(null, 1, 1, 16, 32)
|
||||
line4s.DrawBox(null, 17, 17, 32, 32)
|
||||
outputIcon.Insert(line4s, "4-s")
|
||||
|
||||
//Horizontal
|
||||
var/icon/line1w = icon(line3s) //Correct
|
||||
line1w.Turn(90)
|
||||
outputIcon.Insert(line1w, "1-w")
|
||||
|
||||
var/icon/line2e = icon(line1n)
|
||||
line2e.Turn(90)
|
||||
outputIcon.Insert(line2e, "2-e")
|
||||
|
||||
var/icon/line3w = icon(line4s)
|
||||
line3w.Turn(90)
|
||||
outputIcon.Insert(line3w, "3-w")
|
||||
|
||||
var/icon/line4e = icon(line2n)
|
||||
line4e.Turn(90)
|
||||
outputIcon.Insert(line4e, "4-e")
|
||||
|
||||
world << "Line: \icon[line] -> \icon[line1n] \icon[line2n] \icon[line3s] \icon[line4s] \icon[line1w] \icon[line2e] \icon[line3w] \icon[line4e]"
|
||||
|
||||
if("center_4")
|
||||
var/icon/center4 = icon(sourceIcon, state)
|
||||
|
||||
var/icon/corner1nw = icon(center4)
|
||||
corner1nw.DrawBox(null, 1, 1, 32, 16)
|
||||
corner1nw.DrawBox(null, 17, 1, 32, 32)
|
||||
outputIcon.Insert(corner1nw, "1-nw")
|
||||
|
||||
var/icon/corner2ne = icon(center4)
|
||||
corner2ne.DrawBox(null, 1, 1, 16, 32)
|
||||
corner2ne.DrawBox(null, 17, 1, 32, 16)
|
||||
outputIcon.Insert(corner2ne, "2-ne")
|
||||
|
||||
var/icon/corner3sw = icon(center4)
|
||||
corner3sw.DrawBox(null, 1, 32, 32, 17)
|
||||
corner3sw.DrawBox(null, 17, 32, 32, 1)
|
||||
outputIcon.Insert(corner3sw, "3-sw")
|
||||
|
||||
var/icon/corner4se = icon(center4)
|
||||
corner4se.DrawBox(null, 1, 1, 16, 32)
|
||||
corner4se.DrawBox(null, 17, 17, 32, 32)
|
||||
outputIcon.Insert(corner4se, "4-se")
|
||||
|
||||
world << "Center4: \icon[center4] -> \icon[corner1nw] \icon[corner2ne] \icon[corner3sw] \icon[corner4se]"
|
||||
|
||||
if("center_8")
|
||||
var/icon/center8 = icon(sourceIcon, state)
|
||||
|
||||
var/icon/corner1f = icon(center8)
|
||||
corner1f.DrawBox(null, 1, 1, 32, 16)
|
||||
corner1f.DrawBox(null, 17, 1, 32, 32)
|
||||
outputIcon.Insert(corner1f, "1-f")
|
||||
|
||||
var/icon/corner2f = icon(center8)
|
||||
corner2f.DrawBox(null, 1, 1, 16, 32)
|
||||
corner2f.DrawBox(null, 17, 1, 32, 16)
|
||||
outputIcon.Insert(corner2f, "2-f")
|
||||
|
||||
var/icon/corner3f = icon(center8)
|
||||
corner3f.DrawBox(null, 1, 32, 32, 17)
|
||||
corner3f.DrawBox(null, 17, 32, 32, 1)
|
||||
outputIcon.Insert(corner3f, "3-f")
|
||||
|
||||
var/icon/corner4f = icon(center8)
|
||||
corner4f.DrawBox(null, 1, 1, 16, 32)
|
||||
corner4f.DrawBox(null, 17, 17, 32, 32)
|
||||
outputIcon.Insert(corner4f, "4-f")
|
||||
|
||||
world << "Center8: \icon[center8] -> \icon[corner1f] \icon[corner2f] \icon[corner3f] \icon[corner4f]"
|
||||
|
||||
if("diag")
|
||||
var/icon/diag = icon(sourceIcon, state)
|
||||
|
||||
var/icon/diagse = icon(diag) //No work
|
||||
outputIcon.Insert(diagse, "d-se")
|
||||
|
||||
var/icon/diagsw = icon(diag)
|
||||
diagsw.Turn(90)
|
||||
outputIcon.Insert(diagsw, "d-sw")
|
||||
|
||||
var/icon/diagne = icon(diag)
|
||||
diagne.Turn(-90)
|
||||
outputIcon.Insert(diagne, "d-ne")
|
||||
|
||||
var/icon/diagnw = icon(diag)
|
||||
diagnw.Turn(180)
|
||||
outputIcon.Insert(diagnw, "d-nw")
|
||||
|
||||
world << "Diag: \icon[diag] -> \icon[diagse] \icon[diagsw] \icon[diagne] \icon[diagnw]"
|
||||
|
||||
if("diag_corner_a")
|
||||
var/icon/diag_corner_a = icon(sourceIcon, state)
|
||||
|
||||
var/icon/diagse0 = icon(diag_corner_a) //No work
|
||||
outputIcon.Insert(diagse0, "d-se-0")
|
||||
|
||||
var/icon/diagsw0 = icon(diag_corner_a)
|
||||
diagsw0.Turn(90)
|
||||
outputIcon.Insert(diagsw0, "d-sw-0")
|
||||
|
||||
var/icon/diagne0 = icon(diag_corner_a)
|
||||
diagne0.Turn(-90)
|
||||
outputIcon.Insert(diagne0, "d-ne-0")
|
||||
|
||||
var/icon/diagnw0 = icon(diag_corner_a)
|
||||
diagnw0.Turn(180)
|
||||
outputIcon.Insert(diagnw0, "d-nw-0")
|
||||
|
||||
world << "Diag_Corner_A: \icon[diag_corner_a] -> \icon[diagse0] \icon[diagsw0] \icon[diagne0] \icon[diagnw0]"
|
||||
|
||||
if("diag_corner_b")
|
||||
var/icon/diag_corner_b = icon(sourceIcon, state)
|
||||
|
||||
var/icon/diagse1 = icon(diag_corner_b) //No work
|
||||
outputIcon.Insert(diagse1, "d-se-0")
|
||||
|
||||
var/icon/diagsw1 = icon(diag_corner_b)
|
||||
diagsw1.Turn(90)
|
||||
outputIcon.Insert(diagsw1, "d-sw-0")
|
||||
|
||||
var/icon/diagne1 = icon(diag_corner_b)
|
||||
diagne1.Turn(-90)
|
||||
outputIcon.Insert(diagne1, "d-ne-0")
|
||||
|
||||
var/icon/diagnw1 = icon(diag_corner_b)
|
||||
diagnw1.Turn(180)
|
||||
outputIcon.Insert(diagnw1, "d-nw-0")
|
||||
|
||||
world << "Diag_Corner_B: \icon[diag_corner_b] -> \icon[diagse1] \icon[diagsw1] \icon[diagne1] \icon[diagnw1]"
|
||||
|
||||
|
||||
|
||||
fcopy(outputIcon, filename) //Update output icon each iteration
|
||||
world << "Finished [filename]!"
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 474 B |
Binary file not shown.
|
After Width: | Height: | Size: 253 B |
@@ -0,0 +1,19 @@
|
||||
// DM Environment file for SS13SmoothingCutter.dme.
|
||||
// All manual changes should be made outside the BEGIN_ and END_ blocks.
|
||||
// New source code should be placed in .dm files: choose File/New --> Code File.
|
||||
|
||||
// BEGIN_INTERNALS
|
||||
// END_INTERNALS
|
||||
|
||||
// BEGIN_FILE_DIR
|
||||
#define FILE_DIR .
|
||||
// END_FILE_DIR
|
||||
|
||||
// BEGIN_PREFERENCES
|
||||
#define DEBUG
|
||||
// END_PREFERENCES
|
||||
|
||||
// BEGIN_INCLUDE
|
||||
#include "Cutter.dm"
|
||||
// END_INCLUDE
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 570 B |
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,102 @@
|
||||
|
||||
# Unquoted List Association Locater and Reporter, by RemieRichards V1.0 - 26/11/16
|
||||
# list("string" = value) is valid in DM
|
||||
# unfortunately, so is list(string = value) (Notice the lack of quotes? BAD BAD, it conflicts with var names!)
|
||||
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
from datetime import date
|
||||
|
||||
|
||||
#Climbs up from /tools/UnquotedListAssociations and along to ../code
|
||||
scan_dir = "code" #used later to truncate log file paths
|
||||
real_dir = os.path.abspath("../../"+scan_dir)
|
||||
define_dict = {}
|
||||
total_unquoted_list_associations = 0
|
||||
log_output = True #Set to false for mad speeeeeed (slightly faster because no text output to the window, but still full log files)
|
||||
|
||||
|
||||
#Scan a directory, scanning any dm files it finds
|
||||
def unquoted_list_associations_scan_dir(scan_dir):
|
||||
global total_unquoted_list_associations
|
||||
if os.path.exists(scan_dir):
|
||||
if os.path.isdir(scan_dir):
|
||||
build_define_dictionary(scan_dir)
|
||||
|
||||
output_str = ""
|
||||
|
||||
files_scanned = 0
|
||||
files_with_named_list_args = 0
|
||||
for root, dirs, files in os.walk(scan_dir):
|
||||
for f in files:
|
||||
if log_output:
|
||||
print str(f)
|
||||
scan_result = scan_dm_file_for_unquoted_list_associations(os.path.join(root, f))
|
||||
files_scanned += 1
|
||||
if scan_result:
|
||||
output_str += scan_result+"\n"
|
||||
files_with_named_list_args += 1
|
||||
output_str += str(files_with_named_list_args) + "/" + str(files_scanned) + " files have Unquoted List Associations in them"
|
||||
output_str += "\nThere are " + str(total_unquoted_list_associations) + " total Unquoted List Associations"
|
||||
|
||||
todays_file = str(date.today())+"-unquoted_list_associations_log.txt"
|
||||
output_file = open(todays_file, "w") #w so it overrides existing files for today, there should only really be one file per day
|
||||
output_file.write(output_str)
|
||||
|
||||
|
||||
#Scan one file, returning a string as a "report" or if there are no NamedListArgs, False
|
||||
def scan_dm_file_for_unquoted_list_associations(_file):
|
||||
global total_unquoted_list_associations
|
||||
if not _file.endswith(".dm"):
|
||||
return False
|
||||
|
||||
with open(_file, "r") as dm_file:
|
||||
filecontents = dm_file.read()
|
||||
|
||||
unquoted_list_associations = []
|
||||
list_definitions = []
|
||||
|
||||
for listdef in re.findall(r"=\s*list\((.*)\)", filecontents):
|
||||
list_definitions.append(listdef)
|
||||
|
||||
listdefs = ' '.join(list_definitions)
|
||||
|
||||
for matchtuple in re.findall(r"(?:list\(|,)\s*(\w+)\s*,*\s*=\s*(\w+)", listdefs):
|
||||
if not define_dict.get(matchtuple[0], False): #defines are valid
|
||||
unquoted_list_associations.append(matchtuple)
|
||||
|
||||
count = len(unquoted_list_associations)
|
||||
|
||||
if count:
|
||||
file_report = ".."+scan_dir+str(_file).split(scan_dir)[1]+" " #crop it down to ..\code\DIR\FILE.dm, everything else is developer specific
|
||||
for nla in unquoted_list_associations:
|
||||
file_report += "\nlist(" + nla[0] + " = " + nla[1] + ")"
|
||||
total_unquoted_list_associations += count
|
||||
file_report += "\nTotal Unquoted List Associations: "+str(count)
|
||||
return file_report
|
||||
else:
|
||||
return False
|
||||
|
||||
#Build a dict of defines, such that we can rule them out as NamedListArgs
|
||||
def build_define_dictionary(scan_dir):
|
||||
define_dict = {}
|
||||
for root, dirs, files in os.walk(scan_dir):
|
||||
for f in files:
|
||||
scan_dm_file_for_defines(os.path.join(root, f))
|
||||
|
||||
|
||||
#Find all #define X Y in a file and update define_dict so that define_dict[X] = True
|
||||
def scan_dm_file_for_defines(_file):
|
||||
if not _file.endswith(".dm"):
|
||||
return False
|
||||
|
||||
with open(_file, "r") as dm_file:
|
||||
filecontents = dm_file.read()
|
||||
|
||||
for define_def in re.findall(r"#define\s+([\w()]+)[ \t]+[^\n]+", filecontents):
|
||||
define_dict[define_def] = True
|
||||
|
||||
|
||||
unquoted_list_associations_scan_dir(real_dir)
|
||||
print "Done!"
|
||||
@@ -155,14 +155,14 @@ function checkchangelog($payload, $merge = false) {
|
||||
$foundcltag = false;
|
||||
foreach ($body as $line) {
|
||||
$line = trim($line);
|
||||
if (substr($line,0,4) == ':cl:') {
|
||||
if (substr($line,0,4) == ':cl:' || substr($line,0,4) == '🆑') {
|
||||
$incltag = true;
|
||||
$foundcltag = true;
|
||||
$pos = strpos($line, " ");
|
||||
if ($pos)
|
||||
$username = substr($line, $pos+1);
|
||||
continue;
|
||||
} else if (substr($line,0,5) == '/:cl:' || substr($line,0,6) == '/ :cl:' || substr($line,0,5) == ':/cl:') {
|
||||
} else if (substr($line,0,5) == '/:cl:' || substr($line,0,6) == '/ :cl:' || substr($line,0,5) == ':/cl:' || substr($line,0,5) == '/🆑' || substr($line,0,6) == '/ 🆑' ) {
|
||||
$incltag = false;
|
||||
$changelogbody = array_merge($changelogbody, $currentchangelogblock);
|
||||
continue;
|
||||
|
||||
+15
-4
@@ -4,6 +4,7 @@ import subprocess
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import time
|
||||
from subprocess import PIPE, STDOUT
|
||||
|
||||
null = open("/dev/null", "wb")
|
||||
@@ -36,7 +37,8 @@ def stage2(map):
|
||||
p = subprocess.Popen(args, shell=True)
|
||||
wait(p)
|
||||
|
||||
def stage3():
|
||||
def stage3(profile_mode=False):
|
||||
start_time = time.time()
|
||||
play("sound/misc/compiler-stage2.ogg")
|
||||
logfile = open('server.log~','w')
|
||||
p = subprocess.Popen(
|
||||
@@ -45,9 +47,15 @@ def stage3():
|
||||
try:
|
||||
while p.returncode is None:
|
||||
stdout = p.stdout.readline()
|
||||
t = "Initializations complete."
|
||||
if t in stdout:
|
||||
if "Initializations complete." in stdout:
|
||||
play("sound/misc/server-ready.ogg")
|
||||
time_taken = time.time() - start_time
|
||||
print("{} seconds taken to fully start".format(time_taken))
|
||||
if "Map is ready." in stdout:
|
||||
time_taken = time.time() - start_time
|
||||
print("{} seconds for initial map loading".format(time_taken))
|
||||
if profile_mode:
|
||||
return time_taken
|
||||
sys.stdout.write(stdout)
|
||||
sys.stdout.flush()
|
||||
logfile.write(stdout)
|
||||
@@ -63,6 +71,7 @@ def main():
|
||||
parser.add_argument('-s','---stage',default=1,type=int)
|
||||
parser.add_argument('--only',action='store_true')
|
||||
parser.add_argument('-m','--map',type=str)
|
||||
parser.add_argument('--profile-mode',action='store_true')
|
||||
args = parser.parse_args()
|
||||
stage = args.stage
|
||||
assert stage in (1,2,3)
|
||||
@@ -75,7 +84,9 @@ def main():
|
||||
if not args.only:
|
||||
stage = 3
|
||||
if stage == 3:
|
||||
stage3()
|
||||
value = stage3(profile_mode=args.profile_mode)
|
||||
with open('profile~', 'a') as f:
|
||||
f.write("{}\n".format(value))
|
||||
|
||||
if __name__=='__main__':
|
||||
try:
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
#Map Merger#
|
||||
Before any change to a map, it is good to use the Map Merger tools. In a nutshell, it rewrites the map to minimize differences between different versions of the map (DreamMakers map editor rewrites a lot of the tile keys). This makes the git diff between different map changes much smaller. More recently a new way of laying out the map was invented by Remie, called TGM, this helps to further reduce conflicts in the map files.
|
||||
|
||||
This is good for a few reasons
|
||||
|
||||
1) Maintainers can actually verify the changes you are making are what you say they are by simply viewing the diff (For small changes at least)
|
||||
|
||||
2) The less changes there are in any given map diff, the easier it is for git to merge it without running into unexpected conflicts, which in most cases you have to either manually resolve or require you to remap your changes
|
||||
|
||||
|
||||
However - to do all this is going to require you to put some elbow grease into understanding the map merger tool.
|
||||
|
||||
If you have difficulty using these tools, ask for help in #coderbus
|
||||
|
||||
#Using the tools#
|
||||
|
||||
##1. Install Python 3.5 or greater##
|
||||
If you don't have Python already installed it can be downloaded from: https://www.python.org/downloads/ - make sure you grab the latest python 3, again, it must be 3.5 or greater
|
||||
##2. PATH Python##
|
||||
This step is mostly applicable to windows users, you must make sure you ask the windows installer to add python to your path, [like shown in this example screenshot](https://file.house/DA6H.png)
|
||||
|
||||
If you have already installed python you may need to manually add it to your path as indicated in [this guide](http://superuser.com/questions/143119/how-to-add-python-to-the-windows-path)
|
||||
##3. Prepare Maps##
|
||||
Run "Prepare Maps.bat" in the tools/mapmerge/ directory.
|
||||
##4. Edit your map##
|
||||
Make your changes to the map here. Remember to save them!
|
||||
##5. Clean map##
|
||||
Run "Run Map Merge - TGM.bat" in the tools/mapmerge/ directory.
|
||||
##7. Check differences##
|
||||
Use your git application of choice to look at the differences between revisions of your code and commit the result.
|
||||
##8. Commit##
|
||||
Your map is now ready to be committed, rejoice and wait for conflicts.
|
||||
|
||||
#Common pitfalls#
|
||||
Open the map in dreameditor before committing the results of the mapmerger - this can cause dreameditor to resave the map back to
|
||||
dmm, if you're having issues with your map getting stuck in dmm mode, try comitting and pushing the mapmerger changes before
|
||||
reopening in dreameditor.
|
||||
|
||||
|
||||
#Map Conflict Fixer/Helper#
|
||||
The map conflict fixer is a script that can help you fix map conflicts easier and faster. Here's how it works:
|
||||
|
||||
###Before using###
|
||||
You need git for this, of course.
|
||||
Make sure your development branch is up to date before starting a map edit to ensure the script outputs a correct fix.
|
||||
|
||||
##Dictionary mode##
|
||||
Dictionary conflicts are the easiest to fix, you simply need to create more models to accommodate your changes and everyone elses.
|
||||
|
||||
When you run in this mode, if the script finishes successfuly the map should be ready to be commited.
|
||||
|
||||
If the script fails in dictionary mode, you can run it again in full fix mode.
|
||||
|
||||
##Full Fix mode##
|
||||
When you and someone else edit the same coordinate, there is no easy way to fix the conflict. You need to get your hands dirty.
|
||||
|
||||
The script will mark every tile with a marker type to help you identify what needs fixing in the map editor.
|
||||
|
||||
After you edit and fix a marked map, you should run it through the map merger. The .backup file should be the same you used before.
|
||||
|
||||
###Priorities###
|
||||
In Full Fix mode, the script needs to know which map version has higher priority, yours or someone elses. This important so tiles with multiple area and turf types aren't created.
|
||||
|
||||
Your version has priority - In each conflicted coordinate, your floor type and your area type will be used
|
||||
Their version has priority - In each conflicted coordinate, your floor type and your area type will not be used
|
||||
|
||||
##IMPORTANT##
|
||||
This script is in a testing phase and you should not consider any output to be safe. Always verify the maps this script produced to make sure nothing is out of place.
|
||||
@@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
SET RELATIVEROOT="../../"
|
||||
python map_conflict_fixer.py %1 %RELATIVEROOT%
|
||||
pause
|
||||
@@ -0,0 +1,103 @@
|
||||
import map_helpers
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
|
||||
def main(relative_root):
|
||||
git_version = map_helpers.run_shell_command("git version")
|
||||
if not git_version:
|
||||
print("ERROR: Failed to run git. Make sure it is installed and in your PATH.")
|
||||
return False
|
||||
|
||||
print("--- DISCLAIMER ---")
|
||||
print("This script is in a testing phase. Verify all the results yourself to make sure you got what you expected. Make sure to read the readme to learn how to use this.")
|
||||
input("Press Enter to GO\n")
|
||||
|
||||
file_conflicts = map_helpers.run_shell_command("git diff --name-only --diff-filter=U").split("\n")
|
||||
map_conflicts = [path for path in file_conflicts if path[len(path)-3::] == "dmm"]
|
||||
|
||||
for i in range(0, len(map_conflicts)):
|
||||
print("[{}]: {}".format(i, map_conflicts[i]))
|
||||
selection = input("Choose maps you want to fix (example: 1,3-5,12):\n")
|
||||
selection = selection.replace(" ", "")
|
||||
selection = selection.split(",")
|
||||
|
||||
#shamelessly copied from mapmerger cli
|
||||
valid_indices = list()
|
||||
for m in selection:
|
||||
index_range = m.split("-")
|
||||
if len(index_range) == 1:
|
||||
index = map_helpers.string_to_num(index_range[0])
|
||||
if index >= 0 and index < len(map_conflicts):
|
||||
valid_indices.append(index)
|
||||
elif len(index_range) == 2:
|
||||
index0 = map_helpers.string_to_num(index_range[0])
|
||||
index1 = map_helpers.string_to_num(index_range[1])
|
||||
if index0 >= 0 and index0 <= index1 and index1 < len(map_conflicts):
|
||||
valid_indices.extend(range(index0, index1 + 1))
|
||||
|
||||
if not len(valid_indices):
|
||||
print("No map selected, exiting.")
|
||||
sys.exit()
|
||||
|
||||
print("Attempting to fix the following maps:")
|
||||
for i in valid_indices:
|
||||
print(map_conflicts[i])
|
||||
|
||||
|
||||
marker = None
|
||||
priority = 0
|
||||
print("\nFixing modes:")
|
||||
print("[{}]: Dictionary conflict fixing mode".format(map_helpers.MAP_FIX_DICTIONARY))
|
||||
print("[{}]: Full map conflict fixing mode".format(map_helpers.MAP_FIX_FULL))
|
||||
mode = map_helpers.string_to_num(input("Select fixing mode [Dictionary]: "))
|
||||
if mode != map_helpers.MAP_FIX_FULL:
|
||||
mode = map_helpers.MAP_FIX_DICTIONARY
|
||||
print("DICTIONARY mode selected.")
|
||||
else:
|
||||
marker = input("FULL mode selected. Input a marker [/obj/effect/debugging/marker]: ")
|
||||
if not marker:
|
||||
marker = "/obj/effect/debugging/marker"
|
||||
print("Marker selected: {}".format(marker))
|
||||
|
||||
print("\nVersion priorities:")
|
||||
print("[{}]: Your version".format(map_helpers.MAP_FIX_PRIORITY_OURS))
|
||||
print("[{}]: Their version".format(map_helpers.MAP_FIX_PRIORITY_THEIRS))
|
||||
priority = map_helpers.string_to_num(input("Select priority [Yours]: "))
|
||||
if priority != map_helpers.MAP_FIX_PRIORITY_THEIRS:
|
||||
priority = map_helpers.MAP_FIX_PRIORITY_OURS
|
||||
print("Your version will be prioritized.")
|
||||
else:
|
||||
print("Their version will be prioritized.")
|
||||
|
||||
ed = "FIXED" if mode == map_helpers.MAP_FIX_DICTIONARY else "MARKED"
|
||||
ing = "FIXING" if mode == map_helpers.MAP_FIX_DICTIONARY else "MARKING"
|
||||
|
||||
print("\nMaps will be converted to TGM.")
|
||||
print("Writing maps to 'file_path/file_name.fixed.dmm'. Please verify the results before commiting.")
|
||||
if mode == map_helpers.MAP_FIX_FULL:
|
||||
print("After editing the marked maps, run them through the map merger!")
|
||||
input("Press Enter to start.")
|
||||
|
||||
print(".")
|
||||
time.sleep(0.3)
|
||||
print(".")
|
||||
|
||||
for i in valid_indices:
|
||||
path = map_conflicts[i]
|
||||
print("{}: {}".format(ing, path))
|
||||
ours_map_raw_text = map_helpers.run_shell_command("git show HEAD:{}".format(path))
|
||||
theirs_map_raw_text = map_helpers.run_shell_command("git show MERGE_HEAD:{}".format(path))
|
||||
|
||||
common_ancestor_hash = map_helpers.run_shell_command("git merge-base HEAD MERGE_HEAD").strip()
|
||||
base_map_raw_text = map_helpers.run_shell_command("git show {}:{}".format(common_ancestor_hash, path))
|
||||
|
||||
ours_map = map_helpers.parse_map(ours_map_raw_text)
|
||||
theirs_map = map_helpers.parse_map(theirs_map_raw_text)
|
||||
base_map = map_helpers.parse_map(base_map_raw_text)
|
||||
|
||||
if map_helpers.fix_map_git_conflicts(base_map, ours_map, theirs_map, mode, marker, priority, relative_root+path):
|
||||
print("{}: {}".format(ed, path))
|
||||
print(".")
|
||||
|
||||
main(sys.argv[1])
|
||||
+587
-407
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
import map_helpers
|
||||
import sys
|
||||
import os
|
||||
import pathlib
|
||||
import map_helpers
|
||||
import shutil
|
||||
|
||||
#main("../../_maps/")
|
||||
@@ -47,7 +47,7 @@ def main(map_folder, tgm=0):
|
||||
print("\nMerging these maps:")
|
||||
for i in valid_indices:
|
||||
print(str(list_of_files[i])[len(map_folder):])
|
||||
merge = input("\nPress Enter to merge...")
|
||||
merge = input("\nPress Enter to merge...\n")
|
||||
if merge == "abort":
|
||||
print("\nAborted map merge.")
|
||||
sys.exit()
|
||||
@@ -57,14 +57,19 @@ def main(map_folder, tgm=0):
|
||||
shutil.copyfile(path_str, path_str + ".before")
|
||||
path_str_pretty = path_str[len(map_folder):]
|
||||
try:
|
||||
if map_helpers.merge_map(path_str, path_str + ".backup", tgm) != 1:
|
||||
print("ERROR MERGING: {}".format(path_str_pretty))
|
||||
error = map_helpers.merge_map(path_str, path_str + ".backup", tgm)
|
||||
if error > 1:
|
||||
print(map_helpers.error[error])
|
||||
os.remove(path_str + ".before")
|
||||
continue
|
||||
if error == 1:
|
||||
print(map_helpers.error[1])
|
||||
print("MERGED: {}".format(path_str_pretty))
|
||||
print(" - ")
|
||||
except FileNotFoundError:
|
||||
print("\nERROR: File not found! Make sure you run 'Prepare Maps.bat' before merging.")
|
||||
print(path_str_pretty + " || " + path_str_pretty + ".backup")
|
||||
print("ERROR: File not found! Make sure you run 'Prepare Maps.bat' before merging.")
|
||||
print("MISSING BACKUP FILE: " + path_str_pretty + ".backup")
|
||||
print(" - ")
|
||||
|
||||
print("\nFinished merging.")
|
||||
print("\nNOTICE: A version of the map files from before merging have been created for debug purposes.\nDo not delete these files until it is sure your map edits have no undesirable changes.")
|
||||
|
||||
@@ -0,0 +1,183 @@
|
||||
import re
|
||||
import os
|
||||
import argparse
|
||||
import map_helpers #why we don't have some generic package for these reee
|
||||
|
||||
default_map_directory = "../../_maps"
|
||||
replacement_re = re.compile('\s*([^{]*)\s*(\{(.*)\})?')
|
||||
|
||||
def tgm_check(map_file):
|
||||
with open(map_file) as f:
|
||||
firstline = f.readline()
|
||||
#why some maps have trailing spaces in this ???
|
||||
if firstline.startswith(map_helpers.tgm_header):
|
||||
return True
|
||||
return False
|
||||
|
||||
def save_map(map_data,filepath,tgm=False):
|
||||
map_data['dictionary'] = map_helpers.sort_dictionary(map_data['dictionary'])
|
||||
if tgm:
|
||||
map_helpers.write_dictionary_tgm(filepath, map_data['dictionary'])
|
||||
map_helpers.write_grid_coord_small(filepath, map_data['grid'], map_data['maxx'], map_data['maxy'])
|
||||
else:
|
||||
map_helpers.write_dictionary(filepath, map_data['dictionary'])
|
||||
map_helpers.write_grid(filepath, map_data['grid'], map_data['maxx'], map_data['maxy'])
|
||||
|
||||
def update_all_maps(update_file=None, update_string=None, map_directory=None, verbose=False):
|
||||
if map_directory is None:
|
||||
map_directory = os.path.normpath(os.path.join(os.path.dirname(__file__), default_map_directory))
|
||||
for root, _, files in os.walk(map_directory):
|
||||
for filepath in files:
|
||||
if filepath.endswith(".dmm"):
|
||||
path = os.path.join(root, filepath)
|
||||
update_map(path, update_file, update_string, verbose)
|
||||
|
||||
def update_map(map_filepath, update_file=None, update_string=None, verbose=False):
|
||||
print("Updating: {0}".format(map_filepath))
|
||||
map_data = map_helpers.parse_map(map_helpers.get_map_raw_text(map_filepath))
|
||||
tgm = tgm_check(map_filepath)
|
||||
if update_file:
|
||||
with open(update_file) as update_source:
|
||||
for line in update_source:
|
||||
if line.startswith("#") or line.isspace():
|
||||
continue
|
||||
map_data = update_path(map_data, line, verbose)
|
||||
save_map(map_data, map_filepath, tgm)
|
||||
if update_string:
|
||||
map_data = update_path(map_data, update_string, verbose)
|
||||
save_map(map_data, map_filepath, tgm)
|
||||
|
||||
def props_to_string(props):
|
||||
return "{{{0}}}".format(";".join([k+" = "+props[k] for k in props]))
|
||||
|
||||
#urgent todo: replace with actual parser, this is slow as janitor in crit
|
||||
split_re = re.compile('((?:[A-Za-z0-9_\-$]+)\s*=\s*(?:"(?:.+?)"|[^";]*)|@OLD)')
|
||||
|
||||
def string_to_props(propstring,verbose = False):
|
||||
props = dict()
|
||||
for raw_prop in re.split(split_re,propstring):
|
||||
if not raw_prop or raw_prop.strip() == ';':
|
||||
continue
|
||||
prop = raw_prop.split('=', maxsplit=1)
|
||||
props[prop[0].strip()] = prop[1].strip() if len(prop) > 1 else None
|
||||
if verbose:
|
||||
print("{0} to {1}".format(propstring,props))
|
||||
return props
|
||||
|
||||
def parse_rep_string(replacement_string,verbose = False):
|
||||
# translates /blah/blah {meme = "test",} into path,prop dictionary tuple
|
||||
match = re.match(replacement_re, replacement_string)
|
||||
path = match.group(1)
|
||||
props = match.group(3)
|
||||
if props:
|
||||
prop_dict = string_to_props(props, verbose)
|
||||
else:
|
||||
prop_dict = dict()
|
||||
return path.strip(), prop_dict
|
||||
|
||||
def update_path(mapdata, replacement_string, verbose=False):
|
||||
old_path_part, new_path_part = replacement_string.split(':', maxsplit=1)
|
||||
old_path, old_path_props = parse_rep_string(old_path_part,verbose)
|
||||
new_paths = dict()
|
||||
for replacement_def in new_path_part.split(','):
|
||||
new_path, new_path_props = parse_rep_string(replacement_def,verbose)
|
||||
new_paths[new_path] = new_path_props
|
||||
|
||||
def replace_def(match):
|
||||
if match.group(2):
|
||||
old_props = string_to_props(match.group(2),verbose)
|
||||
else:
|
||||
old_props = dict()
|
||||
for filter_prop in old_path_props:
|
||||
if filter_prop not in old_props:
|
||||
if old_path_props[filter_prop] == "@UNSET":
|
||||
continue
|
||||
else:
|
||||
return [match.group(0)]
|
||||
else:
|
||||
if old_props[filter_prop] != old_path_props[filter_prop] or old_path_props[filter_prop] == "@UNSET":
|
||||
return [match.group(0)] #does not match current filter, skip the change.
|
||||
if verbose:
|
||||
print("Found match : {0}".format(match.group(0)))
|
||||
out_paths = []
|
||||
for new_path, new_props in new_paths.items():
|
||||
out = new_path
|
||||
out_props = dict()
|
||||
for prop_name, prop_value in new_props.items():
|
||||
if prop_name == "@OLD":
|
||||
out_props = dict(old_props)
|
||||
continue
|
||||
if prop_value == "@SKIP":
|
||||
out_props.pop(prop_name, None)
|
||||
continue
|
||||
if prop_value.startswith("@OLD"):
|
||||
params = prop_value.split(":")
|
||||
if prop_name in old_props:
|
||||
out_props[prop_name] = old_props[params[1]] if len(params) > 1 else old_props[prop_name]
|
||||
continue
|
||||
out_props[prop_name] = prop_value
|
||||
if out_props:
|
||||
out += props_to_string(out_props)
|
||||
out_paths.append(out)
|
||||
if verbose:
|
||||
print("Replacing with: {0}".format(out_paths))
|
||||
return out_paths
|
||||
|
||||
def get_result(element):
|
||||
p = re.compile("{0}\s*({{(.*)}})?$".format(re.escape(old_path)))
|
||||
match = p.match(element)
|
||||
if match:
|
||||
return replace_def(match) # = re.sub(p,replace_def,element)
|
||||
else:
|
||||
return [element]
|
||||
|
||||
for definition_key in mapdata['dictionary']:
|
||||
def_value = mapdata['dictionary'][definition_key]
|
||||
start = list(def_value)
|
||||
changed = [y for x in start for y in get_result(x)]
|
||||
new_value = tuple(changed)
|
||||
if new_value != def_value:
|
||||
mapdata['dictionary'][definition_key] = new_value
|
||||
|
||||
return mapdata
|
||||
|
||||
if __name__ == "__main__":
|
||||
desc = """
|
||||
Update dmm files given update file/string.
|
||||
|
||||
Replacement syntax example:
|
||||
/turf/open/floor/plasteel/warningline : /obj/effect/turf_decal {dir = @OLD ;tag = @SKIP;icon_state = @SKIP}
|
||||
/turf/open/floor/plasteel/warningline : /obj/effect/turf_decal {@OLD} , /obj/thing {icon_state = @OLD:name; name = "meme"}
|
||||
/turf/open/floor/plasteel/warningline{dir=2} : /obj/thing
|
||||
New paths properties:
|
||||
@OLD - if used as property name copies all modified properties from original path to this one
|
||||
property = @SKIP - will not copy this property through when global @OLD is used.
|
||||
property = @OLD - will copy this modified property from original object even if global @OLD is not used
|
||||
property = @OLD:name - will copy [name] property from original object even if global @OLD is not used
|
||||
Anything else is copied as written.
|
||||
Old paths properties:
|
||||
Will be used as a filter.
|
||||
property = @UNSET - will apply the rule only if the property is not mapedited
|
||||
"""
|
||||
|
||||
parser = argparse.ArgumentParser(description=desc, formatter_class=argparse.RawTextHelpFormatter)
|
||||
parser.add_argument("update_source", help="update file path / line of update notation")
|
||||
parser.add_argument("--map", "-m", help="path to update, defaults to all maps in maps directory")
|
||||
parser.add_argument("--directory", "-d", help="path to maps directory, defaults to ../../_maps")
|
||||
parser.add_argument("--inline", "-i", help="treat update source as update string instead of path", action="store_true")
|
||||
parser.add_argument("--verbose", "-v", help="toggle detailed update information", action="store_true")
|
||||
|
||||
args = parser.parse_args()
|
||||
if args.directory:
|
||||
default_map_directory = args.directory
|
||||
|
||||
if args.map:
|
||||
if args.inline:
|
||||
update_map(args.map, update_string=args.update_source, verbose=args.verbose)
|
||||
else:
|
||||
update_map(args.map, update_file=args.update_source, verbose=args.verbose)
|
||||
else:
|
||||
if args.inline:
|
||||
update_all_maps(update_string=args.update_source, verbose=args.verbose)
|
||||
else:
|
||||
update_all_maps(update_file=args.update_source, verbose=args.verbose)
|
||||
@@ -14,7 +14,7 @@ call bin\getcurdate.bat
|
||||
cls
|
||||
echo Watch Dog.
|
||||
echo Server Running. Watching for server exits.
|
||||
start /WAIT /ABOVENORMAL "" dreamdaemon.exe gamefolder\%PROJECTNAME%.dmb -port %PORT% -trusted -close -log "data\logs\runtimes\runtime-%CUR_DATE%.log"
|
||||
start /WAIT /ABOVENORMAL "" dreamdaemon.exe gamefolder\%PROJECTNAME%.dmb -port %PORT% -trusted -public -close -log "data\logs\runtimes\runtime-%CUR_DATE%.log"
|
||||
cls
|
||||
echo Watch Dog.
|
||||
echo Server exit detected. Restarting in 60 seconds.
|
||||
|
||||
Regular → Executable
Regular → Executable
+1
-1
@@ -5,6 +5,6 @@ if [ "$BUILD_TOOLS" = true ]; then
|
||||
cd tgui && source ~/.nvm/nvm.sh && npm install && cd ..
|
||||
fi;
|
||||
|
||||
if [ "$DM_MAPFILE" = "templates" ]; then
|
||||
if [ "$DM_MAPFILE" = "loadallmaps" ]; then
|
||||
python tools/travis/template_dm_generator.py
|
||||
fi;
|
||||
|
||||
Regular → Executable
+1
-1
@@ -7,5 +7,5 @@ shopt -s globstar
|
||||
if [ "$BUILD_TOOLS" = false ]; then
|
||||
(! grep 'step_[xy]' _maps/**/*.dmm)
|
||||
source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup
|
||||
tools/travis/dm.sh -M${DM_MAPFILE} tgstation.dme
|
||||
tools/travis/dm.sh -DTRAVISBUILDING -M${DM_MAPFILE} tgstation.dme
|
||||
fi;
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Reference in New Issue
Block a user