Raw model (for completeness)
{
"meta": {
"id": "048fef0c-b9d4-4895-a3b9-071fc9fd0c13",
"sha1": "eba6028ff1fa31f7776f43dba1a443e79ef1ce33",
"sha256": "96b44be9cddd51f315e29603d93787c47def6f386a55468f39ca1fad84deca94",
"filenames": [
"mk-champions[2.5].pk3"
],
"additional": {
"engines": [],
"iwad": [],
"filename": null,
"added": "2021/05/15 12:36:02",
"locked": false,
"canDownload": true,
"adult": false,
"hidden": false,
"name": null,
"description": null,
"maps": null,
"graphicOverrides": null,
"screenshots": null,
"palettes": null,
"categories": null
},
"flags": {
"locked": false,
"canDownload": true,
"adult": false,
"hidden": false
},
"added": "2021/05/15 12:36:02",
"file": {
"type": "PK3",
"size": 310433,
"url": "https://wadarchive2.nyc3.digitaloceanspaces.com/eba6028ff1fa31f7776f43dba1a443e79ef1ce33/eba6028ff1fa31f7776f43dba1a443e79ef1ce33.pk3.gz",
"corrupt": false
},
"content": {
"counts": {
"endoom": 0,
"graphics": 0,
"lumps": 108,
"maps": 0,
"palettes": 0
}
},
"text_files": [
{
"source": "pk3",
"name": "zscript.txt",
"contents": "version \"3.3\"\n\n#include \"zscript/champions/handler.txt\"\n#include \"zscript/champions/baseclass.txt\"\n#include \"zscript/champions/extrafx.txt\"\n#include \"zscript/champions/tokens.txt\"\n\n#include \"zscript/champions/champs/champ_darkred.txt\"\n#include \"zscript/champions/champs/champ_red.txt\"\n#include \"zscript/champions/champs/champ_orange.txt\"\n#include \"zscript/champions/champs/champ_yellow.txt\"\n#include \"zscript/champions/champs/champ_darkgreen.txt\"\n#include \"zscript/champions/champs/champ_green.txt\"\n#include \"zscript/champions/champs/champ_cyan.txt\"\n#include \"zscript/champions/champs/champ_blue.txt\"\n#include \"zscript/champions/champs/champ_indigo.txt\"\n#include \"zscript/champions/champs/champ_violet.txt\"\n#include \"zscript/champions/champs/champ_pink.txt\"\n#include \"zscript/champions/champs/champ_black.txt\"\n#include \"zscript/champions/champs/champ_grey.txt\"\n#include \"zscript/champions/champs/champ_white.txt\"\n#include \"zscript/champions/champs/champ_Bronze.txt\"\n#include \"zscript/champions/champs/champ_Silver.txt\"\n#include \"zscript/champions/champs/champ_Gold.txt\"\n\n#include \"zscript/champions/bundles/bundles.txt\"\n//#include \"zscript/champions/bundles/games/generic.txt\"\n#include \"zscript/champions/bundles/games/doom.txt\"\n#include \"zscript/champions/bundles/games/heretic.txt\"\n#include \"zscript/champions/bundles/games/hexen.txt\"\n#include \"zscript/champions/bundles/games/strife.txt\"\n#include \"zscript/champions/bundles/games/modcompat.txt\"\n//#include \"zscript/champions/bundles/games/chex.txt\"\n\nenum champion_mutations\n\t{\n\tmutation_None,\n\tmutation_Titan,\n\t//mutation_Splitter,\n\tmutation_Undying,\n\tmutation_Ghost,\n\t//mutation_Psychic,\n\t};\n\nclass champion_Blood : Blood replaces Blood\n\t{\n\tdefault\n\t\t{\n\t\t+PUFFGETSOWNER;\n\t\t}\n\t}\n\nclass champion_HealthBonus : HealthBonus\n\t{\n\tdefault\n\t\t{\n\t\t+RANDOMIZE;\n\t\t-COUNTITEM;\n\t\t}\n\n\toverride void PostBeginPlay(void)\n\t\t{\n\t\tSuper.PostBeginPlay();\n\n\t\tbSPRITEFLIP = random(0,1);\n\t\tframe = random(0,7);\n\t\t}\n\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tFRUT \"#\" 35;\n\t\t\tFRUT \"#\" 1 Bright;\n\t\t\tloop;\n\t\t}\n\t}\n\nclass champion_IceChunk : IceChunk replaces IceChunk\n\t{\n\tdefault\n\t\t{\n\t\tTranslation \"champion_Ice\";\n\t\t}\n\t}\n\nclass champion_static\n\t{\n\tstatic const class<inventory> champion_Tokens[] =\n\t\t{\n\t\t\"champion_DarkRedToken\",\t\t\"champion_RedToken\",\t\t\"champion_OrangeToken\",\n\t\t\"champion_YellowToken\",\t\t\t\"champion_DarkGreenToken\",\t\"champion_GreenToken\",\n\t\t\"champion_CyanToken\",\t\t\t\"champion_BlueToken\",\t\t\"champion_IndigoToken\",\n\t\t\"champion_VioletToken\",\t\t\t\"champion_PinkToken\",\t\t\"champion_BlackToken\",\n\t\t\"champion_GreyToken\",\t\t\t\"champion_WhiteToken\",\t\t\"champion_BronzeToken\",\n\t\t\"champion_SilverToken\",\t\t\t\"champion_GoldToken\"\n\t\t};\n\n\tstatic bool champion_LegendoomCheck(void)\n\t\t{\n\t\tif(champion_Static.champion_ReturnCVAR('champion_Legendoom'))\n\t\t\t{\n\t\t\tif(\tWads.FindLump(\"LEGNDLIB\") \t\t\t\t\t!= -1 ||\n\t\t\t\tWads.CheckNumForFullName(\"acs/LEGNDLIB.o\") \t!= -1)\n\t\t\t\t{\n\t\t\t\tif(champion_static.champion_ReturnCVAR('champion_Debug'))\n\t\t\t\t\tconsole.printf(\"Legendoom Compat Identified\");\n\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\treturn false;\n\t\t\t}\n\n\t\treturn false;\n\t\t}\n\n\tstatic bool champion_GuncasterCheck(void)\n\t\t{\n\t\tif( Wads.CheckNumForFullName(\"Loreyore.txt\") != -1)\n\t\t\treturn true;\n\n\t\treturn false;\n\t\t}\n\n\tstatic int champion_ReturnCVAR(name c)\n\t\t{\n\t\tcvar cv = CVar.FindCVar(c);\n\t\tif(cv)\n\t\t\t{\n\t\t\treturn cv.GetInt();\n\t\t\t}\n\t\treturn 0;\n\t\t}\n\n\tstatic double champion_ReturnCVARFloat(name c)\n\t\t{\n\t\tcvar cv = CVar.FindCVar(c);\n\t\tif(cv)\n\t\t\t{\n\t\t\treturn cv.GetFloat();\n\t\t\t}\n\t\treturn 0;\n\t\t}\n\n\t}"
},
{
"source": "pk3",
"name": "credits.txt",
"contents": "Champion Icons\t\t\t\t\t- \tgame-icons.net\nFood Sprites\t\t\t\t\t- \tfood barrel on realm667 credit to Yuyu3 & RPGMaker XP\nUndying Champ Heart \t\t\t-\tBinding of Isaac Rebirth - Edmund McMillen / Nicalis\nExplosion / Projectile / Gibs\t- \tFreedoom / Amuscaria / Unknown"
},
{
"source": "pk3",
"name": "trnslate.txt",
"contents": "champion_darkred \t= \"0:255=#[128,0,0]\"\nchampion_red\t\t= \"0:255=%[0.00,0.00,0.00]:[2.00,0.00,0.00]\"\nchampion_orange\t\t= \"0:255=%[0.50,0.00,0.00]:[2.00,1.22,0.43]\"\nchampion_yellow\t\t= \"0:255=%[0.00,0.00,0.00]:[2.00,1.76,0.00]\"\nchampion_darkgreen \t= \"0:255=#[0,128,0]\"\nchampion_green\t\t= \"0:255=#[0,255,0]\"\nchampion_blue\t\t= \"0:255=#[89,89,255]\"\nchampion_indigo \t= \"0:255=#[160,129,254]\"\nchampion_violet \t= \"0:255=#[128,0,128]\"\n\nchampion_pink\t\t= \"0:255=%[0.22,0.00,0.00]:[2.00,1.02,1.12]\"\nchampion_magenta\t= \"0:255=#[255,0,128]\"\nchampion_cyan\t\t= \"0:255=%[0.00,0.00,1.01]:[1.47,2.00,2.00]\"\nchampion_brown\t\t= \"0:255=#[126,86,1]\"\n\nchampion_black\t\t= \"0:255=#[32,32,32]\"\nchampion_grey\t\t= \"0:255=#[192,192,192]\"\nchampion_white\t\t= \"0:255=%[0.16,0.16,0.16]:[2.00,2.00,2.00]\"\n\nchampion_bronze\t\t= \"0:255=%[0.00,0.00,0.00]:[1.22,0.78,0.49]\"\nchampion_silver\t\t= \"0:255=%[0.00,0.00,0.00]:[1.62,2.00,2.00]\"\nchampion_golden\t\t= \"0:255=%[0.27,0.00,0.00]:[2.00,1.86,0.00]\"\n\nchampion_ice\t\t= \"0:255=%[0.00,0.00,0.00]:[1.37,1.69,2.00]\""
},
{
"source": "pk3",
"name": "cvarinfo.txt",
"contents": "server int \t\tchampion_Debug \t \t\t= 0;\nserver int \t\tchampion_Colours\t\t= 1;\nserver int\t\tchampion_MissileColours\t= 0;\nserver int \t\tchampion_MissileStyle\t= 0;\nserver int\t\tchampion_BloodColours\t= 1;\nserver int \t\tchampion_Particles\t\t= 1;\nserver int \t\tchampion_IceColour\t\t= 1;\nserver int \t\tchampion_Icons\t\t\t= 1;\nserver float\tchampion_IconScale\t\t= 0.2;\nserver float\tchampion_IconAlpha\t\t= 0.75;\nserver int \t\tchampion_Bundles\t\t= 1;\nserver int \t\tchampion_legendoom\t\t= 0;\nserver int \t\tchampion_dormant\t\t= 0;\nserver int \t\tchampion_booster\t\t= 1;\n\n// Champion control\nserver int champion_OverrideChance \t\t= -1;\n\nserver int champion_weight_DarkRed\t\t= 5;\nserver int champion_weight_Red\t\t\t= 5;\nserver int champion_weight_Yellow\t\t= 5;\nserver int champion_weight_Orange\t\t= 5;\nserver int champion_weight_DarkGreen\t= 5;\nserver int champion_weight_Green\t\t= 5;\nserver int champion_weight_Cyan\t\t\t= 5;\nserver int champion_weight_Blue\t\t\t= 5;\nserver int champion_weight_Indigo\t\t= 5;\nserver int champion_weight_Violet\t\t= 5;\nserver int champion_weight_Pink\t\t\t= 5;\nserver int champion_weight_Black\t\t= 5;\nserver int champion_weight_Grey\t\t\t= 5;\nserver int champion_weight_White\t\t= 5;\nserver int champion_weight_Bronze\t\t= 3;\nserver int champion_weight_Silver\t\t= 2;\nserver int champion_weight_Gold\t\t\t= 1;\n\n// Mutation control\nserver int champion_Mutations\t\t\t= 16;\n\nserver int champion_weight_Titan\t\t= 2;\n//server int champion_weight_Splitter\t= 5;\nserver int champion_weight_Undying\t\t= 1;\nserver int champion_weight_Ghost\t\t= 5;\n//server int champion_weight_Psychic\t= 3;"
},
{
"source": "pk3",
"name": "menudef.txt",
"contents": "AddOptionMenu \"OptionsMenu\"\n\t{\n StaticText \"\"\n Submenu \"Champion Options\", \"mk_ChampionMenu\"\n\t}\n\nOptionMenu \"mk_ChampionMenu\"\n\t{\n\tTitle \"Champion Options\"\n\tStaticText \"ALL CHANGES WILL TAKE EFFECT ON NEXT MAP\", gold\n\tStaticText \" \"\n\n\tSubmenu \"Champion Weighting Options\", \"mk_ChampionWeightMenu\"\n\tSubmenu \"Mutation Weighting Options\", \"mk_MutationWeightMenu\"\n\tStaticText \" \"\n\tSubmenu \"Legendoom Compatibility Options\", \"mk_ChampionLegendoomMenu\"\n\tStaticText \" \"\n\n\tStaticText \"Spawning Tweaks\", gold\n\tStaticText \" \"\n\tScaleSlider \"Champion Spawn Chance\",\t\t\"champion_OverrideChance\", \t-1, 256, 1, \"Never Spawn\", \"Difficulty Based\"\n\tScaleSlider \"Champion Mutation Chance\",\t\t\"champion_Mutations\",\t\t0,\t256, 1, \"Never Spawn\"\n\tOption \"Spawn Item Bundles?\",\t\t\t\t\"champion_Bundles\",\t\t\t\"YesNo\"\n\tStaticText \" \"\n\n\tStaticText \"Visual Tweaks\", gold\n\tStaticText \" \"\n\tOption \"Champions Colours?\",\t\t\t\t\"champion_Colours\",\t\t\t\"YesNo\"\n\n\tOption \"Champions Particles?\",\t\t\t\t\"champion_Particles\",\t\t\"YesNo\"\n\tOption \"Champions Icons?\",\t\t\t\t\t\"champion_Icons\",\t\t\t\"YesNo\"\n\tOption \"New ice colour?\",\t\t\t\t\t\"champion_IceColour\",\t\t\"YesNo\"\n\tSlider \"Icon Scaling\",\t\t\t\t\t\t\"champion_IconScale\",\t\t0.0, 1.0, 0.1\n\tSlider \"Icon Alpha\",\t\t\t\t\t\t\"champion_IconAlpha\",\t\t0.0, 1.0, 0.1\n\tStaticText \" \"\n\n\tOption \"Blood Sprites inherit colour?\",\t\t\"champion_BloodColours\",\t\"YesNo\"\n\tOption \"Projectiles inherit colour?\",\t\t\"champion_MissileColours\",\t\"YesNo\"\n\tOption \"Override Projectile Style\",\t\t\t\"champion_MissileStyle\",\t\"Styles\"\n\tStaticText \"These settings can cause visual errors\", gold\n\tStaticText \" \"\n\t}\n\nOptionValue \"Styles\"\n{\n 0, \"Default\"\n 1, \"Translucent\"\n 2, \"Opaque\"\n}\noptionmenu \"mk_ChampionLegendoomMenu\"\n\t{\n\tTitle \"Legendoom x Champions\"\n\tOption \"Legendoom Compatibility Enabled?\",\t\"champion_Legendoom\",\t\t\"YesNo\"\n\tStaticText \"Enables the following options\", gold\n\tStaticText \"\"\n\tOption \"Boosted Legendary Champions?\",\t\t\"champion_Booster\",\t\t\t\"YesNo\"\n\tStaticText \"Transformed Legendary Champions get boosted abilities\", gold\n\tStaticText \"\"\n\tOption \"Dormant Legendary Champions?\",\t\t\"champion_Dormant\",\t\t\t\"YesNo\"\n\tStaticText \"Legendary monsters become champions after transforming\", gold\n\tStaticText \"\"\n\t}\n\nOptionMenu \"mk_ChampionWeightMenu\"\n\t{\n\tTitle \t\"Champion Weighting Options\"\n\tScaleSlider\t\"Dark Red\",\t\t\t\t\t\"champion_weight_DarkRed\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Will respawn if the corpse is not disposed of\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Red\",\t\t\t\t\t\t\"champion_weight_Red\",\t\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Spawns with doubled health\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Orange\",\t\t\t\t\t\"champion_weight_Orange\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Explodes on death\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Yellow\",\t\t\t\t\t\"champion_weight_Yellow\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Movement Speed Doubled\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Dark Green\",\t\t\t\t\"champion_weight_DarkGreen\",0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Leaves a trail of damaging creep\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Green\",\t\t\t\t\t\"champion_weight_Green\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Teleports randomly around the map\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Cyan\",\t\t\t\t\t\t\"champion_weight_Cyan\",\t\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Pushes around with gusts of wind\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Blue\",\t\t\t\t\t\t\"champion_weight_Blue\",\t\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Splits into multiple projectiles on death\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Indigo\",\t\t\t\t\t\"champion_weight_Indigo\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Spawns two clones on death\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Violet\",\t\t\t\t\t\"champion_weight_Violet\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Fires extra projectiles randomly\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Pink\",\t\t\t\t\t\t\"champion_weight_Pink\",\t\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Regenerates health, can heal other monsters\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Black\",\t\t\t\t\t\"champion_weight_Black\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Deals double damage\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Grey\",\t\t\t\t\t\t\"champion_weight_Grey\",\t\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Will dodge your attacks\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"White\",\t\t\t\t\t\"champion_weight_White\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Leaves a trail of slowing creep\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Bronze\",\t\t\t\t\t\"champion_weight_Bronze\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Slower, Stronger less susceptible to pain\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Silver\",\t\t\t\t\t\"champion_weight_Silver\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Can generate a reflective shield\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Gold\",\t\t\t\t\t\t\"champion_weight_Gold\",\t\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Midas Touch on nearby enemies\", gold\n\tStaticText \t\"\"\n\t//ScaleSlider\t\"Titan\",\t\t\t\t\t\"champion_weight_Titan\",\t0, 10, 1, \"Never Spawn\"\n\t}\n\nOptionMenu \"mk_MutationWeightMenu\"\n\t{\n\tTitle \t\"Mutation Weighting Options\"\n\tScaleSlider\t\"Titan\",\t\t\t\t\t\"champion_weight_Titan\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Massively boosted stats\", gold\n\tStaticText \t\"\"\n\t//ScaleSlider\t\"Splitter\",\t\t\t\t\t\"champion_weight_Splitter\",\t0, 10, 1, \"Never Spawn\"\n\t//StaticText \t\"Fires extra projectiles\", gold\n\t//StaticText \t\"\"\n\tScaleSlider\t\"Undying\",\t\t\t\t\t\"champion_weight_Undying\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Will never die\", gold\n\tStaticText \t\"\"\n\tScaleSlider\t\"Ghost\",\t\t\t\t\t\"champion_weight_Ghost\",\t0, 10, 1, \"Never Spawn\"\n\tStaticText \t\"Phases in and out of reality\", gold\n\tStaticText \t\"\"\n\t//ScaleSlider\t\"Psychic\",\t\t\t\t\t\"champion_weight_Psychic\",\t0, 10, 1, \"Never Spawn\"\n\t//StaticText \t\"Attacks will seek their target\", gold\n\t//StaticText \t\"\"\n\t}"
},
{
"source": "pk3",
"name": "zmapinfo.txt",
"contents": "gameinfo\n\t{\n\taddeventhandlers = \"champion_Handler\"\n\t}\n\nDamageType champion_Toxic\n\t{\n Obituary = \"%o was poisoned\"\n\t}"
},
{
"source": "pk3",
"name": "keyconf.txt",
"contents": "//alias \"champion_reset\" \""
},
{
"source": "pk3",
"name": "zscript/champions/handler.txt",
"contents": "/*\n *\n *\t\tChampion Event Handler\n *\t\t\tAssigns newly spawned monsters a champion\n *\t\t\tController that alters stats and behaviour\n *\n */\n\nclass champion_Handler : EventHandler\n\t{\n\n\tstatic const name champion_WeightVars_Colours[]=\n\t\t{\n\t\t'champion_weight_DarkRed',\n\t\t'champion_weight_Red',\n\t\t'champion_weight_Orange',\n\t\t'champion_weight_Yellow',\n\t\t'champion_weight_DarkGreen',\n\t\t'champion_weight_Green',\n\t\t'champion_weight_Cyan',\n\t\t'champion_weight_Blue',\n\t\t'champion_weight_Indigo',\n\t\t'champion_weight_Violet',\n\t\t'champion_weight_Pink',\n\t\t'champion_weight_Black',\n\t\t'champion_weight_Grey',\n\t\t'champion_weight_White',\n\t\t'champion_weight_Bronze',\n\t\t'champion_weight_Silver',\n\t\t'champion_weight_Gold'\n\t\t};\n\n\tstatic const name champion_WeightVars_Mutations[] =\n\t\t{\n\t\t'champion_weight_Titan',\n\t\t//'champion_weight_Splitter',\n\t\t'champion_weight_Undying',\n\t\t'champion_weight_Ghost'//,\n\t\t//'champion_weight_Psychic'\n\t\t};\n\n\tstatic const class<thinker> champion_Controllers[] =\n\t\t{\n\t\t\"champion_DarkRedController\",\n\t\t\"champion_RedController\",\n\t\t\"champion_OrangeController\",\n\t\t\"champion_YellowController\",\n\t\t\"champion_DarkGreenController\",\n\t\t\"champion_GreenController\",\n\t\t\"champion_CyanController\",\n\t\t\"champion_BlueController\",\n\t\t\"champion_IndigoController\",\n\t\t\"champion_VioletController\",\n\t\t\"champion_PinkController\",\n\t\t\"champion_BlackController\",\n\t\t\"champion_GreyController\",\n\t\t\"champion_WhiteController\",\n\t\t\"champion_BronzeController\",\n\t\t\"champion_SilverController\",\n\t\t\"champion_GoldController\"\n\t\t};\n\n\tstatic const int champion_Mutations[] =\n\t\t{\n\t\tmutation_Titan,\n\t\t//mutation_Splitter,\n\t\tmutation_Undying,\n\t\tmutation_Ghost//,\n\t\t//mutation_Psychic\n\t\t};\n\n\tstatic const string champion_MutationsName[]=\n\t\t{\n\t\t\"none\",\n\t\t\"mutation_Titan\",\n\t\t//\"mutation_Splitter\",\n\t\t\"mutation_Undying\",\n\t\t\"mutation_Ghost\"//,\n\t\t//\"mutation_Psychic\"\n\t\t};\n\n\tarray<class<Thinker> > \tchampion_WeightedColours;\n\tarray<int>\t\t\t\tchampion_WeightedMutations;\n\n\tvoid champion_PushWeightColours(int pos)\n\t\t{\n\t\tint \t\t\ti = 0;\n\t\tname\t\t \tv = champion_WeightVars_Colours[pos];\n\t\tclass<thinker> \tp = champion_Controllers[pos];\n\t\tfor(i; i < champion_Static.champion_ReturnCVAR(v); i++)\n\t\t\t{\n\t\t\tchampion_WeightedColours.Push(p);\n\t\t\t}\n\t\t//console.printf(\"pushed %d of %s to weighted colours array\", i, p.GetClassName());\n\t\t}\n\n\tvoid champion_PushWeightMutations(int pos)\n\t\t{\n\t\tint \t\t\ti = 0;\n\t\tname\t\t \tv = champion_WeightVars_Mutations[pos];\n\t\tint\t\t\t\tp = champion_Mutations[pos];\n\t\tfor(i; i < champion_Static.champion_ReturnCVAR(v); i++)\n\t\t\t{\n\t\t\tchampion_WeightedMutations.Push(p);\n\t\t\t}\n\t\t//console.printf(\"pushed %d of %s to weighted mutations array\", i,champion_MutationsName[pos]);\n\t\t}\n\n\tvoid champion_BuildWeightedArray(void)\n\t\t{\n\t\t//console.printf(\"c init\");\n\t\tfor(int i = 0; i < champion_WeightVars_Colours.Size(); i++)\n\t\t\t{\n\t\t\tchampion_PushWeightColours(i);\n\t\t\t}\n\n\t\tfor(int k = 0; k < champion_WeightedColours.Size(); k++)\n\t\t\t{\n\t\t\t//console.Printf(\"%s\", champion_WeightedColours[k].GetClassName());\n\t\t\t}\n\t\t//console.printf(\"colours array built with %d indexes\", champion_WeightedColours.Size());\n\t\t}\n\n\tvoid champion_BuildMutationArray(void)\n\t\t{\n\t\t//console.printf(\"m init\");\n\t\tfor(int i = 0; i < champion_WeightVars_Mutations.Size(); i++)\n\t\t\t{\n\t\t\tchampion_PushWeightMutations(i);\n\t\t\t}\n\n\t\tfor(int k = 0; k < champion_WeightedMutations.Size(); k++)\n\t\t\t{\n\t\t\tint amt = champion_WeightedMutations[k];\n\t\t\t//console.Printf(\"%s\", champion_MutationsName[amt]);\n\t\t\t}\n\t\t//console.printf(\"mutations array built with %d indexes\", champion_WeightedMutations.Size());\n\t\t}\n\n\tbool colours;\n\tbool icons;\n\tbool particles;\n\tbool bundles;\n\n\tbool missilecolour;\n\tint missilestyle;\n\tbool bloodcolour;\n\n\tdouble icon_scale;\n\tdouble icon_alpha;\n\n\tstring ice_trans;\n\n\tbool legend;\n\tbool ld_boost;\n\tbool ld_dormant;\n\n\tint mutationchance;\n\n\toverride void WorldLoaded(WorldEvent e)\n\t\t{\n\t\tchampion_BuildWeightedArray();\n\t\tchampion_BuildMutationArray();\n\n\t\tcolours \t\t= champion_Static.champion_ReturnCVAR(\"champion_Colours\");\n\t\ticons \t\t\t= champion_Static.champion_ReturnCVAR(\"champion_Icons\");\n\t\tparticles \t\t= champion_Static.champion_ReturnCVAR(\"champion_Particles\");\n\t\tbundles \t\t= champion_Static.champion_ReturnCVAR(\"champion_Bundles\");\n\t\tmutationchance\t= champion_Static.champion_ReturnCVAR(\"champion_Mutations\");\n\t\tmissilecolour \t= champion_Static.champion_ReturnCVAR(\"champion_MissileColours\");\n\t\tmissilestyle\t= champion_Static.champion_ReturnCVAR(\"champion_MissileStyle\");\n\t\tbloodcolour \t= champion_Static.champion_ReturnCVAR(\"champion_BloodColours\");\n\n\t\tif(champion_Static.champion_LegendoomCheck())\n\t\t\t{\n\t\t\tlegend \t\t= true;\n\t\t\tld_dormant\t= champion_Static.champion_ReturnCVAR(\"champion_Dormant\");\n\t\t\tld_boost\t= champion_Static.champion_ReturnCVAR(\"champion_Booster\");\n\t\t\t}\n\n\t\ticon_scale\t= champion_Static.champion_ReturnCVARFloat(\"champion_IconScale\");\n\t\ticon_alpha\t= champion_Static.champion_ReturnCVARFloat(\"champion_IconAlpha\");\n\n\t\tice_trans \t= champion_Static.champion_ReturnCVARFloat(\"champion_IceColour\") ? \"champion_Ice\" : \"Ice\";\n\n\t\t}\n\n\tOverride void WorldThingSpawned(WorldEvent e)\n\t\t{\n\t\t// splitter spawning\n\t\tif( e.Thing.bMISSILE && e.Thing.Target && e.Thing.Target.CountInv(\"champion_PsychicToken\") )\n\t\t\t{\n\t\t\tlet misl = champion_MissileManipulator(new(\"champion_MissileManipulator\"));\n\t\t\tif(misl)\n\t\t\t\t{\n\t\t\t\tmisl.missile = e.Thing;\n\t\t\t\t}\n\t\t\t}\n\n\t\tif( missilestyle && e.Thing.bMISSILE && e.Thing.Target && e.Thing.Target.CountInv(\"champion_PersistentInfo\"))\n\t\t\t{\n\t\t\t//if(e.Thing.GetRenderStyle() == STYLE_Normal || e.Thing.GetRenderStyle() == STYLE_None)\n\t\t\t//\treturn;\n\n\t\t\tswitch(missilestyle)\n\t\t\t\t{\n\t\t\t\tdefault:\n\t\t\t\tcase 1:\n\t\t\t\t\te.Thing.A_SetRenderStyle(0.5,STYLE_TRANSLUCENT);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\te.Thing.A_SetRenderStyle(1.0,STYLE_Normal);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\tif( missilecolour && e.Thing.bMISSILE && e.Thing.Target && e.Thing.Target.CountInv(\"champion_PersistentInfo\"))\n\t\t\t{\n\t\t\t//e.Thing.A_SetRenderstyle(e.Thing.Alpha,STYLE_TRANSLUCENT);\n\t\t\te.Thing.Translation = e.Thing.Target.Translation;\n\t\t\t//e.Thing.Alpha = 0.66;\n\t\t\t}\n\n\t\tif( missilecolour && e.Thing is \"ArchvileFire\" && e.Thing.Target && e.Thing.Target.CountInv(\"champion_PersistentInfo\"))\n\t\t\t{\n\t\t\t//e.Thing.A_SetRenderstyle(e.Thing.Alpha,STYLE_TRANSLUCENT);\n\t\t\te.Thing.Translation = e.Thing.Target.Translation;\n\t\t\t//e.Thing.Alpha = 0.66;\n\t\t\t}\n\n\t\tif( bloodcolour && e.Thing.bPUFFGETSOWNER && e.Thing.Target && e.Thing.Target.CountInv(\"champion_PersistentInfo\"))\n\t\t\t{\n\t\t\tstring token = \"LDLegendaryMonsterTransformed\";\n\t\t\tif(ld_dormant && !e.Thing.Target.CountInv(token))\n\t\t\t\treturn;\n\n\t\t\te.Thing.Translation = e.Thing.Target.Translation;\n\t\t\t}\n\n\t\tif( e.Thing.bMISSILE && e.Thing.Target && e.Thing.Target.CountInv(\"champion_YellowToken\"))\n\t\t\t{\n\t\t\tstring token = \"LDLegendaryMonsterTransformed\";\n\t\t\tif(ld_dormant && !e.Thing.Target.CountInv(token))\n\t\t\t\treturn;\n\n\t\t\tdouble factor = 1.5;\n\t\t\tif(ld_boost)\n\t\t\t\tfactor = e.Thing.Target.CountInv(token)? 2.0 : 1.5;\n\n\t\t\te.Thing.A_ScaleVelocity(factor);\n\t\t\t}\n\n \t\tif( e.Thing.bMISSILE && !e.Thing.CountInv(\"champion_SplitterToken\") && e.Thing.Target && e.Thing.Target.CountInv(\"champion_SplitterToken\") )\n\t\t\t{\n\t\t\tlet mislx = e.Thing.SpawnMissileAngleZSpeed (\te.Thing.Pos.z,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.Thing.GetClassName(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.Thing.Angle+12.5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.thing.vel.z,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.thing.Speed,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.Thing.Target,0);\n\t\t\tif(mislx)\n\t\t\t\t{\n\t\t\t\tmislx.A_GiveInventory(\"champion_SplitterToken\");\n\t\t\t\tmislx.target = e.Thing.Target;\n\t\t\t\tmislx.tracer = e.Thing.Tracer;\n\t\t\t\t}\n\n\t\t\tlet misly = e.Thing.SpawnMissileAngleZSpeed (\te.Thing.Pos.z,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.Thing.GetClassName(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.Thing.Angle-12.5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.thing.vel.z,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.thing.Speed,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.Thing.Target,0);\n\t\t\tif(misly)\n\t\t\t\t{\n\t\t\t\tmisly.A_GiveInventory(\"champion_SplitterToken\");\n\t\t\t\tmisly.target = e.Thing.Target;\n\t\t\t\tmisly.tracer = e.Thing.Tracer;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// standard monster handling - changes spectres from fuzz to trans\n\t\tif( e.Thing.bISMONSTER )\n\t\t\t{\n\t\t\te.Thing.A_SetRenderstyle(e.Thing.Alpha,STYLE_TRANSLUCENT);\n\t\t\t}\n\n\t\t// champion spawning\n\t\tif(\te.Thing.bISMONSTER \t&&\n\t\t\te.Thing.bCOUNTKILL \t&&\n\t\t\t!e.Thing.bSPECIAL \t&&\n\t\t\t!e.Thing.bFRIENDLY \t&&\n\t\t\t!e.Thing.CountInv(\"champion_NullToken\"))\n\t\t\t{\n\t\t\tint sk = G_SkillPropertyInt(SKILLP_ACSReturn);\n\t\t\tint chance = (4 + (sk*10)) * (sk+1);\n\t\t\tint or = champion_Static.champion_ReturnCVAR(\"champion_OverrideChance\");\n\t\t\tif(or != -1) { chance = or; }\n\n\t\t\tif(legend && champion_Static.champion_ReturnCVAR(\"champion_Legendoom\"))\n\t\t\t\tchance = 256;\n\n\t\t\tif(random(0,255) < chance)\n\t\t\t\t{\n\t\t\t\tif(champion_WeightedColours.Size() > 0)\n\t\t\t\t\t{\n\t\t\t\t\tint i = random(0,champion_WeightedColours.Size()-1);\n\n\t\t\t\t\te.Thing.A_GiveInventory(\"champion_PersistentInfo\");\n\t\t\t\t\tlet info = champion_PersistentInfo(e.Thing.FindInventory(\"champion_PersistentInfo\"));\n\n\t\t\t\t\tif(info)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tinfo.c = champion_WeightedColours[i];\n\t\t\t\t\t\t}\n\n\t\t\t\t\tlet controller = champion_BaseController(new(champion_WeightedColours[i]));\n\t\t\t\t\tif(controller)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tcontroller.champion \t\t= e.Thing;\n\n\t\t\t\t\t\tcontroller.colours\t\t\t= colours;\n\t\t\t\t\t\tcontroller.icons \t\t\t= icons;\n\t\t\t\t\t\tcontroller.particles \t\t= particles;\n\t\t\t\t\t\tcontroller.bundles \t\t\t= bundles;\n\t\t\t\t\t\tcontroller.mutationchance \t= mutationchance;\n\t\t\t\t\t\tcontroller.legend\t\t\t= legend;\n\t\t\t\t\t\tcontroller.ld_dormant\t\t= ld_dormant;\n\t\t\t\t\t\tcontroller.ld_boost \t\t= ld_boost;\n\n\t\t\t\t\t\tcontroller.icon_scale\t\t= icon_scale;\n\t\t\t\t\t\tcontroller.icon_alpha\t\t= icon_alpha;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\tOverride void WorldThingRevived(WorldEvent e)\n\t\t{\n\t\tlet info = champion_PersistentInfo(e.Thing.FindInventory(\"champion_PersistentInfo\"));\n\t\tif(info)\n\t\t\t{\n\t\t\tlet controller = champion_BaseController(new(info.c));\n\t\t\tif(controller)\n\t\t\t\t{\n\t\t\t\tcontroller.mutation \t\t= info.m;\n\t\t\t\tcontroller.champion \t\t= e.Thing;\n\n\t\t\t\tcontroller.colours\t\t\t= colours;\n\t\t\t\tcontroller.icons \t\t\t= icons;\n\t\t\t\tcontroller.particles \t\t= particles;\n\t\t\t\tcontroller.bundles \t\t\t= bundles;\n\t\t\t\tcontroller.mutationchance \t= mutationchance;\n\t\t\t\tcontroller.legend\t\t\t= legend;\n\t\t\t\t//controller.ld_dormant\t\t= ld_dormant;\n\t\t\t\tcontroller.ld_boost \t\t= ld_boost;\n\n\t\t\t\tcontroller.icon_scale\t\t= icon_scale;\n\t\t\t\tcontroller.icon_alpha\t\t= icon_alpha;\n\t\t\t\t}\n\t\t\t}\n\t\t// if e.Thing is an indigo clone\n\t\tif(e.Thing && e.Thing.CountInv(\"champion_NullToken\"))\n\t\t\t{\n\t\t\te.Thing.A_SpawnItemEx(\"ArchvileFire\");\n\t\t\te.Thing.Destroy();\n\t\t\t}\n\t\t// if e.Thing is a dark red champion\n\t\tif(e.Thing && e.Thing.CountInv(\"champion_DarkRedToken\"))\n\t\t\t{\n\t\t\te.Thing.bSOLID = e.Thing.default.bSOLID;\n\t\t\te.Thing.bSHOOTABLE = e.Thing.default.bSHOOTABLE;\n\t\t\te.Thing.bNOTARGET = e.Thing.default.bNOTARGET;\n\t\t\te.Thing.bNOTAUTOAIMED = e.Thing.default.bNOTAUTOAIMED;\n\t\t\te.Thing.bNEVERTARGET = e.Thing.default.bNEVERTARGET;\n\t\t\te.Thing.bINVISIBLE = e.Thing.default.bINVISIBLE;\n\t\t\te.Thing.A_SpawnItemEx(\"ArchvileFire\");\n\t\t\t}\n\t\t}\n\n\tOverride void WorldThingDamaged(WorldEvent e)\n\t\t{\n\t\tif(e.Thing.InStateSequence(e.Thing.CurState, e.Thing.FindState('Ice')) && e.damagetype == \"ice\" && !e.Thing.bNOICEDEATH)\n\t\t\t{\n\t\t\te.Thing.A_SetTranslation(ice_trans);\n\t\t\t}\n\t\t}\n\t}"
},
{
"source": "pk3",
"name": "zscript/champions/baseclass.txt",
"contents": "/*\n *\n *\t\tChampion Base Controller\n *\t\t\tStores all the empty functions required for\n *\t\t\tchampion modification\n *\n */\n\nclass champion_BaseController : thinker\n\t{\n\tactor \tchampion;\t// The champion to be controlled\n\n\tint \teftic;\t\t// duration to pass before champion_TickEffect() is called\n\tint \tmutation;\t// current Mutation\n\n\tstate \tprevState;\t// Previous State (for modifying actor tic speed)\n\n\tint \toldhealth;\n\tint \tstarthealth;\n\n\tbool colours;\n\tbool icons;\n\tbool particles;\n\tbool bundles;\n\n\tdouble icon_scale;\n\tdouble icon_alpha;\n\n\tbool setup;\n\tint time;\n\tint mutationchance;\n\n\tstring ld_token1;\n\tstring ld_token2;\n\n\tbool legend;\t\t// [LD-Compat] monster is legendary\n\tbool transformed;// [LD-Compat] monster has transformed\n\tbool ld_boost;\n\tbool ld_dormant;\n\n\tvirtual color GetParticleColour()\n\t\t{\n\t\tstatic const color ParticleColours[]=\n\t\t\t{\n\t\t\t\"ffffff\"\n\t\t\t};\n\n\t\treturn ParticleColours[0];\n\t\t}\n\n\tvirtual void champion_GiveToken()\n\t\t{\n\t\t}\n\n\tvirtual void champion_InitEffect()\t// When the champion is spawned\n\t\t{\n\t\t}\n\n\tvirtual void champion_TickEffect()\t// When the champion tics (based on EffectTic property)\n\t\t{\n\t\t}\n\n\tvirtual void champion_HitEffect()\t// When the champion takes damage\n\t\t{\n\t\t}\n\n\tvirtual void champion_DeathEffect()\t// When the champion dies\n\t\t{\n\t\t}\n\n\tvirtual void champion_LegendoomSpecial()\n\t\t{\n\t\t}\n\n\tvoid champion_SpawnIcon(int icon, string t)\n\t\t{\n\n\t\tlet i = champion_Icon(champion.Spawn(\"champion_Icon\",champion.pos,ALLOW_REPLACE));\n\t\tif(champion && i)\n\t\t\t{\n\t\t\ti.scale.x\t= icon_scale;\n\t\t\ti.scale.y\t= icon_scale;\n\t\t\ti.alpha \t= icon_alpha;\n\n\t\t\ti.Master\t= champion;\n\t\t\ti.Frame \t= icon;\n\t\t\t}\n\t\t}\n\n\tvirtual void champion_SpawnParticles()\n\t\t{\n\t\tif(champion && champion)\n\t\t\t{\n\t\t\tchampion.A_SpawnParticle(GetParticleColour(),\tflags:SPF_FULLBRIGHT|SPF_RELPOS,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlifetime:35,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize:frandom(4.0,6.0),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tangle:frandom(0.0,359.9),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\txoff:champion.Radius,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tzoff:frandom(champion.height*0.25,champion.height*0.75),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvelz:frandom(0.3,0.6),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taccelz:0.01\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\tvoid champion_InitMutation()\n\t\t{\n\t\tmutationchance = mutation? 256 : mutationchance;\n\t\tif(champion && random(0,255) < mutationchance)\n\t\t\t{\n\t\t\tlet info = champion_PersistentInfo(champion.FindInventory(\"champion_PersistentInfo\"));\n\n\t\t\tlet hand = champion_Handler(EventHandler.Find(\"champion_Handler\"));\n\t\t\tint pick = 0;\n\t\t\tif(champion && hand && info)\n\t\t\t\t{\n\t\t\t\tif(champion && hand.champion_WeightedMutations.Size() > 0)\n\t\t\t\t\t{\n\t\t\t\t\tpick = hand.champion_WeightedMutations[random(0,hand.champion_WeightedMutations.Size()-1)];\n\t\t\t\t\tinfo.m = pick;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tswitch(pick)\n\t\t\t\t{\n\t\t\t\tcase mutation_Titan:\n\t\t\t\t\tmutation = mutation_Titan;\n\t\t\t\t\tchampion.Scale *= 1.33;\n\t\t\t\t\tchampion.Health *= 2.0;\n\t\t\t\t\tchampion.DamageMultiply *= 2.0;\n\t\t\t\t\tchampion.PainChance *= 0.25;\n\t\t\t\t\tchampion.bBOSS = true;\n\t\t\t\t\tchampion.bNOTARGET = true;\n\t\t\t\t\tchampion.bMISSILEMORE = true;\n\t\t\t\t\tchampion.bMISSILEEVENMORE = true;\n\t\t\t\t\tchampion.bALWAYSFAST = true;\n\t\t\t\t\tchampion.bQUICKTORETALIATE = true;\n\t\t\t\t\tchampion.bFORCEINFIGHTING = true;\n\t\t\t\t\tchampion.bNOFEAR = true;\n\t\t\t\t\teftic = clamp(eftic * 0.5, 1, 99);\n\t\t\t\t\tchampion.A_SpawnItemEx(\"champion_TitanVisual\",flags:SXF_SETMASTER);\n\t\t\t\t\tchampion.A_GiveInventory(\"champion_TitanToken\");\n\t\t\t\t\tchampion.A_GiveInventory(\"champion_SplitterToken\");\n\t\t\t\t\tchampion.A_GiveInventory(\"champion_NullToken\");\t// titans can't be revived.\n\t\t\t\t\tbreak;\n\n\t\t\t\t//case mutation_Splitter:\n\t\t\t\t//\tchampion.A_GiveInventory(\"champion_SplitterToken\");\n\t\t\t\t//\tbreak;\n\n\t\t\t\tcase mutation_Undying:\n\t\t\t\t\tchampion.bNODAMAGE = true;\n\t\t\t\t\tchampion.bNOBLOOD = true;\n\t\t\t\t\tactor heart;\n\t\t\t\t\tbool fakebool;\n\t\t\t\t\tchampion.A_SpawnItemEx(\"champion_Halo\",flags:SXF_SETMASTER);\n\t\t\t\t\t[fakebool, heart] = champion.A_SpawnItemEx(\"champion_Heart\", zofs:champion.height*0.5, flags:SXF_SETMASTER|SXF_NOCHECKPOSITION);\n\t\t\t\t\t//heart.CopyFriendliness(champion,false);\n\t\t\t\t\theart.Health = champion.bBOSS? 200 : 50;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase mutation_Ghost:\n\t\t\t\t\tmutation = mutation_Ghost;\n\t\t\t\t\tchampion.bVISIBILITYPULSE = true;\n\t\t\t\t\tchampion.bBRIGHT = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t//case mutation_Psychic:\n\t\t\t\t//\tchampion.A_GiveInventory(\"champion_PsychicToken\");\n\t\t\t\t//\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\tvirtual void champion_SpawnBundles(void)\n\t\t{\n\t\tint maxdrops = clamp(starthealth * 0.05, 4, 25);\n\t\tint tier;\n\t\tmaxdrops *= ((mutation)\t\t\t? 2.0 : 1.0);\n\t\tmaxdrops *= ((champion.bBOSS)\t? 2.0 : 1.0);\n\n\t\tif(champion && starthealth < 150)\n\t\t\ttier = 0;\n\n\t\tif(champion && starthealth >= 150)\n\t\t\ttier = 1;\n\n\t\tif(champion && starthealth >= 300)\n\t\t\ttier = 2;\n\n\t\tif(champion && starthealth >= 500)\n\t\t\ttier = 3;\n\n\t\tif(champion && starthealth >= 1000)\n\t\t\ttier = 4;\n\n\t\tif(champion && starthealth >= 2000)\n\t\t\ttier = 5;\n\n\t\tlet dropper = champion_Bundle(champion.Spawn(\"champion_Bundle\",champion.pos,ALLOW_REPLACE));\n\t\tif(champion && dropper)\n\t\t\t{\n\t\t\tdropper.maxdrops \t= maxdrops;\n\t\t\tdropper.tier\t\t= tier;\n\t\t\t}\n\t\t}\n\n\toverride void PostBeginPlay()\n\t\t{\n\t\tsuper.PostBeginPlay();\n\n\t\tif(champion)\n\t\t\tchampion_GiveToken();\n\n\t\tld_token1 = \"LDLegendaryMonsterToken\";\n\t\tld_token2 = \"LDLegendaryMonsterTransformed\";\n\t\ttime = legend? level.time + 3 : level.time + 0;\n\t\t}\n\n\toverride void Tick()\n\t\t{\n\t\tsuper.Tick();\n\n\t\tif(champion)\n\t\t\t{\n\t\t\tif(champion && ld_dormant && champion.CountInv(ld_token2))\n\t\t\t\t{\n\t\t\t\tld_dormant = false;\n\t\t\t\tchampion.A_SpawnItemEx(\"ArchvileFire\",flags:SXF_TRANSFERTRANSLATION);\n\t\t\t\t}\n\n\t\t\tif(champion && !setup && level.time >= time)\n\t\t\t\t{\n\t\t\t\tif(champion && legend && !champion.CountInv(ld_token1))\n\t\t\t\t\t{\n\t\t\t\t\tchampion.A_TakeInventory(\"champion_PersistentInfo\");\n\t\t\t\t\tint size = champion_Static.champion_Tokens.Size()-1;\n\t\t\t\t\tfor(int i = 0; i < size; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tchampion.A_TakeInventory(champion_Static.champion_Tokens[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\tself.Destroy();\n\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\tif(champion && ld_dormant)\n\t\t\t\t\treturn;\n\n\t\t\t\tchampion_InitEffect();\n\t\t\t\tchampion_InitMutation();\n\t\t\t\tchampion.starthealth = champion.health / G_SkillPropertyFloat(SKILLP_MonsterHealth);\n\t\t\t\tstarthealth = champion.starthealth;\n\t\t\t\tsetup = true;\n\t\t\t\tchampion.A_SpawnItemEx(\"ArchvileFire\",flags:SXF_TRANSFERTRANSLATION);\n\t\t\t\t}\n\n\t\t\tif(champion && ld_dormant)\n\t\t\t\treturn;\n\n\t\t\tif(champion && particles)\n\t\t\t\tchampion_SpawnParticles();\n\n\t\t\tif(champion && champion.health < 1)\n\t\t\t\t{\n\t\t\t\tif(champion && bundles)\n\t\t\t\t\tchampion_SpawnBundles();\n\n\t\t\t\tchampion_DeathEffect();\n\t\t\t\tchampion.StartHealth \t= champion.Default.StartHealth;\n\t\t\t\tchampion.PainChance\t\t= champion.Default.PainChance;\n\t\t\t\tchampion.DamageFactor \t= champion.Default.DamageFactor;\n\t\t\t\tchampion.DamageMultiply = champion.Default.DamageMultiply;\n\t\t\t\tself.destroy();\n\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\tif(champion && champion.Health > oldhealth)\n\t\t\t\toldhealth = champion.Health;\n\n\t\t\tif(champion && champion.Health < oldhealth && champion.Health > 0)\n\t\t\t\t{\n\t\t\t\toldhealth = champion.Health;\n\t\t\t\tchampion_HitEffect();\n\t\t\t\t}\n\n\t\t\tif(champion && eftic && level.time % eftic == 0)\n\t\t\t\tchampion_TickEffect();\n\n\t\t\tif(champion && !transformed && champion.CountInv(ld_token2) && ld_boost)\n\t\t\t\t{\n\t\t\t\ttransformed = true;\n\t\t\t\tchampion_LegendoomSpecial();\n\t\t\t\t}\n\n\t\t\tif(champion && mutation == mutation_Titan)\n\t\t\t\t{\n\t\t\t\tint a = champion.A_RadiusGive(\"champion_AggroEffect\",384.0,RGF_MONSTERS|RGF_EXFILTER, filter: \"champion_Heart\");\n\t\t\t\tdouble b = clamp(1.0 - (a * 0.1), 0.1, 1.0);\n\t\t\t\tchampion.DamageFactor = b;\n\t\t\t\t}\n\n\t\t\tif(champion && mutation == mutation_Ghost)\n\t\t\t\t{\n\t\t\t\tif(champion && champion.alpha < 0.5)\n\t\t\t\t\t{\n\t\t\t\t\tchampion.bSPECTRAL = true;\n\t\t\t\t\t}\n\t\t\t\tif(champion && champion.alpha >= 0.5)\n\t\t\t\t\t{\n\t\t\t\t\tchampion.bSPECTRAL = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\nclass champion_PersistentInfo : Inventory\n\t{\n\tclass<thinker> \tc;\n\tint\t\t\t\tm;\n\tdefault\n\t\t{\n\t\tInventory.MaxAmount 1;\n\t\t+INVENTORY.UNDROPPABLE;\n\t\t+INVENTORY.HUBPOWER;\n\t\t+INVENTORY.UNTOSSABLE;\n\t\t}\n\t}\n\nclass champion_NullToken : Inventory\n\t{\n\tdefault\n\t\t{\n\t\t+INVENTORY.UNTOSSABLE;\n\t\t+INVENTORY.UNDROPPABLE;\n\t\t}\n\t}\n\nclass champion_ItemBundle : Actor\n\t{\n\tint quantity;\n\t}"
},
{
"source": "pk3",
"name": "zscript/champions/tokens.txt",
"contents": "class champion_Token : Inventory\n\t{\n\tdefault\n\t\t{\n\t\t+INVENTORY.UNDROPPABLE;\n\t\t+INVENTORY.UNTOSSABLE;\n\t\t}\n\t}\n\n// Champ Tokens\nclass champion_DarkRedToken \t: champion_Token { }\nclass champion_RedToken\t\t\t: champion_Token { }\nclass champion_OrangeToken\t\t: champion_Token { }\nclass champion_YellowToken\t\t: champion_Token { }\nclass champion_DarkGreenToken \t: champion_Token { }\nclass champion_GreenToken\t\t: champion_Token { }\nclass champion_CyanToken\t\t: champion_Token { }\nclass champion_BlueToken\t\t: champion_Token { }\nclass champion_IndigoToken \t\t: champion_Token { }\nclass champion_VioletToken \t\t: champion_Token { }\nclass champion_PinkToken\t\t: champion_Token { }\nclass champion_MagentaToken\t\t: champion_Token { }\nclass champion_BlackToken\t\t: champion_Token { }\nclass champion_GreyToken\t\t: champion_Token { }\nclass champion_WhiteToken\t\t: champion_Token { }\nclass champion_BronzeToken\t\t: champion_Token { }\nclass champion_SilverToken\t\t: champion_Token { }\nclass champion_GoldToken\t\t: champion_Token { }\n\n// Mutation Tokens\nclass champion_TitanToken\t\t: champion_Token { }\nclass champion_SplitterToken\t: champion_Token { }\nclass champion_HeartToken\t\t: champion_Token { }\nclass champion_PsychicToken\t\t: champion_Token { }"
},
{
"source": "pk3",
"name": "zscript/champions/extrafx.txt",
"contents": "/*\n *\n *\t\tExtra effects\n *\t\t\tFor champion mutations and\n *\t\t\tother stuff\n *\n */\n\n//\n// Champion Icon\nclass champion_Icon : Actor\n\t{\n\tactor champion;\n\tdefault\n\t\t{\n\t\t+NOINTERACTION;\n\t\t+NOGRAVITY;\n\t\t+BRIGHT;\n\t\tRenderStyle \"Translucent\";\n\t\tscale 0.2;\n\t\t}\n\n\toverride void Tick()\n\t\t{\n\t\tsuper.Tick();\n\n\t\tif(master && master.health > 0)\n\t\t\tA_Warp(AAPTR_MASTER, flags:WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION, heightoffset: 1.1);\n\t\telse\n\t\t\tdestroy();\n\t\t}\n\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\t//\"####\" \"#\" 0;\n\t\t\tICNX \"#\" 1;\n\t\t\twait;\n\t\t}\n\t}\n\n//\n// Undying Champion Mutation FX\nclass champion_Halo : Actor\n\t{\n\tdefault\n\t\t{\n\t\t+NOINTERACTION;\n\t\t+FLOATBOB;\n\t\tFloatBobStrength 0.1;\n\t\tScale 0.3;\n\t\t}\n\toverride void Tick()\n\t\t{\n\t\tsuper.Tick();\n\n\t\tif(master && master.bNODAMAGE)\n\t\t\t{\n\t\t\tA_Warp(AAPTR_MASTER,flags:WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE, heightoffset:1.05);\n\t\t\treturn;\n\t\t\t}\n\t\tdestroy();\n\t\t}\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tHALO A 1 Bright;\n\t\t\tloop;\n\t\t}\n\t}\n\nclass champion_Heart : Actor\n\t{\n\tdefault\n\t\t{\n\t\tRadius 16;\n\t\tHeight 24;\n\t\tSpeed 1;\n\t\tHealth 50;\n\t\tScale 0.75;\n\t\tmass 0x7FFFFFFF;\n\t\tPushFactor 0.1;\n\t\tMonster;\n\t\t-SOLID;\n\t\t-COUNTKILL;\n\t\t+NOGRAVITY;\n\t\t+FLOATBOB;\n\t\t//+THRUACTORS;\n\t\t//+BRIGHT;\n\t\t+NOTARGETSWITCH;\n\t\t+NOTARGET;\n\t\t+NEVERTARGET;\n\t\t+RANDOMIZE;\n\t\t}\n\toverride void PostBeginPlay()\n\t\t{\n\t\tif(master)\n\t\t\t{\n\t\t\ttarget = master;\n\t\t\t}\n\t\t}\n\n\tOverride int DamageMobj(Actor inflictor, Actor source, int damage, Name mod, int flags, double angles)\n\t\t{\n\t\tif(source && !source.CheckClass(\"PlayerPawn\", AAPTR_DEFAULT, true))\n\t\t\tdamage = 0;\n\t\treturn Super.DamageMobj(Inflictor, Source, Damage, Mod, Flags, Angle);\n\t\t}\n\n\toverride void Tick()\n\t\t{\n\t\tsuper.tick();\n\t\tA_Chase(null, null);\n\t\tif(target && target != master)\n\t\t\t{\n\t\t\ttarget = master;\n\t\t\t}\n\t\tif(master)\n\t\t\t{\n\t\t\tif(Distance2D(master) > 512)\n\t\t\t\t{\n\t\t\t\t//A_SpawnItemEx(\"TeleportFog\");\n\t\t\t\tSetOrigin((master.pos.x,master.pos.y,master.pos.z+(master.height*0.5)),0);\n\t\t\t\t//A_SpawnItemEx(\"TeleportFog\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tHART A 35;\n\t\t\tHART A 1 A_SetScale(scale.x+0.1,scale.y-0.0);\n\t\t\tHART A 1 A_SetScale(scale.x+0.1,scale.y-0.1);\n\t\t\tHART A 1 A_SetScale(scale.x+0.0,scale.y-0.1);\n\t\t\tHART A 0 A_SpawnItemEx(\"Blood\");\n\t\t\tHART A 1 A_SetScale(scale.x-0.1,scale.y+0.0);\n\t\t\tHART A 1 A_SetScale(scale.x-0.1,scale.y+0.1);\n\t\t\tHART A 1 A_SetScale(scale.x+0.0,scale.y+0.1);\n\t\t\tloop;\n\t\tDeath.Massacre:\n\t\t\tTNT1 A 0\n\t\t\t\t{\n\t\t\t\tmaster.bNOBLOOD = master.default.bNOBLOOD;\n\t\t\t\tmaster.bNODAMAGE = false;\n\t\t\t\tA_KillMaster(\"Massacre\",KILS_FOILBUDDHA);\n\t\t\t\t}\n\t\tDeath:\n\t\t\tTNT1 A 0\n\t\t\t\t{\n\t\t\t\tif(master)\n\t\t\t\t\t{\n\t\t\t\t\tmaster.bNOBLOOD = master.default.bNOBLOOD;\n\t\t\t\t\tmaster.bNODAMAGE = false;\n\t\t\t\t\t}\n\t\t\t\tfor(int i = 0; i < 16; i++)\n\t\t\t\t\t{\n\t\t\t\t\tA_SpawnItemEx(\"Blood\", \txvel:frandom(2.0,4.0),\n\t\t\t\t\t\t\t\t\t\t\tzvel:frandom(4.0,8.0),\n\t\t\t\t\t\t\t\t\t\t\tangle:frandom(0.0,359.0));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tstop;\n\t\tGenericFreezeDeath:\n\t\t\t\"####\" \"#\" 0\n\t\t\t\t{\n\t\t\t\tif(master)\n\t\t\t\t\t{\n\t\t\t\t\tmaster.bNOBLOOD = master.default.bNOBLOOD;\n\t\t\t\t\tmaster.bNODAMAGE = false;\n\t\t\t\t\t}\n\t\t\t\tfor(int i = 0; i < 16; i++)\n\t\t\t\t\t{\n\t\t\t\t\tA_SpawnItemEx(\"Blood\", \txvel:frandom(2.0,4.0),\n\t\t\t\t\t\t\t\t\t\t\tzvel:frandom(4.0,8.0),\n\t\t\t\t\t\t\t\t\t\t\tangle:frandom(0.0,359.0));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tGoto Super::GenericFreezeDeath;\n\t\t}\n\t}\n\n//\n// Titan Champion Aggression buff\nclass champion_AggroEffect : CustomInventory\n\t{\n\tdefault\n\t\t{\n\t\t+INVENTORY.ALWAYSPICKUP;\n\t\t+INVENTORY.AUTOACTIVATE;\n\t\t}\n\tstates\n\t\t{\n\t\tUse:\n\t\t\tTNT1 A 0\n\t\t\t\t{\n\t\t\t\tif(invoker.owner)\n\t\t\t\t\t{\n\t\t\t\t\tif(invoker.owner.bSPECIAL || invoker.owner.bWEAPONSPAWN)\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tA_GiveInventory(\"champion_AggroPower\");\n\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\tstop;\n\t\t}\n\t}\n\nclass champion_AggroPower : PowerUp\n\t{\n\toverride void InitEffect()\n\t\t{\n\t\tSuper.InitEffect();\n\t\tif(owner)\n\t\t\t{\n\t\t\tif(owner.CountInv(\"champion_TitanToken\"))\n\t\t\t\treturn;\n\n\t\t\towner.bALWAYSFAST = true;\n\t\t\towner.A_SpawnItemEx(\"champion_AggroVisual\",flags:SXF_SETMASTER);\n\t\t\t}\n\t\t}\n\n\toverride void EndEffect()\n\t\t{\n\t\tsuper.EndEffect();\n\t\tif(owner)\n\t\t\t{\n\t\t\tif(owner.CountInv(\"champion_TitanToken\"))\n\t\t\t\treturn;\n\n\t\t\towner.bALWAYSFAST = owner.default.bALWAYSFAST;\n\t\t\t}\n\t\t}\n\t}\n\nclass champion_AggroGiver : PowerupGiver\n\t{\n\tdefault\n\t\t{\n\t\tPowerup.Duration -10;\n\t\tPowerup.Type \"champion_AggroPower\";\n\t\t+INVENTORY.ALWAYSPICKUP;\n\t\t+INVENTORY.AUTOACTIVATE;\n\t\t}\n\t}\n\nclass champion_AggroVisual : Actor\n\t{\n\tdefault\n\t\t{\n\t\t+NOINTERACTION;\n\t\t+FLATSPRITE;\n\t\t+ROLLSPRITE;\n\t\t+VISIBILITYPULSE;\n\t\tRenderstyle \"add\";\n\t\tScale 0.666;\n\t\t}\n\toverride void Tick()\n\t\t{\n\t\tsuper.Tick();\n\n\t\tif(master && master.CountInv(\"champion_AggroPower\"))\n\t\t\t{\n\t\t\tSetOrigin((master.pos.x,master.pos.y,master.floorz+1),true);\n\t\t\treturn;\n\t\t\t}\n\t\tdestroy();\n\t\t}\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tPENT A 1 Bright;\n\t\t\tloop;\n\t\t}\n\t}\n\nclass champion_TitanVisual : Actor\n\t{\n\tint visdir;\n\n\tdefault\n\t\t{\n\t\t+NOINTERACTION;\n\t\t+FLATSPRITE;\n\t\t+ROLLSPRITE;\n\t\t+VISIBILITYPULSE;\n\t\tRenderstyle \"Translucent\";\n\t\tScale 0.666;\n\t\t}\n\toverride void Tick()\n\t\t{\n\t\tsuper.Tick();\n\n\t\tif (visdir > 0)\n\t\t\t{\n\t\t\tAlpha += 1/16.;\n\t\t\tif (Alpha >= 1.)\n\t\t\t\t{\n\t\t\t\tAlpha = 1.;\n\t\t\t\tvisdir = -1;\n\t\t\t\t}\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\tAlpha -= 1/16.;\n\t\t\tif (Alpha <= 0.25)\n\t\t\t\t{\n\t\t\t\tAlpha = 0.25;\n\t\t\t\tvisdir = 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\tif(master && master.health >1)\n\t\t\t{\n\t\t\tscale.x = 2.666 - ( master.DamageFactor * 2.0 );\n\t\t\tscale.y = 2.666 - ( master.DamageFactor * 2.0 );\n\t\t\tSetOrigin((master.pos.x,master.pos.y,master.floorz+1),true);\n\t\t\treturn;\n\t\t\t}\n\t\tdestroy();\n\t\t}\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tPENT A 1 Bright;\n\t\t\tloop;\n\t\t}\n\t}\n\nclass champion_TitanBossEffect : CustomInventory\n\t{\n\tdefault\n\t\t{\n\t\t+INVENTORY.AUTOACTIVATE;\n\t\t+INVENTORY.ALWAYSPICKUP;\n\t\t}\n\tstates\n\t\t{\n\t\tuse:\n\t\t\tTNT1 A 0\n\t\t\t\t{\n\t\t\t\tif(invoker.owner.CountInv(\"champion_AggroPower\"))\n\t\t\t\t\tinvoker.owner.A_DamageSelf(1000000,'none',DMSS_KILL);\n\t\t\t\t}\n\t\t\tstop;\n\t\t}\n\t}\n//\n// Psychic Mutation FX\nclass champion_MissileManipulator : Thinker\n\t{\n\tactor missile;\n\tactor missiletarget;\n\n\toverride void PostBeginPlay()\n\t\t{\n\t\tif(missile)\n\t\t\t{\n\t\t\tmissile.bSEEKERMISSILE = true;\n\t\t\tmissiletarget = missile.target.target;\n\t\t\t}\n\t\t}\n\n\toverride void Tick()\n\t\t{\n\t\tsuper.Tick();\n\t\tif(missile && missiletarget)\n\t\t\t{\n\t\t\t//double dang = clamp(missile.AngleTo(missiletarget),0,8);\n\t\t\t//double dpit = clamp(missile.\n\t\t\tmissile.VelFromAngle(missile.speed, missile.AngleTo(missiletarget));\n\t\t\t}\n\n\t\telse\n\t\t\tself.Destroy();\n\t\t}\n\t}\n\n//\n// Metallic Champion Sparkle FX\nclass champion_Sparkle : Actor\n\t{\n\tdefault\n\t\t{\n\t\t+NOINTERACTION;\n\t\t+NOGRAVITY;\n\t\t+ROLLSPRITE;\n\t\t+ROLLCENTER;\n\t\tScale 0.25;\n\t\t}\n\n\tdouble dir;\n\n\toverride void PostBeginPlay()\n\t\t{\n\t\tsuper.PostBeginPlay();\n\n\t\tdir = randompick(-1,1);\n\t\t}\n\n\toverride void tick()\n\t\t{\n\t\tsuper.Tick();\n\n\t\tA_SetRoll(roll + 5*dir, SPF_INTERPOLATE);\n\t\tA_SetScale(scale.x-(scale.x * 0.3));\n\t\tif(scale.x < 0.0001)\n\t\t\tdestroy();\n\t\t}\n\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tXXST A 1 Bright;\n\t\t\twait;\n\t\t}\n\t}\n\nclass champion_Sparkle2 : champion_Sparkle\n\t{\n\tdefault\n\t\t{\n\t\tscale 1.0;\n\t\t}\n\t}"
},
{
"source": "pk3",
"name": "zscript/champions/champs/champ_template.txt",
"contents": "/*\n *\n *\t\t<colour> Champion\n *\t\t\t<effect>\n *\n */\nclass champion_<colour>Controller : champion_BaseController\n\t{\n\toverride color GetParticleColour()\n\t\t{\n\t\tstatic const color ParticleColours[]=\n\t\t\t{\n\t\t\t\"e62e00\", \"b32400\", \"801a00\", \"4d0f00\", \"1a0500\"\n\t\t\t};\n\n\t\treturn ParticleColours[random(0,ParticleColours.Size()-1)];\n\t\t}\n\n\toverride void champion_InitEffect()\n\t\t{\n\t\teftic = <tic>;\n\t\tif(colours)\n\t\t\tchampion.A_SetTranslation(\"champion_<colour>\");\n\n\t\tif(icons)\n\t\t\tchampion_SpawnIcon(<index>,\"champ_<colour>\");\n\n\t\t}\n\n\toverride void champion_LegendoomSpecial()\n\t\t{\n\t\t}\n\n\toverride void champion_TickEffect()\n\t\t{\n\t\t}\n\n\toverride void champion_HitEffect()\n\t\t{\n\t\t}\n\n\toverride void champion_DeathEffect()\n\t\t{\n\t\t}\n\t}"
},
{
"source": "pk3",
"name": "zscript/champions/champs/champ_darkred.txt",
"contents": "/*\n *\n *\t\tDark Red Champion\n *\t\t\tRespawns if the corpse isn't destroyed\n *\n */\nclass champion_DarkRedController : champion_BaseController\n\t{\n\tactor gibbed;\n\tbool hidden;\n\tint restics;\n\tint basetics;\n\tint destruction;\n\tint champhealth;\n\n\toverride color GetParticleColour()\n\t\t{\n\t\tstatic const color ParticleColours[]=\n\t\t\t{\n\t\t\t\"e62e00\", \"b32400\", \"801a00\", \"4d0f00\", \"1a0500\"\n\t\t\t};\n\n\t\treturn ParticleColours[random(0,ParticleColours.Size()-1)];\n\t\t}\n\n\toverride void champion_GiveToken()\n\t\t{\n\t\tchampion.A_GiveInventory(champion_Static.champion_Tokens[0]);\n\t\t}\n\n\toverride void champion_InitEffect()\n\t\t{\n\t\teftic = 1;\n\n\t\tif(colours)\n\t\t\tchampion.A_SetTranslation(\"champion_DarkRed\");\n\n\t\tif(icons)\n\t\t\tchampion_SpawnIcon(0,\"champ_DarkRed\");\n\n\t\tchamphealth = champion.Health;\n\t\tchampion.bBUDDHA = true;\n\t\tchampion.DeathSound = \"misc/gibbed\";\n\t\tbasetics = 105;\n\t\t}\n\n\toverride void champion_TickEffect()\n\t\t{\n\t\tif(champion.CountInv(\"champion_HeartToken\"))\n\t\t\treturn;\n\n\t\tif(champion && champion.health == 1 && !hidden)\n\t\t\t{\n\t\t\tfor(int i; i < 32; i++)\n\t\t\t\t{\n\t\t\t\tchampion.A_SpawnItemEx(\"Blood\",xvel:frandom(3.0,8.0), zvel:frandom(4.0,8.0), angle:frandom(0.0,359.9), flags:SXF_USEBLOODCOLOR);\n\t\t\t\t}\n\t\t\thidden = true;\n\n\t\t\tchampion.bSOLID = false;\n\t\t\tchampion.bSHOOTABLE = false;\n\t\t\tchampion.bNOTARGET = true;\n\t\t\tchampion.bNOTAUTOAIMED = true;\n\t\t\tchampion.bNEVERTARGET = true;\n\t\t\tchampion.bINVISIBLE = true;\n\t\t\tchampion.A_Stop();\n\t\t\tchampion.tics = -1;\n\t\t\trestics = basetics;\n\t\t\tgibbed = Actor.Spawn(\"champion_ShootableCorpse\",champion.pos);\n\t\t\tchampion.SetOrigin((16384,16384,0),0);\t // crime\n\t\t\t}\n\n\t\tif(hidden && gibbed && gibbed.health < 1)\n\t\t\t{\n\t\t\tchampion.SetOrigin(gibbed.pos,false);\n\t\t\thidden = false;\n\t\t\tchampion.bSOLID = true;\n\t\t\tchampion.bSHOOTABLE = true;\n\t\t\tchampion.bBUDDHA = false;\n\t\t\tchampion.bSPECTRAL = false;\n\t\t\tchampion.tics = 1;\n\t\t\tchampion.A_Die();\n\t\t\t}\n\n\t\tif(hidden)\n\t\t\t{\n\t\t\trestics -= 1;\n\t\t\tif(restics < 0)\n\t\t\t\t{\n\t\t\t\thidden = false;\n\t\t\t\tchampion.A_XScream();\n\t\t\t\tchampion.SetStateLabel(\"Spawn\");\n\t\t\t\tchampion.SetOrigin(gibbed.pos,false);\n\t\t\t\tchampion.health = transformed? starthealth * 0.66 : starthealth * 0.33;\n\t\t\t\tchampion.bSOLID = champion.default.bSOLID;\n\t\t\t\tchampion.bSHOOTABLE = champion.default.bSHOOTABLE;\n\t\t\t\tchampion.bNOTARGET = champion.default.bNOTARGET;\n\t\t\t\tchampion.bNOTAUTOAIMED = champion.default.bNOTAUTOAIMED;\n\t\t\t\tchampion.bNEVERTARGET = champion.default.bNEVERTARGET;\n\t\t\t\tchampion.bINVISIBLE = champion.default.bINVISIBLE;\n\t\t\t\tchampion.tics = 1;\n\t\t\t\tfor(int i; i < 32; i++)\n\t\t\t\t\t{\n\t\t\t\t\tchampion.A_SpawnItemEx(\"Blood\",xvel:frandom(3.0,8.0), zvel:frandom(4.0,8.0), angle:frandom(0.0,359.9), flags:SXF_USEBLOODCOLOR);\n\t\t\t\t\t}\n\t\t\t\tgibbed.destroy();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\toverride void champion_DeathEffect()\n\t\t{\n\t\t}\n\t}\n\nclass champion_ShootableCorpse : Actor\n\t{\n\tdefault\n\t\t{\n\t\t+SOLID;\n\t\t+SHOOTABLE;\n\t\t+ISMONSTER;\n\t\tHealth 30;\n\t\tRadius 16;\n\t\tHeight 16;\n\t\tYScale 0.66;\n\t\t}\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tRSPL A 1;\n\t\t\twait;\n\t\tDeath:\n\t\t\tTNT1 A 0\n\t\t\t\t{\n\t\t\t\tfor(int i; i < 32; i++)\n\t\t\t\t\t{\n\t\t\t\t\tA_SpawnItemEx(\"Blood\",xvel:frandom(3.0,8.0), zvel:frandom(4.0,8.0), angle:frandom(0.0,359.9), flags:SXF_USEBLOODCOLOR);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tTNT1 A 35; //A_XScream();\n\t\t\tstop;\n\t\t}\n\t}"
},
{
"source": "pk3",
"name": "zscript/champions/champs/champ_red.txt",
"contents": "/*\n *\n *\t\tRed Champion\n *\t\t\tStarts with 2x base health\n *\n */\nclass champion_RedController : champion_BaseController\n\t{\n\toverride color GetParticleColour()\n\t\t{\n\t\tstatic const color ParticleColours[]=\n\t\t\t{\n\t\t\t\"ff0000\", \"ff4d4d\", \"ff9999\", \"ffffff\"\n\t\t\t};\n\n\t\treturn ParticleColours[random(0,ParticleColours.Size()-1)];\n\t\t}\n\n\toverride void champion_GiveToken()\n\t\t{\n\t\tchampion.A_GiveInventory(champion_Static.champion_Tokens[1]);\n\t\t}\n\n\toverride void champion_InitEffect()\n\t\t{\n\t\tif(colours)\n\t\t\tchampion.A_SetTranslation(\"champion_Red\");\n\n\t\tif(icons)\n\t\t\tchampion_SpawnIcon(1,\"champ_Red\");\n\n\t\tchampion.Health *= 2;\n\t\t}\n\t}"
},
{
"source": "pk3",
"name": "zscript/champions/champs/champ_orange.txt",
"contents": "/*\n *\n *\t\tOrange Champion\n *\t\t\tExplodes on Death\n *\n */\nclass champion_OrangeController : champion_BaseController\n\t{\n\tdouble missileofs;\n\tclass<actor> explosiontype;\n\n\toverride color GetParticleColour()\n\t\t{\n\t\tstatic const color ParticleColours[]=\n\t\t\t{\n\t\t\t\"ffffff\", \"ff9900\", \"ffad33\", \"ff5c33\", \"ff3300\"\n\t\t\t};\n\n\t\treturn ParticleColours[random(0,ParticleColours.Size()-1)];\n\t\t}\n\n\toverride void champion_GiveToken()\n\t\t{\n\t\tchampion.A_GiveInventory(champion_Static.champion_Tokens[2]);\n\t\t}\n\n\toverride void champion_InitEffect()\n\t\t{\n\t\tif(colours)\n\t\t\tchampion.A_SetTranslation(\"champion_Orange\");\n\n\t\tif(icons)\n\t\t\tchampion_SpawnIcon(2,\"champ_Orange\");\n\n\t\tmissileofs = champion.Height * 0.5;\n\t\texplosiontype = \"champion_Explosion\";\n\t\t}\n\toverride void champion_LegendoomSpecial()\n\t\t{\n\t\texplosiontype = \"champion_ClusterExplosion\";\n\t\t}\n\n\toverride void champion_DeathEffect()\n\t\t{\n\t\tchampion.A_SpawnItemEx(explosiontype, zofs:missileofs, flags:SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS);\n\t\t}\n\t}\n\nclass champion_Explosion : Rocket\n\t{\n\tdefault\n\t\t{\n\t\t-ROCKETTRAIL;\n\t\tspeed 0;\n\t\t}\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tTNT1 A 0 NoDelay A_PlaySound(\"weapons/rocklx\");\n\t\tDeath:\n\t\t\tOEXP A 8 Bright A_Explode();\n\t\t\tOEXP B 6 Bright;\n\t\t\tOEXP C 4 Bright;\n\t\t\tstop;\n\t\t}\n\t}\n\nclass champion_ClusterExplosion : Rocket\n\t{\n\tdefault\n\t\t{\n\t\t-ROCKETTRAIL;\n\t\tspeed 0;\n\t\t}\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tTNT1 A 0 NoDelay A_PlaySound(\"weapons/rocklx\");\n\t\tDeath:\n\t\t\tOEXP A 8 Bright\n\t\t\t\t{\n\t\t\t\tfor(int i = 0; i < 8; i++)\n\t\t\t\t\t{\n\t\t\t\t\tA_SpawnItemEx(\"champion_MiniCluster\",\txvel:frandom(4.0,8.0),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tzvel:frandom(4.0,8.0),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tangle:random(0,360));\n\t\t\t\t\t}\n\t\t\t\tA_Explode();\n\t\t\t\t}\n\t\t\tOEXP B 6 Bright;\n\t\t\tOEXP C 4 Bright;\n\t\t\tstop;\n\t\t}\n\t}\n\nclass champion_MiniCluster : champion_Fireball\n\t{\n\tdefault\n\t\t{\n\t\tDamageFunction (0);\n\t\tGravity 0.6;\n\t\tScale 0.75;\n\t\tDeathSound \"\";\n\t\tTranslation \"champion_Grey\";\n\t\tRenderstyle \"Normal\";\n\t\t+DEHEXPLOSION;\n\t\t}\n\tstates\n\t\t{\n\t\tDeath:\n\t\t\tOEXP A 8 Bright\n\t\t\t\t{\n\t\t\t\tA_SetTranslation(\"none\");\n\t\t\t\tA_Explode(64,64);\n\t\t\t\tA_PlaySound(\"weapons/rocklx\",CHAN_BODY,0.2);\n\t\t\t\t}\n\t\t\tOEXP B 6 Bright;\n\t\t\tOEXP C 4 Bright;\n\t\t\tstop;\n\t\t}\n\t}"
},
{
"source": "pk3",
"name": "zscript/champions/champs/champ_yellow.txt",
"contents": "/*\n *\n *\t\tYellow Champion\n *\t\t\t2x faster\n *\n */\nclass champion_YellowController : champion_BaseController\n\t{\n\tdouble factor;\n\n\toverride color GetParticleColour()\n\t\t{\n\t\tstatic const color ParticleColours[]=\n\t\t\t{\n\t\t\t\"ffffff\", \"ffffb3\", \"ffff4d\", \"e6e600\"\n\t\t\t};\n\n\t\treturn ParticleColours[random(0,ParticleColours.Size()-1)];\n\t\t}\n\n\toverride void champion_GiveToken()\n\t\t{\n\t\tchampion.A_GiveInventory(champion_Static.champion_Tokens[3]);\n\t\t}\n\n\toverride void champion_InitEffect()\n\t\t{\n\t\teftic = 1;\n\n\t\tif(colours)\n\t\t\tchampion.A_SetTranslation(\"champion_Yellow\");\n\n\t\tif(icons)\n\t\t\tchampion_SpawnIcon(3,\"champ_Yellow\");\n\n\t\tfactor = 1.5;\n\t\t//champion.bALWAYSFAST = true\n\t\t}\n\n\toverride void champion_LegendoomSpecial()\n\t\t{\n\t\tfactor = 2.0;\n\t\t}\n\n\toverride void champion_TickEffect()\n\t\t{\n\t\tif(champion && champion.health < 1 || champion.tics <= 0) { return; }\n\n if (prevState != champion.curState)\n\t\t\t{ champion.A_SetTics (champion.tics / factor); }\n\n prevState = champion.curState;\n\t\t}\n\t}"
},
{
"source": "pk3",
"name": "zscript/champions/champs/champ_darkgreen.txt",
"contents": "/*\n *\n *\t\tDark Green Champion\n *\t\t\tspawns a trail of creep\n *\n */\nclass champion_DarkGreenController : champion_BaseController\n\t{\n\tclass<actor> creep;\n\n\toverride color GetParticleColour()\n\t\t{\n\t\tstatic const color ParticleColours[]=\n\t\t\t{\n\t\t\t\"00b300\", \"008000\", \"004d00\", \"001a00\"\n\t\t\t};\n\n\t\treturn ParticleColours[random(0,ParticleColours.Size()-1)];\n\t\t}\n\n\toverride void champion_GiveToken()\n\t\t{\n\t\tchampion.A_GiveInventory(champion_Static.champion_Tokens[4]);\n\t\t}\n\n\toverride void champion_InitEffect()\n\t\t{\n\t\teftic = 10;\n\t\tif(colours)\n\t\t\tchampion.A_SetTranslation(\"champion_DarkGreen\");\n\n\t\tif(icons)\n\t\t\tchampion_SpawnIcon(4,\"champ_DarkGreen\");\n\n\t\tcreep = \"champion_DarkGreenCreep\";\n\t\t}\n\n\toverride void champion_LegendoomSpecial()\n\t\t{\n\t\tcreep = \"champion_RedCreep\";\n\t\t}\n\n\toverride void champion_TickEffect()\n\t\t{\n\t\tif(champion.target)\n\t\t\t{\n\t\t\tchampion.A_SpawnItemEx(creep, xofs:-16, yofs:frandom(-16.0,16.0), flags:SXF_SETTARGET);\n\t\t\t}\n\t\t}\n\n/* \toverride void champion_DeathEffect()\n\t\t{\n\t\tchampion.A_SpawnItemEx(\"champion_BigDarkGreenCreep\", xofs:-16, flags:SXF_SETTARGET);\n\t\t} */\n\t}\n\nclass champion_DarkGreenCreep : Actor\n\t{\n\tint count;\n\n\tdefault\n\t\t{\n\t\t+FLATSPRITE;\n\t\t+NOGRAVITY;\n\t\t+BRIGHT;\n\t\tRenderStyle \"Stencil\";\n\t\tStencilColor \"00e600\";\n\t\tAlpha 0.66;\n\t\tscale 0.33;\n\t\tTranslation \"champion_Green\";\n\t\t}\n\n\toverride void BeginPlay()\n\t\t{\n\t\tSuper.BeginPlay();\n\t\tSetOrigin((pos.x,pos.y,floorz+1),false);\n\t\tangle = random(0,360);\n\t\t}\n\n\toverride void Tick()\n\t\t{\n\t\tSuper.Tick();\n\t\tSetOrigin((pos.x,pos.y,floorz+1),true);\n\t\t}\n\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tTNT1 A 1;\n\t\tSpawnLoop:\n\t\t\tBSPL A 35 A_RadiusGive(\"champion_CreepDamage\",32,RGF_CUBE|RGF_PLAYERS,1);\n\t\t\tBSPL A 0 { count += 1; if(count > 3) { SetStateLabel(\"Disappear\"); } }\n\t\t\tloop;\n\t\tDisappear:\n\t\t\tBSPL A 1 { A_SetScale(scale.x-(scale.x * 0.05)); if(scale.x < 0.00001) { destroy(); } }\n\t\t\twait;\n\t\t}\n\t}\n\nclass champion_RedCreep : champion_DarkGreenCreep\n\t{\n\tdefault\n\t\t{\n\t\ttranslation \"champion_Red\";\n\t\tStencilColor \"cc0000\";\n\t\tscale 0.33;\n\t\t}\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tTNT1 A 1;\n\t\tSpawnLoop:\n\t\t\tBSPL A 18 A_RadiusGive(\"champion_CreepDamage\",32,RGF_CUBE|RGF_PLAYERS,1);\n\t\t\tBSPL A 0 { count += 1; if(count > 12) { SetStateLabel(\"Disappear\"); } }\n\t\t\tloop;\n\t\tDisappear:\n\t\t\tBSPL A 1 { A_SetScale(scale.x-(scale.x * 0.05)); if(scale.x < 0.00001) { destroy(); } }\n\t\t\twait;\n\t\t}\n\t}\n\nclass champion_BigDarkGreenCreep : Actor\n\t{\n\tint count;\n\n\tdefault\n\t\t{\n\t\t+FLATSPRITE;\n\t\t+NOGRAVITY;\n\t\t+BRIGHT;\n\t\tRenderStyle \"Translucent\";\n\t\tAlpha 0.66;\n\t\tscale 0.5;\n\t\tTranslation \"champion_DarkGreen\";\n\t\t}\n\n\toverride void BeginPlay()\n\t\t{\n\t\tSuper.BeginPlay();\n\t\tSetOrigin((pos.x,pos.y,floorz+1),false);\n\t\tangle = random(0,360);\n\t\t}\n\n\toverride void Tick()\n\t\t{\n\t\tSuper.Tick();\n\t\tSetOrigin((pos.x,pos.y,floorz+1),true);\n\t\t}\n\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tTNT1 A 1;\n\t\tSpawnLoop:\n\t\t\tBSPL A 35 A_RadiusGive(\"champion_CreepDamage\",64,RGF_CUBE|RGF_PLAYERS,1);\n\t\t\tBSPL A 0 { count += 1; if(count > 9) { SetStateLabel(\"Disappear\"); } }\n\t\t\tloop;\n\t\tDisappear:\n\t\t\tBSPL A 1 { A_SetScale(scale.x-(scale.x * 0.05)); if(scale.x < 0.00001) { destroy(); } }\n\t\t\twait;\n\t\t}\n\t}\n\nclass champion_CreepDamage : CustomInventory\n\t{\n\tdefault\n\t\t{\n\t\t+INVENTORY.AUTOACTIVATE;\n\t\t+INVENTORY.ALWAYSPICKUP;\n\t\t}\n\tstates\n\t\t{\n\t\tPickup:\n\t\tUse:\n\t\t\tTNT1 A 0 A_DamageSelf(3,\"champion_Toxic\",src:AAPTR_NULL);\n\t\t\tstop;\n\t\t}\n\t}"
},
{
"source": "pk3",
"name": "zscript/champions/champs/champ_green.txt",
"contents": "/*\n *\n *\t\tGreen Champion\n *\t\t\tteleports randomly\n *\n */\nclass champion_GreenController : champion_BaseController\n\t{\n\tint steps;\n\tint chance;\n\n\toverride color GetParticleColour()\n\t\t{\n\t\tstatic const color ParticleColours[]=\n\t\t\t{\n\t\t\t\"ffffff\", \"33cc33\", \"70db70\", \"1f7a1f\", \"d8fe01\"\n\t\t\t};\n\n\t\treturn ParticleColours[random(0,ParticleColours.Size()-1)];\n\t\t}\n\n\toverride void champion_GiveToken()\n\t\t{\n\t\tchampion.A_GiveInventory(champion_Static.champion_Tokens[5]);\n\t\t}\n\n\toverride void champion_InitEffect()\n\t\t{\n\t\teftic = 70;\n\t\tif(colours)\n\t\t\tchampion.A_SetTranslation(\"champion_Green\");\n\n\t\tif(icons)\n\t\t\tchampion_SpawnIcon(5,\"champ_Green\");\n\n\t\tsteps = 50;\n\t\tchance = 3;\n\t\t}\n\n\toverride void champion_LegendoomSpecial()\n\t\t{\n\t\tsteps *= 1.5;\n\t\tchance = 1;\n\t\t}\n\n\toverride void champion_TickEffect()\n\t\t{\n\t\tif(champion.target && !random(0,chance))\n\t\t\t{\n\t\t\tint maxstep = random(steps,steps*2);\n\t\t\tchampion.A_SpawnItemEx(\"TeleportFog\");\n\t\t\tchampion.bJUMPDOWN = true;\n\t\t\tchampion.bTHRUACTORS = true;\n\t\t\tchampion.MaxDropOffHeight = 512;\n\t\t\tchampion.MaxStepHeight = 512;\n\t\t\tchampion.A_SetAngle(champion.angle+randompick(-90,-45,0,+45,+90));\n\t\t\tfor(int i = 0; i < maxstep; i++)\n\t\t\t\t{\n\t\t\t\tchampion.A_Chase(null, null,CHF_NORANDOMTURN);\n\t\t\t\t}\n\t\t\tchampion.bJUMPDOWN = champion.default.bJUMPDOWN;\n\t\t\tchampion.bTHRUACTORS = champion.default.bTHRUACTORS;\n\t\t\tchampion.MaxDropOffHeight = champion.default.MaxDropOffHeight;\n\t\t\tchampion.MaxStepHeight = champion.Default.MaxStepHeight;\n\t\t\tchampion.A_SpawnItemEx(\"TeleportFog\");\n\t\t\t}\n\t\t}\n\n\toverride void champion_HitEffect()\n\t\t{\n\t\tif(random(0,1))\n\t\t\tchampion_TickEffect();\n\t\t}\n\t}"
},
{
"source": "pk3",
"name": "zscript/champions/champs/champ_cyan.txt",
"contents": "/*\n *\n *\t\tCyan Champion\n *\t\t\tconstant wind thrust\n *\n */\nclass champion_CyanController : champion_BaseController\n\t{\n\tint windforce;\n\n\toverride color GetParticleColour()\n\t\t{\n\t\tstatic const color ParticleColours[]=\n\t\t\t{\n\t\t\t\"ffffff\", \"ccffff\", \"33ccff\"\n\t\t\t};\n\n\t\treturn ParticleColours[random(0,ParticleColours.Size()-1)];\n\t\t}\n\n\toverride void champion_GiveToken()\n\t\t{\n\t\tchampion.A_GiveInventory(champion_Static.champion_Tokens[6]);\n\t\t}\n\n\toverride void champion_InitEffect()\n\t\t{\n\t\teftic = 1;\n\t\tif(colours)\n\t\t\tchampion.A_SetTranslation(\"champion_Cyan\");\n\n\t\tif(icons)\n\t\t\tchampion_SpawnIcon(6,\"champ_Cyan\");\n\n\t\twindforce = 192;\n\t\tfor(int i = 0; i < 8; i++)\n\t\t\t{\n\t\t\tchampion.A_SpawnItemEx(\"champion_Leaves\", angle:i*45, flags:SXF_SETMASTER|SXF_NOCHECKPOSITION);\n\t\t\t}\n\t\t}\n\n\toverride void champion_LegendoomSpecial()\n\t\t{\n\t\twindforce = 384;\n\t\t}\n\n\toverride void champion_TickEffect()\n\t\t{\n\t\tchampion.A_RadiusThrust(windforce,384,RTF_NOIMPACTDAMAGE|RTF_NOTMISSILE);\n\t\t}\n\n\toverride void champion_DeathEffect()\n\t\t{\n\t\t}\n\t}\n\nclass champion_Leaves : Actor\n\t{\n\tdefault\n\t\t{\n\t\t+NOINTERACTION;\n\t\t+FLOATBOB;\n\t\t}\n\n\tdouble orbitdist;\n\tdouble orbitheight;\n\n\toverride void PostBeginPlay()\n\t\t{\n\t\tsuper.PostBeginPlay();\n\n\t\tif(master)\n\t\t\t{\n\t\t\torbitdist \t= random(master.Radius, master.Radius*1.5);\n\t\t\torbitheight = random(0,master.Height);\n\t\t\t}\n\t\t}\n\n\toverride void Tick()\n\t\t{\n\t\tsuper.Tick();\n\n\t\tif(master)\n\t\t\t{\n\t\t\tA_SetAngle(angle + 12);\n\t\t\tA_Warp(AAPTR_MASTER,\txofs:orbitdist,\n\t\t\t\t\t\t\t\t\tzofs:orbitheight,\n\t\t\t\t\t\t\t\t\tflags:WARPF_NOCHECKPOSITION|WARPF_USECALLERANGLE|WARPF_INTERPOLATE);\n\t\t\tif(master.health < 1)\n\t\t\t\t{\n\t\t\t\tA_FadeOut();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\tstates\n\t\t{\n\t\tSpawn:\n\t\t\tTNT1 A 0 NoDelay A_Jump(128, \"Spawn2\");\n\t\tSpawn1:\n\t\t\tLEF1 ABCDEFGHI 1;\n\t\t\tloop;\n\t\tSpawn2:\n\t\t\tLEF2 ABCDEFGHI 1;\n\t\t\tloop;\n\t\t}\n\t}"
},
{
"source": "pk3",
"name": "zscript/champions/champs/champ_blue.txt",
"contents": "/*\n *\n *\t\tBlue Champion\n *\t\t\tExplodes into 12 projectiles on death\n *\n */\nclass champion_BlueController : champion_BaseController\n\t{\n\tint projectiles;\n\n\toverride color GetParticleColour()\n\t\t{\n\t\tstatic const color ParticleColours[]=\n\t\t\t{\n\t\t\t\"5959ff\", \"8080ff\", \"b3b3ff\", \"ffffff\"\n\t\t\t};\n\n\t\treturn ParticleColours[random(0,ParticleColours.Size()-1)];\n\t\t}\n\n\toverride void champion_GiveToken()\n\t\t{\n\t\tchampion.A_GiveInventory(champion_Static.champion_Tokens[7]);\n\t\t}\n\n\toverride void champion_InitEffect()\n\t\t{\n\t\tif(colours)\n\t\t\tchampion.A_SetTranslation(\"champion_Blue\");\n\n\t\tif(icons)\n\t\t\tchampion_SpawnIcon(7,\"champ_Blue\");\n\n\t\tprojectiles = 12;\n\t\t}\n\n\toverride void champion_LegendoomSpecial()\n\t\t{\n\t\tprojectiles = 36;\n\t\t}\n\n\toverride void champion_DeathEffect()\n\t\t{\n\t\tdouble step = 360 / projectiles;\n\n\t\tfor(int i = 0; i < projectiles; i++)\n\t\t\t{\n\t\t\tchampion.A_SpawnProjectile(\"champion_Fireball\",angle:i*step, flags:CMF_AIMDIRECTION, pitch:-6.125);\n\t\t\t}\n\t\t}\n\n\toverride void champion_HitEffect()\n\t\t{\n\t\tif(random(0,1))\n\t\t\t{\n\t\t\tint proj2 = projectiles * 0.25;\n\t\t\tdouble step = 360 / proj2;\n\t\t\tfor(int i = 0; i < proj2; i++)\n\t\t\t\t{\n\t\t\t\tchampion.A_SpawnProjectile(\"champion_Fireball\",angle:i*step, flags:CMF_AIMDIRECTION, pitch:-6.125);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\nclass champion_Fireball : DoomImpBall\n\t{\n\tdefault\n\t\t{\n\t\t-NOGRAVITY;\n\t\tGravity 0.1;\n\t\t}\n\tStates\n\t\t{\n\t\tSpawn:\n\t\t\tCBAL AB 4 Bright;\n\t\t\tloop;\n\t\tDeath:\n\t\t\tCBAL CDE 4 Bright;\n\t\t\tstop;\n\t\t}\n\t}"
}
]
},
"maps": []
}