mk-champions[2.5].pk3

PK3 303 KiB 0 map(s)

Counts

endoom0
graphics0
lumps108
maps0
palettes0

Totals (across maps)

Things0
Linedefs0
Sectors0
Monsters0
Items0
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": []
}

gib.gg runs on open-source software and freely licensed replacement game assets from the Freedoom project. gib.gg is not affiliated with Bethesda Softworks, id Software, or ZeniMax Media. All trademarks belong to their respective owners. Some WADs and associated metadata on this site are sourced from WAD Archive. User-submitted content remains the responsibility of its respective authors. If you believe content on this site violates your rights, please send DMCA requests to dmca@gib.gg.