Welcome to TiddlyWiki created by Jeremy Ruston; Copyright © 2004-2007 Jeremy Ruston, Copyright © 2007-2011 UnaMesa Association

    <!--{{{-->
    <link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
    <!--}}}-->

    Background: #fff
    Foreground: #000
    PrimaryPale: #8cf
    PrimaryLight: #18f
    PrimaryMid: #04b
    PrimaryDark: #014
    SecondaryPale: #ffc
    SecondaryLight: #fe8
    SecondaryMid: #db4
    SecondaryDark: #841
    TertiaryPale: #eee
    TertiaryLight: #ccc
    TertiaryMid: #999
    TertiaryDark: #666
    Error: #f88

    /*{{{*/
    body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

    a {color:[[ColorPalette::PrimaryMid]];}
    a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
    a img {border:0;}

    h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
    h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
    h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

    .button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
    .button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
    .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

    .header {background:[[ColorPalette::PrimaryMid]];}
    .headerShadow {color:[[ColorPalette::Foreground]];}
    .headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
    .headerForeground {color:[[ColorPalette::Background]];}
    .headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

    .tabSelected{color:[[ColorPalette::PrimaryDark]];
    	background:[[ColorPalette::TertiaryPale]];
    	border-left:1px solid [[ColorPalette::TertiaryLight]];
    	border-top:1px solid [[ColorPalette::TertiaryLight]];
    	border-right:1px solid [[ColorPalette::TertiaryLight]];
    }
    .tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
    .tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
    .tabContents .button {border:0;}

    #sidebar {}
    #sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
    #sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
    #sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
    #sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
    #sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

    .wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
    .wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
    .wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
    .wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
    	border:1px solid [[ColorPalette::PrimaryMid]];}
    .wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
    .wizardFooter {background:[[ColorPalette::PrimaryPale]];}
    .wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
    .wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
    	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
    .wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
    .wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
    	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

    .wizard .notChanged {background:transparent;}
    .wizard .changedLocally {background:#80ff80;}
    .wizard .changedServer {background:#8080ff;}
    .wizard .changedBoth {background:#ff8080;}
    .wizard .notFound {background:#ffff80;}
    .wizard .putToServer {background:#ff80ff;}
    .wizard .gotFromServer {background:#80ffff;}

    #messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
    #messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

    .popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

    .popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
    .popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
    .popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
    .popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
    .popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
    .popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
    .popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
    .listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

    .tiddler .defaultCommand {font-weight:bold;}

    .shadow .title {color:[[ColorPalette::TertiaryDark]];}

    .title {color:[[ColorPalette::SecondaryDark]];}
    .subtitle {color:[[ColorPalette::TertiaryDark]];}

    .toolbar {color:[[ColorPalette::PrimaryMid]];}
    .toolbar a {color:[[ColorPalette::TertiaryLight]];}
    .selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
    .selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

    .tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
    .selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
    .tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
    .tagging .button, .tagged .button {border:none;}

    .footer {color:[[ColorPalette::TertiaryLight]];}
    .selected .footer {color:[[ColorPalette::TertiaryMid]];}

    .sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
    .sparktick {background:[[ColorPalette::PrimaryDark]];}

    .error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
    .warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
    .lowlight {background:[[ColorPalette::TertiaryLight]];}

    .zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

    .imageLink, #displayArea .imageLink {background:transparent;}

    .annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

    .viewer .listTitle {list-style-type:none; margin-left:-2em;}
    .viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
    .viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

    .viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
    .viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
    .viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

    .viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
    .viewer code {color:[[ColorPalette::SecondaryDark]];}
    .viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

    .highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

    .editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
    .editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
    .editorFooter {color:[[ColorPalette::TertiaryMid]];}
    .readOnly {background:[[ColorPalette::TertiaryPale]];}

    #backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
    #backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
    #backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
    #backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
    #backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
    #backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
    #backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
    .backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
    .backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
    #backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
    /*}}}*/

    /*{{{*/
    * html .tiddler {height:1%;}

    body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

    h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
    h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
    h4,h5,h6 {margin-top:1em;}
    h1 {font-size:1.35em;}
    h2 {font-size:1.25em;}
    h3 {font-size:1.1em;}
    h4 {font-size:1em;}
    h5 {font-size:.9em;}

    hr {height:1px;}

    a {text-decoration:none;}

    dt {font-weight:bold;}

    ol {list-style-type:decimal;}
    ol ol {list-style-type:lower-alpha;}
    ol ol ol {list-style-type:lower-roman;}
    ol ol ol ol {list-style-type:decimal;}
    ol ol ol ol ol {list-style-type:lower-alpha;}
    ol ol ol ol ol ol {list-style-type:lower-roman;}
    ol ol ol ol ol ol ol {list-style-type:decimal;}

    .txtOptionInput {width:11em;}

    #contentWrapper .chkOptionInput {border:0;}

    .externalLink {text-decoration:underline;}

    .indent {margin-left:3em;}
    .outdent {margin-left:3em; text-indent:-3em;}
    code.escaped {white-space:nowrap;}

    .tiddlyLinkExisting {font-weight:bold;}
    .tiddlyLinkNonExisting {font-style:italic;}

    /* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
    a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

    #mainMenu .tiddlyLinkExisting,
    	#mainMenu .tiddlyLinkNonExisting,
    	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
    #sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

    .header {position:relative;}
    .header a:hover {background:transparent;}
    .headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
    .headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

    .siteTitle {font-size:3em;}
    .siteSubtitle {font-size:1.2em;}

    #mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

    #sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
    #sidebarOptions {padding-top:0.3em;}
    #sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
    #sidebarOptions input {margin:0.4em 0.5em;}
    #sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
    #sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
    #sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
    #sidebarTabs .tabContents {width:15em; overflow:hidden;}

    .wizard {padding:0.1em 1em 0 2em;}
    .wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
    .wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
    .wizardStep {padding:1em 1em 1em 1em;}
    .wizard .button {margin:0.5em 0 0; font-size:1.2em;}
    .wizardFooter {padding:0.8em 0.4em 0.8em 0;}
    .wizardFooter .status {padding:0 0.4em; margin-left:1em;}
    .wizard .button {padding:0.1em 0.2em;}

    #messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
    .messageToolbar {display:block; text-align:right; padding:0.2em;}
    #messageArea a {text-decoration:underline;}

    .tiddlerPopupButton {padding:0.2em;}
    .popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

    .popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
    .popup .popupMessage {padding:0.4em;}
    .popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
    .popup li.disabled {padding:0.4em;}
    .popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
    .listBreak {font-size:1px; line-height:1px;}
    .listBreak div {margin:2px 0;}

    .tabset {padding:1em 0 0 0.5em;}
    .tab {margin:0 0 0 0.25em; padding:2px;}
    .tabContents {padding:0.5em;}
    .tabContents ul, .tabContents ol {margin:0; padding:0;}
    .txtMainTab .tabContents li {list-style:none;}
    .tabContents li.listLink { margin-left:.75em;}

    #contentWrapper {display:block;}
    #splashScreen {display:none;}

    #displayArea {margin:1em 17em 0 14em;}

    .toolbar {text-align:right; font-size:.9em;}

    .tiddler {padding:1em 1em 0;}

    .missing .viewer,.missing .title {font-style:italic;}

    .title {font-size:1.6em; font-weight:bold;}

    .missing .subtitle {display:none;}
    .subtitle {font-size:1.1em;}

    .tiddler .button {padding:0.2em 0.4em;}

    .tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
    .isTag .tagging {display:block;}
    .tagged {margin:0.5em; float:right;}
    .tagging, .tagged {font-size:0.9em; padding:0.25em;}
    .tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
    .tagClear {clear:both;}

    .footer {font-size:.9em;}
    .footer li {display:inline;}

    .annotation {padding:0.5em; margin:0.5em;}

    * html .viewer pre {width:99%; padding:0 0 1em 0;}
    .viewer {line-height:1.4em; padding-top:0.5em;}
    .viewer .button {margin:0 0.25em; padding:0 0.25em;}
    .viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
    .viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

    .viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
    .viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
    table.listView {font-size:0.85em; margin:0.8em 1.0em;}
    table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

    .viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
    .viewer code {font-size:1.2em; line-height:1.4em;}

    .editor {font-size:1.1em;}
    .editor input, .editor textarea {display:block; width:100%; font:inherit;}
    .editorFooter {padding:0.25em 0; font-size:.9em;}
    .editorFooter .button {padding-top:0px; padding-bottom:0px;}

    .fieldsetFix {border:0; padding:0; margin:1px 0px;}

    .sparkline {line-height:1em;}
    .sparktick {outline:0;}

    .zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
    .zoomer div {padding:1em;}

    * html #backstage {width:99%;}
    * html #backstageArea {width:99%;}
    #backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
    #backstageToolbar {position:relative;}
    #backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
    #backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
    #backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
    #backstage {position:relative; width:100%; z-index:50;}
    #backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
    .backstagePanelFooter {padding-top:0.2em; float:right;}
    .backstagePanelFooter a {padding:0.2em 0.4em;}
    #backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

    .whenBackstage {display:none;}
    .backstageVisible .whenBackstage {display:block;}
    /*}}}*/

    /***
    StyleSheet for use when a translation requires any css style changes.
    This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
    ***/
    /*{{{*/
    body {font-size:0.8em;}
    #sidebarOptions {font-size:1.05em;}
    #sidebarOptions a {font-style:normal;}
    #sidebarOptions .sliderPanel {font-size:0.95em;}
    .subtitle {font-size:0.8em;}
    .viewer table.listView {font-size:0.95em;}
    /*}}}*/

    /*{{{*/
    @media print {
    #mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
    #displayArea {margin: 1em 1em 0em;}
    noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
    }
    /*}}}*/

    <!--{{{-->
    <div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
    <div class='headerShadow'>
    <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
    <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
    </div>
    <div class='headerForeground'>
    <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
    <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
    </div>
    </div>
    <div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
    <div id='sidebar'>
    <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
    <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
    </div>
    <div id='displayArea'>
    <div id='messageArea'></div>
    <div id='tiddlerDisplay'></div>
    </div>
    <!--}}}-->

    <!--{{{-->
    <div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
    <div class='title' macro='view title'></div>
    <div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
    <div class='tagging' macro='tagging'></div>
    <div class='tagged' macro='tags'></div>
    <div class='viewer' macro='view text wikified'></div>
    <div class='tagClear'></div>
    <!--}}}-->

    <!--{{{-->
    <div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
    <div class='title' macro='view title'></div>
    <div class='editor' macro='edit title'></div>
    <div macro='annotations'></div>
    <div class='editor' macro='edit text'></div>
    <div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
    <!--}}}-->

    To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
    * [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
    * [[MainMenu]]: The menu (usually on the left)
    * [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
    You'll also need to enter your username for signing your edits: <<option txtUserName>>

    These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

    Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

    <<option txtUserName>>
    <<option chkSaveBackups>> [[SaveBackups]]
    <<option chkAutoSave>> [[AutoSave]]
    <<option chkRegExpSearch>> [[RegExpSearch]]
    <<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
    <<option chkAnimate>> [[EnableAnimations]]

    ----
    Also see [[AdvancedOptions]]

    <<importTiddlers>>

    text/plain
    .txt .text .js .vbs .asp .cgi .pl
    ----
    text/html
    .htm .html .hta .htx .mht
    ----
    text/comma-separated-values
    .csv
    ----
    text/javascript
    .js
    ----
    text/css
    .css
    ----
    text/xml
    .xml .xsl .xslt
    ----
    image/gif
    .gif
    ----
    image/jpeg
    .jpg .jpe .jpeg
    ----
    image/png
    .png
    ----
    image/bmp
    .bmp
    ----
    image/tiff
    .tif .tiff
    ----
    audio/basic
    .au .snd
    ----
    audio/wav
    .wav
    ----
    audio/x-pn-realaudio
    .ra .rm .ram
    ----
    audio/x-midi
    .mid .midi
    ----
    audio/mp3
    .mp3
    ----
    audio/m3u
    .m3u
    ----
    video/x-ms-asf
    .asf
    ----
    video/avi
    .avi
    ----
    video/mpeg
    .mpg .mpeg
    ----
    video/quicktime
    .qt .mov .qtvr
    ----
    application/pdf
    .pdf
    ----
    application/rtf
    .rtf
    ----
    application/postscript
    .ai .eps .ps
    ----
    application/wordperfect
    .wpd
    ----
    application/mswrite
    .wri
    ----
    application/msexcel
    .xls .xls3 .xls4 .xls5 .xlw
    ----
    application/msword
    .doc
    ----
    application/mspowerpoint
    .ppt .pps
    ----
    application/x-director
    .swa
    ----
    application/x-shockwave-flash
    .swf
    ----
    application/x-zip-compressed
    .zip
    ----
    application/x-gzip
    .gz
    ----
    application/x-rar-compressed
    .rar
    ----
    application/octet-stream
    .com .exe .dll .ocx
    ----
    application/java-archive
    .jar

    /***
    |Name|AttachFilePlugin|
    |Source|http://www.TiddlyTools.com/#AttachFilePlugin|
    |Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
    |Version|4.0.0|
    |Author|Eric Shulman|
    |License|http://www.TiddlyTools.com/#LegalStatements|
    |~CoreVersion|2.1|
    |Type|plugin|
    |Requires|AttachFilePluginFormatters, AttachFileMIMETypes|
    |Description|Store binary files as base64-encoded tiddlers with fallback links for separate local and/or remote file storage|
    Store or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content.
    > Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
    !!!!!Documentation
    >see [[AttachFilePluginInfo]]
    !!!!!Inline interface (live)
    >see [[AttachFile]] (shadow tiddler)
    ><<tiddler AttachFile>>
    !!!!!Revisions
    <<<
    2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
    |please see [[AttachFilePluginInfo]] for additional revision details|
    2005.07.20 [1.0.0] Initial Release
    <<<
    !!!!!Code
    ***/
    // // version
    //{{{
    version.extensions.AttachFilePlugin= {major: 4, minor: 0, revision: 0, date: new Date(2009,6,4)};

    // shadow tiddler
    config.shadowTiddlers.AttachFile="<<attach inline>>";

    // add 'attach' backstage task (insert before built-in 'importTask')
    if (config.tasks) { // for TW2.2b or above
    	config.tasks.attachTask = {
    		text: "attach",
    		tooltip: "Attach a binary file as a tiddler",
    		content: "<<attach inline>>"
    	}
    	config.backstageTasks.splice(config.backstageTasks.indexOf("importTask"),0,"attachTask");
    }

    config.macros.attach = {
    // // lingo
    //{{{
    	label: "attach file",
    	tooltip: "Attach a file to this document",
    	linkTooltip: "Attachment: ",

    	typeList: "AttachFileMIMETypes",

    	titlePrompt: " enter tiddler title...",
    	MIMEPrompt: "<option value=''>select MIME type...</option><option value='editlist'>[edit list...]</option>",
    	localPrompt: " enter local path/filename...",
    	URLPrompt: " enter remote URL...",

    	tiddlerErr: "Please enter a tiddler title",
    	sourceErr: "Please enter a source path/filename",
    	storageErr: "Please select a storage method: embedded, local or remote",
    	MIMEErr: "Unrecognized file format.  Please select a MIME type",
    	localErr: "Please enter a local path/filename",
    	URLErr: "Please enter a remote URL",
    	fileErr: "Invalid path/file or file not found",

    	tiddlerFormat: '!usage\n{{{%0}}}\n%0\n!notes\n%1\n!type\n%2\n!file\n%3\n!url\n%4\n!data\n%5\n',

    //}}}
    // // macro definition
    //{{{
    	handler:
    	function(place,macroName,params) {
    		if (params && !params[0])
    			{ createTiddlyButton(place,this.label,this.tooltip,this.toggleAttachPanel); return; }
    		var id=params.shift();
    		this.createAttachPanel(place,id+"_attachPanel",params);
    		document.getElementById(id+"_attachPanel").style.position="static";
    		document.getElementById(id+"_attachPanel").style.display="block";
    	},
    //}}}
    //{{{
    	createAttachPanel:
    	function(place,panel_id,params) {
    		if (!panel_id || !panel_id.length) var panel_id="_attachPanel";
    		// remove existing panel (if any)
    		var panel=document.getElementById(panel_id); if (panel) panel.parentNode.removeChild(panel);
    		// set styles for this panel
    		setStylesheet(this.css,"attachPanel");
    		// create new panel
    		var title=""; if (params && params[0]) title=params.shift();
    		var types=this.MIMEPrompt+this.formatListOptions(store.getTiddlerText(this.typeList)); // get MIME types
    		panel=createTiddlyElement(place,"span",panel_id,"attachPanel",null);
    		var html=this.html.replace(/%id%/g,panel_id);
    		html=html.replace(/%title%/g,title);
    		html=html.replace(/%disabled%/g,title.length?"disabled":"");
    		html=html.replace(/%IEdisabled%/g,config.browser.isIE?"disabled":"");
    		html=html.replace(/%types%/g,types);
    		panel.innerHTML=html;
    		if (config.browser.isGecko) { // FF3 FIXUP
    			document.getElementById("attachSource").style.display="none";
    			document.getElementById("attachFixPanel").style.display="block";
    		}
    		return panel;
    	},
    //}}}
    //{{{
    	toggleAttachPanel:
    	function (e) {
    		if (!e) var e = window.event;
    		var parent=resolveTarget(e).parentNode;
    		var panel = document.getElementById("_attachPanel");
    		if (panel==undefined || panel.parentNode!=parent)
    			panel=config.macros.attach.createAttachPanel(parent,"_attachPanel");
    		var isOpen = panel.style.display=="block";
    		if(config.options.chkAnimate)
    			anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));
    		else
    			panel.style.display = isOpen ? "none" : "block" ;
    		e.cancelBubble = true;
    		if (e.stopPropagation) e.stopPropagation();
    		return(false);
    	},
    //}}}
    //{{{
    	formatListOptions:
    	function(text) {
    		if (!text || !text.trim().length) return "";
    		// get MIME list content from text
    		var parts=text.split("\n----\n");
    		var out="";
    		for (var p=0; p<parts.length; p++) {
    			var lines=parts[p].split("\n");
    			var label=lines.shift(); // 1st line=display text
    			var value=lines.shift(); // 2nd line=item value
    			out +='<option value="%1">%0</option>'.format([label,value]);
    		}
    		return out;
    	},
    //}}}
    // // interface definition
    //{{{
    	css:
    	".attachPanel { display: none; position:absolute; z-index:10; width:35em; right:105%; top:0em;\
    		background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\
    		border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\
    		padding: 0.5em; margin:0em; -moz-border-radius:1em;-webkit-border-radius:1em; text-align:left }\
    	.attachPanel form { display:inline;border:0;padding:0;margin:0; }\
    	.attachPanel select { width:99%;margin:0px;font-size:8pt;line-height:110%;}\
    	.attachPanel input  { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\
    	.attachPanel textarea { width:98%;margin:0px;height:2em;font-size:8pt;line-height:110%}\
    	.attachPanel table { width:100%;border:0;margin:0;padding:0;color:inherit; }\
    	.attachPanel tbody, .attachPanel tr, .attachPanel td { border:0;margin:0;padding:0;color:#000; }\
    	.attachPanel .box { border:1px solid black; padding:.3em; margin:.3em 0px; background:#f8f8f8; \
    		-moz-border-radius:5px;-webkit-border-radius:5px; }\
    	.attachPanel .chk { width:auto;border:0; }\
    	.attachPanel .btn { width:auto; }\
    	.attachPanel .btn2 { width:49%; }\
    	",
    //}}}
    //{{{
    	html:
    	'<form>\
    		attach from source file\
    		<input type="file" id="attachSource" name="source" size="56"\
    			onChange="config.macros.attach.onChangeSource(this)">\
    		<div id="attachFixPanel" style="display:none"><!-- FF3 FIXUP -->\
    			<input type="text" id="attachFixSource" style="width:90%"\
    				title="Enter a path/file to attach"\
    				onChange="config.macros.attach.onChangeSource(this);">\
    			<input type="button" style="width:7%" value="..."\
    				title="Enter a path/file to attach"\
    				onClick="config.macros.attach.askForFilename(document.getElementById(\'attachFixSource\'));">\
    		</div><!--end FF3 FIXUP-->\
    		<div class="box">\
    		<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
    			embed data <input type=checkbox class=chk name="useData" %IEdisabled% \
    				onclick="if (!this.form.MIMEType.value.length)\
    					this.form.MIMEType.selectedIndex=this.checked?1:0; ">&nbsp;\
    		</td><td style="border:0">\
    			<select size=1 name="MIMEType" \
    				onchange="this.title=this.value; if (this.value==\'editlist\')\
    					{ this.selectedIndex=this.form.useData.checked?1:0; story.displayTiddler(null,config.macros.attach.typeList,2); return; }">\
    				<option value=""></option>\
    				%types%\
    			</select>\
    		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
    			local link <input type=checkbox class=chk name="useLocal"\
    				onclick="this.form.local.value=this.form.local.defaultValue=this.checked?config.macros.attach.localPrompt:\'\';">&nbsp;\
    		</td><td style="border:0">\
    			<input type=text name="local" size=15 autocomplete=off value=""\
    				onchange="this.form.useLocal.checked=this.value.length" \
    				onkeyup="this.form.useLocal.checked=this.value.length" \
    				onfocus="if (!this.value.length) this.value=config.macros.attach.localPrompt; this.select()">\
    		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
    			remote link <input type=checkbox class=chk name="useURL"\
    				onclick="this.form.URL.value=this.form.URL.defaultValue=this.checked?config.macros.attach.URLPrompt:\'\';\">&nbsp;\
    		</td><td style="border:0">\
    			<input type=text name="URL" size=15 autocomplete=off value=""\
    				onfocus="if (!this.value.length) this.value=config.macros.attach.URLPrompt; this.select()"\
    				onchange="this.form.useURL.checked=this.value.length;"\
    				onkeyup="this.form.useURL.checked=this.value.length;">\
    		</td></tr></table>\
    		</div>\
    		<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;vertical-align:top;width:1%;white-space:nowrap">\
    			notes&nbsp;\
    		</td><td style="border:0" colspan=2>\
    			<textarea name="notes" style="width:98%;height:3.5em;margin-bottom:2px"></textarea>\
    		</td><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
    			attach as&nbsp;\
    		</td><td style="border:0" colspan=2>\
    			<input type=text name="tiddlertitle" size=15 autocomplete=off value="%title%"\
    				onkeyup="if (!this.value.length) { this.value=config.macros.attach.titlePrompt; this.select(); }"\
    				onfocus="if (!this.value.length) this.value=config.macros.attach.titlePrompt; this.select()" %disabled%>\
    		</td></tr></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
    			add tags&nbsp;\
    		</td><td style="border:0">\
    			<input type=text name="tags" size=15 autocomplete=off value="" onfocus="this.select()">\
    		</td><td style="width:40%;text-align:right;border:0">\
    			<input type=button class=btn2 value="attach"\
    				onclick="config.macros.attach.onClickAttach(this)"><!--\
    			--><input type=button class=btn2 value="close"\
    				onclick="var panel=document.getElementById(\'%id%\'); if (panel) panel.parentNode.removeChild(panel);">\
    		</td></tr></table>\
    	</form>',
    //}}}
    // // control processing
    //{{{
    	onChangeSource:
    	function(here) {
    		var form=here.form;
    		var list=form.MIMEType;
    		var theFilename  = here.value;
    		var theExtension = theFilename.substr(theFilename.lastIndexOf('.')).toLowerCase();
    		// if theFilename is in current document folder, remove path prefix and use relative reference
    		var h=document.location.href; folder=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
    		if (theFilename.substr(0,folder.length)==folder) theFilename='./'+theFilename.substr(folder.length);
    		else theFilename='file:///'+theFilename; // otherwise, use absolute reference
    		theFilename=theFilename.replace(/\\/g,"/"); // fixup: change \ to /
    		form.useLocal.checked = true;
    		form.local.value = theFilename;
    		form.useData.checked = !form.useData.disabled;
    		list.selectedIndex=1;
    		for (var i=0; i<list.options.length; i++) // find matching MIME type
    			if (list.options[i].value.indexOf(theExtension)!=-1) { list.selectedIndex = i; break; }
    		if (!form.tiddlertitle.disabled)
    			form.tiddlertitle.value=theFilename.substr(theFilename.lastIndexOf('/')+1); // get tiddlername from filename
    	},
    //}}}
    //{{{
    	onClickAttach:
    	function (here) {
    		clearMessage();
    		// get input values
    		var form=here.form;
    		var src=form.source; if (config.browser.isGecko) src=document.getElementById("attachFixSource");
    		src=src.value!=src.defaultValue?src.value:"";
    		var when=(new Date()).formatString(config.macros.timeline.dateFormat);
    		var title=form.tiddlertitle.value;
    		var local = form.local.value!=form.local.defaultValue?form.local.value:"";
    		var url = form.URL.value!=form.URL.defaultValue?form.URL.value:"";
    		var notes = form.notes.value;
    		var tags = "attachment excludeMissing "+form.tags.value;
    		var useData=form.useData.checked;
    		var useLocal=form.useLocal.checked;
    		var useURL=form.useURL.checked;
    		var mimetype = form.MIMEType.value.length?form.MIMEType.options[form.MIMEType.selectedIndex].text:"";
    		// validate checkboxes and get filename
    		if (useData) {
    			if (src.length) { if (!theLocation) var theLocation=src; }
    			else { alert(this.sourceErr); src.focus(); return false; }
    		}
    		if (useLocal) {
    			if (local.length) { if (!theLocation) var theLocation = local; }
    			else { alert(this.localErr); form.local.focus(); return false; }
    		}
    		if (useURL) {
    			if (url.length) { if (!theLocation) var theLocation = url; }
    			else { alert(this.URLErr); form.URL.focus(); return false; }
    		}
    		if (!(useData||useLocal||useURL))
    			{ form.useData.focus(); alert(this.storageErr); return false; }
    		if (!theLocation)
    			{ src.focus(); alert(this.sourceErr); return false; }
    		if (!title || !title.trim().length || title==this.titlePrompt)
    			{ form.tiddlertitle.focus(); alert(this.tiddlerErr); return false; }
    		// if not already selected, determine MIME type based on filename extension (if any)
    		if (useData && !mimetype.length && theLocation.lastIndexOf('.')!=-1) {
    			var theExt = theLocation.substr(theLocation.lastIndexOf('.')).toLowerCase();
    			var theList=form.MIMEType;
    			for (var i=0; i<theList.options.length; i++)
    				if (theList.options[i].value.indexOf(theExt)!=-1)
    					{ var mimetype=theList.options[i].text; theList.selectedIndex=i; break; }
    		}
    		// attach the file
    		return this.createAttachmentTiddler(src, when, notes, tags, title,
    			useData, useLocal, useURL, local, url, mimetype);
    	},
    	getMIMEType:
    	function(src,def) {
    		var ext = src.substr(src.lastIndexOf('.')).toLowerCase();
    		var list=store.getTiddlerText(this.typeList);
    		if (!list || !list.trim().length) return def;
    		// get MIME list content from tiddler
    		var parts=list.split("\n----\n");
    		for (var p=0; p<parts.length; p++) {
    			var lines=parts[p].split("\n");
    			var mime=lines.shift(); // 1st line=MIME type
    			var match=lines.shift(); // 2nd line=matching extensions
    			if (match.indexOf(ext)!=-1) return mime;
    		}
    		return def;
    	},
    	createAttachmentTiddler:
    	function (src, when, notes, tags, title, useData, useLocal, useURL, local, url, mimetype, noshow) {
    		if (useData) { // encode the data
    			if (!mimetype.length) {
    				alert(this.MIMEErr);
    				form.MIMEType.selectedIndex=1; form.MIMEType.focus();
    				return false;
    			}
    			var d = this.readFile(src); if (!d) { return false; }
    			displayMessage('encoding '+src);
    			var encoded = this.encodeBase64(d);
    			displayMessage('file size='+d.length+' bytes, encoded size='+encoded.length+' bytes');
    		}
    		var usage=(mimetype.substr(0,5)=="image"?'[img[%0]]':'[[%0|%0]]').format([title]);
    		var theText=this.tiddlerFormat.format([
    			usage, notes.length?notes:'//none//', mimetype,
    			useLocal?local.replace(/\\/g,'/'):'', useURL?url:'',
    			useData?('data:'+mimetype+';base64,'+encoded):'' ]);
    		store.saveTiddler(title,title,theText,config.options.txtUserName,new Date(),tags);
    		var panel=document.getElementById("attachPanel"); if (panel) panel.style.display="none";
    		if (!noshow) { story.displayTiddler(null,title); story.refreshTiddler(title,null,true); }
    		displayMessage('attached "'+title+'"');
    		return true;
    	},
    //}}}
    // // base64 conversion
    //{{{
    	encodeBase64:
    	function (d) {
    		if (!d) return null;
    		// encode as base64
    		var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    		var out="";
    		var chr1,chr2,chr3="";
    		var enc1,enc2,enc3,enc4="";
    		for (var count=0,i=0; i<d.length; ) {
    			chr1=d.charCodeAt(i++);
    			chr2=d.charCodeAt(i++);
    			chr3=d.charCodeAt(i++);
    			enc1=chr1 >> 2;
    			enc2=((chr1 & 3) << 4) | (chr2 >> 4);
    			enc3=((chr2 & 15) << 2) | (chr3 >> 6);
    			enc4=chr3 & 63;
    			if (isNaN(chr2)) enc3=enc4=64;
    			else if (isNaN(chr3)) enc4=64;
    			out+=keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);
    			chr1=chr2=chr3=enc1=enc2=enc3=enc4="";
    		}
    		return out;
    	},
    	decodeBase64: function(input) {
    		var out="";
    		var chr1,chr2,chr3;
    		var enc1,enc2,enc3,enc4;
    		var i = 0;
    		// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
    		input=input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
    		do {
    			enc1=keyStr.indexOf(input.charAt(i++));
    			enc2=keyStr.indexOf(input.charAt(i++));
    			enc3=keyStr.indexOf(input.charAt(i++));
    			enc4=keyStr.indexOf(input.charAt(i++));
    			chr1=(enc1 << 2) | (enc2 >> 4);
    			chr2=((enc2 & 15) << 4) | (enc3 >> 2);
    			chr3=((enc3 & 3) << 6) | enc4;
    			out=out+String.fromCharCode(chr1);
    			if (enc3!=64) out=out+String.fromCharCode(chr2);
    			if (enc4!=64) out=out+String.fromCharCode(chr3);
    		} while (i<input.length);
    		return out;
    	},
    //}}}
    // // I/O functions
    //{{{
    	readFile: // read local BINARY file data
    	function(filePath) {
    		if(!window.Components) { return null; }
    		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
    		catch(e) { alert("access denied: "+filePath); return null; }
    		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
    		try { file.initWithPath(filePath); } catch(e) { alert("cannot read file - invalid path: "+filePath); return null; }
    		if (!file.exists()) { alert("cannot read file - not found: "+filePath); return null; }
    		var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
    		inputStream.init(file, 0x01, 00004, null);
    		var bInputStream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
    		bInputStream.setInputStream(inputStream);
    		return(bInputStream.readBytes(inputStream.available()));
    	},
    //}}}
    //{{{
    	writeFile:
    	function(filepath,data) {
    		// TBD: decode base64 and write BINARY data to specified local path/filename
    		return(false);
    	},
    //}}}
    //{{{
    	askForFilename: // for FF3 fixup
    	function(target) {
    		var msg=config.messages.selectFile;
    		if (target && target.title) msg=target.title; // use target field tooltip (if any) as dialog prompt text
    		// get local path for current document
    		var path=getLocalPath(document.location.href);
    		var p=path.lastIndexOf("/"); if (p==-1) p=path.lastIndexOf("\\"); // Unix or Windows
    		if (p!=-1) path=path.substr(0,p+1); // remove filename, leave trailing slash
    		var file=""
    		var result=window.mozAskForFilename(msg,path,file,true); // FF3 FIXUP ONLY
    		if (target && result.length) // set target field and trigger handling
    			{ target.value=result; target.onchange(); }
    		return result;
    	}
    };
    //}}}
    //{{{
    if (window.mozAskForFilename===undefined) { // also defined by CoreTweaks (for ticket #604)
    	window.mozAskForFilename=function(msg,path,file,mustExist) {
    		if(!window.Components) return false;
    		try {
    			netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    			var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
    			var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
    			picker.init(window, msg, mustExist?nsIFilePicker.modeOpen:nsIFilePicker.modeSave);
    			var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
    			thispath.initWithPath(path);
    			picker.displayDirectory=thispath;
    			picker.defaultExtension='';
    			picker.defaultString=file;
    			picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
    			if (picker.show()!=nsIFilePicker.returnCancel)
    				var result=picker.file.persistentDescriptor;
    		}
    		catch(ex) { displayMessage(ex.toString()); }
    		return result;
    	}
    }
    //}}}

    /***
    |Name|AttachFilePluginFormatters|
    |Source|http://www.TiddlyTools.com/#AttachFilePluginFormatters|
    |Version|4.0.1|
    |Author|Eric Shulman|
    |License|http://www.TiddlyTools.com/#LegalStatements|
    |~CoreVersion|2.1.3|
    |Type|plugin|
    |Description|run-time library for displaying attachment tiddlers|
    Runtime processing for //rendering// attachment tiddlers created by [[AttachFilePlugin]].   Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that has been stored directly as base64 text-encoded data or can be loaded from external files stored on a local filesystem or remote web server.  Note: after creating new attachment tiddlers, you can remove [[AttachFilePlugin]], as long as you retain //this// tiddler (so that images can be rendered later on).
    !!!!!Formatters
    <<<
    This plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:
    * embedded images: {{{[img[tooltip|image]]}}}
    * linked embedded images: {{{[img[tooltip|image][link]]}}}
    * external/"pretty" links: {{{[[label|link]]}}}
    ''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''
    <<<
    !!!!!Revisions
    <<<
    2009.10.10 [4.0.1] in fileExists(), check for IE to avoid hanging Chrome during startup
    2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
    2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
    2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
    2007.10.29 [3.7.0] more code reduction: removed upload handling from AttachFilePlugin (saves ~7K!)
    2007.10.28 [3.6.0] removed duplicate formatter code from AttachFilePlugin (saves ~10K!) and updated documentation accordingly.  This plugin ([[AttachFilePluginFormatters]]) is now //''required''// in order to display attached images/binary files within tiddler content.
    2006.05.20 [3.4.0] through 2007.03.01 [3.5.3] sync with AttachFilePlugin
    2006.05.13 [3.2.0] created from AttachFilePlugin v3.2.0
    <<<
    !!!!!Code
    ***/
    // // version
    //{{{
    version.extensions.AttachFilePluginFormatters= {major: 4, minor: 0, revision: 1, date: new Date(2009,10,10)};
    //}}}

    //{{{
    if (config.macros.attach==undefined) config.macros.attach= { };
    //}}}
    //{{{
    if (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {
    	var tiddler = store.getTiddler(title);
    	if (tiddler==undefined || tiddler.tags==undefined) return false;
    	return (tiddler.tags.indexOf("attachment")!=-1);
    }
    //}}}

    //{{{
    // test for local file existence - returns true/false without visible error display
    if (config.macros.attach.fileExists==undefined) config.macros.attach.fileExists=function(f) {
    	if(window.Components) { // MOZ
    		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
    		catch(e) { return false; } // security access denied
    		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
    		try { file.initWithPath(f); }
    		catch(e) { return false; } // invalid directory
    		return file.exists();
    	}
    	else if (config.browser.isIE) { // IE
    		var fso = new ActiveXObject("Scripting.FileSystemObject");
    		return fso.FileExists(f);
    	}
    	else return true; // other browsers: assume file exists
    }
    //}}}

    //{{{
    if (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {

    	// extract embedded data, local and remote links (if any)
    	var text=store.getTiddlerText(title,'');
    	var embedded=store.getTiddlerText(title+'##data','').trim();
    	var locallink=store.getTiddlerText(title+'##file','').trim();
    	var remotelink=store.getTiddlerText(title+'##url','').trim();

    	// backward-compatibility for older attachments (pre 4.0.0)
    	var startmarker="---BEGIN_DATA---\n";
    	var endmarker="\n---END_DATA---";
    	var pos=0; var endpos=0;
    	if ((pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1)
    		embedded="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\n/g,'');
    	if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1)
    		locallink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
    	if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1)
    		remotelink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));

    	// if there is a data: URI defined (not supported by IE)
    	if (embedded.length && !config.browser.isIE) return embedded;

    	// document is being served remotely... use remote URL (if any)  (avoids security alert)
    	if (remotelink.length && document.location.protocol!="file:")
    		return remotelink;

    	// local link only... return link without checking file existence (avoids security alert)
    	if (locallink.length && !remotelink.length)
    		return locallink;

    	// local link, check for file exist... use local link if found
    	if (locallink.length) {
    		locallink=locallink.replace(/^\.[\/\\]/,''); // strip leading './' or '.\' (if any)
    		if (this.fileExists(getLocalPath(locallink))) return locallink;
    		// maybe local link is relative... add path from current document and try again
    		var pathPrefix=document.location.href;  // get current document path and trim off filename
    		var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\");
    		if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
    		if (this.fileExists(getLocalPath(pathPrefix+locallink))) return locallink;
    	}

    	// no embedded data, no local (or not found), fallback to remote URL (if any)
    	if (remotelink.length) return remotelink;

    	// attachment URL doesn't resolve, just return input as is
    	return title;
    }
    //}}}
    //{{{
    if (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {
    	if (this.initialized) return;

    	// find the formatter for "image" and replace the handler
    	for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);
    	if (i<config.formatters.length)	config.formatters[i].handler=function(w) {
    		this.lookaheadRegExp.lastIndex = w.matchStart;
    		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
    		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link
    			{
    			var e = w.output;
    			if(lookaheadMatch[5])
    				{
    				var link = lookaheadMatch[5];
    				// ELS -------------
    				var external=config.formatterHelpers.isExternalLink(link);
    				if (external)
    					{
    					if (config.macros.attach.isAttachment(link))
    						{
    						e = createExternalLink(w.output,link);
    						e.href=config.macros.attach.getAttachment(link);
    						e.title = config.macros.attach.linkTooltip + link;
    						}
    					else
    						e = createExternalLink(w.output,link);
    					}
    				else
    					e = createTiddlyLink(w.output,link,false,null,w.isStatic);
    				// ELS -------------
    				addClass(e,"imageLink");
    				}
    			var img = createTiddlyElement(e,"img");
    			if(lookaheadMatch[1])
    				img.align = "left";
    			else if(lookaheadMatch[2])
    				img.align = "right";
    			if(lookaheadMatch[3])
    				img.title = lookaheadMatch[3];
    			img.src = lookaheadMatch[4];
    			// ELS -------------
    			if (config.macros.attach.isAttachment(lookaheadMatch[4]))
    				img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);
    			// ELS -------------
    			w.nextMatch = this.lookaheadRegExp.lastIndex;
    		}
    	}
    //}}}
    //{{{
    	// find the formatter for "prettyLink" and replace the handler
    	for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);
    	if (i<config.formatters.length)	{
    		config.formatters[i].handler=function(w) {
    			this.lookaheadRegExp.lastIndex = w.matchStart;
    			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
    			if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
    				var e;
    				var text = lookaheadMatch[1];
    				if(lookaheadMatch[3]) {
    					// Pretty bracketted link
    					var link = lookaheadMatch[3];
    					if (config.macros.attach.isAttachment(link)) {
    						e = createExternalLink(w.output,link);
    						e.href=config.macros.attach.getAttachment(link);
    						e.title=config.macros.attach.linkTooltip+link;
    					}
    					else e = (!lookaheadMatch[2] && config.formatterHelpers.isExternalLink(link))
    						? createExternalLink(w.output,link)
    						: createTiddlyLink(w.output,link,false,null,w.isStatic);
    				} else {
    					e = createTiddlyLink(w.output,text,false,null,w.isStatic);
    				}
    				createTiddlyText(e,text);
    				w.nextMatch = this.lookaheadRegExp.lastIndex;
    			}
    		}
    	} // if "prettyLink" formatter found
    	this.initialized=true;
    }
    //}}}
    //{{{
    config.macros.attach.init_formatters(); // load time init
    //}}}
    //{{{
    if (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {
    	TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;
    	TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {
    		return config.macros.attach.isAttachment(title)?
    			config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText.apply(this,arguments);
    	}
    }
    //}}}

    /***
    |Name|AttachFilePluginInfo|
    |Source|http://www.TiddlyTools.com/#AttachFilePlugin|
    |Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
    |Version|4.0.0|
    |Author|Eric Shulman|
    |License|http://www.TiddlyTools.com/#LegalStatements|
    |~CoreVersion|2.1|
    |Type|plugin|
    |Description|Documentation for AttachFilePlugin|
    Store or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content.
    !!!!!Inline interface (live)
    >see [[AttachFile]] (shadow tiddler)
    ><<tiddler AttachFile>>
    !!!!!Syntax
    <<<
    ''To display the attach file control panel, simply view the [[AttachFile]] shadow tiddler that is automatically created by the plugin, and contains an instance of the inline control panel.''.  Or, you can write:
    {{{
    <<attach inline>>
    }}}
    in any tiddler to display the control panel embedded within that tiddler.  Note: you can actually use any unique identifier in place of the "inline" keyword.  Each unique id creates a separate instance of the controls.  If the same ID is used in more than one tiddler, then the control panel is automatically moved to the most recently rendered location.  Or, you can write:
    {{{
    <<attach>>
    }}}
    (with no ID parameter) in SidebarOptions.  This adds a command link that opens the controls as a floating panel, positioned directly to the left of the sidebar.
    <<<
    !!!!!Usage
    <<<
    Binary file content can be stored in three different locations:
    #embedded in the attachment tiddler (encoded as base64)
    #on your filesystem (a 'local link' path/filename)
    #on a web server (a 'remote link' URL)
    The plugin creates an "attachment tiddler" for each file you attach.  Regardless of where you store the binary content, your document can refer to the attachment tiddler rather than using a direct file or URL reference in your embedded image or external links, so that changing document locations will not require updating numerous tiddlers or copying files from one system to another.
    > Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
    When you attach a file, a tiddler (tagged with<<tag attachment>>) is generated (using the source filename as the tiddler's title).  The tiddler contains //''base64 text-encoded binary data''//, surrounded by {{{/%...%/}}} comment markers (so they are not visible when viewing the tiddler).  The tiddler also includes summary details about the file: when it was attached, by whom, etc. and, if the attachment is an image file (jpg, gif, or png), the image is automatically displayed below the summary information.
    >Note: although you can edit an attachment tiddler, ''don't change any of the encoded content below the attachment header'', as it has been prepared for use in the rest of your document, and even changing a single character can make the attachment unusable.  //If needed, you ''can'' edit the header information or even the MIME type declaration in the attachment data, but be very careful not to change any of the base64-encoded binary data.//
    Unfortunately, embedding just a few moderately-sized binary files using base64 text-encoding can dramatically increase the size of your document.   To avoid this problem, you can create attachment tiddlers that define external local filesystem (file://) and/or remote web server (http://) 'reference' links, without embedding the binary data directly in the tiddler (i.e., uncheck "embed data" in the 'control panel').

    These links provide an alternative source for the binary data: if embedded data is not found (or you are running on Internet Explorer, which does not currently support using embedded data), then the plugin tries the local filesystem reference.  If a local file is not found, then the remote reference (if any) is used.  This "fallback" approach also lets you 'virtualize' the external links in your document, so that you can access very large binary content such as PDFs, MP3's, and even *video* files, by using just a 'remote reference link' without embedding any data or downloading huge files to your hard disk.

    Of course, when you //do// download an attached file, the local copy will be used instead of accessing a remote server each time, thereby saving bandwidth and allowing you to 'go mobile' without having to edit any tiddlers to alter the link locations...
    <<<
    !!!!!Syntax / Examples
    <<<
    To embed attached files as images or link to them from other tiddlers, use the standard ~TiddlyWiki image syntax ({{{[img[tooltip|filename]]}}}), linked image syntax ({{{[img[tooltip|filename][tiddlername]]}}}) , or "external link" syntax ({{{[[text|URL]]}}}), replacing the filename or URL that is normally entered with the title of an attachment tiddler.

    embedded image data:
    >{{{[img[Meow|AttachFileSample]]}}}
    >[img[Meow|AttachFileSample]]
    embedded image data with link to larger remote image:
    >{{{[img[click for larger view|AttachFileSample][AttachFileSample2]]}}}
    >[img[click for larger view|AttachFileSample][AttachFileSample2]]
    'external' link to embedded image data:
    >{{{[[click to view attachment|AttachFileSample]]}}}
    >[[click to view attachment|AttachFileSample]]
    'external' link to remote image:
    >{{{[[click to view attachment|AttachFileSample2]]}}}
    >[[click to view attachment|AttachFileSample2]]
    regular ~TiddlyWiki links to attachment tiddlers:
    >{{{[[AttachFileSample]]}}} [[AttachFileSample]]
    >{{{[[AttachFileSample2]]}}} [[AttachFileSample2]]
    <<<
    !!!!!Defining MIME types
    <<<
    When you select a source file, a ''[[MIME|http://en.wikipedia.org/wiki/MIME]]'' file type is automatically suggested, based on filename extension.  The AttachFileMIMETypes tiddler defines the list of MIME types that will be recognized by the plugin.  Each MIME type definition consists of exactly two lines of text: the official MIME type designator (e.g., "text/plain", "image/gif", etc.), and a space-separated list of file extensions associated with that type.  List entries are separated by "----" (horizontal rules).
    <<<
    !!!!!Known Limitations
    <<<
    Internet Explorer does not support the data: URI scheme, and cannot use the //embedded// data to render images or links.  However, you can still use the local/remote link definitions to create file attachments that are stored externally.  In addition, while it is relatively easy to read local //text// files, reading binary files is not directly supported by IE's FileSystemObject (FSO) methods, and other file I/O techniques are subject to security barriers or require additional MS proprietary technologies (like ASP or VB) that make implementation more difficult.  As a result, you cannot //create// new attachment tiddlers using IE.
    <<<
    !!!!!Installation
    <<<
    Import (or copy/paste) the following tiddlers into your document:
    * [[AttachFilePlugin]] (tagged with <<tag systemConfig>>)
    * [[AttachFilePluginFormatters]] ("runtime distribution library") (tagged with <<tag systemConfig>>)
    * [[AttachFileSample]] and [[AttachFileSample2]] //(tagged with <<tag attachment>>)//
    * [[AttachFileMIMETypes]] //(defines binary file types)//
    > Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
    <<<
    !!!!!Revisions
    <<<
    2009.06.04 4.0.0 changed attachment storage format to use //sections// instead of embedded substring markers.
    2008.07.21 3.9.0 Fixup for FireFox 3: use HTML with separate text+button control instead of type='file' control
    2008.05.12 3.8.1 automatically add 'attach' task to backstage (moved from BackstageTweaks)
    2008.04.09 3.8.0 in onChangeSource(), if source matches current document folder, use relative reference for local link.  Also, disable 'embed' when using IE (which //still// doesn't support data: URI)
    2008.04.07 3.7.3 fixed typo in HTML for 'local file link' so that clicking in input field doesn't erase current path/file (if any)
    2008.04.07 3.7.2 auto-create AttachFile shadow tiddler for inline interface
    2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
    2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
    2007.12.03 3.7.1 in createAttachmentTiddler(), added optional "noshow" flag to suppress display of newly created tiddlers.
    2007.10.29 3.7.0 code reduction: removed support for built-in upload to server... on-line hosting of binary attachments is left to the document author, who can upload/host files using 3rd-party web-based services (e.g. www.flickr.com, ) or stand-alone applications (e.g., FTP).
    2007.10.28 3.6.0 code reduction: removed duplicate definition of image and prettyLink formatters.  Rendering of attachment tiddlers now //requires// installation of AttachFilePluginFormatters
    2007.03.01 3.5.3 use apply() to invoke hijacked function
    2007.02.25 3.5.2 in hijack of "prettyLink", fix version check for TW2.2 compatibility (prevent incorrect use of fallback handler)
    2007.01.09 3.5.1 onClickAttach() refactored to create separate createAttachmentTiddler() API for use with FileDropPluginHandlers
    2006.11.30 3.5.0 in getAttachment(), for local references, add check for file existence and fallback to remote URL if local file not found.  Added fileExists() to encapsulate FF vs. IE local file test function (IE FSO object code is TBD).
    2006.11.29 3.4.8 in hijack for PrettyLink, 'simple bracketed link' opens tiddler instead of external link to attachment
    2006.11.29 3.4.7 in readFile(), added try..catch around initWithPath() to handle invalid/non-existent paths better.
    2006.11.09 3.4.6 REAL FIX for TWv2.1.3: incorporate new TW2.1.3 core "prettyLink" formatter regexp handling logic and check for version < 2.1.3 with fallback to old plugin code.  Also, cleanup table layout in HTML (added "border:0" directly to table elements to override stylesheet)
    2006.11.08 3.4.5 TEMPORARY FIX for TWv2.1.3: disable hijack of wikiLink formatter due to changes in core wikiLink regexp definition.  //Links to attachments are broken, but you can still use {{{[img[TiddlerName]]}}} to render attachments as images, as well as {{{background:url('[[TiddlerName]]')}}} in CSS declarations for background images.//
    2006.09.10 3.4.4 update formatters for 2.1 compatibility (use this.lookaheadRegExp instead of temp variable)
    2006.07.24 3.4.3 in prettyLink formatter, added check for isShadowTiddler() to fix problem where shadow links became external links.
    2006.07.13 3.4.2 in getAttachment(), fixed stripping of newlines so data: used in CSS will work
    2006.05.21 3.4.1 in getAttachment(), fixed substring() to extract data: URI (was losing last character, which broken rendering of SOME images)
    2006.05.20 3.4.0 hijack core getRecursiveTiddlerText() to support rendering attachments in stylesheets (e.g. {{{url([[AttachFileSample]])}}})
    2006.05.20 3.3.6 add "description" feature to easily include notes in attachment tiddler (you can always edit to add them later... but...)
    2006.05.19 3.3.5 add "attach as" feature to change default name for attachment tiddlers.  Also, new optional param to specify tiddler name (disables editing)
    2006.05.16 3.3.0 completed XMLHttpRequest handling for GET or POST to configurable server scripts
    2006.05.13 3.2.0 added interface for upload feature.  Major rewrite of code for clean object definitions.  Major improvements in UI interaction and validation.
    2006.05.09 3.1.1 add wikifer support for using attachments in links from "linked image" syntax: {{{[img[tip|attachment1][attachment2]]}}}
    2006.05.09 3.1.0 lots of code changes: new options for attachments that use embedded data and/or links to external files (local or remote)
    2006.05.03 3.0.2 added {{{/%...%/}}} comments around attachment data to hide it when viewing attachment tiddler.
    2006.02.05 3.0.1 wrapped wikifier hijacks in initAttachmentFormatters() function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
    2005.12.27 3.0.0 Update for TW2.0.  Automatically add 'excludeMissing' tag to attachments
    2005.12.16 2.2.0 Dynamically create/remove attachPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding.
    2005.11.20 2.1.0 added wikifier handler extensions for "image" and "prettyLink" to render tiddler attachments
    2005.11.09 2.0.0 begin port from old ELS Design adaptation based on ~TW1.2.33
    2005.07.20 1.0.0 Initial release (as adaptation)
    <<<

    /***
    |Name|BawssLinksPlugin|
    |Source|http://doot.ath.cx/bawsslinks|
    |Version|1.0.0|
    |Author|Dean Tresadern|
    |License|http://doot.ath.cx/legalshit|
    |~CoreVersion|2.1|
    |Type|plugin|
    |Description|selectively disable TiddlyWiki's automatic ~WikiWord linking behavior|
    This plugin allows you to disable TiddlyWiki's automatic ~WikiWord linking behavior, so that WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links.  To create a tiddler link when automatic linking is disabled, you must enclose the link text within {{{[[...]]}}}.
    !!!!!Usage
    <<<
    usages
    <<<
    !!!!!Configuration
    <<<
    configurages
    <<<
    !!!!!Revisions
    <<<
    2008.07.22 [1.6.0] revisiorages
    <<<
    !!!!!Code
    ***/
    //{{{
    version.extensions.BawssLinksPlugin= {major: 1, minor: 0, revision: 0, date: new Date(2011,2,2)};

    var enableBawssLinks = true; // enable use of the BawssLinks tag, tiddlers with the bawsslinks tag will use the bawsslink behaviour instead of the default (shadow tiddlers always use default)
    var forceBawssLinks = false; // globally replace wikilink behaviour with bawsslinks (except in shadow tiddlers)

    var coreWikiLinkFormatter = null;

    function initBawssLinks() {
    	for(var i=0;i<config.formatters.length && config.formatters[i].name!="wikiLink";i++);
    	if(config.formatters[i].name!="wikiLink") return;
    	coreWikiLinkFormatter = config.formatters[i];

    	coreWikiLinkFormatter.coreHandler = coreWikiLinkFormatter.handler; // default handler
    	coreWikiLinkFormatter.handler = function(w) {
    		var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0; // this link is prefixed with ~ or something, ignore it
    		var title=w.matchText.substr(skip); // title of the linked tiddler
    		var exists=store.tiddlerExists(title); // whether the linked tiddler exists
    		var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title); // the link is inside a shadow tiddler
    		var tagged=w.tiddler && w.tiddler.isTagged('BawssLinks'); // use bawsslinks behaviour

    		if(!inShadow && enableBawssLinks && (tagged || forceBawssLinks)) { // not shadowed, and forced via tag or option
    			w.outputText(w.output,w.matchStart+skip,w.nextMatch); // plaintext
    			return;
    		}

    		return coreWikiLinkFormatter.coreHandler(w);
    	}

    	if(!enableBawssLinks)
    		return;

    	config.textPrimitives.exhaustiveWikiLink = "(?:" + config.textPrimitives.anyLetter + "{3,})";
    	config.formatters.push({
    		name: "exhaustiveWikiLink",
    		match: config.textPrimitives.unWikiLink+"?"+config.textPrimitives.exhaustiveWikiLink,
    		handler: function(w)
    		{
    			var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0; // this link is prefixed with ~ or something, ignore it
    			var title=w.matchText.substr(skip); // title of the linked tiddler
    			var exists=store.tiddlerExists(title); // whether the linked tiddler exists
    			var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title); // the link is inside a shadow tiddler
    			var tagged=w.tiddler && w.tiddler.isTagged('BawssLinks'); // use bawsslinks behaviour

    			if(exists && (tagged || forceBawssLinks) && !inShadow) {
    				return coreWikiLinkFormatter.coreHandler(w);
    			}

    			w.outputText(w.output,w.matchStart+skip,w.nextMatch); // plaintext
    			return;
    		},
    	});
    };

    initBawssLinks();

    //}}}

    !~EXU2's Monsters
    This is a list of all the enemies in the game, sorted alphabetically by class. You can copy these class names directly into your Monsterspawn.ini for MP games (EXU.<~ClassName>) or summon them ingame or do whatever the fuck.

    |''Class Name'' |''Description'' |''Dropped Item'' |
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  A  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |AdvancedDemonKrall |Fires a shotgun blast of mini demon balls.||
    |AdvancedDemonKrallMP ||[[Demonball Flare|DemonballFlare]]|
    |AdvancedDoomOrb |Can't be killed, but very slow and dumb.||
    |AdvancedDoomOrbMP |Depending on difficulty, will eventually explode after 30 to 120 seconds. HUGE blast. ||
    |AdvancedLaserSphere |A drone that shoots blue lasers at you.||
    |AdvancedSaintOrb |Can't be killed, but very slow and dumb.||
    |AdvancedTurboSkaarj |Shoots a burst of 3 Skaarj projectiles. ||
    |AdvancedSkaarjAssassin |Shoots Descent-style plasma balls.||
    |AdvancedSkaarjAssassinMP ||[[Plasma Sprayer Flare|PlasmaSprayerFlare]]|
    |AdvancedTurboSkaarjMP ||[[EXU Bandages|EXUBandages]]|
    |AnnihilationTrooper |A [[Doom Trooper|DoomTrooper]] armed with a [[Clusterfucker]]!||
    |AntiTankRiotMercenary |Fires shitloads of plasma balls. Watch out.||
    |[[Archdemon]] |Supreme flying demon. Extremely dangerous.||
    |ArchdemonSP ||[[Tachyon Driver|ContactBeam]]|
    |ArchdemonSPII ||[[Tachyon Stuff|ContactBeans]]|
    |ArrowBrute |A brute that fires arrows. Durr.||
    |ArtilleryBrute |Fires ~SK-6 rockets.||
    |ArtilleryGuardian |A [[Hand Cannon Krall|HandCannonKrall]] that can call in artillery strikes.||
    |AssassinMedicMercenary |A tougher, combat-ready Medic Merc with more to offer. |[[Mini Keg|MiniKegII]]|
    |AssaultBrute |Based on ~SS2's Assault Bot.||
    |AssholeBrute |Fires high-accuracy lasers and spawns a seeking projectile on death.||
    |AssholeMercenary |Fires high-accuracy lasers and spawns a seeking projectile on death.||
    |AssholeMercenaryMP ||[[EXU Health Pack|EXUUnrealHealth]]|
    |AssholeSkaarj |Fires high-accuracy lasers and spawns a seeking projectile on death.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  B  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |BabehNuke |Baby cow that blows up Redeemer-style when killed.||
    |BarrelSlith |Shoots a Barrel O' Fun.||
    |BarrelSlithMP ||[[Barrel O' Fun|BarrelNade]] |
    |BeamBag |Beamy.||
    |BeamSkyTentacle |Shoots a nasty blue beam.||
    |BeamTentacle |Shoots a nasty green beam.||
    |BehemothTitan |From the end of ~EXU-DasaCellars.||
    |BiggerBioBrute |Like a [[Bio Brute|BioBrute]], but tougher and fires more gel per shot.||
    |BigShadowCreature |Like Shadow Creatures, but bigger.||
    |BioBag |Shoots bio globs. Gains up to 10x the default health from bio damage.||
    |BioBrute |Shoots bio globs. Gains up to 10x the default health from bio damage.||
    |BioBruteMP ||[[Bio Helm|BioHelm]] |
    |BioKrall |Shoots bio globs. Gains up to 10x the default health from bio damage.||
    |BioKrallMP ||[[Bio Flare|BioFlare]]|
    |BioMercenary |Shoots bio globs. Gains up to 10x the default health from bio damage.||
    |BioMercenaryElite |Shoots bio globs. Gains up to 10x the default health from bio damage.||
    |BioPolice |Shoots bio globs. Gains up to 10x the default health from bio damage.||
    |BioSkaarj |Shoots bio globs. Gains up to 10x the default health from bio damage.||
    |BioSkaarjMP ||[[EXU Bandages|EXUBandages]] |
    |BioSWAT |Launches Slime Rockets that explode into biogel.||
    |BioQueen |Shoots bio globs. Gains up to 10x the default health from bio damage.||
    |BioTentacle |Shoots bio globs. Gains up to 10x the default health from bio damage.||
    |BlastShredderMerc |Fires explosive shrapnel chunks.||
    |BlueBag |Like an Extreme Shock Berserker in Gasbag form. Weird.||
    |BlueSlith |Seen in an ~EXU1 Bonus Map.||
    |BlueSlithMP ||[[Energizer Ball|EnergizerBall]]|
    |BombBunny |Blows up Redeemer-style when killed.||
    |BonusBrute |Tiny brute with 1 health from an old ~EXU1 bonus map.||
    |BossPupae |Bigass pupae.||
    |[[Bouncer]] |Skaarj that lobs bouncy things.||
    |BrokenSuperTurboMercenary |Fires rockets in all directions. Funnier than it sounds.||
    |[[Brussalid]] |Inspired by ~X-COM Chryssalids, these infect other pawns and replicate virally.||
    |BursterBrute |Shoots a quick burst of energy pulses.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  C  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |[[Charger]] |Brute that chases you and roars a lot.||
    |ChargerSP ||[[Supreme Body Armor|EXUArmor]] |
    |ChunkyBrute |Extremely gory.||
    |ClusterfuckKrall |Launches a Clusterfuck 'Nade that breaks once into 3 more nades.||
    |ClusterfuckKrallMP ||[[Clusterfuck Flare|CNadeFlare]]|
    |ClusternukeBrute |Shoots Clusternuke Balls. Holy shit; extreme danger.||
    |ClusternukeBruteMP ||[[Clusternuke Flare|ClusternukeFlare]]|
    |ClusternukeQueen |Actually less dangerous than the [[Clusternuke Brute|ClusternukeBrute]], somehow.||
    |CrazyKrall |These guys shoot purple projectiles that spawn [[Crazy Pupae|CrazyPupae]].||
    |CrazyMercenary |These guys shoot purple projectiles that spawn [[Crazy Pupae|CrazyPupae]].||
    |CrazyMercenaryMP ||~UDamage|
    |CrazyPupae |Small, fast, annoying little bastards.||
    |CrazyQueen |Blows up into [[Crazy Pupae|CrazyPupae]] on death.||
    |CrazySkaarj |These guys shoot purple projectiles that spawn [[Crazy Pupae|CrazyPupae]].||
    |CrazySkaarjMP ||[[Energizer Ball|EnergizerBall]]|
    |CrazySlith |Explodes into [[Crazy Pupae|CrazyPupae]] on death.||
    |CrazySlithMP ||[[Energizer Ball|EnergizerBall]]|
    |CryoPupae |Just a [[Turbo Pupae|TurboPupae]] with more damage and a different skin.||
    |CycloneMercenary |Spammy Mercenary.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  D  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |DarkPupae |||
    |DemonBrute |These guys (Demon pawns) mostly just shoot Pentagrams.||
    |DemonBruteMP ||[[Demon Helm|DemonHelm]]|
    |DemonBunny |||
    |DemonChefsCousin |Good Lord don't summon this.||
    |DemonCommando |Fires Pentagrams and Demon Bolts.||
    |DemonCommandoElite |Crazy-dangerous. Fires nothing but Demon Bolts.||
    |DemonCommandoEliteMP ||[[Juggernaut Cannon|JuggernautCannon]]|
    |DemonFucker |||
    |DemonFuckerMP ||[[Fucker Cola|FuckerCola]]|
    |DemonGasbag |||
    |DemonGasbagMP ||[[Energizer Ball|EnergizerBall]]|
    |DemonJuggernaut |HOLY SHIT HIT THE FUCKING DIRT||
    |DemonJuggernautMP ||[[Blood Box|BloodBox]]|
    |DemonKrall |||
    |DemonKrallMP ||[[Demon Flare|DemonFlare]]|
    |DemonMercenary |||
    |DemonMercenaryMP ||[[Hell Gun|HellGun]]|
    |DemonPolice |||
    |DemonPupae |Scary looking.||
    |DemonQueen |Explodes into a huge pile of [[Demon Pupae|DemonPupae]] on death.||
    |DemonSkaarj |||
    |DemonSkaarjMP ||[[EXU Bandages|EXUBandages]]|
    |DemonSkaarjLord |This fucker can *fly.*||
    |DemonSkaarjMaster |A beefier [[Demon Skaarj Lord|DemonSkaarjLord]] with an evil halo.||
    |DemonSkaarjMasterII	 |Upon death, spawns an [[Advanced Doom Orb|AdvancedDoomOrbMP]] with destruction timer activated.||
    |DemonSkyTentacle |||
    |DemonSlith |Explodes into some Demon Pupae on death.||
    |DemonSlithMP ||[[Energizer Ball|EnergizerBall]]|
    |DemonSWAT |Launches a Demon Rocket.||
    |DemonWarlord |||
    |[[Discordian]] |Shoots bursts of grenades and drops a loaded [[Flare Crate|FlareCrate]] on death.||
    |DoomOrb |Can't be killed, but very slow and dumb.||
    |DoomPolice |Flying, tougher [[Doom Trooper|DoomTrooper]].||
    |DoomSquid |Extremely dangerous!||
    |DoomTrooper |Has a powerful burst-fire machine gun.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  E  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |EliteHyperPopper |Shoots tons and tons of Hyper Grenades.||
    |ElitePopper |Shoots tons and tons of UT grenades.||
    |EliteSkaarjAssassin |Very sneaky, very nasty. Kinda.||
    |EnergyGasbag |Shoots Excessive pulse balls.||
    |EnergyGasbagMP ||[[Energizer Ball|EnergizerBall]]|
    |EnergyMercenary|||
    |EnergyMercenaryElite |Just a bigger, nastier Energy Merc.||
    |EnergyMercenaryEliteMP ||[[Turbo EAR|SuperEAR]]|
    |EnergyMercenaryMP ||[[Energy AR|EnergyAR]]|
    |ExcessiveBioTentacle|||
    |ExtremeLaserLord |Shoots lasers and runs really fast.||
    |ExtremeLaserLordMP ||[[Energizer Ball|EnergizerBall]]|
    |ExtremelyExtremeHyperLord |Very, very extreme.||
    |ExtremelyExtremeLaserLord |Very, very extreme.||
    |ExtremelyExtremeShockBerserker |Very, very extreme.||
    |ExtremelyExtremeWeirdBerserker |Very, very extreme.||
    |ExtremelyExtremeWeirdBerserkerMP ||[[Super Clusternuke Flare|SuperClusternukeFlare]]|
    |ExtremeShockBerserker |Shockingly shocky.||
    |ExtremeShockBerserkerMP ||[[Energizer Ball|EnergizerBall]]|
    |EXUSK6Behemoth |The wonderful ~SK-6 Brute from The Last Fortress.||
    |EXUSkaarjAssassin |Stealthy. Uses invis skin.||
    |EXUSkaarjAssassinMP ||UT Stealth|
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  F  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |FatassMerc |Shoots fireballs.||
    |FatHugeMerc |Stupid, fat-huge Mercenary from ~EXU-Noork.||
    |FireBrute|||
    |FireBruteMP ||[[Fire Helm|FireHelm]]|
    |FireBruteSP ||[[Plasma Pack|PlasmaPack]]|
    |FireBursterBrute |[[Burster Brute|BursterBrute]] but with fireballs.||
    |FireDropper |Flying Skaarj that throws napalm.||
    |FireFiend |Fiery.||
    |FireFiendMP ||[[Hellfire Flare|HellfireFlare]]|
    |FirePolice|||
    |FirePupae|||
    |FireQueen	 |'Splodes into many [[Fire Pupae|FirePupae]] on death.||
    |FireSkaarj	 |Shoots fireballs and runs around all crazy-like.||
    |FireSkaarjMP ||[[Energizer Ball|EnergizerBall]]|
    |FireSkyTentacle|||
    |FireSlith |Splodes into some [[Fire Pupae|FirePupae]] on death.||
    |FireTentacle|||
    |FlakBrute |Shoots [[Clusterfucker]]-style flak in triplet bursts.||
    |FlakBruteMP ||[[Blast Helm|Blasthelm]]|
    |FlakMercenary |Also shoots said flak in 3-shot bursts, sometimes 6.||
    |FlakMercenaryMP ||[[Clusterfucker]]|
    |FlakPolice |From ~EXU-NaliLord.||
    |FlakSWAT |Shoots Flak Rockets.||
    |FlakQueen |Supposed to be stealthy, but turned out stupid.||
    |FlakSkyTentacle |Fires long-range [[Clusterfucker]] flak projectiles.||
    |FlakTentacle |Drops flak slugs.||
    |FlyingFuckerFish|||
    |FlyingSquid|||
    |FourHundredthPawn |Holy shit.||
    |FreezeBag |These guys all shoot ice blast projectiles.||
    |FreezeBagMP ||[[Ice Cube|IceCube]]|
    |FreezeBrute|||
    |FreezeBruteMP ||[[Freeze Helm|FreezeHelm]]|
    |FreezeKrall |||
    |FreezeKrallMP ||[[Freeze Flare|FreezeFlare]]|
    |FreezeMercenary |||
    |FreezeMercenaryMP ||[[Freezer]]|
    |FreezeSkaarj |||
    |FreezeSkaarjMP ||[[EXU Bandages|EXUBandages]]|
    |FreezeSlith |Shatters into a big pile of [[Ice Pupae|IcePupae]] on death.||
    |FreezeSlithMP ||[[Ice Cube|IceCube]]|
    |FuckerBrute |Classic ~EXU1 pawn. Runs up and punches the shit out of you.||
    |FuckerBruteMP ||[[Fucker Cola|FuckerCola]]|
    |FuckerFish |Superfast Devilfish with more damage.||
    |FuckerGasbag |Also shoots Excessive razor alt projectiles.||
    |FuckerKrall|||
    |FuckerKrallElite|||
    |FuckerLion |A weird Slith that shoots "hot potatoes." I should just delete it.||
    |FuckerMercenary|||
    |FuckerPupae|||
    |FuckerQueen|||
    |FuckerSkaarj|||
    |FuckerSkaarjBerserker |From ~EXU-SkyBase.||
    |FuckerSquid|||
    |FuckerTitan|||
    |FuckerWarlord |From ~EXU-NaliC.||
    |FuckoffKrall |Fires the Giant Fuckoff Rocket.||
    |FuckoffMercenary |Fires lots of Giant Fuckoff Rockets.||
    |FusionAnnihilator |Fusion miniboss. Spawns seeker balls constantly and a big burst when taking damage.||
    |FusionTentacle|||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  G  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |GeneralFucker |Gigantic Fucker Brute as seen in ~EXU-Harobed.||
    |[[Ghost]] |Fire-shooting Warlord from ~EXU-Bluff.||
    |GiantBioBag|||
    |GiantDemonGasbag|Fires Doomfusion balls ||
    |GiantTurboGasbag |Spawns Turbo Gasbags.||
    |GigaDemonGasbag |Shoots bursts of pentagrams and spawns [[Demon Gasbags|DemonGasbag]].||
    |GooBrute |Seen in an ~EXU1 Bonus Map.||
    |GooBruteMP ||[[Energizer Ball|EnergizerBall]]|
    |GrenadeBag |From ~EXU-DasaCellars; shoots Unreal grenades.||
    |GrenadeKrallElite |Shoots Excessive UT Grenades.||
    |GrenadeKrallEliteMP ||[['Nade Flare|NadeFlare]]|
    |GrenadeQueenElite |Shoots Excessive UT Grenades.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  H  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |HandCannonKrall |Shoots with a 15th-century hand cannon.||
    |HeavyDemonBrute |A beefier [[Demon Brute|DemonBrute]] with more powerful projectiles.||
    |HeavyLaserMercenary |Spews splash-enabled lasers all over.||
    |[[Hellfighter]] |A demonic military aircraft. EXTREME DANGER.||
    |[[Hellsphere]] |Demonic version of the [[Laser Sphere|LaserSphere]].||
    |[[Helltrooper]] |A [[Doom Trooper|DoomTrooper]] with a [[Hell Gun|HellGun]]!||
    |HugeSkyTentacle|||
    |HyperBrute |Most of these Hyper guys shoot Dispersion Level 5 lasers.||
    |HyperGasbag|||
    |HyperGasbagMP ||[[Energizer Ball|EnergizerBall]]|
    |HyperKrall	 |Shoots Hyper Grenade Bomblets.||
    |HyperKrallMP ||[[Hyper Flare|HyperFlare]]|
    |HyperMercenary|||
    |HyperMercenaryMP ||[[Hyper Flakker|HyperFlakker]]|
    |HyperPolice |Shoots Dispersion Level 5 lasers with splash damage.||
    |HyperPopper |Shoots tons and tons of Hyper Grenade Bomblets.||
    |HyperPsychoQueen |Fires hyper rockets / spawns TONS of [[Hyper Pupae|HyperPupae]] on death.||
    |HyperPupae |No, it doesn't shoot anything.||
    |HyperQueen |Just fires lasers.||
    |HyperSkaarj |||
    |HyperSkaarjMP ||[[Energizer Ball|EnergizerBall]]|
    |HyperSlith |Spawns [[Hyper Pupae|HyperPupae]] on death.||
    |HyperSWAT |Shoots Hyper Rockets.||
    |HyperWeasel |Like a [[Pulse Weasel|PulseWeasel]], but shoots lasers.||
    |HyperWeaselMP ||[[Energizer Ball|EnergizerBall]]|
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  I  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |IcePupae|||
    |IceQueen |'Splodes into many [[Ice Pupae|IcePupae]] on death.||
    |InvisibleBioBrute|||
    |InvisibleFireBrute|||
    |InvisibleFireTentacle|||
    |InvisibleMicroArrowBrute|||
    |InvisibleMiniArrowBrute|||
    |InvisibleMiniGrenadeBrute |From ~EXU-DasaPass.||
    |InvisiblePulseBrute|||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  J  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |JerkKrall |Fires bolt with 1 damage, but flings you FAR away.||
    |JerkMerc |A real asshole.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  K  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |KamikazePupae|||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  L  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |LargeMargeMerc |Rapidfire [[LRPC Mercenary|LRPCMercenary]]. You WILL die if it shoots first.||
    |LargeMargeMercMP ||[[Large Marge|LargeMarge]]|
    |LaserBrute |||
    |LaserBruteSP ||[[EnergyAR Cell|EXUEARAmmo]]|
    |LaserSphere |A drone that shoots green lasers at you.||
    |LavaTitan|||
    |LavaTitanMP ||[[Tachyon Stuff|ContactBeans]]|
    |LRPCMercenary |The mighty [[LRPC Mercenary|LRPCMercenary]]. Beware.||
    |LRPCMercenaryMP ||[[LRPC]]|
    |[[Lunatic]] |Shoots three flak shells at once that fly straight.||
    |LunaticMP |Explodes into many [[Energizer Balls|EnergizerBall]] on death.|[[Energizer Balls|EnergizerBall]]|
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  M  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |MaintBrute |Based on the Maintenance Bot from ~SS2. Hilarious.||
    |MajorCycloneBag |VERY spammy gasbag.||
    |MechBag |Shoots a wall of explosive shrapnel AND energy projectiles. Explodes into minions on death. ||
    |MechBagMinion |Shoots explosive shrapnel chunks. ||
    |MedFuckerBrute|||
    |MedFuckerBruteMP ||[[Fucker Cola|FuckerCola]]|
    |MedicMercenary |Shoots bandage scraps at you.|[[Mini Keg|MiniKeg]]|
    |MegaDemonGasbag |Shoots Demon Bolts. Watch out for this sucker.||
    |MegaDemonKrall |Fires a Hellbeam. Nasty.||
    |MegaDemonKrallMP ||[[Demonblast Flare|DemonblastFlare]]|
    |MegaRedSkaarj |Miniboss edition of the [[Red Skaarj|RedSkaarj]].||
    |MegaShockSkaarjLord |From ~EXU-QueenEnd.||
    |MercenarySkaarj |Shoots beefed-up Tentacle projectiles for some reason.||
    |MercenarySkaarjMP ||[[EXU Health Pack|EXUUnrealHealth]].|
    |MicroFuckerBrute|||
    |MicroTitan |~EXU1 pawn. Can't throw rocks.||
    |MiniArrowBrute|||
    |MiniDoomOrb |Can't be killed, but very slow and dumb.||
    |MiniFireQueen|||
    |MiniFlakFucker |From an ~EXU1 Bonus Map.||
    |MiniFlakKrall |~EXU1 pawn. Small; shoots explosive Excessive flak chunks.||
    |MiniFuckerBrute|||
    |MiniMissileBrute |Launches fast-but-weak missiles.||
    |MiniPulseWeasel |~EXU1 pawn that shoots Excessive pulse balls. Fast, small.||
    |MiniRazorBrute |From ~EXU-Dark.||
    |MiniRocketBrute |From ~EXU-ISVDeck4.||
    |MiniSaintOrb |Can't be killed, but very slow and dumb.||
    |MiniShockBrute|||
    |MiniSkaarj |From ~EXU-Dark.||
    |MinorCycloneBag |Spammy gasbag.||
    |MissileMercenary |Shoots fast-but-weak missiles.||
    |MissileSkaarj|||
    |MissileSkaarjMP ||[[EXU Bandages|EXUBandages]]|
    |MonsterFish |Hugeass Devilfish from ~EXU-Bluff.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  N  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |NadeBunny |Blows up like a [['Nade Flare|NadeFlare]].||
    |NaliWindTurbine |dooooooooo ''NOT'' TOUCH THE NALI WINDTURBIIIIIIINES||
    |NuclearBag |Vomits fusion projectiles and glows. VERY aggressive.||
    |NuclearBagMP ||[[Energizer Ball|EnergizerBall]]|
    |NuclearPupae|||
    |NuclearSkaarj|||
    |NuclearSkaarjMP ||[[Energizer Ball|EnergizerBall]]|
    |NuclearSlith |Splodes into some [[Nuclear Pupae|NuclearPupae]] on death.||
    |NukeCow |Blows up Redeemer-style when killed.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  O  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  P  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |PiddledoperMercenary|||
    |PiddledoperMercenaryMP ||[[Piddledoper]]|
    |PizzaChickenShit |Small Pizza-shooting Gasbag. (Pizza = lava-skinned rock.)||
    |PizzaFuckerPolice|||
    |PizzaQueen|||
    |PizzaSWAT |Pizza Fucker Police that fires a Pizza Rocket.||
    |PlasmaBag |Spits a medium plama ball ([[RFPC]] alt fire).||
    |PlasmaBeast |A beastly beast, made of the beastliest plasma.||
    |PlasmaMercenary |Shoots RFPC primary pulses and alt balls.||
    |PlasmaMercenaryMP ||[[RFPC]]|
    |PlasmaPolice |Warlord version of the [[Advanced Skaarj Assassin|AdvancedSkaarjAssassin]].||
    |PlasmaTrooper |A [[Doom Trooper|DoomTrooper]] with an [[RFPC]]!||
    |PlasmaPolice |Sprays Descent-style plasma balls.||
    |PolarisFighter |Like the [[Hellfighter]], but friendly in SP.||
    |PopeQueen |Saint-type pawn.||
    |PopeQueenMP ||[[EXU Shieldbelt|EXUShieldbelt]]|
    |[[Popper]] |Shoots tons and tons of Unreal grenades.||
    |PopperMP ||[[Munitions Party Mix Flare|MunitionsFlare]]|
    |PowerBrute |Fires high-energy spherical projectiles.||
    |PowerBruteMP ||[[EXU Shieldbelt|EXUShieldbelt]]|
    |PsychoAssaultBrute |Like the [[Assault Brute|AssaultBrute]], but in batshit insane mode.||
    |PsychoCharger |An extremely pissed-off energy-based [[Charger]]. Fast.||
    |PsychoChargerMP ||[[Heavy Shield Belt|HeavyShieldBelt]]|
    |PsychoMaintBrute |A [[Maint. Brute|MaintBrute]] in batshit insane mode.||
    |PsychoQueen |A [[Turbo Queen|TurboQueen]] with 10x as much health.||
    |PsychoRazorTentacle |From an ~EXU1 Bonus Map.||
    |PsychoSecBrute |A [[Security Brute|SecBrute]] in batshit insane mode.||
    |PulseBrute|||
    |PulseKrall|||
    |PulseMercenary|||
    |PulseMercenaryElite|||
    |PulseMercenaryEliteMP ||[[EXU Health Pack|EXUUnrealHealth]]|
    |PulseMercenaryMP ||[[EXU Health Pack|EXUUnrealHealth]]|
    |PulsePolice|||
    |PulseSkaarj |Skaarj Warrior that shoots Excessive pulse balls.||
    |PulseSkaarjMP ||[[Energizer Ball|EnergizerBall]]|
    |PulseSkyTentacle|||
    |PulseSWAT |Shoots Pulse Rockets.||
    |PulseTentacle|||
    |Pulse Weasel |Shitheaded jerk that shoots Excessive pulse balls.||
    |PupaeBombardier |A huge gasbag that barfs out [[Kamikaze Pupae|KamikazePupae]].||
    |PupaeVomiteer |A huge gasbag that barfs out [[Turbo Pupae|TurboPupae]].||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  Q  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |QueenQueen |Spits out yellow fireballs that spawn [[Vermin Queens|VerminQueen]].||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  R  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |RadioactiveBileQueen |Fires a bunch of fusion balls.||
    |RadioactiveBileQueenMP ||[[Fusion Flare|FusionFlare]]|
    |RazorIceSkaarj |From ~EXU-SkyTown. Shoots low-damage, high-momentum razors.||
    |RedSkaarj|Seen in an ~EXU1 Bonus Map.||
    |RedSkaarjMP ||[[Energizer Ball|EnergizerBall]]|
    |RedeemerGasbag|||
    |[[Rimbler]]	 |A green [[Rumbler]]. Faster. Formed from a typo in IRC.||
    |RocketBlastShitfucker |Rocket-spammin' brute.||
    |RocketBlastShitfuckerMP ||[[Blast Bapes|BlastBapes]]|
    |RocketBrute|||
    |RocketBunny|Explodes into a bunch of rockets.||
    |RocketGasbag|||
    |RocketTentacle|||
    |RockMonster |A flying sentient boulder miniboss thing.||
    |[[Rombler]] |A blue Rumbler. Stronger. Also formed from a typo.||
    |[[Rumbler]] |Based on the crazy Rumblers from ~SS2.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  S  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |SaintBag |Saint pawns shoot glowy white energy projectiles.||
    |SaintBrute|||
    |SaintKrall|||
    |SaintKrallElite|||
    |SaintMercenary|||
    |SaintOrb |Can't be killed, but very slow and dumb.||
    |SaintSkaarj|||
    |SaintSkaarjLord|||
    |SaintSkaarjMP ||[[EXU Bandages|EXUBandages]]|
    |SecBrute |Based on ~SS2's Security Bot.||
    |ShadowCreature|Threat to all life. Will aggressively attack anything.||
    |ShadowManta|Threat to all life. Will aggressively attack anything.||
    |ShadowSquid|Threat to all life. Will aggressively attack anything.||
    |[[Shitbag]]|||
    |ShitBrute|||
    |ShitBruteMP ||[[Shit Helm|ShitHelm]]|
    |ShitBruteSP ||[[Shit Jar|ShitJar]]|
    |ShitFountainMercenary |Spews shit absolutely everywhere.||
    |ShitMercenary|||
    |ShitMercenaryElite|||
    |ShitMercenaryEliteMP ||[[Shitgun]]|
    |ShitMercenaryMP ||[[Shitgun]]|
    |ShitPupae|||
    |ShitQueen |Launches Shitballs and 'splodes into [[Shit Pupae|ShitPupae]] on death.||
    |ShitSlith |Spits Shitglobs. Splodes into some [[Shit Pupae|ShitPupae]] on death.||
    |ShitTentacle|||
    |ShockBrute|||
    |ShockBruteMP ||[[Shock Helm|ShockHelm]]|
    |ShockBunny |Blows up like a [[Shock Flare|ShockFlare]].||
    |ShockCommando |Upgraded [[Shock Trooper|ShockTrooper]] with more damage and health.||
    |ShockKrall|||
    |ShockKrallMP ||[[Shock Flare|ShockFlare]]|
    |ShockKrallElite |Launches bouncing Shockballs.||
    |ShockKrallEliteMP ||[[Shockball Flare|ShockballFlare]]|
    |ShockMercenary|||
    |ShockMercenaryElite|||
    |ShockMercenaryEliteMP ||[[EXU Health Pack|EXUUnrealHealth]]|
    |ShockMercenaryMP ||[[EXU Health Pack|EXUUnrealHealth]]|
    |ShockPolice|||
    |ShockPupae|||
    |ShockQueen |Fires Shock Rockets and 'splodes into [[Shock Pupae|ShockPupae]].||
    |ShockSkyTentacle |Fires Shock Rockets.||
    |ShockSlith |Fires Shock Rockets and 'splodes into [[Shock Pupae|ShockPupae]].||
    |ShockSWAT |Fires Shock Rockets.||
    |ShockTrooper |Extremely fast, high-damage/melee-only assault pawn. ||
    |ShoeFucker |Miniscule in-shoe [[Fucker Brute|FuckerBrute]] with instant-kill damage.||
    |ShrapnelMercenary |Spews Excessive Flak Chunks. Watch out for this jerk.||
    |ShrapnelMercenaryMP ||[[Combat Shotgun|EXUShotty]]|
    |SkaarjFiend |Can deal damage even when killed.||
    |SkaarjSkaarj |Fires green projectiles that spawn [[Vermin Skaarj|VerminSkaarj]].||
    |SkinnyBrute |Crazy brute that shoots Unreal grenades.||
    |SkinnySkaarj |~EXU1 pawn; same as the [[Skinny Brute|SkinnyBrute]], but more dangerous.||
    |SkinnySkaarjMP ||[[EXU Bandages|EXUBandages]]|
    |SkyTentacle |The original huge, rocket-shooting tentacle from ~EXU1.||
    |SlimePupae|||
    |SlimeQueen |Fires Slime Rockets and 'splodes into [[Slime Pupae|SlimePupae]].||
    |SlimeSlith |Fires Slime Rockets and 'splodes into [[Slime Pupae|SlimePupae]].||
    |SlimerMercenary|||
    |SlimerSkaarj |Fires Slime Rockets like the Bio Police - two at once.||
    |SlimerSkaarjMP ||[[EXU Bandages|EXUBandages]]|
    |SludgeCrawler |Threat to all life. Will aggressively attack anything.||
    |SmallPulseSkyTentacle|||
    |SniperCharger |A [[Charger]] variant that shoots you dead.||
    |StealthBunny |Invisible [[Bomb Bunny|BombBunny]].||
    |SteelPupae |Tough, robotic bugs with extremely powerful bites.||
    |SteelQueen |Fires Flak Grenades and 'splodes into [[Steel Pupae|SteelPupae]].||
    |SteelSlith |Fires Flak Grenades and 'splodes into [[Steel Pupae|SteelPupae]].||
    |StupidBursterBag |Very stupid, very bursty.||
    |StupidDoperBag |Fires Piddledoper projectiles. ||
    |SuperCharger |Instant-kill-whack [[Charger]] with about a million health.||
    |SuperChargerMP ||[[Barrel O' Suns|SunBarrelNade]]|
    |SuperHellsphere |Hellsphere that uses Hellblasts. DANGEROUS!||
    |SuperLunatic |Shoots Excessive flak chunks all over the place.||
    |SuperSkaarjBerserker |Fires two super balls at once.||
    |SwampThing |Brute that is immune to bio damage; shoots green lasers.||
    |SwampThingSP ||[[Combat Boots|CombatBoots]]|
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  T  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |ThreeHundredthPawn |What the Christ?||
    |TorpedoFish |Basically a guided missile.||
    |TurboBrute |Has Behemoth skin and shoots Excessive rockets.||
    |TurboBruteMP ||[[Turbo Helm|TurboHelm]]|
    |TurboBruteSP ||[[EXU Thighpads|EXUThighpads]]|
    |TurboDemonBrute |Big dude that ain't happy.||
    |TurboFly |From an ~EXU1 bonus map. Stupid pawn.||
    |TurboFuckerBrute |More powerful Fucker from ~EXU-ExtremeDark.||
    |TurboFuckerBruteMP ||[[Fucker Cola|FuckerCola]]|
    |TurboGasbag|||
    |TurboKrall |Original ~EXU1 fireball-shooting Krall.||
    |TurboKrallElite |Original ~EXU1 Krall Elite. Shoots high-momentum razors.||
    |TurboKrallEliteMP ||[[Razor Flare|RazorFlare]]|
    |TurboKrallMP ||[[Nuclear Flare|NuclearFlare]]|
    |TurboManta|||
    |TurboMercenary |Shoots UT Rockets.||
    |TurboMercenaryElite |Shoots Excessive UT Rockets.||
    |TurboMercenaryEliteMP ||[[EXU Health Pack|EXUUnrealHealth]]|
    |TurboMercenaryMP ||[[EXU Health Pack|EXUUnrealHealth]]|
    |TurboMiniFuckerBrute |More powerful [[Mini Fucker|MiniFuckerBrute]] from ~EXU-ExtremeDark.||
    |TurboPulseSkaarj|||
    |TurboPulseSkaarjLord |From ~EXU-ExtremeEnd.||
    |TurboPupae|||
    |TurboQueen |The ~EXU1 final boss.||
    |TurboSkaarj |Shoots slightly-boosted Skaarj projectiles.||
    |TurboSkaarjBerserker |Shoots [[Clusterfucker]] flak.||
    |TurboSkaarjBerserkerMP ||[[EXU Bandages|EXUBandages]]|
    |TurboSkaarjLord |Shoots fireballs.||
    |TurboSkaarjLordMP ||[[EXU Bandages|EXUBandages]]|
    |TurboSkaarjMP ||[[EXU Bandages|EXUBandages]]|
    |TurboTentacle |Cannon fodder. Not really dangerous, even in groups.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  U  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |UberBossPupae |Humongous pupae.||
    |UberPupae |Giant pupae.||
    |UltimateCycloneBag |EXTREMELY SPAMMY Gasbag.||
    |[[Ultrabag]] |Boss bag. The ultimate Gasbag.||
    |UltraCharger|||
    |UltraChargerExtreme |Releases [[Super Sneers|SuperSneer]] and possibly an [[Ultra Sneer|UltraSneer]] on death.||
    |UltraChargerMP ||[[Ultrabelt]]|
    |UltraEnergyBag |Charges up a huge-ass energy bolt.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  V  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |VerminBag |Spawned by the [[Vermin Bagger|VerminBagger]]. Shoot Skaarj projectiles.||
    |VerminBagger |Spawns [[Vermin Bags|VerminBag]] with each attack. No other attacks.||
    |VerminBaggerMP||[[Missile Backpack]]|
    |VerminQueen |Small. Spits a bunch of yellow fireballs.||
    |VerminSkaarj |Small and ANNOYING. Shoots green fireballs.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  W  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |WTFSkaarj |Crazy insane movement; only does 1 damage. Sometimes it just vanishes.||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  X  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  Y  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||
    |>|>||
    |>|>|color:black; !''- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[  Z  ]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'' |
    |>|>||

    <html>
    <canvas id="viewport"></canvas>
    </html>

    <script type="text/javascript">
    		<!--
    		(function(){

    			//     Y
    			//     |
    			// X --+------>
    			//     |        X increases
    			//     |
    			//     v
    			//       Y increases

    			//       270
    			//        |
    			// 180 ---+--- 0
    			//        |
    			//       90

    			var tileset1 = new Image();
    			tileset1.src = 'data:image/gif;base64, ';

    			var tan = Math.tan;
    			var cos = Math.cos;
    			var sin = Math.sin;
    			var abs = Math.abs;
    			//var round = Math.round;
    			var floor = Math.floor;

    			var mod = function(a,n){return ((a%n)+n)%n;};
    			var wrap = function(n, min, max){var d=max-min;return min+(((n%d)+d)%d);};
    			var to = function(x,y,w){return y*w+x;};
    			var ot = function(p, w){var l={x:0,y:0};l.y=floor(p/w);l.x=p-l.y*w;return l;};

    			var pi = 3.14159265;
    			var degree_to_radian = 0.0174532925; // pi/180
    			degree_to_radian = Math.PI/180;

    			var viewport_width = 320;
    			var viewport_height = 200;
    			var viewport_half_width = viewport_width/2;
    			var viewport_half_height = viewport_height/2;

    			var render_columns = 160;
    			var render_fov = 60;
    			var render_half_fov = render_fov/2;
    			var render_fps = 30;
    			var render_update = true;
    			var render_projection_plane_distance = floor(viewport_half_width / tan(render_half_fov*degree_to_radian));
    			var render_column_degrees = render_fov / render_columns;

    			var rmode = 0;

    			var elapsed_time = 0;
    			var delta_time = 1/render_fps; // fixed delta, make dynamic later

    			var player_height = 16;
    			var player_move_rate = 128;
    			var player_turn_rate = 135;
    			var player_x = 64;
    			var player_y = 64;
    			var player_rotation = 0;

    			var canvas_el = null;
    			var canvas = null;

    			var ticky = null;

    			var map = {
    				xtiles: 16,
    				ytiles: 10,
    				tilesize: 32,
    				tileheight: 32,

    				data: '################' +
    					  '#              #' +
    					  '# ####    ######' +
    					  '#           #E #' +
    					  '#         #### #' +
    					  '# # #     #    #' +
    					  '#  S     ###   #' +
    					  '# # #     #    #' +
    					  '#              #' +
    					  '################',
    				hittest: function(x, y) {
    					if(x<0 || x>=map.xtiles || y<0 || y>=map.ytiles)
    						return true;
    					var result = this.data[to(x,y,map.xtiles)];
    					return result=='#';
    				},
    				rtrace: function(px, py, r) {
    					var hit = {x:0, y:0, nx:0, ny:0, d:0, r:0};

    					// make sure r is in acceptable range, prevents some buggyness
    					if(r<0) r += 360;
    					else if(r>=360) r -= 360;

    					var ang = r*degree_to_radian;

    					// get horizontal intersection

    						if(r>=180) { // ray facing up
    							// x and y increment
    							var Yi = -map.tilesize;
    							var Xi = (ang!=0)?(-map.tilesize / tan(ang)):(0);
    							// intersection
    							var iY = floor(py/map.tilesize) * map.tilesize - 0.1;
    							var nY = 1;
    						} else { // ray facing down
    							// x and y increment
    							var Yi = map.tilesize;
    							var Xi = (ang!=0)?(map.tilesize / tan(ang)):(0);
    							// intersection
    							var iY = floor(py/map.tilesize) * map.tilesize + map.tilesize;
    							var nY = -1;
    						}
    						var iX = (ang!=0)?(px+(iY-py)/tan(ang)):(0);

    						// grid coord for hit test
    						var gY = floor(iY/map.tilesize);
    						var gX = floor(iX/map.tilesize);

    						// increment while no collision
    						while(!map.hittest(gX, gY)) {
    							iX += Xi;
    							iY += Yi;
    							gY = floor(iY/map.tilesize);
    							gX = floor(iX/map.tilesize);
    						}

    						// horizontal intersection point
    						var hX = iX;
    						var hY = iY;

    						if(r<=90 || r>=270) { // ray facing right
    							// x and y increment
    							Yi = map.tilesize*tan(ang);
    							Xi = map.tilesize;
    							// intersection
    							iX = floor(px/map.tilesize) * map.tilesize + map.tilesize;
    							var nX = -1;
    						} else { // ray facing left
    							// x and y increment
    							Yi = -map.tilesize*tan(ang);
    							Xi = -map.tilesize;
    							// intersection
    							iX = floor(px/map.tilesize) * map.tilesize - 0.1;
    							var nX = 1;
    						}
    						iY = py+(iX-px)*tan(ang);

    						// grid coord for hit test
    						var gY = floor(iY/map.tilesize);
    						var gX = floor(iX/map.tilesize);

    						// increment while no collision
    						while(!map.hittest(gX, gY)) {
    							iX += Xi;
    							iY += Yi;
    							gY = floor(iY/map.tilesize);
    							gX = floor(iX/map.tilesize);
    						}

    						// vertical intersection point
    						var vX = iX;
    						var vY = iY;

    						// calculate distances
    						var hD = abs((px-hX) / cos(ang));
    						var vD = abs((px-vX) / cos(ang));
    						//log(hD+' , '+vD);

    						if(hD<vD) {
    							hit.x = hX;
    							hit.y = hY;
    							hit.d = hD;
    							hit.nx = 0;
    							hit.ny = nY;
    							hit.r = mod(hX, map.tilesize);
    						} else {
    							hit.x = vX;
    							hit.y = vY;
    							hit.d = vD;
    							hit.nx = nX;
    							hit.ny = 0;
    							hit.r = mod(vY, map.tilesize);
    						}

    					return hit;
    				},
    			};

    			map.hittest(2,2);

    			var input = {
    				binds: {forward:38, backward:40, turnleft:37, turnright:39, rmode:82},
    				status: {forward:false, backward:false, turnleft:false, turnright:false},
    				keydown: function(e) {
    					e = (!!e)?e:event;
    					var code = e.keyCode;
    					switch(code) {
    						case input.binds.forward: input.status.forward = true; break;
    						case input.binds.backward: input.status.backward = true; break;
    						case input.binds.turnleft: input.status.turnleft = true; break;
    						case input.binds.turnright: input.status.turnright = true; break;
    						case input.binds.rmode: rmode = (rmode+1)%2; break;
    					}
    					//log('keycode='+code);
    					return false;
    				},
    				keyup: function(e) {
    					e = (!!e)?e:event;
    					var code = e.keyCode;
    					switch(code) {
    						case input.binds.forward: input.status.forward = false; break;
    						case input.binds.backward: input.status.backward = false; break;
    						case input.binds.turnleft: input.status.turnleft = false; break;
    						case input.binds.turnright: input.status.turnright = false; break;
    					}
    					//log('keycode='+code);
    					return false;
    				},
    			};

    			function init() {
    				canvas_el = document.getElementById('viewport');
    				canvas_el.setAttribute('width',viewport_width);
    				canvas_el.setAttribute('height',viewport_height);
    				canvas_el.style.width=viewport_width+'px';
    				canvas_el.style.height=viewport_height+'px';
    				canvas = canvas_el.getContext('2d');
    				canvas.mozImageSmoothingEnabled = false;
    				canvas.drawTile = function(tex, xl, yl, u, v, ul, vl) {
    					this.drawImage(tex, u, v, ul, vl, 0, 0, xl, yl);
    				}
    				var starttile = map.data.indexOf('S');
    				var startloc = ot(starttile, map.xtiles);
    				player_x = startloc.x*map.tilesize + map.tilesize/2;
    				player_y = startloc.y*map.tilesize + map.tilesize/2;
    				player_rotation = floor(Math.random()*360);
    				//log('init');
    				//log('player start tile = '+startloc.x+', '+startloc.y);
    				//log('fov: '+render_fov);
    				//log('projection plane distance: '+render_projection_plane_distance);

    				ticky = setInterval(mainloop,1000/render_fps);
    			}

    			function mainloop() {
    				elapsed_time += delta_time;
    				/////////////////////////////////////////////////////////////////
    				// handle input and move player

    					handle_input();

    				/////////////////////////////////////////////////////////////////
    				// render view

    					switch(rmode) {
    						case 0: render_view(); break;
    						case 1: render_overhead(); break;
    					}
    					return;

    					//draw ceiling color
    					canvas.fillStyle = 'rgb(56,56,56)';
    					canvas.fillRect(0, 0, viewport_width, viewport_half_height);

    					//draw floor color
    					canvas.fillStyle = 'rgb(112,112,112)';
    					canvas.fillRect(0, viewport_half_height, viewport_width, viewport_half_height);

    					canvas.save();

    					canvas.save();
    					canvas.translate(viewport_half_width, viewport_half_height);
    					canvas.translate(player_x, player_y);
    					canvas.translate(cos(player_rotation*degree_to_radian)*40, sin(player_rotation*degree_to_radian)*40);
    					canvas.fillStyle = 'rgb(255,0,0)';
    					canvas.fillRect(-4, -4, 8, 8);
    					canvas.restore();

    					canvas.restore();
    			}

    			// shitty player input and collision crap
    			function handle_input() {

    					if(input.status['forward']) {
    						player_x += cos(player_rotation*degree_to_radian)*player_move_rate*delta_time;
    						player_y += sin(player_rotation*degree_to_radian)*player_move_rate*delta_time;
    						if(player_x > (map.xtiles*map.tilesize)) player_x = (map.xtiles*map.tilesize);
    						else if(player_x < 0) player_x = 0;
    						if(player_y > (map.ytiles*map.tilesize)) player_y = (map.ytiles*map.tilesize);
    						else if(player_y < 0) player_y = 0;
    					}
    					if(input.status['backward']) {
    						player_x += -cos(player_rotation*degree_to_radian)*player_move_rate*delta_time;
    						player_y += -sin(player_rotation*degree_to_radian)*player_move_rate*delta_time;
    						if(player_x > (map.xtiles*map.tilesize)) player_x = (map.xtiles*map.tilesize);
    						else if(player_x < 0) player_x = 0;
    						if(player_y > (map.ytiles*map.tilesize)) player_y = (map.ytiles*map.tilesize);
    						else if(player_y < 0) player_y = 0;
    					}
    					if(input.status['turnleft']) {
    						player_rotation -= player_turn_rate*delta_time;
    						if(player_rotation<0)
    							player_rotation += 360;
    					}
    					if(input.status['turnright']) {
    						player_rotation += player_turn_rate*delta_time;
    						if(player_rotation>=360)
    							player_rotation -= 360;
    					}

    			}

    			function playerdot(ctx) {
    				ctx.save();
    				ctx.translate(player_x, player_y);
    				ctx.fillStyle = 'rgb(255,0,0)';
    				ctx.fillRect(-4, -4, 8, 8);
    				ctx.restore();
    			}

    			function render_view() {
    				canvas.save();

    					//draw ceiling
    					canvas.fillStyle = 'rgb(56,56,56)'; canvas.fillRect(0, 0, viewport_width, viewport_half_height)
    					//draw floor
    					canvas.fillStyle = 'rgb(112,112,112)'; canvas.fillRect(0, viewport_half_height, viewport_width, viewport_half_height);

    					var fang = (player_rotation-render_half_fov);
    					var cw = viewport_width / render_columns; // slice width
    					var ch = 0; // slice height

    					for(var column=0; column<render_columns; column++) {
    						fang += render_fov / render_columns;
    						var intersection = map.rtrace(player_x, player_y, fang);
    						var rdiff = abs(fang-player_rotation);
    						intersection.d *= cos(rdiff*degree_to_radian);
    						if(intersection.d>0)
    							ch = map.tileheight / intersection.d * render_projection_plane_distance;

    						canvas.save();
    							if(input.status['forward'] || input.status['backward'])
    								canvas.translate(0, viewport_half_height - ch/2 + sin(elapsed_time*16)*3);
    							else
    								canvas.translate(0, viewport_half_height - ch/2);

    							canvas.drawImage(tileset1, floor(32+intersection.r), 0, 1, map.tilesize, 0, 0, cw, ch);
    							canvas.fillStyle = 'rgba(0,0,0,'+(1-1.0 / intersection.d * 128)+')';
    							canvas.fillRect(0, 0, cw, ch);

    						canvas.restore();
    						canvas.translate(cw, 0);

    					}

    				canvas.restore();

    			}

    			addEventHandler(window, 'keydown', input.keydown);
    			addEventHandler(window, 'keyup', input.keyup);
    			//addEventHandler(window, 'load', init);
    			addEventHandler(tileset1, 'load', function(){log('image loaded');setTimeout(init,100);});
    			document.onkeydown = function(){return false;};
    		}());

    //////////////////////////////////////////////////////////////////////////////////////////
    ////
    //////////////////////////////////////////////////////////////////////////////////////////

    		function addEventHandler(el, ev, f) {
    			if(!el) return;
    			if(el.addEventListener) {
    				if(ev.substring(0,2)=='on')
    					ev=ev.substring(2);
    				el.addEventListener(ev, f, false);
    				return {el:el, func:f, name:ev};
    			} else if(el.attachEvent) {
    						if(ev.substring(0,2)!='on')
    					ev='on'+ev;
    				el.attachEvent(ev, f);
    				return {el:el, func:f, name:ev};
    			} else {
    				if(ev.substring(0,2)!='on')
    					ev='on'+ev;
    				el[ev]=f;
    				return {el:el, func:f, name:ev};
    			}
    			return false;
    		};

    		function removeEventHandler(eh) { //remove an event handler object created using the above
    			if(!eh || !eh.el) return;
    			if(eh.el.detachEvent)
    				eh.el.detachEvent(eh.name, eh.func);
    			else if(eh.el.removeEventListener)
    				ehh.el.removeEventListener(eh.name, eh.func, false);
    			else
    				ehh.el[eh.name]=null;
    		};

    		function log(msg) {
    			setTimeout((function(){throw(msg);}),1);
    		}

    		-->
    		</script>

    !The
    The

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~BruteDoll |
    |''Class Name:'' | EXU.~DemonBruteDoll |
    |''Primary Fire:'' | |
    |''Alternate Fire:'' | |
    |''Range:'' | |
    |''Ammo Type:'' | |
    |''Ammo Capacity:'' | |
    |''Ammo Usage:'' | |
    |''Damage Output:'' | |
    |''Special Features:'' | |

    ''PRIMARY FIRE:''

    ''ALTERNATE FIRE:''

    ''NOTES:''

    !The
    The

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~ChaosBarrelNade |
    |''Primary Fire:'' | |
    |''Alternate Fire:'' | |
    |''Range:'' | |
    |''Ammo Type:'' | |
    |''Ammo Capacity:'' | |
    |''Ammo Usage:'' | |
    |''Damage Output:'' | |
    |''Special Features:'' | |

    ''PRIMARY FIRE:''

    ''ALTERNATE FIRE:''

    ''NOTES:''

    /***
    |Name|CheckboxPlugin|
    |Source|http://www.TiddlyTools.com/#CheckboxPlugin|
    |Documentation|http://www.TiddlyTools.com/#CheckboxPluginInfo|
    |Version|2.4.0|
    |Author|Eric Shulman|
    |License|http://www.TiddlyTools.com/#LegalStatements|
    |~CoreVersion|2.1|
    |Type|plugin|
    |Description|Add checkboxes to your tiddler content|
    This plugin extends the TiddlyWiki syntax to allow definition of checkboxes that can be embedded directly in tiddler content.  Checkbox states are preserved by:
    * by setting/removing tags on specified tiddlers,
    * or, by setting custom field values on specified tiddlers,
    * or, by saving to a locally-stored cookie ID,
    * or, automatically modifying the tiddler content (deprecated)
    When an ID is assigned to the checkbox, it enables direct programmatic access to the checkbox DOM element, as well as creating an entry in TiddlyWiki's config.options[ID] internal data.  In addition to tracking the checkbox state, you can also specify custom javascript for programmatic initialization and onClick event handling for any checkbox, so you can provide specialized side-effects in response to state changes.
    !!!!!Documentation
    >see [[CheckboxPluginInfo]]
    !!!!!Revisions
    <<<
    2008.01.08 [*.*.*] plugin size reduction: documentation moved to [[CheckboxPluginInfo]]
    2008.01.05 [2.4.0] set global "window.place" to current checkbox element when processing checkbox clicks.  This allows init/beforeClick/afterClick handlers to reference RELATIVE elements, including using "story.findContainingTiddler(place)".  Also, wrap handlers in "function()" so "return" can be used within handler code.
    |please see [[CheckboxPluginInfo]] for additional revision details|
    2005.12.07 [0.9.0] initial BETA release
    <<<
    !!!!!Code
    ***/
    //{{{
    version.extensions.CheckboxPlugin = {major: 2, minor: 4, revision:0 , date: new Date(2008,1,5)};
    //}}}
    //{{{
    config.checkbox = { refresh: { tagged:true, tagging:true, container:true } };
    config.formatters.push( {
    	name: "checkbox",
    	match: "\\[[xX_ ][\\]\\=\\(\\{]",
    	lookahead: "\\[([xX_ ])(=[^\\s\\(\\]{]+)?(\\([^\\)]*\\))?({[^}]*})?({[^}]*})?({[^}]*})?\\]",
    	handler: function(w) {
    		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
    		lookaheadRegExp.lastIndex = w.matchStart;
    		var lookaheadMatch = lookaheadRegExp.exec(w.source)
    		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
    			// get params
    			var checked=(lookaheadMatch[1].toUpperCase()=="X");
    			var id=lookaheadMatch[2];
    			var target=lookaheadMatch[3];
    			if (target) target=target.substr(1,target.length-2).trim(); // trim off parentheses
    			var fn_init=lookaheadMatch[4];
    			var fn_clickBefore=lookaheadMatch[5];
    			var fn_clickAfter=lookaheadMatch[6];
    			var tid=story.findContainingTiddler(w.output);  if (tid) tid=tid.getAttribute("tiddler");
    			var srctid=w.tiddler?w.tiddler.title:null;
    			config.macros.checkbox.create(w.output,tid,srctid,w.matchStart+1,checked,id,target,config.checkbox.refresh,fn_init,fn_clickBefore,fn_clickAfter);
    			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
    		}
    	}
    } );
    config.macros.checkbox = {
    	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    		if(!(tiddler instanceof Tiddler)) { // if no tiddler passed in try to find one
    			var here=story.findContainingTiddler(place);
    			if (here) tiddler=store.getTiddler(here.getAttribute("tiddler"))
    		}
    		var srcpos=0; // "inline X" not applicable to macro syntax
    		var target=params.shift(); if (!target) target="";
    		var defaultState=params[0]=="checked"; if (defaultState) params.shift();
    		var id=params.shift(); if (id && !id.length) id=null;
    		var fn_init=params.shift(); if (fn_init && !fn_init.length) fn_init=null;
    		var fn_clickBefore=params.shift();
    		if (fn_clickBefore && !fn_clickBefore.length) fn_clickBefore=null;
    		var fn_clickAfter=params.shift();
    		if (fn_clickAfter && !fn_clickAfter.length) fn_clickAfter=null;
    		var refresh={ tagged:true, tagging:true, container:false };
    		this.create(place,tiddler.title,tiddler.title,0,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter);
    	},
    	create: function(place,tid,srctid,srcpos,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter) {
    		// create checkbox element
    		var c = document.createElement("input");
    		c.setAttribute("type","checkbox");
    		c.onclick=this.onClickCheckbox;
    		c.srctid=srctid; // remember source tiddler
    		c.srcpos=srcpos; // remember location of "X"
    		c.container=tid; // containing tiddler (may be null if not in a tiddler)
    		c.tiddler=tid; // default target tiddler
    		c.refresh = {};
    		c.refresh.container = refresh.container;
    		c.refresh.tagged = refresh.tagged;
    		c.refresh.tagging = refresh.tagging;
    		place.appendChild(c);
    		// set default state
    		c.checked=defaultState;
    		// track state in config.options.ID
    		if (id) {
    			c.id=id.substr(1); // trim off leading "="
    			if (config.options[c.id]!=undefined)
    				c.checked=config.options[c.id];
    			else
    				config.options[c.id]=c.checked;
    		}
    		// track state in (tiddlername|tagname) or (fieldname@tiddlername)
    		if (target) {
    			var pos=target.indexOf("@");
    			if (pos!=-1) {
    				c.field=pos?target.substr(0,pos):"checked"; // get fieldname (or use default "checked")
    				c.tiddler=target.substr(pos+1); // get specified tiddler name (if any)
    				if (!c.tiddler || !c.tiddler.length) c.tiddler=tid; // if tiddler not specified, default == container
    				if (store.getValue(c.tiddler,c.field)!=undefined)
    					c.checked=(store.getValue(c.tiddler,c.field)=="true"); // set checkbox from saved state
    			} else {
    				var pos=target.indexOf("|"); if (pos==-1) var pos=target.indexOf(":");
    				c.tag=target;
    				if (pos==0) c.tag=target.substr(1); // trim leading "|" or ":"
    				if (pos>0) { c.tiddler=target.substr(0,pos); c.tag=target.substr(pos+1); }
    				if (!c.tag.length) c.tag="checked";
    				var t=store.getTiddler(c.tiddler);
    				if (t && t.tags)
    					c.checked=t.isTagged(c.tag); // set checkbox from saved state
    			}
    		}
    		// trim off surrounding { and } delimiters from init/click handlers
    		if (fn_init) c.fn_init="(function(){"+fn_init.trim().substr(1,fn_init.length-2)+"})()";
    		if (fn_clickBefore) c.fn_clickBefore="(function(){"+fn_clickBefore.trim().substr(1,fn_clickBefore.length-2)+"})()";
    		if (fn_clickAfter) c.fn_clickAfter="(function(){"+fn_clickAfter.trim().substr(1,fn_clickAfter.length-2)+"})()";
    		c.init=true; c.onclick(); c.init=false; // compute initial state and save in tiddler/config/cookie
    	},
    	onClickCheckbox: function(event) {
    		window.place=this;
    		if (this.init && this.fn_init) // custom function hook to set initial state (run only once)
    			{ try { eval(this.fn_init); } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }
    		if (!this.init && this.fn_clickBefore) // custom function hook to override changes in checkbox state
    			{ try { eval(this.fn_clickBefore) } catch(e) { displayMessage("Checkbox onClickBefore error: "+e.toString()); } }
    		if (this.id)
    			// save state in config AND cookie (only when ID starts with 'chk')
    			{ config.options[this.id]=this.checked; if (this.id.substr(0,3)=="chk") saveOptionCookie(this.id); }
    		if (this.srctid && this.srcpos>0 && (!this.id || this.id.substr(0,3)!="chk") && !this.tag && !this.field) {
    			// save state in tiddler content only if not using cookie, tag or field tracking
    			var t=store.getTiddler(this.srctid); // put X in original source tiddler (if any)
    			if (t && this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed
    				t.set(null,t.text.substr(0,this.srcpos)+(this.checked?"X":"_")+t.text.substr(this.srcpos+1),null,null,t.tags);
    				if (!story.isDirty(t.title)) story.refreshTiddler(t.title,null,true);
    				store.setDirty(true);
    			}
    		}
    		if (this.field) {
    			if (this.checked && !store.tiddlerExists(this.tiddler))
    				store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
    			// set the field value in the target tiddler
    			store.setValue(this.tiddler,this.field,this.checked?"true":"false");
    			// DEBUG: displayMessage(this.field+"@"+this.tiddler+" is "+this.checked);
    		}
    		if (this.tag) {
    			if (this.checked && !store.tiddlerExists(this.tiddler))
    				store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
    			var t=store.getTiddler(this.tiddler);
    			if (t) {
    				var tagged=(t.tags && t.tags.indexOf(this.tag)!=-1);
    				if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }
    				if (!this.checked && tagged) { t.tags.splice(t.tags.indexOf(this.tag),1); store.setDirty(true); }
    			}
    			// if tag state has been changed, update display of corresponding tiddlers (unless they are in edit mode...)
    			if (this.checked!=tagged) {
    				if (this.refresh.tagged) {
    					if (!story.isDirty(this.tiddler)) // the TAGGED tiddler in view mode
    						story.refreshTiddler(this.tiddler,null,true);
    					else // the TAGGED tiddler in edit mode (with tags field)
    						config.macros.checkbox.refreshEditorTagField(this.tiddler,this.tag,this.checked);
    				}
    				if (this.refresh.tagging)
    					if (!story.isDirty(this.tag)) story.refreshTiddler(this.tag,null,true); // the TAGGING tiddler
    			}
    		}
    		if (!this.init && this.fn_clickAfter) // custom function hook to react to changes in checkbox state
    			{ try { eval(this.fn_clickAfter) } catch(e) { displayMessage("Checkbox onClickAfter error: "+e.toString()); } }
    		// refresh containing tiddler (but not during initial rendering, or we get an infinite loop!) (and not when editing container)
    		if (!this.init && this.refresh.container && this.container!=this.tiddler)
    			if (!story.isDirty(this.container)) story.refreshTiddler(this.container,null,true); // the tiddler CONTAINING the checkbox
    		return true;
    	},
    	refreshEditorTagField: function(title,tag,set) {
    		var tagfield=story.getTiddlerField(title,"tags");
    		if (!tagfield||tagfield.getAttribute("edit")!="tags") return; // if no tags field in editor (i.e., custom template)
    		var tags=tagfield.value.readBracketedList();
    		if (tags.contains(tag)==set) return; // if no change needed
    		if (set) tags.push(tag); // add tag
    		else tags.splice(tags.indexOf(tag),1); // remove tag
    		for (var t=0;t<tags.length;t++) tags[t]=String.encodeTiddlyLink(tags[t]);
    		tagfield.value=tags.join(" "); // reassemble tag string (with brackets as needed)
    		return;
    	}
    }
    //}}}

    !The Clusterfucker
    Armed with both a saturation bomblet projector and a nanite missile system, this aptly-named weapon excels at crowd-control and anti-air duties like no other. It uses drums of nanomaterial for ammunition. As this material is fed into the weapon, it is automatically assembled into ready-to-use projectiles.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.Clusterfucker |
    |''Primary Fire:'' | Smart Bomblets |
    |''Alternate Fire:'' | Seeking Rockets |
    |''Range:'' | Medium / Long |
    |''Ammo Type:'' | [[Nanite Drum|ClusterPack]] |
    |''Ammo Capacity:'' | 900 |
    |''Ammo Usage:'' | 3 / 8 |
    |''Damage Output:'' | High |
    |''Splash Damage:'' | Dynamic / Low |
    |''Special Features:'' | Smart Detonator |

    ''PRIMARY FIRE:'' Saturation bomblets are fired three at a time. These indirect projectiles will fall to the ground and bounce off of surfaces, but will explode on direct contact with enemies. Additionally, the blast radius of each nanite bomblet increases the longer it exists (up to a maximum amount) as the explosive material inside is refined by the nano-cocktail. All bomblets are equipped with Smart Detonator systems.

    ''ALTERNATE FIRE:'' Eight seeker missiles are launched simultaneously. Missiles will attempt to divide up their targets as much as possible when large crowds are present, but otherwise will vector in on the nearest target first. If the weapon reticle is held over a single target, the gun will lock on to that target, and all eight missiles will seek it exclusively until it is destroyed. Seeker missiles will automatically reacquire targets if their original target is neutralized.

    ''SMART DETONATOR:'' The Smart Detonator acts as both an area-saturation sensor and an IFF system. The IFF sensor scans the surrounding area constantly; if it picks up enemy signatures within range of its explosive radius, it will trigger its detonator early, even if no physical contact was made with an enemy. This system also prevents nanite bomblets from detonating if friendly targets are within range of the explosive. If a friendly unit is too close, the sensor will beep and try to detonate again 0.5 seconds later. It will repeat this process until all friendlies are clear, and then trigger the explosive charge.

    ''NOTES:'' The Clusterfucker lives up to its name almost as well as the Shitgun. With the primary fire spamming explosive bomblets all over and the alternate launching seeker missiles, it's a tough combo to beat for sheer destructive capability. Best of all, the most erratic fire mode, the primary, has almost no potential for inflicting self-damage (unless fired point-blank). Perhaps its biggest weakness is the rate at which it burns through ammunition. It truly is a clusterfuck generator.

    Background: #eee
    Foreground: #000
    PrimaryPale: #8cf
    PrimaryLight: #18f
    PrimaryMid: #04b
    PrimaryDark: #014
    SecondaryPale: #ffc
    SecondaryLight: #fe8
    SecondaryMid: #db4
    SecondaryDark: #841
    TertiaryPale: #eee
    TertiaryLight: #ccc
    TertiaryMid: #999
    TertiaryDark: #666
    Error: #f88

    !Design & Leadership
    * ''Lord Waffnuffly "War Bonnet" Letz''
    ** Project Lead
    ** Level Design
    ** Gameplay & Balance Design
    ** Creatures, Weapons, Items
    ** Narrative & Documentation
    ** PR Mismanager

    * ''Dean "~UArchitect" Tresadern''
    ** Second in Command ~Right-Hand Bawss Man
    ** Achievement System
    ** SVN and Mercurial Repository Manager
    ** Main Technician On Duh Ship Yo
    ** Chief Clown Mode Conceptual Designer
    ** The Reason ~EXU2 Is More Than Some Shitty Monster Pack

    !Programming
    * ''Dean "~UArchitect" Tresadern''
    ** Lead Programmer
    ** Maker of Basically All The Coolest Stuff
    ** Dispenser of Dwarf Knowledge
    ** Fixer of Wafflecode
    ** Keeper of THE SURPRISE (Which Totally Doesn't Exist)
    ** Squirrel Advocate

    * ''Lord Waffnuffly "War Bonnet" Letz''
    ** Lead Code Breaker
    ** Weapon, Creature, Item, & Misc. Scripting
    ** Cleaner of Ugly Bawss Code
    ** The Reason ~EXU2 Has Like Ten Billion Files In The \Classes\ Folder

    !Textures
    * ''Dean "~UArchitect" Tresadern''
    ** Graphic Design
    ** Textures
    ** Skins
    ** HUD Elements
    ** Photoshop Tutorializer
    ** Concept Art

    * ''Lord Waffnuffly "War Bonnet" Letz''
    ** Textures
    ** Skins
    ** Graphic Design
    ** Weapon Concept Art
    ** All The Really Shitty Oldschool HUD Icons

    * ''Ivan "sana" Vidusenko''
    ** Weapon Concept Art
    ** Skins for Weapon Models

    !3D Art
    * ''Dean "~UArchitect" Tresadern''
    ** Weapon and Decoration Models

    * ''Ivan "sana" Vidusenko''
    ** Weapon Models

    !Music
    * ''Cybernetika''
    ** Music from the following albums:
    ** Atropos
    ** Colossus
    ** Nanospheric
    ** Neural Network Expansion
    ** The Scythe of Orion
    ** And some unreleased stuff!

    * ''Nicolas Eymerich''
    ** Curse of the Inner Self
    ** Pernicious Glory 3

    * ''Barkley Shut Up and Jam: Chapter One of the ~Hoopz-Barkley ~SaGa''
    ** Eternity.mp3

    !Sound Effects
    * ''Lord Waffnuffly "War Bonnet" Letz''
    ** Mixing
    ** Recording

    * ''Dean "~UArchitect" Tresadern''
    ** Mixing

    * ''Samples used from Freesound''
    ** April 5, 2011:
    ** By Klerrp (http://www.freesound.org/usersViewSingle.php?id=2015227)
    *** kl_ex1.wav (http://www.freesound.org/samplesViewSingle.php?id=113746)
    *** kl_ex1bb.wav (http://www.freesound.org/samplesViewSingle.php?id=113747)
    *** kl_ex1c.wav (http://www.freesound.org/samplesViewSingle.php?id=113748)
    *** kl_ex1dd.wav (http://www.freesound.org/samplesViewSingle.php?id=113749)
    *** kl_ex2.wav (http://www.freesound.org/samplesViewSingle.php?id=114046)
    *** kl_ex3.wav (http://www.freesound.org/samplesViewSingle.php?id=114047)
    *** kl_ex4.wav (http://www.freesound.org/samplesViewSingle.php?id=114048)
    *** kl_ex5.wav (http://www.freesound.org/samplesViewSingle.php?id=114049)
    *** kl_ex6.wav (http://www.freesound.org/samplesViewSingle.php?id=114050)

    * ''Hand Cannon SFX''
    ** http://www.youtube.com/watch?v=QNXkUA0KFNY

    * ''Inspiration & Mixing Sources, General Audio Badassery''
    ** Blood
    ** Dead Space
    ** Descent 2
    ** Deus Ex
    ** Doom 3
    ** Freespace 2
    ** Secret of Evermore
    ** Supreme Commander
    ** System Shock 2
    ** Total Annihilation
    ** Uprising

    !Special Thanks
    * ''Epic Games: Stock Content''
    ** Unreal
    ** Unreal: Return to Na Pali
    ** Unreal Tournament
    ** Unreal Tournament 3

    * ''Mr. Pants (and Cicero)''
    ** Thanks to Mr. Pants for making the original Excessive Overkill mod for Quake 3 Arena, and thanks to Cicero for making the awesome UT version we all know and love. This is the foundation of EXU, folks. We wouldn't be here without these guys.

    * ''Dean "~UArchitect" Tresadern''
    ** Yeah, he's a team member, but he deserves his own special mention. Co-producer of content and badassery, the head of Plasma Pimp Studios, da main technician on duh ship, and a great friend, UA is the #1 contributor to EXU other than myself. He turns out amazing stuff I'd never be able to figure out on my own, and he has contributed a lot of original and really great ideas as well. He pretty much taught me ~UnrealScript above my copy/paste self-teachings (which wasn't really much, and quite possibly the most offensive code known to man) and turned me into a pretty formidable coder myself... for... some stuff. I still suck, but UA is the man. He also has helped tremendously with the coop side of testing. Furthermore, he is also one of the most hilarious, generous, intelligent, and all-around good people I've ever known. You can't praise this guy enough; he is a class act like none other.

    * ''Cybernetika, Nicolas Eymerich, and Shivaxi''
    ** Way back when, Nicolas Eymerich was one of the first people to offer up custom-made music for ~EXU2, which gave us the excellent Pernicious Glory ~EXU2 battle theme you've heard several times in the campaign. Then, through his connections in the ~DnB music scene, Shivaxi got me into Cybernetika's music. One thing led to another, and blam, Cybernetika is making available all his awesome music! I have to give special thanks to all of these guys for being really cool and helpful. They have all been instrumental in turning ~EXU2's soundtrack from a mix of disparate songs and stock music into something really amazing. This mod wouldn't have the same feeling without it.

    * ''Lord EBM''
    ** EBM is one of the original three EXU Legionnaires who provided good map feedback when I managed to extract it from him. Also, despite his runaway bitchiness when I am ready to release something, he's provided some crazy-awesome map and pawn ideas, such as the Clusternuke Brute and all sorts of other stuff. I'm not sure if he's played any ~EXU2 releases since the beta where I first introduced the Rumbler/Rimbler/Rombler, though. EBM is a Legionnaire of the highest caliber and lowest reliability. For that he gets a special award!
    *** [Edit] As of December 3, 2006, EBM has played an updated form of EXU with the 300th Pawn!
    *** [Edit2] Shockingly, EBM has actually helped me beta test the Christmas ~EXU2: Batshit Insane demo (instead of stealing it and disappearing for weeks) quite thoroughly. This is very strange and unsettling, but at least I'm getting feedback this time. No complaints here!
    *** [Edit3] Jesus fucking Christ, as of July 2011, EBM has voluntarily gained access to the ~EXU2 repo. Either this means he is interested in playing the game again or he is planning to break everything. Hell has frozen over (the hot parts).
    *** [Edit4] It's official: Hell's cold parts melted and the hot parts froze over. EBM is officially alpha-testing just about everything, and even making his own ~EXU2-themed multiplayer maps. I'm... stunned, and a little scared, having seen some of them.

    * ''My Family''
    ** Thanks for not thinking I'm insane (or at least pretending not to think so) and being supportive of me and just about everything else in my life.

    * ''The supgoons''
    ** You guys know who you are. You're all some of the funniest and best people I've ever had the pleasure of knowing. Thank fuck for IRC, because without it, life would be a lot less enjoyable.

    * ''Usaar33''
    ** Originally made ~EXU2: Batshit Insane possible with Oldskool Amp'd, and also helped me with some code stuff back in the day. Even though ~EXU2 will eventually no longer run on Oldskool, the mod has been central to ~EXU2's development for most of its life. Everyone loves Usaar! No, really. Everyone. Including you. You just may not know or accept it.

    * ''Raven''
    ** Created lots of great stuff for the Unreal singleplayer community, notably ~RMusicPlayer, which is why ~EXU2 has such a great soundtrack! No longer do mappers have to find the right .umx file for their maps if something that fits better is available. This was seriously one of the best things to have happened to ~EXU2, ever.

    * ''~Asgard12000''
    ** The awesome dude who created ~MonsterSpawn. He also gave me the code I needed to make ~EXU2 pawns attack bots! HUGE contribution. You have no idea how dull ~EXU2 was before pawns attacked anything but the player; it was pathetic.

    * ''~MrLoathsome & Core''
    ** These guys pretty much found every single netcode bug known to man after Demos 3 and 4 and reported them diligently. ~MrLoathsome even offered up a dedicated coop test server for ~EXU2! How generous! If only he knew how many forms of Internet Cancer he would get by running an EXU coop server.... Well, either way, the help was much appreciated when it came to crushing netcode fuckery, which was probably my weakest area, and was something not even UA could always keep up with on his own!

    * ''~UBerserker & Jet v4.3.5''
    ** UB provided excellent feedback pretty much every single time I released something ~EXU2-related on ~UnrealSP.org. Thanks to his comments, a lot of improvements have been made to the maps and even some of the EXU fundamentals. Jet has also been great at providing feedback and support. They also helped isolate bugs and pointed out performance issues that have since been reduced or fixed, and were the first two to start making custom ~EXU2-based content, which helped us debug development tools.

    * ''~fronjohn''
    ** This guy played through the entirety of Batshit Insane Demo 4 on Unreal difficulty for his FIRST TIME, and recorded every second of it for ~YouTube. Not only was it entertaining, but it was extremely insightful for me as a designer to see what every single moment of the gameplay might look like to someone who isn't familiar with the layout. Any level designer will tell you that the hardest part of design is trying to figure out how your maps will feel to people who aren't intimately familiar with them; putting yourself in someone else's shoes and effectively "forgetting" your own designs you've spent weeks on is damn near impossible. Any sort of detailed gameplay feedback is great, but this was a real treat and incredibly helpful!

    * ''EXU Contributors from the Unreal Community''
    **  ''|404|shiftre'': This guy made the hilarious Pinata and ~MoreGore mutators for UT. I made ~EXU-compatible versions of these mutators to enhance the hilarity of both SP and MP gameplay!
    ** ''Bleeder91<NL>'': Pretty much wrote the five-item display code for the EXU HUD and assisted with its implementation. This was a huge upgrade for the interface!
    ** ''[KAOS]Casey'': Tons of help with ~UScript, netcode defucking, and other useful programming knowledge!
    ** ''Frieza'': Creator of the Brute Doll! Hurgh!
    ** ''integration'': Created and helped me integrate quadratic and quartic mathematic code for EXU's monsters, allowing them to properly hit targets at long range with indirect projectiles. This has been a HUGE boon, as most pawns with indirect weapons were useless beyond a very short range until near the end of 2012!
    ** ''Leo(T.C.K.)'': Fixed ~EXUAmbientSound actors' netcode issues by experimenting with a script I posted until it worked!
    ** ''Parser'': Coded the ~WeaponMage Combat Pistol, which inspired the Piddledoper. Also, the sound effect for the Piddledoper came from the Combat Pistol. It's really, really awesome. And so is the code. And the coder!
    ** ''~PCube'': Additional assistance with ~UScript woes, coming up with some very nice solutions to some of my most annoying problems!
    ** ''~TechnoJF'': Original author of the first version of ~BioSplosionMaker for the Bio Flare, which pretty much got me into coding... dear God. It's all his fault.

    * ''Inspiration Sources, Idea Generators, Awesome Games: Thanks to the developers behind these and many other titles:''
    ** All the Unreal Games, OBVIOUSLY
    ** Barkley Shut Up and Jam: Chapter One of the ~Hoopz-Barkley ~SaGa (Game of the Forever)
    ** Blood
    ** Castlevania: Symphony of the Night
    ** Command & Conquer & Tiberian Sun
    ** Company of Heroes
    ** Dawn of War
    ** Deadlock
    ** Dead Space
    ** Demonstar, ~SM1, & ~SM2
    ** Descent 1 & 2
    ** Deus Ex
    ** Doom 1, 2, 3 & Final Doom
    ** Freespace 2
    ** Gears of War
    ** Half Life, Half Life 2
    ** Mechwarrior: Living Legends (TC Mod for Crysis Wars)
    ** Metal Gear Solid 1 & 2
    ** Secret of Evermore
    ** Secret of Mana 1 & 2
    ** Serious Sam: First & Second Encounter
    ** Supreme Commander & Forged Alliance
    ** System Shock 2
    ** Total Annihilation & Various TA Mods
    ** Uprising
    ** ~X-COM: UFO Defense

    * ''Real life friends and co-workers''
    ** You guys own. Thanks for all the good times and support.

    * ''Hellscrag and ~UnrealSP.org''
    ** Consistently published release details about EXU when news came out, helping to provide more legitimacy for the mod and enabling me to reach a wider audience of SP players. If only he knew what he'd don...err, his support is greatly appreciated! And when 'Scrag retired, 'Ivan "sana" Vidusenko took over the site operations, which kept things going and even set up a hosted ~EXU2 forum for me in addition to his other contributions. What a swell guy!

    * ''The Unreal Community''
    ** Thanks for the feedback, support, and for continuing to keep Unreal alive!

    * ''YOU''
    ** Yes, you, asshole. You don't get off scott-free, here. You're getting a hot load of thanks shoveled directly into your face whether you like it or not. DEAL WITH IT. I'm glad you played! If you did! I guess you could be reading this before playing, in which case FUCK YOU

    - - -

    [[Entry.unr]]

    !!Deleted/Replaced Items: Shit that was too shitty for even EXU

    Many of these actors have been replaced, not just deleted. Replacements will be listed after the actor if they exist.

    Note that some of these deleted classes may have been added between Demo 4 and Open Beta v5.00, but I listed them here anyway for my own reference. Most classes were deleted before the release of v5.00, but classes deleted after that (such as v5.02) will have version numbers in parentheses.

    !!!Deleted Classes:

    * ADSplodelet
    * AntimatterDisc
    * AntiTelefrag
    * ArchdemonHellblast2 ===> ArchdemonHellblastII
    * ArchdemonSP2 ===> ArchdemonSPII
    * ArchdemonSplode
    * ArcingBruteblaster
    * ArcingThingdropper
    * AttentiveDemonSkaarj

    * BArchdemonBoltSplosionMaker
    * BBlueLaserSplosionMaker
    * BBlueLaserSplosionMaker2
    * BBouncyEnergy2SplosionMaker
    * BBouncyEnergySplosionMaker
    * BCNadeSplosionMaker
    * BCNadeSplosionMaker2
    * BClusternukeballSplosionMaker
    * BDemonSaturationSplosionMaker
    * BDemonSkullSplosionMaker
    * BDoomOrbSplosionMaker
    * BeanExplosion2 ===> BeanExplosionII
    * BeanExplosion3 ===> BeanExplosionIII
    * BeanExplosion4 ===> BeanExplosionIV
    * BFlakSplosionMaker
    * BFlakballSplosionMaker
    * BGreenLaserSplosionMaker
    * BGreenLaserSplosionMaker2
    * BHyperBombletSplosionMaker
    * BIceSplosionMaker
    * BigHellScorch2
    * BigSplosionMakers
    * [[Blastoball2]] ===> BlastoballII
    * BMissileSplosionMaker
    * BNadeSplosionMaker
    * BNapalmSplosionMaker
    * BOrangeLaserSplosionMaker
    * BOrangeLaserSplosionMaker2
    * BPentagramSplosionMaker
    * BPentagramSplosionMaker2
    * BPentagramSplosionMaker3
    * BrandNewSplosionMaker
    * BRazorSplosionMaker
    * BRedLaserSplosionMaker2
    * BRocketSplosionMaker
    * BShockSaturationSplosionMaker
    * BSunSplosionMaker
    * BSunSplosionMaker2
    * BSuperballSplosionMaker
    * BSuperballSplosionMaker2
    * BYellowLaserSplosionMaker
    * BYellowLaserSplosionMaker2

    * CBMuzzleRing
    * ClusterfuckerII
    * ClusterfuckerRocket ===> NewClusterfuckerRocket
    * ClusterfuckerRocket2
    * ContactWave2 ===> ContactWaveII
    * [[Crazy]]
    * CrazySlithWave

    * DAmmo42 ===> HFDAmmo42A
    * DAmmo42MP ===> HFDAmmo42AMP
    * DAmmo42a ===> HFDAmmo42B
    * DAmmo42aMP ===> HFDAmmo42BMP
    * DemonBolt2 ===> DemonBoltII
    * DemonExplo2 ===> SilentDemonExplo
    * DemonRingExplosion4 ===> DemonRingExplosionIV
    * DemonSkaarjMaster2 ===> DemonSkaarjMasterII
    * DoomHalo2 ===> DoomHaloII
    * DoomOrbFacade
    * DoomOrbSpawner
    * DoomWaver2 ===> DoomWaverII
    * DoublePiddledoperMP
    * DQueenCarcass

    * EvilPylon (v5.02)
    * ExplosiveFirebomblet
    * EXUBandages2 ===> EXUBandagesII
    * EXUBruteSK6Rocket2
    * EXUDammo1
    * EXUDammo2
    * EXUDammo3
    * EXUDammo4
    * EXUDammo5
    * EXUExcessiveChunk1 ===> EXUExcessiveChunk
    * EXUExcessiveBioGlob2 ===> EXUExcessiveBioGlobII
    * EXUExcessiveBioSplash
    * EXUExcessiveRocket2 ===> EXUExcessiveRocketII
    * EXUNullCarcass
    * EXUOldBallChild
    * EXUOldSpriteBallExplosion
    * EXUSpriteBallChild
    * EXUWeaponModifier2 ===> EXUWeaponModifierII
    * EXUut_grenade ===> EXUGrenade (v5.02)
    * EXUUT_JumpBoots ===> EXUJumpBoots
    * EXUUTSpriteBallChild
    * EXUUTSpriteBallExplosion
    * EnergizerBall1 ===> EnergizerBall
    * EnergizerBall2 ===> EnergizerBallII
    * EnergizerBall3 ===> EnergizerBallIII
    * EnergizerBall4 ===> EnergizerBallIV
    * EnergizerBall5 ===> EnergizerBallV
    * EnergizerBall6 ===> EnergizerBallVI
    * EnergizerBall7 ===> EnergizerBallVII
    * EnergizerBall8 ===> EnergizerBallVIII
    * EnergizerBall9 ===> EnergizerBallIX

    * FireburstWave2
    * FS2Flak2 ===> FS2FlakTwo
    * FreezeBlast2 ===> FreezeBlastTwo
    * [[Frozen]]
    * FunBarrel2 ===> FunBarrelII

    * [[Gasball2]] ===> GasballII

    * HMale1Bot
    * HMale2Bot
    * HMale2
    * HeavyFlakBattery
    * [[Hell]]
    * HellBlastProj2
    * HellHoeEffectThing ===> HellHoe
    * HellHoeEruptionEffect ===> HellHoe
    * Hellshock_BSphere2
    * Hellshock_ERingy2
    * Hellshock_FSphere2
    * Hellshock_Penty2
    * Hellshock_PGlow2
    * Hellshock_Pringy2
    * Hellshock_Pwave2
    * Hellshock_RWave2
    * Hellshock_SRing2
    * Hellshock_SWave2
    * HellShockWave2 ===> HellShockWaveII
    * HSCarcass
    * HyperQueenWave

    * IceBlast2 ===> IceBlastTwo

    * KamikazeFuckhouse

    * LargeFlak
    * LaserBallExplosion1 ===> LaserBallExplosion
    * LaserBallExplosion2 ===> LaserBallExplosionII
    * LaserFlash1
    * LaserHalo1 ===> LaserHalo
    * LaserHalo2 ===> LaserHaloII
    * LaserSphereFacade2 ===> LaserSphereFacadeII

    * MeatBurstPupae2
    * MegaPlasmaBall2 ===> MegaPlasmaBallII
    * MegaPlasmaChild
    * MegaSaintOrb
    * MercSeekRocket
    * MercSeekRocketOld
    * [[Midwife]]
    * MiniBSBE
    * MiniIceBlastlet2 ===> MiniIceBlastletTwo
    * MiniKeg2 ===> MiniKegII
    * MiniPSBE
    * MiniShitball ===> MiniTurdball

    * NewSplosionMaker
    * NuclearSlithWave

    * OldEXUBehemoth
    * OldEXUBrute
    * OldEXUDevilfish
    * OldEXUFly
    * OldEXUGasbag
    * OldEXUIceSkaarj
    * OldEXUKrall
    * OldEXUKrallElite
    * OldEXULeglessKrall
    * OldEXULesserBrute
    * OldEXUManta
    * OldEXUMercenary
    * OldEXUPupae
    * OldEXUQueen
    * OldEXUSkaarjAssassin
    * OldEXUSkaarjBerserker
    * OldEXUSkaarjLord
    * OldEXUSkaarjScout
    * OldEXUSkaarjTrooper
    * OldEXUSkaarjWarrior
    * OldEXUSlith
    * OldEXUSquid
    * OldEXUTitan
    * OldEXUWarlord
    * OldFS2Flak
    * OldSearchlightBeam2 ===> OldSearchlightBeamII
    * OldShitCanister
    * OldShitgun
    * OldUTSpriteBallExplosion ===> EXUSpriteBallExpNOISY (v5.02)

    * PlasmaTrail2
    * [[plastorptrail]]
    * PentagramShot2 ===> PentagramShotII
    * PentagramShot3 ===> PentagramShotIII
    * PentagramSpawner
    * PipeHybrid
    * PsychoQueenWave

    * RFPCOld
    * RMBoulder1 ===> RMBoulder
    * RMBoulder2 ===> RMBoulderII

    * SCGlow
    * ShitGlob
    * ShitGlob2
    * ShitPuff2
    * ShitSplash
    * [[Shitball2]] ===> UltimateTurd
    * Shitball2LongRange ===> ShitballIILongRange
    * Shitball2MP ===> UltimateTurdMP
    * ShitballII  ===> UltimateTurd
    * ShitballIIMP ===> UltimateTurdMP
    * ShockTrail1 ===> ShockTrail
    * ShockTrail2 ===> ShockTrailII
    * SilentArchdemonBoltSplosionMaker
    * SmallFlak
    * SprinterTitan
    * SunBarrel2 ===> SunBarrelI
    * SuperBall2 ===> SuperBallII
    * SuperBall3 ===> SuperBallIII
    * SuperBall4 ===> SuperBallIV

    * TempestBallChild
    * TempestBallExplosion (v5.02)
    * [[Thingball]]
    * ThingdropperBall
    * TurboMercChild

    /***
    |Name|DisableWikiLinksPlugin|
    |Source|http://www.TiddlyTools.com/#DisableWikiLinksPlugin|
    |Version|1.6.0|
    |Author|Eric Shulman|
    |License|http://www.TiddlyTools.com/#LegalStatements|
    |~CoreVersion|2.1|
    |Type|plugin|
    |Description|selectively disable TiddlyWiki's automatic ~WikiWord linking behavior|
    This plugin allows you to disable TiddlyWiki's automatic ~WikiWord linking behavior, so that WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links.  To create a tiddler link when automatic linking is disabled, you must enclose the link text within {{{[[...]]}}}.
    !!!!!Usage
    <<<
    You can block automatic WikiWord linking behavior for any specific tiddler by ''tagging it with<<tag excludeWikiWords>>'' (see configuration below) or, check a plugin option to disable automatic WikiWord links to non-existing tiddler titles, while still linking WikiWords that correspond to existing tiddlers titles or shadow tiddler titles.  You can also block specific selected WikiWords from being automatically linked by listing them in [[DisableWikiLinksList]] (see configuration below), separated by whitespace.  This tiddler is optional and, when present, causes the listed words to always be excluded, even if automatic linking of other WikiWords is being permitted.

    Note: WikiWords contained in default ''shadow'' tiddlers will be automatically linked unless you select an additional checkbox option lets you disable these automatic links as well, though this is not recommended, since it can make it more difficult to access some TiddlyWiki standard default content (such as AdvancedOptions or SideBarTabs)
    <<<
    !!!!!Configuration
    <<<
    <<option chkDisableWikiLinks>> Disable ALL automatic WikiWord tiddler links
    <<option chkAllowLinksFromShadowTiddlers>> ... except for WikiWords //contained in// shadow tiddlers
    <<option chkDisableNonExistingWikiLinks>> Disable automatic WikiWord links for non-existing tiddlers
    Disable automatic WikiWord links for words listed in: <<option txtDisableWikiLinksList>>
    Disable automatic WikiWord links for tiddlers tagged with: <<option txtDisableWikiLinksTag>>
    <<<
    !!!!!Revisions
    <<<
    2008.07.22 [1.6.0] hijack tiddler changed() method to filter disabled wiki words from internal links[] array (so they won't appear in the missing tiddlers list)
    2007.06.09 [1.5.0] added configurable txtDisableWikiLinksTag (default value: "excludeWikiWords") to allows selective disabling of automatic WikiWord links for any tiddler tagged with that value.
    2006.12.31 [1.4.0] in formatter, test for chkDisableNonExistingWikiLinks
    2006.12.09 [1.3.0] in formatter, test for excluded wiki words specified in DisableWikiLinksList
    2006.12.09 [1.2.2] fix logic in autoLinkWikiWords() (was allowing links TO shadow tiddlers, even when chkDisableWikiLinks is TRUE).
    2006.12.09 [1.2.1] revised logic for handling links in shadow content
    2006.12.08 [1.2.0] added hijack of Tiddler.prototype.autoLinkWikiWords so regular (non-bracketed) WikiWords won't be added to the missing list
    2006.05.24 [1.1.0] added option to NOT bypass automatic wikiword links when displaying default shadow content (default is to auto-link shadow content)
    2006.02.05 [1.0.1] wrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
    2005.12.09 [1.0.0] initial release
    <<<
    !!!!!Code
    ***/
    //{{{
    version.extensions.DisableWikiLinksPlugin= {major: 1, minor: 6, revision: 0, date: new Date(2008,7,22)};

    if (config.options.chkDisableNonExistingWikiLinks==undefined) config.options.chkDisableNonExistingWikiLinks= false;
    if (config.options.chkDisableWikiLinks==undefined) config.options.chkDisableWikiLinks=false;
    if (config.options.txtDisableWikiLinksList==undefined) config.options.txtDisableWikiLinksList="DisableWikiLinksList";
    if (config.options.chkAllowLinksFromShadowTiddlers==undefined) config.options.chkAllowLinksFromShadowTiddlers=true;
    if (config.options.txtDisableWikiLinksTag==undefined) config.options.txtDisableWikiLinksTag="excludeWikiWords";

    // find the formatter for wikiLink and replace handler with 'pass-thru' rendering
    initDisableWikiLinksFormatter();
    function initDisableWikiLinksFormatter() {
    	for (var i=0; i<config.formatters.length && config.formatters[i].name!="wikiLink"; i++);
    	config.formatters[i].coreHandler=config.formatters[i].handler;
    	config.formatters[i].handler=function(w) {
    		// supress any leading "~" (if present)
    		var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
    		var title=w.matchText.substr(skip);
    		var exists=store.tiddlerExists(title);
    		var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title);
    		// check for excluded Tiddler
    		if (w.tiddler && w.tiddler.isTagged(config.options.txtDisableWikiLinksTag))
    			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
    		// check for specific excluded wiki words
    		var t=store.getTiddlerText(config.options.txtDisableWikiLinksList);
    		if (t && t.length && t.indexOf(w.matchText)!=-1)
    			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
    		// if not disabling links from shadows (default setting)
    		if (config.options.chkAllowLinksFromShadowTiddlers && inShadow)
    			return this.coreHandler(w);
    		// check for non-existing non-shadow tiddler
    		if (config.options.chkDisableNonExistingWikiLinks && !exists)
    			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
    		// if not enabled, just do standard WikiWord link formatting
    		if (!config.options.chkDisableWikiLinks)
    			return this.coreHandler(w);
    		// just return text without linking
    		w.outputText(w.output,w.matchStart+skip,w.nextMatch)
    	}
    }

    Tiddler.prototype.coreAutoLinkWikiWords = Tiddler.prototype.autoLinkWikiWords;
    Tiddler.prototype.autoLinkWikiWords = function()
    {
    	// if all automatic links are not disabled, just return results from core function
    	if (!config.options.chkDisableWikiLinks)
    		return this.coreAutoLinkWikiWords.apply(this,arguments);
    	return false;
    }

    Tiddler.prototype.disableWikiLinks_changed = Tiddler.prototype.changed;
    Tiddler.prototype.changed = function()
    {
    	this.disableWikiLinks_changed.apply(this,arguments);
    	// remove excluded wiki words from links array
    	var t=store.getTiddlerText(config.options.txtDisableWikiLinksList,"").readBracketedList();
    	if (t.length) for (var i=0; i<t.length; i++)
    		if (this.links.contains(t[i]))
    			this.links.splice(this.links.indexOf(t[i]),1);
    };
    //}}}

    [[PlayerViewOffset Explained|PlayerViewOffsetExplained]]
    [[FireOffset Explained|FireOffsetExplained]]
    [[MuzzleFlash Explained|MuzzleFlashExplained]]

    Countains most of the audio assets used in EXU2. A few may be in EXU.u and some are in EXU2BI, but the ones in EXU2BI are only used by [[campaign|EXU2: Batshit Insane]] maps.

    Countains most of the texture assets used in EXU2. A few may be in EXU.u and some are in EXU2BI, but the ones in EXU2BI are only used by [[campaign|EXU2: Batshit Insane]] maps or the HUD.

    !!Dependencies
    [[EXU-Sounds.u]], [[EXU-Textures.u]], [[UELite.u]], [[OldSkool.u]]/%
    !end Dependencies
    %/

    It's the mod, dumpass

    This is a COMPLETE LIST of ALL actors used in ~EXU2. Stock Unreal/UT actors are unlinked. Stock actors without ~EXU2-specific subclasses are unlisted for the sake of making an already headache-inducingly-long list slightly less horrible [for me to write]. See here for [[Deleted Items]].

    ''//* * * NOTE: THIS LIST IS NOT ~UP-TO-DATE * * *//''

    Dependency packages are @@highlighted@@.

    !!!Object:
    * [[EXU2BIResources]] (EXU2BI)
    * [[EXUFO]]
    * EXUModels
    * EXUQuaternion
    * EXUSounds (@@EXU-Sounds@@)
    * EXUSoundPackages
    * EXUTextures (@@EXU-Textures@@)
    * EXUTexturePackages
    * mappack: (@@Oldskool@@)
    ** BatshitInsanePack (EXU2BI)
    ** LMSBatshitInsanePack (EXU2BI)
    * UATextures (@@EXU-Textures@@)
    * ~UWindowBase:
    ** ~UWindowList:
    *** ~UMenuModMenuItem:
    **** EXUMoreGoreModMenuItem
    **** EXUPinataModMenuItem
    ** ~UWindowWindow:
    *** ~UWindowClientWindow:
    **** ~UWindowDialogClientWindow:
    ***** EXUMoreGoreClientWindow
    ***** EXUPinataClientWindow
    *** ~UWindowFramedWindow:
    **** EXUMoreGoreConfigWindow
    **** EXUPinataConfigWindow

    !!!Actor:
    * EXUGenericActors:
    ** ActorDumpster
    ** ArtilleryStrikeLauncher
    ** EXDecalProjector
    ** EXUCollisionProxy
    ** EXUDecalProjector
    ** EXUOverlayProxy:
    *** AdvancedDemonKrallOverlay
    *** DemonSkaarjMasterOverlay
    *** DoomOrbOverlay
    *** DoomSqOverlay
    *** FireFiendOverlay
    *** GenericSpriteOverlay:
    **** SaintOrbOverlay
    *** GenericTextureOverlay:
    **** LavatitanOverlay
    ***** ArchdemonOverlay
    *** LaserSphereOverlay
    *** NoFrillsOverlay:
    **** HomerballOverlay
    **** MonkEyeOverlay
    **** TorpedoFishOverlay
    *** ShockTrooperOverlay:
    **** ShockCommandoOverlay
    *** UEBOverlay
    *** UltraDemonOverlay
    ** EXUScriptedAction:
    *** EXUSA_CauseEvent
    *** EXUSA_Goto
    *** EXUSA_Wait
    *** EXUSA_WaitDamage
    *** EXUSA_WaitEvent
    ** EXUTurretComponent:
    *** DispTurretGun
    *** DispTurretYaw
    *** EXUTurretGunComponent
    *** McShootyGunL:
    **** McShootyGunR
    *** [[tturpitch]]
    *** [[tturyaw]]
    ** GenericSpawner
    ** [[gogdamn]]
    ** PawnLogger
    ** [[scriptedaction]]
    *** SA_CauseEvent
    *** SA_GotoAction
    *** SA_PlaySound
    *** SA_SpawnActor
    *** SA_WaitForDamage
    *** SA_WaitForEvent
    *** SA_WaitForTimer
    ** SoulVent
    ** [[targetmarker]]
    ** UnPathedActors:
    *** EXUSpawnpointNP
    *** EXUThingFactoryNP:
    **** EXUCreatureFactoryNP:
    ***** EXUMultiCreatureFactoryNP
    ** XlocSmacker
    ** ZoneAmbienceHandler

    !!!Decal:
    * EXDecal:
    ** EXUProjDecal
    ** EXUScorch:
    *** BigHellScorch
    *** EXUBigEnergyImpact:
    **** HellMark
    *** EXUBioMark
    *** EXUBlastMark:
    **** TempestMark
    *** EXUBloodDecal:
    **** EXUBlackBloodDecal:
    ***** EXUBlackBloodPool
    **** EXUBloodPool
    **** EXUBlueBloodDecal:
    ***** EXUBlueBloodPool
    **** EXUBrownBloodDecal:
    ***** EXUBrownBloodPool
    **** EXUGreenBloodDecal:
    ***** EXUGreenBloodPool
    **** EXUWhiteBloodDecal:
    ***** EXUWhiteBloodPool
    *** EXUEnergyImpact:
    **** EXUBoltScorch
    *** EXUImpactHole
    *** EXUNuclearMark:
    **** SmallNukeMark
    *** EXUPock
    *** EXURipperMark
    *** EXUWallCrack
    *** [[Shitmark]]

    !!!Decoration:
    * Barrel:
    ** EXUBarrel
    * Carcass:
    ** ~CreatureCarcass:
    *** EXUCreatureCarcass:
    **** EXUBruteCarcass:
    ***** EXULesserBruteCarcass
    **** EXUCowCarcass
    **** EXUDevilfishCarcass
    **** EXUFlyCarcass
    **** EXUGassiusCarcass:
    ***** DOCarcass
    ***** UltrabagCarcass
    **** EXUHumanCarcass:
    ***** EXUFemaleBody:
    ****** EXUFemaleBodyTwo
    ***** EXUMaleBody:
    ****** EXUMaleBodyThree
    ****** EXUMaleBodyTwo
    **** EXUKrallCarcass
    **** EXUMantaCarcass
    **** EXUMercCarcass
    **** EXUNaliCarcass:
    ***** EXUCrucifiedNali
    **** EXUNullCarcass
    **** EXUPupaeCarcass
    **** EXUQueenCarcass
    **** EXUSkaarjCarcass:
    ***** FiendCarcass
    ***** FireFiendCarcass
    ***** SpecialDemonCarcass
    **** EXUSlithCarcass
    **** EXUSquidCarcass
    **** EXUTentacleCarcass
    **** EXUTitanCarcass:
    ***** PlasmaBeastCarcass
    **** EXUTrooperCarcass
    **** EXUWarlordCarcass
    ** ~CreatureChunks:
    *** EXUCreatureChunks:
    **** EXUGib:
    ***** A WHOLE FUCKING LOT OF STUFF
    **** EXUMasterCreatureChunk
    ***** EXUSkaarjMasterChunk
    ***** EXUTrooperMasterChunk
    ** EXUCarcass:
    *** EXUNewCreatureCarcass
    *** EXUNewCreatureChunks
    * EXUDecoration:
    ** EXUDripGenerator:
    *** EXUDrip
    ** FlareCrate
    ** HellHoe
    ** InvinciBlob
    ** NewFlareCrate
    ** ShitBlob:
    *** EXUGreenBlob
    ** WaffIndusFan
    ** WaffIndusLight:
    *** WaffIindusLight
    * Panel:
    ** AnimatedPanel
    * Plant1:
    ** [[Pulserific]]:
    *** SludgePlantI:
    **** SludgeTreeII
    **** SludgeTreeIII
    **** SludgeTreeVI
    **** SludgeTreeVII
    **** SludgeTreeX
    **** SludgeTreeVIII
    * Pylon:
    ** EvilPylon
    * Table:
    ** BattleTable
    * ~WoodenBox:
    ** EXUWoodenBox
    ** WoodenBrute
    ** WoodenKrall
    ** WoodenMercenary
    ** WoodenQueen
    ** WoodenSkaarj

    !!!Effects:
    * ~AnimSpriteEffect:
    ** ~EnergyBurst:
    *** EXUEnergyBurst:
    **** PiddleImpact
    ** ~SpriteSmokePuff:
    *** ~GreenSmokePuff:
    **** ArtilleryFlareSmoke
    ** ~UT_SpriteBallExplosion
    *** EXUExcessiveShockExpl
    ** ~WarExplosion:
    *** EXUWarExplosion
    * EXUGenericEffects:
    ** BigassBeamImpact
    ** BigassBeamTrail:
    *** TempestTrail
    *** UltraEnergyTrail
    ** [[cExplosionEffects]]:
    *** [[cBigBoom]]
    *** [[cFireBall]]:
    **** [[cFireBallB]]
    **** [[cFireBallC]]
    *** [[cSmoke]]
    ** CondorSplodeThing
    ** ContactBlob:
    *** AnnihilatorBlob:
    **** AnnihilatorHitBlob
    **** SentinelBlob
    **** SentinelHitBlob
    *** LaserFlash:
    **** LaserBallExplosion:
    ***** LaserBallExplosionII
    **** LaserFlashII
    **** LaserFlashIII
    *** PainFlash:
    **** DSEFlash
    **** HellfighterPlasmaBlob:
    ***** HellfighterMGBlob
    ***** MissileLaunchFlash
    ** ContactParticleEffect
    ** ContactWave:
    *** ContactWaveII
    ** DoomWaver:
    *** DoomWaverII
    ** DopaBeanCap
    ** DSquidDeathSplode
    ** DTGMuzzleEffect
    ** EnergizeBallEffect:
    *** DemonEnergizeBallEffect
    *** UBEnergizeBallEffect
    ** EXUBeamEffect:
    *** [[Debuggingbeam]]
    *** ShockingBeamEffect
    ** EXUBeaner:
    *** DopaBeamEffect
    ** EXUBloodEffects:
    *** BloodEXU:
    **** BloodBurstEXU
    **** BloodSprayEXU
    **** BloodSpurtEXU
    **** BloodTrailEXU
    *** ExtraDamageEffect:
    **** HealinEffect
    **** InvincibilityEffect
    **** ResistanceEffect
    *** EXUKetchupSpurt:
    **** EXUKetchupSpurtlet
    *** LavatitanImpactEffect:
    **** ArchdemonImpactEffect
    *** PainJet:
    **** HealJet
    **** TachyonJet:
    ***** TachyonJetII
    *** ShitPawnImpact
    *** SlimePawnImpact
    *** SparkImpactEffect
    ** EXUBulletImpact:
    *** EXUWallHit:
    **** EXUHeavyWallHit
    **** EXUImpactMark
    **** EXULightWallHit
    ** EXUDispersionImpact
    ** EXUDummy
    ** EXUExplodingWall
    ** EXUFlasherThingy
    ** EXUFlickeryPulseryThing:
    *** DoomHalo:
    **** DoomHaloII
    **** HellsphereHalo
    **** LaserHalo:
    ***** LaserHaloII
    ***** PidHalo
    *** EXUFlare:
    **** ArtilleryFlareOverlay
    **** HomerballFlare
    **** JumpBootFlare
    **** MonkEyeFlare
    **** PentagramHalo
    **** RockMonsterFlare
    **** UEBFlare
    *** EXUPanel:
    **** FaderPanel
    **** FlickeringPanel
    **** RandoPanel
    *** STGlow:
    **** SFGlow
    **** UEBGlow
    *** UltrabagHalo
    ** EXUMuzzleFlash:
    *** PiddleFlash:
    **** PentaPiddleFlash
    ** EXUOverlayEffects:
    *** ADKGlow
    *** ArchdemonFire
    *** CBLoopVolumeThing
    *** ChaosSquidOverlay
    *** CondorFacade
    *** DoomOrbFacade
    *** DoomSquidFacade:
    **** DoomSquidEye
    *** DTGGlow
    *** ElectroVampireFacade
    *** EXUHealthMonitors:
    **** ArchdemonShitDamn
    **** CondorShitDamn
    **** DoomOrbShitDamn
    **** HellfighterShitDamn
    **** PolarisFighterShitDamn
    **** SuperArchdemonShitDamn
    **** UltraDemonShitDamn
    *** FMGlow:
    **** HHGlow
    *** FS2FlakOverlay
    *** FullAmmoOverlay
    *** GenericSpriteThingy:
    **** SaintOrbFacade
    *** HellfighterEngineFlare:
    **** PolarisFighterEngineFlare
    *** HellfighterFacade:
    **** PolarisBomberFacade
    **** PolarisFighterFacade
    *** HellfighterGlow:
    **** PolarisFighterGlow
    *** LaserSphereFacade:
    **** HellsphereFacade
    **** LaserSphereFacadeII
    **** PiddleSphereFacade
    *** LLTGlow:
    **** LTGlow
    *** LSFacade1B:
    **** HSFacadeB
    **** LSFacade2B
    **** PSFacade
    *** MedPlasmaFlash:
    **** MedPlasmaFlashII
    **** MegaPlasmaFlash
    **** MegaPlasmaFlashII
    **** PentagramFlash:
    ***** PentagramFlashII
    **** SmallPlasmaFlash:
    ***** SmallPlasmaFlashII
    *** NewArchdemonFire
    *** RMBoulder:
    **** RMBoulderII
    *** SentinelFizz:
    **** AnnihilatorFizz
    *** SentinelSoundCarrier:
    **** AnnihilatorSoundCarrier
    *** ShockTrail:
    **** ShockTrailII
    *** SLOverlay
    *** TSOverlay
    ** EXURobot
    ** EXUShellEffect:
    *** EXUDamageFlash:
    **** FlashHealing
    **** FlashImmune
    **** FlashResist
    **** FlashWeakness
    ** EXUShockExplo:
    *** DemonCarcassExplo
    *** DemonExplo:
    **** SilentDemonExplo:
    ***** FastPentagramExplo
    *** GreenExplo:
    **** SilentGreenExplo:
    ***** SilentGreenExploNL
    *** [[plasimpact]]:
    **** [[flakimpact]]
    *** SilentShockExplo:
    **** SilentShockExploNL
    ** EXUShockWave:
    *** CrazyQueenWave
    *** DemonQueenWave:
    **** DemonSlithWave
    *** FireQueenWave:
    **** FireSlithWave
    *** IceQueenWave:
    **** FreezeSlithWave
    *** ShitCanisterWave
    *** ShitQueenWave:
    **** ShitSlithWave
    *** ShockQueenWave:
    **** ShockSlithWave
    *** SlimeBurstWave
    *** SlimeQueenWave:
    **** SlimeSlithWave
    *** SteelQueenWave:
    **** SteelSlithWave
    ** EXUSpriteBallExplosion:
    *** EXUSilentBallExplosion:
    **** EXUOldBallChild
    **** EXUOldSpriteBallExplosion
    *** MegaPlasmaExplosion
    *** OldUTSpriteBallExplosion
    *** PlasmaBallExplosion
    *** TempestBallExplosion
    *** UltrabagSpriteBallExplosion
    *** YellowSpriteBallExplosion:
    **** BlueSpriteBallExplosion
    **** DarkBlueSpriteBallExplosion
    **** GreenSpriteBallExplosion
    **** PurpleSpriteBallExplosion
    **** RedSpriteBallExplosion
    ** EXUTailEffect
    ** FireBursterEffect
    ** FusionBurst:
    *** MultiballTrailThinglet
    *** OrangeBurst
    *** RedBurst
    *** UltrabagPentaFlash
    ** FusionPulse:
    *** RedPulse
    ** FusionPulser
    ** GSFlash
    ** HellballExplosion
    ** HellblastEffects:
    *** [[Hellshock_glyph]]
    *** Hellshock_HBall
    *** Hellshock_PGlow
    **** Hellshock_Pwave
    *** Hellshock_SRingy:
    **** HellShock_ERingy
    **** HellShock_Penty
    **** HellShock_Pringy
    *** Hellshock_SWave:
    *** HellShockWave
    ** HellbookWaver
    ** HellfighterMegasplodeThing
    ** HellfighterSplodeThing
    ** HellHoe
    ** HellHoeEffectThing
    ** HellHoeEruptionEffect
    ** HellportalOpenEffect
    ** HellswirlEffects:
    *** DerLuftWaffnuffly
    *** [[wp_bigflare]]
    *** [[wp_fireblob]]
    *** [[wp_flarebright]]
    *** [[wp_flareglow]]
    *** [[wp_innerswirl]]:
    **** [[wp_spoily]]
    *** [[wp_ringofhot]]
    *** [[wp_thinring]]
    ** InvSpawnEffect
    ** LogBlinker
    ** MBTrail
    ** MeatBurst
    ** PolarisFighterMegasplodeThing
    ** PolarisFighterSplodeThing
    ** PPowerTrail
    ** RFlareSoundAttachment
    ** RMPainEffect
    ** SaintEffectTrail
    ** SentinelFizz:
    *** AnnihilatorFizz
    ** ShitPuff
    ** ShortSmokeTrail
    ** ShortTorpedoTrail
    ** SoulblighterShootEffect
    ** ThermobaricExplosion
    ** TorpedoTrail:
    *** GibFireTrail
    ** UltrabagPentawaver
    * ~RocketTrail:
    ** SaintTrail:
    *** PlasmaTrail
    * ~ShockBeam:
    ** BeanBeam
    * ~ShockrifleWave:
    ** BootBlastWave
    ** DemonBoltWave
    ** FireburstWave
    * ~ShockWave:
    ** ClusternukeWave
    ** LRPCWave
    ** MiniWave
    * ~UT_RingExplosion:
    ** BeanExplosion:
    *** BeanExplosionII:
    **** BeanExplosionIII:
    ***** BeanExplosionIV
    ** SaintRing:
    *** HeavySaintRing
    ** ~UT_ComboRing:
    *** DemonComboRing:
    **** SilentDemonComboRing
    *** ~UT_RingExplosion4:
    **** DemonRingExplosionIV
    * ~UT_Spark:
    ** UT_SparkTrans
    * ~UTSmokeTrail:
    ** FlameTrail

    !!!HUD:
    * ~UnrealHUD:
    ** ~oldskoolbaseHUD: (@@Oldskool@@)
    *** ~oldskoolHUD: (@@Oldskool@@)
    **** EXU2HUD (EXU2BI)
    ** EXUUnrealHUD (EXU2BI)

    !!!Info:
    * BawssAchievement (EXU2BI)
    * ~DigitFactory:
    ** MicroStyleDigitFactory:
    *** MicroStyleDigitFactory2
    * EXMapInfo (EXU2BI)
    * EXU2StaticFonts (EXU2BI)
    * EXUDecalManager
    * EXUNote
    * EXUStaticFuncs
    * EXUUserOptions
    * EXUZoneStuff
    * ~GameInfo:
    ** ~TournamentGameInfo:
    *** ~DeathMatchPlus:
    **** EXUGame
    ** ~UnrealGameInfo:
    *** coopgame2: (@@Oldskool@@)
    **** EXU2CoopGame2: (EXU2BI)
    ***** EXU2LMSCoop (EXU2BI)
    *** EXUFinalCoop
    *** ~SinglePlayer2: (@@Oldskool@@)
    **** EXU2Game: (EXU2BI)
    ***** EXU2WTFRikers (EXU2BI)
    ***** [[Hellcastle]] (EXU2BI)
    * ~LocalMessage:
    ** ~LocalMessagePlus:
    *** ~PickupMessagePlus:
    **** FlareGunSwitchMessage
    * Mutator:
    ** BestWithBawssness (EXU2BI)
    ** BotMatchScriptedPawnFix
    ** DeemerToLRPC
    ** DeemerToScreamer
    ** EXU2CoopMute (EXU2BI)
    ** EXUAddGun:
    *** AddClusterfucker
    *** AddEnergyAR
    *** AddEXUShotty
    *** AddFreezer
    *** AddHellGun
    *** AddHyperFlakker
    *** AddPiddledoper
    *** AddRFPC
    *** AddShitgun
    ** EXUAmmoRecharger
    ** EXUHealthRecharger
    ** EXUHUDMutator: (EXU2BI)
    *** EXUCoopBeacon (EXU2BI)
    ** EXUMoreGore
    ** EXUNightmare
    ** EXUPinata
    ** EXUReplace
    ** EXUTelefragAnything
    ** EXUWeaponModifier
    ** EXUWeaponModifierII
    ** LadderFuckery
    ** spoldskool: (@@Oldskool@@)
    *** EXU2GlobalSettings (EXU2BI)
    ** UDamageToPentapower
    ** UseShoeFuckers
    * NewDigitFactory: (EXU2BI)
    ** EXUHUDDigitsSmallFac (EXU2BI)
    ** EXUHUDDigitsTinyFac (EXU2BI)
    ** EXUHUDMicrostyleFac (EXU2BI)
    ** SmoothMicrostyleShad (EXU2BI)
    * ~ReplicationInfo:
    ** ~GameReplicationInfo:
    *** EXUGameReplicationInfo
    ** ~PlayerReplicationInfo:
    *** EXUPlayerReplicationInfo
    *** ScriptedPawnRI
    * ~ScoreBoard:
    ** EXU2Scoreboard (EXU2BI)
    * TriggerLightFucker (EXU2BI)
    * ~ZoneInfo:
    ** BlastoVat
    ** EXUMultiSkybox
    ** EXZoneInfo
    ** ~SkyZoneInfo:
    *** EXOuterSky:
    **** EXInnersky
    **** ExMobileOuterSky

    !!!Inventory:
    * Pickup:
    ** Ammo:
    *** ~TournamentAmmo:
    **** EXUAmmo:
    ***** BarrelAmmo
    ***** [[Blastobox]]:
    ****** [[Blastoballammo]]
    ***** CannedPentagrams:
    ****** DemonClip
    ***** ChaosBarrelAmmo
    ***** ClusterPack
    ***** ContactBeans:
    ****** FullyLoadedContactBeam
    ***** DoomJar
    ***** [[extractortank]]
    ***** EXUEARAmmo
    ***** EXULAmmo
    ***** EXUShottyAmmo
    ***** FlakNadeAmmo
    ***** FlareAmmo
    ***** FrozenFire
    ***** HyperCells
    ***** LMPack
    ***** LRPCPack
    ***** PiddlePack:
    ****** PiddleCharger
    ***** PlasmaPack
    ***** ShitJar
    ***** SunBarrelAmmo
    ***** SuperBox:
    ****** SuperBallAmmo
    ** Invisibility:
    *** EXUInvisibility
    ** ~JumpBoots:
    *** MondoJumpBoots
    ** Seeds:
    *** ArmorSeeds:
    **** MagicArmorSeeds
    *** BattleSeeds
    *** CombatSeeds
    *** SeedSeeds
    ** Suits:
    *** ~AsbestosSuit:
    **** CyborgSuit
    *** ~KevlarSuit:
    **** MegaKevlarSuit:
    ***** SuperKevlarSuit
    *** ~ToxinSuit:
    **** MegaToxinSuit:
    ***** LaserSuit
    ***** SuperToxinSuit
    **** SaintSuit
    ** ~TournamentHealth:
    *** EXUHealth:
    **** EnergizerBall:
    ***** EnergizerBallII
    ***** EnergizerBallIII
    ***** EnergizerBallIV:
    ****** EnergizerBall4a
    ****** EnergizerBallV
    ***** EnergizerBallVI
    ***** EnergizerBallVII
    ***** EnergizerBallVIII
    ***** EnergizerBallIX
    **** EXUBandages:
    ***** EXUBandagesII
    **** EXUBox:
    ***** BloodBox
    **** EXUFruit:
    ***** BloodFruit
    **** EXUKeg:
    ***** BloodKeg:
    ****** NuclearKeg
    ***** MiniKeg:
    ****** MiniKegII
    **** EXUUnrealHealth
    **** EXUVial
    **** FuckerCola:
    ***** CarbonatedBlood
    **** IceCube
    ** ~TournamentPickup:
    *** EXUPickup:
    **** CombatBoots:
    ***** HeavyBapes
    **** EXU2JumpDamageFixer
    **** EXU2ScoreKeeper (EXU2BI)
    **** EXUArmor:
    ***** FrostArmor
    ***** MagnificentArmor
    **** EXUBattleFlare:
    ***** BioFlare
    ***** BiohazardFlare
    ***** BouncilaserFlare
    ***** ClusternukeFlare
    ***** ClusterShockFlare
    ***** CNadeFlare
    ***** DemonblastFlare
    ***** DemonFlare
    ***** DemonSaturationFlare
    ***** FlakballFlare
    ***** FlakFlare
    ***** FreezeFlare
    ***** FuckerFlare
    ***** FusionFlare
    ***** GaskillFlare
    ***** HellfireFlare
    ***** HorrorFlare
    ***** HyperballFlare
    ***** HyperFlare
    ***** MegablastFlare
    ***** MunitionsFlare
    ***** NadeFlare
    ***** NapalmFlare
    ***** NuclearFlare
    ***** PlasmaSprayerFlare
    ***** RazorFlare
    ***** RocketFlare
    ***** SeekerMissileFlare
    ***** ShockballFlare:
    ****** DemonballFlare
    ****** RocketballFlare
    ****** ShockSaturationFlare
    ***** ShockburstFlare
    ***** ShockFlare
    ***** SuperClusternukeFlare
    ***** SuperFlare
    ***** UltraDemonFlare
    **** EXUFullAmmo
    **** EXUHelms:
    ***** BioHelm
    ***** BlastHelm
    ***** DemonHelm
    ***** FireHelm
    ***** FreezeHelm
    ***** HeavyHelm
    ***** ShitHelm
    ***** ShockHelm
    ***** TurboHelm
    **** EXUJumpBoots:
    ***** FuckerBoots
    ***** InsaneBoots
    ****** BlastBapes
    ****** UltraPsychoInsaneBoots
    **** EXUShieldBelt:
    ***** EXUInvincibility
    ***** HeavyShieldBelt
    ***** UltraBelt
    **** EXUThighpads
    **** FirestormGenerator
    **** LaserEnergizerUpgrade
    **** MissileBackpack
    **** OldSearchlight
    **** PentaPower
    **** [[Superdope]]
    **** VOOTBlack
    **** VOOTPack
    * Weapon:
    ** ~TournamentWeapon:
    *** EXUWeapon:
    **** ContactBeam:
    ***** TachyonDriver
    **** DemonWarlordGun:
    ***** [[Blastocannon]]
    **** [[EXULAW]]
    **** HyperFlakker:
    ***** HyperFlakkerMP
    **** [[Lazyweapon]]:
    ***** BarrelNade:
    ****** OldBarrelNade
    ***** BruteDoll:
    ****** DemonBruteDoll
    ***** ChaosBarrelNade
    ***** DoomTrooperGun
    ***** EnergyAR:
    ****** EnergyARB
    ****** EnergyARMP
    ****** SuperEAR
    ***** [[Extractor]]
    ***** EXUShotty:
    ****** EXUShottyMP
    ***** FlakNade
    ***** FlareGun
    ***** [[Freezer]]:
    ****** FreezerMP
    ***** HellGun:
    ****** HellGunMP
    ***** LargeMarge
    ***** [[LRPC]]
    ***** MicronutrionLeptonGunther
    ***** [[RFPC]]:
    ****** [[RFPCMP]]
    ****** [[TML]]
    ***** [[Shitgun]]:
    ****** ShitgunMP
    ***** SunBarrelNade:
    ****** OldSunBarrelNade
    **** NuclearMissileLauncher
    **** OldClusterfucker:
    ***** [[Clusterfucker]]:
    ****** ClusterfuckerMP
    ****** SuperClusterfucker
    ***** GoreTest
    **** [[Piddledoper]]:
    ***** DoublePiddledoper
    ***** PiddledoperMP
    *** ~ImpactHammer:
    **** OldExtractor
    *** Translocator:
    **** EXUTranslocator

    !!!Keypoint:
    * ADVDynamicAmbientSound
    * ~AmbientSound:
    ** EXUAmbientSound
    ** ZoneAmbience
    * BlockProjectile
    * ~DynamicAmbientSound:
    ** SuperLoudDASound
    * EXUBlockAll
    * EXUEarthquake
    * EXUModularFactory
    * ~ThingFactory:
    ** ~CreatureFactory:
    *** MultiCreatureFactory
    ** TrackingThingFactory

    !!!Light:
    *OldSearchlightBeam:
    ** OldSearchlightBeamII

    !!!~NavigationPoint:
    * Spawnpoint
    ** EXUSpawnpoint

    !!!Pawn:
    * ~FlockPawn:
    ** Bird1:
    *** DevilBird
    *** DevilBirdII
    ** ~NaliRabbit:
    *** BombBunny
    *** DemonBunny
    *** NadeBunny
    *** RocketBunny
    *** ShockBunny
    *** StealthBunny
    * ~PlayerPawn:
    ** ~TournamentPlayer:
    *** TMale2:
    **** [[shakeman]]
    * ~ScriptedPawn:
    ** EXUScriptedPawn:
    *** EXUBrute:
    **** EXUBehemoth:
    ***** BehemothTitan
    ***** ClusternukeBrute:
    ****** ClusternukeBruteMP
    ***** EXUSK6Behemoth
    ***** MaintBrute:
    ****** PsychoMaintBrute
    ****** SecBrute:
    ******* AssaultBrute:
    ******** PsychoAssaultBrute
    ******* PsychoSecBrute
    ***** [[Rumbler]]:
    ****** [[Rimbler]]
    ****** [[Rombler]]
    ***** UltrasprayBrute:
    ****** TurretMasterClass:
    ******* LaserTurretBrute
    ******* PlasmaTurret
    **** EXULesserBrute:
    ***** ArrowBrute
    ***** BioBrute:
    ****** BioBruteMP
    ***** [[Charger]]:
    ****** ChargerSP
    ****** PsychoCharger:
    ******* PsychoChargerMP
    ******* UltraCharger:
    ******** UltraChargerExtreme
    ******** UltraChargerMP
    ****** SuperCharger:
    ******* SuperChargerMP
    ***** DemonBrute:
    ****** DemonBruteMP
    ****** DemonBruteSP
    ****** TurboDemonBrute
    ***** FireBrute:
    ****** FireBruteMP
    ****** FireBruteSP
    ***** FlakBrute:
    ****** FlakBruteMP
    ***** GooBrute:
    ****** GooBruteMP
    ***** HyperBrute:
    ****** HyperBruteMP
    ****** HyperBruteSP
    ***** InvisiblePulseBrute:
    ****** InvisibleBioBrute
    ****** InvisibleFireBrute
    ***** [[Lunatic]]:
    ****** LunaticMP
    ****** SuperLunatic:
    ******* SuperLunaticMP
    ******* SuperLunaticSP
    ***** MiniArrowBrute:
    ****** InvisibleMiniArrowBrute:
    ******* InvisibleMicroArrowBrute
    ******* InvisibleMiniGrenadeBrute
    ****** MiniMissileBrute
    ****** MiniPulseBrute
    ****** MiniRazorBrute
    ****** MiniRocketBrute
    ****** MiniShockBrute
    ***** MiniDoomOrb
    ***** MiniSaintOrb
    ***** PulseBrute
    ***** RocketBlastShitfucker:
    ****** RocketBlastShitfuckerMP
    ***** RocketBrute
    ***** SaintBrute
    ***** ShitBrute:
    ****** ShitBruteMP
    ****** ShitBruteSP
    ***** ShockBrute:
    ****** ShockBruteMP
    ***** SkinnyBrute:
    ***** SniperCharger
    ***** SteelBrute:
    ****** SteelBruteSP
    ***** SwampThing:
    ****** SwampThingSP
    ***** ThreeHundredthPawn
    ***** TurboBrute:
    ****** BursterBrute:
    ******* FireBursterBrute
    ****** LaserBrute:
    ******* LaserBruteSP
    ****** TurboBruteMP
    ****** TurboBruteSP
    **** FreezeBrute:
    ***** FreezeBruteMP
    **** FuckerBrute:
    ***** DemonFucker:
    ****** DemonChefsCousin
    ****** DemonFuckerMP
    ***** FriendlyFuckerBrute
    ***** FuckerBruteMP
    ***** GeneralFucker:
    ****** SupremeCommanderFucker
    ***** MedFuckerBrute:
    ****** MedFuckerBruteMP
    ***** MiniFuckerBrute:
    ****** BonusBrute
    ****** MicroFuckerBrute:
    ******* ShoeFucker
    ****** MiniFlakFucker
    ****** TurboMiniFuckerBrute
    ***** TurboFuckerBrute:
    ****** TurboFuckerBruteMP
    *** EXUCow:
    **** EXUBabyCow:
    ***** BabehNuke
    **** NukeCow
    *** EXUDevilfish:
    **** FuckerFish:
    ***** FlyingFuckerFish:
    ****** TorpedoFish
    *** EXUFly:
    **** TurboFly
    *** EXUGasbag:
    **** BlueBag:
    ***** BlueBagMP
    **** [[Condor]]
    **** DoomOrb
    **** DoomSquid:
    ***** RockMonster
    **** EXUGiantGasbag
    **** FuckerGasbag
    **** HALBag
    **** HellbeamOrb
    **** [[Hellfighter]]
    **** HyperGasbag:
    ***** HyperGasbagMP
    **** LaserSphere:
    ***** AdvancedLaserSphere
    ***** [[Hellsphere]]:
    ****** PiddleOrb
    ****** SuperHellsphere
    **** NuclearBag:
    ***** NuclearBagMP
    **** PizzaChickenShit
    **** PolarisFighter
    **** SaintOrb:
    ***** MegaSaintOrb
    **** StationaryGasbag:
    ***** HomerballBag
    ***** InvinciBag
    **** TurboGasbag:
    ***** BeamBag
    ***** BioBag:
    ****** GiantBioBag
    ****** PupaeVomiteer:
    ******* PupaeBombardier
    ****** ShitBag
    ***** DemonGasbag:
    ****** DemonGasbagMP
    ****** GiantDemonGasbag
    ******* GigaDemonGasbag
    ******* MegaDemonGasbag
    ***** EnergyGasbag:
    ****** EnergyGasbagMP
    ***** FreezeBag:
    ****** FreezeBagMP
    ***** GiantTurboGasbag
    ***** GrenadeBag
    ***** MajorCycloneBag:
    ****** MinorCycloneBag
    ****** UltimateCycloneBag
    ***** PlasmaBag
    ***** RedeemerGasbag
    ***** RocketGasbitch
    ***** SaintBag
    ***** StupidBursterBag
    ***** [[Ultrabag]]
    ***** UltraEnergyBag
    ***** VerminBag
    ***** VerminBagger:
    ****** VerminBaggerMP
    *** EXUKrall:
    **** BioKrall:
    ***** BioKrallMP
    **** CrazyKrall
    **** DemonKrall:
    ***** AdvancedDemonKrall:
    ****** AdvancedDemonKrallMP
    ***** DemonKrallElite:
    ****** DemonKrallEliteMP
    ***** DemonKrallMP
    ***** MegaDemonKrall:
    ****** MegaDemonKrallMP
    **** ElectroVampireKrall
    **** EXUKrallElite:
    ***** MiniBitchKrall
    ***** TurboKrallElite:
    ****** ClusterfuckKrall:
    ******* ClusterfuckKrallMP
    ****** GrenadeKrallElite:
    ******* GrenadeKrallEliteMP
    ****** TurboKrallEliteMP
    **** EXULeglessKrall:
    ***** LeglessElectroVampireKrall
    **** FreezeKrall:
    ***** FreezeKrallMP
    **** FuckerKrall:
    ***** FuckerKrallElite
    **** FuckoffKrall
    **** HandCannonKrall:
    ***** ArtilleryGuardian
    **** HyperKrall:
    ***** HyperKrallMP
    **** JerkKrall
    **** SaintKrall:
    ***** SaintKrallElite
    **** TurboKrall:
    ***** PulseKrall
    ***** ShockKrall:
    ****** ShockKrallElite:
    ******* ShockKrallEliteMP
    ****** ShockKrallMP
    ***** TurboKrallMP
    *** EXUManta:
    **** EXUCaveManta
    **** EXUGiantManta
    **** TurboManta
    ***** ShadowManta
    *** EXUMercenary:
    **** AdvancedDoomOrb:
    ***** AdvancedDoomOrbMP
    **** AdvancedSaintOrb
    **** BioMercenary:
    ***** BioMercenaryElite
    **** CrazyMercenary:
    ***** CrazyMercenaryMP
    **** DemonMercenary:
    ***** DemonCommando:
    ****** DemonCommandoElite:
    ******* DemonCommandoEliteMP
    ***** DemonJuggernaut:
    ****** DemonJuggernautMP
    ***** DemonMercenaryMP
    **** EnergyMercenary:
    ***** EnergyMercenaryElite:
    ****** EnergyMercenaryEliteMP
    ***** EnergyMercenaryMP
    **** EXUMercenaryElite
    **** FatHugeMerc
    **** FreezeMercenary:
    ***** FreezeMercenaryMP
    **** FuckerMercenary
    **** FuckoffMercenary
    **** HyperMercenary:
    ***** EliteHyperPopper
    ***** HyperMercenaryMP
    ***** HyperPopper
    **** JerkMerc
    **** LRPCMercenary:
    ***** LargeMargeMercMP
    ***** LRPCMercenaryMP
    **** MedicMercenary:
    ***** AssassinMedicMercenary
    **** MissileMercenary
    **** PiddledoperMercenary:
    ***** BrokenSuperTurboMercenary
    ***** CycloneMercenary
    ***** FatassMerc
    ***** FlakMercenary:
    ****** FlakMercenaryMP
    ***** PiddledoperMercenaryMP
    ***** PulseMercenaryElite:
    ****** PulseMercenaryEliteMP
    ***** ShitFountainMercenary
    ***** ShockMercenaryElite:
    ****** ShockMercenaryEliteMP
    ***** ShrapnelMercenary:
    ****** BlastShredderMerc
    ****** LaserBitchMercenary
    ****** ShrapnelMercenaryMP
    ***** ShrapnelMercenaryElite
    **** PlasmaMercenary:
    ***** AntiTankRiotMercenary
    ***** PlasmaMercenaryMP
    **** PulseMercenary:
    ***** PulseMercenaryMP
    **** SaintMercenary
    **** ShitMercenary:
    ***** ShitMercenaryElite
    ***** ShitMercenaryEliteMP
    ***** ShitMercenaryMP
    **** ShockMercenary:
    ***** ShockMercenaryMP
    **** SlimerMercenary
    **** TurboMercenary:
    ***** [[Popper]]:
    ****** ElitePopper
    ****** PopperMP
    ***** TurboMercenaryMP
    **** TurboMercenaryElite:
    ***** TurboMercenaryEliteMP
    *** EXUNali:
    **** NaliWindTurbine
    *** EXUPupae:
    **** CrazyPupae:
    ***** HyperPupae
    **** DarkPupae
    **** DemonPupae:
    ***** SteelPupae
    **** FirePupae
    **** FuckerPupae
    **** IcePupae
    **** KamikazeFuckhousePupae
    **** KamikazePupae:
    ***** BombletPupae
    **** NuclearPupae
    **** ShitPupae
    **** ShockPupae
    **** SlimePupae
    **** TurboPupae:
    ***** BossPupae:
    ****** UberBossPupae
    ****** UberPupae
    ***** CryoPupae
    ***** MeatBurstPupae:
    ****** MeatBurstPupaeII
    *** EXUQueen:
    **** BioQueen
    **** ElementalQueen:
    ***** CrazyQueen
    ***** DemonQueen:
    ****** ClusternukeQueen
    ***** FireQueen
    ***** IceQueen
    ***** PopeQueen:
    ****** PopeQueenMP
    ***** RadioactiveBileQueen:
    ****** RadioactiveBileQueenMP
    ***** ShitQueen
    ***** ShockQueen
    ***** SlimeQueen
    ***** SteelQueen
    **** FlakQueen
    **** FuckerQueen
    **** GrenadeQueenElite
    **** HyperQueen:
    ***** HyperPsychoQueen
    **** MinIFireQueen
    **** PizzaQueen
    **** QueenQueen:
    ***** VerminQueen
    **** TurboQueen:
    ***** PsychoQueen
    *** EXUSkaarj:
    **** EXUSkaarjTrooper:
    ***** DoomTrooper:
    ****** AnnihilationTrooper
    ****** HellTrooper
    ****** PlasmaTrooper
    ***** EXUSkaarjGunner
    ***** EXUSkaarjInfantry
    ***** EXUSkaarjOfficer
    ***** EXUSkaarjSniper
    **** EXUSkaarjWarrior:
    ***** BioSkaarj:
    ****** BioSkaarjMP
    ***** EXUIceSkaarj:
    ****** FreezeSkaarj:
    ******* FreezeSkaarjMP
    ****** WTFSkaarj
    ***** EXUSkaarjAssassin:
    ****** EXUSkaarjAssassinMP
    ***** EXUSkaarjBerserker:
    ****** FuckerSkaarjBerserker
    ****** SuperSkaarjBerserker
    ****** TurboSkaarjBerserker:
    ******* TurboSkaarjBerserkerMP
    ***** EXUSkaarjLord:
    ****** [[Bouncer]]
    ****** DemonSkaarj:
    ******* AttentiveDemonSkaarj
    ******* DemonSkaarjLord:
    ******** DemonSkaarjMaster:
    ********* DemonSkaarjMasterII
    ********* DemonSkaarjMasterMP
    ********* SpecialSPDemonSkaarjMaster
    ******** FireDropper
    ******** UltraDemonMaster
    ******* DemonSkaarjMP
    ******* FriendlyDemonSkaarj
    ******* SkaarjFiend
    ****** ExtremeLaserLord:
    ******* ExtremeLaserLordMP
    ******* ExtremelyExtremeLaserLord:
    ******** ExtremelyExtremeHyperLord
    ****** ExtremeShockBerserker:
    ******* ExtremelyExtremeShockBerserker:
    ******** ExtremelyExtremeWeirdBerserker:
    ********* ExtremelyExtremeWeirdBerserkerMP
    ******* ExtremeShockBerserkerMP
    ****** FireFiend:
    ******* FireFiendMP
    ****** FourHundredthPawn
    ****** FuckerSkaarj
    ****** HyperSkaarj:
    ******* HyperSkaarjMP
    ****** MegaShockSkaarj
    ****** MissileSkaarj:
    ******* MissileSkaarjMP
    ****** RedSkaarj:
    ******* MegaRedSkaarj
    ******* RedSkaarjMP
    ****** ShockTrooper:
    ******* ShockCommando
    ****** SlimerSkaarj:
    ******* SlimerSkaarjMP
    ****** TurboPulseSkaarjLord
    ****** TurboSkaarjLord:
    ******* FireSkaarj:
    ******** FireSkaarjMP
    ******* SaintSkaarj:
    ******** SaintSkaarjLord
    ******** SaintSkaarjMP
    ******* TurboSkaarjLordMP
    ***** EXUSkaarjScout:
    ****** CrazySkaarj:
    ******* CrazySkaarjMP
    ****** SkinnySkaarj:
    ******* SkinnySkaarjMP
    ***** LordOfChaos:
    ****** ContactLord
    ****** DemonLord
    ****** FlakkerLord
    ****** FlakLord
    ****** LaserLord
    ****** PiddleLord
    ****** PlasmaLord
    ****** ShitLord
    ***** MercenarySkaarj:
    ****** MercenarySkaarjMP
    ***** MiniBitchSkaarj:
    ****** [[Bitchfucker]]:
    ******* [[Hyperbitch]]:
    ******** HyperbitchMP
    ***** MiniSkaarj
    ***** RazorIceSkaarj
    ***** ShadowCreature:
    ****** BigShadowCreature
    ***** TestPawn
    ***** TurboSkaarj:
    ****** AdvancedTurboSkaarj:
    ******* AdvancedSkaarjAssassin:
    ******** AdvancedSkaarjAssassinMP
    ******* AdvancedTurboSkaarjMP
    ******* [[Discordian]]
    ******* EliteSkaarjAssassin
    ****** NuclearSkaarj:
    ******* NuclearSkaarjMP
    ****** PulseSkaarj:
    ******* PulseSkaarjMP
    ******* TurboPulseSkaarj
    ****** SkaarjSkaarj:
    ******* VerminSkaarj
    ****** TurboSkaarjMP
    *** EXUSlith:
    **** BarrelSlith:
    ***** BarrelSlithMP
    **** BlueSlith:
    ***** BlueSlithMP
    **** ElementalSlith:
    ***** CrazySlith:
    ****** CrazySlithMP
    ***** DemonSlith:
    ****** DemonSlithMP
    ***** FireSlith
    ***** FreezeSlith:
    ****** FreezeSlithMP
    ***** ShitSlith
    ***** ShockSlith
    ***** SlimeSlith
    ***** SteelSlith
    **** FuckerLion
    **** HyperSlith
    **** NuclearSlith:
    ***** NuclearSlithMP
    **** SludgeCrawler
    *** EXUSquid:
    **** FlyingSquid:
    ***** ChaosSquid
    ***** FuckerSquid
    ***** ShadowSquid
    **** MeatBurstSquid
    *** EXUTentacle:
    **** PsychoRazorTentacle
    **** TurboTentacle
    ***** BeamTentacle
    ***** BioTentacle:
    ****** ExcessiveBioTentacle
    ***** DemonTentacle
    ***** FireTentacle
    ***** FlakTentacle
    ***** FusionTentacle
    ***** MiniRocketTentacle:
    ****** InvisibleFireTentacle
    ***** PulseTentacle
    ***** RocketTentacle
    ***** SkyTentacle:
    ****** BeamSkyTentacle
    ****** DemonSkyTentacle
    ****** FireSkyTentacle
    ****** FlakSkyTentacle
    ****** HugeSkyTentacle
    ****** PulseSkyTentacle:
    ******* SmallPulseSkyTentacle
    ****** ShockSkyTentacle
    *** EXUTitan:
    **** [[Archdemon]]:
    ***** ArchdemonBoss
    ***** ArchdemonSP
    ***** ArchdemonSPII
    ***** IndoorArchdemon
    **** EXUStoneTitan
    **** FuckerTitan
    **** [[Lavatitan]]:
    ***** LavatitanMP
    ***** PlasmaBeast
    **** MicroTitan
    **** SprinterTitan
    *** EXUWarLord:
    **** BioPolice:
    ***** BioSWAT
    ***** DemonPolice:
    ****** DemonSWAT
    ***** FirePolice
    ***** [[Ghost]]
    ***** HyperPolice:
    ****** HyperSWAT
    ***** PizzaFuckerPolice:
    ****** PizzaSWAT
    ***** PulsePolice:
    ****** FlakPolice:
    ******* FlakSWAT
    ****** PulseSWAT
    ***** ShockPolice:
    ****** ShockSWAT
    **** DemonWarlord
    **** DoomPolice:
    ***** PlasmaPolice
    **** FuckerWarlord
    * ~StationaryPawn:
    ** EXUTurret:
    *** EXUTurretBase:
    **** TruckTurret

    !!!Projectile:
    * ~BigRock:
    ** [[Pizza]]
    * Chunk:
    ** ArtilleryRockBit:
    *** DemonSpark
    *** GlowingRockBit
    *** LaserSphereFragment:
    **** HellfighterFragment
    * EXUGenericProjectiles:
    ** ArtilleryShell
    ** BandagePoison
    ** BigassBeam:
    *** BigassBeamGreen:
    **** BigassBeamBlue:
    ***** BigassFighterBeam
    **** BigassBeamOrange
    **** BigassBeamYrllow
    *** BigassDemonBeam:
    **** BigassRockMonsterBeam
    *** UltraEnergyBolt:
    **** UltrabagEnergyBolt
    ** BombShell
    ** BlueOrber:
    *** HeavySaintBall
    *** SaintNuke
    ** BruteWhack:
    *** DBruteWhack
    ** BugMeteor
    ** CBPulse
    ** ContactBlastProj
    ** CreatureBlaster:
    *** CreatureBurner
    *** ThermoBlaster
    ** D2PlasmaBall:
    *** BouncyD2PlasmaBall
    *** SilentD2PlasmaBall
    ** DemonBolt:
    *** ArchdemonBolt:
    **** SilentArchdemonBolt:
    **** SafeArchdemonBolt
    *** DemonBoltII
    *** DemonBoltMP
    *** DemonSkyBolt
    *** HellfighterDemonBolt:
    **** DoomshipDemonBolt
    *** SuperDemonBolt
    ** DemonicMeteor:
    *** FireMeteor:
    **** PlasmaMeteor
    *** MiniDemonicMeteor
    ** DemonicMeteorBit
    ** DemonRiotBall:
    *** DemonSkyBall:
    **** HeavyDemonSkyBall
    ** [[Expandoball]]
    ** ExtractorGoreBurst
    ** ExtremeShockball
    ** EXUBouncyProjectiles:
    *** FreezeBlast:
    **** FreezeBlastTwo:
    ***** FreezeBlast2MP
    *** SentinelBoltB:
    **** AnnihilatorBoltB
    *** SuperBall:
    **** ClusternukeBall
    **** HyperBall:
    **** HyperDemonball:
    ***** HyperFlakball
    ***** HyperHellball
    ***** HyperRocketball:
    ****** MiniRocketball
    ***** HyperShockBall:
    ****** MiniShockball:
    ******* MiniShockbomb
    **** OldSuperball
    **** SuperBallII
    **** SuperBallIII
    **** SuperBallIV:
    ***** SuperBall4A
    **** SuperSneer
    *** UltrabagBouncyThing:
    **** BouncerBouncyThing
    ** EXUDispersionAmmo:
    *** EXUDAmmo1Splash:
    **** EXUDAmmo1F
    **** EXUDAmmo1s
    *** EXUDAmmo2A:
    **** EXUDAmmo2Splash:
    ***** EXUDAmmo2F
    ***** EXUDAmmo2s
    *** EXUDAmmo3A:
    **** EXUDAmmo3Splash:
    ***** EXUDAmmo3F
    ***** EXUDAmmo3s
    *** EXUDAmmo4A:
    **** EXUDAmmo4Splash:
    ***** EXUDAmmo4F
    ***** EXUDAmmo4s
    **** HFDAmmo42A:
    ***** HFDAmmo42B:
    ****** HFDAmmo42BMP
    ***** HFDAmmo42AMP
    *** EXUDAmmo5A:
    **** EXUDAmmo5Splash:
    ***** EXUDAmmo5F
    ***** EXUDAmmo5s
    ** EXUEffectProjectiles:
    *** ArtilleryFlare
    *** CBRocket
    *** EXUSmokeJetProj
    *** FlameFlare:
    **** FireFiendFlameFlare
    **** MiniFlameFlare:
    ***** MiniFlameFlareII
    ***** MiniGreenFlameFlare
    ***** MiniRedFlameFlare
    *** GaskillBeamEffect
    *** HealthBurstBeam
    *** SparkFlare
    *** SparkProxy
    ** EXUGasbagBelch:
    *** AdvancedGasball
    *** [[Blastoball]]:
    **** BlastoballII
    *** FallingGasbagBelch:
    **** ExplosiveFireball:
    ***** ExplosiveFirebomblet
    **** FirePillarBall
    **** KPupaeVomitball
    **** PupaeVomitball
    *** [[Firebomb]]:
    **** ArcingThingdropper:
    ***** ArcingBruteblaster
    **** [[Thingball]]:
    ***** [[Bruteball]]
    *** GasbagSpawner:
    **** DemonbagSpawner
    **** VerminbagSpawner
    *** [[Gasball]]:
    **** [[Fishball]]
    **** GasballII:
    ***** [[Skaarjball]]
    ***** UltrabagGasball
    **** MultiBall
    *** IceBlast:
    **** CrazyStuff:
    ***** CrazyBomblet
    ***** CrazyStuffSpawner
    **** IceBlastTwo:
    ***** IceBlast2MP
    **** MiniIceBlastlet:
    ***** MiniIceBlastletTwo
    **** QueenBlast:
    ***** QueenBlastlet
    **** SkaarjBlast:
    ***** SkaarjBlastlet
    *** InvisibleHellfireSpawner
    *** InvisiblePawnSpawner:
    **** CrazyPupaeSpawner
    **** DemonPupaeSpawner
    **** FirePupaeSpawner
    **** HyperPupaeSpawner
    **** IcePupaeSpawner
    **** KamikazePupaeSpawner
    **** NuclearPupaeSpawner
    **** ShitPupaeSpawner
    **** ShockPupaeSpawner
    **** SlimePupaeSpawner
    **** SteelPupaeSpawner
    **** TurboPupaeSpawner
    *** SuperBallSpawner
    *** UltrabagBelch
    ** EXUProxyProjectiles:
    *** AntiXLocSmackeroo
    *** ArchdemonboltSplode:
    **** SilentArchdemonboltSplode:
    ***** SafeArchdemonboltSplode
    *** ArchdemonEffectsGenerator
    *** BandageBomb:
    **** WhiteEnergizerBomb
    *** BarrelOSpamEffect
    *** Bugmaker
    *** BurnPillarThing:
    **** HellfirePillarThing:
    ***** HellfirePillarThingShort
    **** NapalmPillarThing
    *** BurnStateEffect
    *** CanisterCollisionProxy
    *** CBSploderyThing
    *** DemonblastThing
    *** DoomOrbBolt:
    **** DoomOrbBoltMP
    *** DoomOrbSpawner
    *** FlakCollisionProxy
    *** FlareSplodeThings:
    **** BouncilaserFlareSplode
    **** ClusternukeFlareSplode
    **** ClustershockFlareSplode
    **** CNadeFlareSplode
    **** DemonballFlareSplode:
    ***** HyperballFlareSplode
    ***** RocketballFlareSplode
    ***** ShockballFlareSplode
    **** DemonSaturationFlareSplode
    **** FlakFlareSplode
    **** FreezeFlareSplode
    **** FusionFlareSplode
    **** HyperFlareSplode
    **** MunitionsFlareSplode
    **** NadeFlareSplode
    **** RazorFlareSplode
    **** RocketFlareSplode
    **** SeekerMissileFlareSplode
    **** ShockburstFlareSplode
    **** ShockFlareSplode
    **** ShockSaturationFlareSplode
    **** SuperClusternukeFlareSplode
    **** SuperFlareSplode
    *** FusionblastThing
    *** GasKillThing
    *** HellfireProxyThing
    *** MegaExplosionThing
    *** PentagramSplode
    *** ProjectileBurstClass:
    **** AdvancedGasburst
    **** BiohazardSplosion
    **** BioSplosionMaker
    **** FishBurst
    **** GasBurst
    **** SneerBurst
    *** RedLaserSplode
    *** ShockburstProxyThing
    *** SkaarjMissile
    *** SpinningPlasmaSprayer
    *** StickyLightning
    *** SunSplode
    *** SunSplodeII
    *** SuperFS2FlakProxy
    *** TachyonBolt
    *** TachyonStorm
    *** ThingdropperBall
    ** EXURocketMkII:
    *** DemonSaturationRocket
    *** EXUExcessiveRocket:
    **** EXUExcessiveRocketII
    *** EXUWarshellMkII:
    **** DemonRocket:
    ***** DemonRocketSP
    **** FlakRocket
    **** HyperRocket
    **** PizzaRocket
    **** PulseRocket
    **** ShockRocket
    **** SlimeRocket
    *** FighterWarhead:
    **** HellfighterWarhead
    **** PolarisFighterWarhead
    **** ScreamerMissile
    *** ShockSaturationRocket
    ** EXUSeekingProjectiles:
    *** NewClusterfuckerRocket:
    **** BackpackRocket:
    ***** MegaBackpackRocket
    **** ClusterfuckerRocketMP
    **** [[Demonskull]]:
    ***** MiniDemonskull
    **** DevilSeeker
    **** HellfighterSeekerRocket:
    ***** PolarisFighterSeekerRocket
    **** HomingFireball:
    ***** HomingBlueThing:
    ****** HomingGreenThing
    ***** SeekingPlasmaJet
    ***** UltrabagHomingThing:
    ****** RockMonsterHomingThing
    **** SuperClusterfuckerRocket
    **** TornadoMissile:
    ***** SeekingScreamerMissile
    *** UltraSneer
    ** EXUShockProj
    ** EXUSK6Rocket:
    *** EXUBruteSK6Rocket
    *** HellstormRocket
    ** EXUSkaarjProjectile:
    *** EXUQueenProjectile:
    **** AssassinProjectile
    *** FallingSkaarjProjectile
    ** FlarePropelledGrenade:
    *** EXUThrownFlare:
    **** EXUThrownFlarePickup
    *** FlareImpactGrenade
    ** FourHundredthProjectile
    ** FS2Flak:
    *** FS2FlakMP
    *** FS2FlakTwo:
    **** FS2FlakWideArea
    **** LongRangeFlak
    *** SuperFS2Flak
    ** FusionBall
    ** GiantFuckoffRocket
    ** HellblastProj:
    *** ArchdemonHellblast:
    **** ArchdemonHellblastII
    **** SuperHellblast
    *** HellBlastProjII
    *** HellBlastProjMP
    *** HellfireSubBlast
    ** HellfireHellblast
    ** HorrorFrying
    ** LavaFireball:
    *** MiniFireball
    ** LazerPillproj
    ** LightUltrabagArtilleryBall:
    *** UltralightUltrabagArtilleryBall
    ** MaintBall
    ** MedPlasmaBall:
    *** AntimatterDisc
    *** MedPlasmaBallMP
    ** MegaPlasmaBall:
    *** [[Sun]]:
    **** SunF
    ** MegaPlasmaBallII
    ** PentagramShot:
    *** HeavyPentagramShot:
    **** HeavyPentagramShotMP
    *** PentagramShotII:
    **** PentagramShotThree
    *** PentagramSpawner
    ** PiddledoperSphere:
    *** BursterSphere
    *** PiddledoperSphereMP
    *** PiddleShroomSphere
    ** [[plasmatorp]]:
    *** HellfighterPlasma
    *** [[plasmatorpMP]]
    ** SentinelBolt:
    *** AnnihilatorBolt:
    **** AnnihilatorBoltMP
    **** SecbotLaser
    *** MidwifeLaser
    *** SentinelBoltMP
    ** [[shitdroplet]]
    ** SkyFire
    ** SniperCharge:
    *** DTGShot
    *** HCShot:
    **** HeavyHCShot
    *** HFShot
    *** ShrapnelMercShot
    *** StealthSniperCharge
    ** TempestMissile
    ** TheHorror
    ** TheTerruh
    ** UltimateTurd:
    *** MiniTurdball
    *** [[Shitball]]
    *** ShitballIILongRange:
    *** ShitCanister:
    **** ShitCanisterMP
    ** UltrabagArtilleryBall
    * EXUProjectile:
    ** [[Chaosparticle]]
    ** DopaBeamProj:
    *** DopaBeamProjMP
    ** EXUBeamProjectile
    *** [[mcbeam]]
    ** EXUThrownInventory
    ** NewEXUBeamProjectileAlpha
    * ~FlakShell:
    ** LunaticSlug
    * flakslug:
    ** EXUExcessiveFlakSlug
    * Grenade:
    ** HyperGrenade:
    *** HyperGrenadeBomblet
    ** Potato
    * ~PlasmaSphere:
    ** EXUExcessivePlasmaSphere
    * Razor2:
    ** EXUExcessiveRazor
    ** ~Razor2Alt:
    *** EXUExcessiveRazorAlt
    **** JerkKrallBolt
    * ~ShockProj:
    ** EXUExcessiveShockproj
    * ~TentacleProjectile:
    ** EXUTentacleProjectile
    * ~TranslocatorTarget:
    ** EXUTranslocatorTarget
    * ~UT_BioGel:
    ** ~BioGlob:
    *** EXUExcessiveBioGlob:
    **** EXUExcessiveBioGlobII
    ** ~BioSplash:
    *** EXUExcessiveBioSplash
    ** EXUExcessiveBioGel
    * ~UT_Grenade:
    ** EXUExcessiveGrenade
    ** EXUut_grenade:
    *** EXUCNade
    *** EXUCSpawner
    *** EXUNade
    *** FlakGrenade:
    **** FragGrenade
    **** NuclearGrenade
    **** ShockGrenade
    *** FunBarrel:
    **** CBarrel
    **** FunBarrelII
    **** SunBarrel:
    ***** SunBarrelII
    * ~UTChunk:
    ** FireSpark
    ** ~UTChunk1:
    *** EXUExcessiveChunk
    ** ~UTChunk2:
    *** EXUExcessiveExplodingChunk

    !!!~SpawnNotify:
    * EXU2EasyNotify (EXU2BI)
    * EXU2EverythingNotify (EXU2BI)
    * EXU2MediumNotify (EXU2BI)
    * EXUNightmareNotify
    * EXUTelerapeNotify
    * NotifyAddScriptedRI

    !!!Triggers:
    * ~BioFear:
    ** NonBiologicalFear
    * EXUTriggers:
    ** ArtilleryStrikeController
    ** BawssTrigger (EXU2BI)
    ** EXUCounter
    ** EXUScriptedTrigger
    ** [[looktrigger]]
    ** RemoveInventory
    ** ScriptedTrigger
    ** [[shakeitbaby]]:
    *** MiniRocketShake
    ** SuperNigNogDeluxeEvent
    ** UnlockModeTrigger (EXU2BI)
    * ~TranslatorEvent:
    ** TranslatorLog:
    *** [[Hellbook]]
    *** HintBarrel
    * Trigger:
    ** EXUTimedTrigger
    ** HealthEnforcerTrigger
    ** RandoTrigger

    !!!UARainGens: (@@UARain@@)
    * UAFixedRain (@@UARain@@)
    * UALocalRain: (@@UARain@@)
    ** ShitstormRain (EXU2BI)

    !!!UARainParticle (@@UARain@@)

    !!![[uelite]]: (@@UElite@@)
    * EmitterBag (@@UElite@@)
    * LEmitter: (@@UElite@@)
    ** [[cavefirep]]
    ** [[cavegsmokep]]
    ** [[Caveosmokeslowp]]
    ** CBFlashes
    ** CBMuzzleFX
    ** CBMuzzleRing
    ** [[flareemitters]]:
    *** [[flareemite_hotstuff]]
    *** [[flareemite_longsmoke]]
    *** [[flareemite_sparks]]
    *** [[flareemite_starburst]]
    ** LightningFlasher
    ** [[plumeA]]:
    *** FireFiendPlume
    ** RemoteCodingLive
    ** TFireDropOrWhatever
    ** TorsoFire
    ** [[uee_Sindri]]:
    *** DemonicSindri
    * LParticle: (@@UELite@@)
    ** [[cbrelparticle]]
    ** LightningFlash
    ** [[uep_Bale]]:
    *** DemonicBale

    ![1-24-2013]: Open Beta Patch v5.03 Released
    """Patch here to fix some bugs and improve some things!"""

    !!!!"""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    No new pawns AGAIN? Damnit man get with it

    !!!!Campaign Changes:
    * Hellcastle (Menu Map)
    ** Added selectable navigation beacons leading to difficulty selector rooms for anyone having trouble finding their way to their chosen difficulty portal.
    * Soul Storage (Map 4)
    ** Fixed door at end of map not opening properly most of the time.
    * Other Maps (1, 6)
    ** Yet again, misc. technical fixes and tweaks.

    !!!!Other changes:
    *""" Improved Pentapower display on the HUD, plus some offset fixes."""
    *""" All monsters with the Fearless tag no longer run away from you when you have the Extractor selected."""
    *""" PulseSkyTentacle aim error tripled."""
    *""" EXULeglessKrall now fully functional (mostly; slight collision bug remains. EXULeglessKrall collision cylinders are higher than they should be, but for now this is a worthy compromise as they would sink into the floor instead. Prepivot can go fuck itself in its eye sockets)."""
    *""" All Demon pawns, Dark Pupae, and Doom Troopers now have glow-in-the-dark eyes."""
    *""" Fixed a HUD bug where icons would start getting duplicated if you carried more than 20 different kinds of selectable inventory items. You can now carry 100 different kinds before that happens, which means every single item in EXU2 (even the shitty ones) plus a dozen or so custom ones. And if a level designer puts over 100 items into a single map, well, they're just crazy!"""
    *""" Fixed EXUSeeds bug where activating one would switch you to your next item automatically, even if you still had seeds left."""
    *""" Fixed a bug where no EXUManta classes would attack you on Easy. This behavior is actually intentional from Unreal 1, and is preserved in EXUManta, but TurboManta and below will now attack properly. I also disabled the 40% health reduction for TurboMantas. This should make most Mantas actually dangerous on Easy instead of completely worthless."""
    *""" Fixed EXUFlickeryPulseryThing classes not working online. Also, FaderPanels are now RandoPanel subclasses, and FaderPanels support flickering. They do not work with pulsing settings, though. FaderPanels can also be set to change their texture each time they are triggered back on after being turned off."""

    ![1-15-2013]: Open Beta Patch v5.02 Released
    """HOLY SHIT! THE HUD! The HUD has been almost completely redone, with massive amounts of work put into icons, the Translator display, bug fixes, design improvements, etc. While still a WIP, it is a huge step up from before. Also: major improvements to pawn aiming behavior across the board, especially for indirect fire projectiles! Plus tons more stuff."""

    !!!!"""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    No new pawns? For real? Come on Waff, you lazy fuck, how long does it take to make a pawn these days anyway

    !!!!Campaign Changes:
    * Hellcastle (Menu Map)
    ** Misc. improvements and tweaks to lighting, geometry, decorations, etc.
    * Frostclaw Outpost (Map 8)
    ** Gameplay tweaks and improvements and some visual touchups.
    * Other Maps (10, 11, 13, 15)
    ** Again, misc. technical fixes and tweaks.

    !!!!Other changes:
    *""" Major HUD updates. All icons have been redone, the translator screen has been redone, and many little bugs have been fixed. Also added ammo warning / critical color changes to the digit readout. Note that the HUD is still very much a work in progress, but it's much more standardized and much nicer to look at than before. Also, chat messages are actually fucking readable now! Yay!"""
    *""" HUGE improvements to pawns' abilities to aim with indirectfire projectiles. Instead of having an effective max range with grenades, biogel, heavy plasma balls, etc., pawns will now calculate the proper trajectory for their projectiles based on your distance and the projectile speed, allowing them to hit you at long range with indirect weaponry. Makes certain enemies much more effective in large, open areas, but not all."""
    *""" AntiTankRiotMercenaries now use MedPlasmaBallSP instead of MP. The former has way less momentum transfer."""
    *""" Piddledoper beams now use a new damage type called 'PulseBeam' instead of 'Pulsed' like the primary fire. The reasoning for this will be explained in a later patch!"""
    *""" EnergyAR, Hyper Flakker, Clusterfucker, and RFPC now have functional ammo LEDs."""
    *""" Fixed Extractor ammo icon not appearing on the HUD (by giving it one, derp). Flare Gun also now gives a noticeable warning icon when no flares are loaded."""
    *""" New visuals for the Hyper Flakker weapon, ammo, and alt fire grenades! Grenades also have WAY COOLER sound effects."""
    *""" EXUWeapon subclasses no longer disappear after a while when dropped by players or pawns in SP games. They still time out normally in MP, but in SP they will persist forever like health/ammo/etc until picked up instead of vanishing after 15 or 40 seconds of inactivity without being seen (which is what standard weapons do, for some reason)."""
    *""" Fixed EXUFly StingDamage variable being hidden. You can now access it for subclasses or map-placed flies, hooray! Thanks UB for pointing that out."""
    *""" Reduced momentum transfer from Tempest missiles by 75%."""
    *""" Fixed Shock Troopers being afraid of the Extractor. They no longer run away like morons when you pull out a melee weapon against them."""
    *""" Fixed EXUSquids being unable to use their melee attack against you under any circumstances. Whoops. Not like anyone noticed, though, since squids are such useless opponents... for now."""
    *""" EXU Shotty now has a single-shot alt fire and shoots five rounds in primary. Currently lacking a reload sequence after five alt shots, but it's getting there. Alt fires quickly but does less damage, though slightly tigher spread, making it better for long-range harassment. Primary is excellent as ever at short range."""
    *""" Fixed bots being unable to aim the EXU Shotty. It technically fires projectiles now, but they're so damn fast it doesn't really make much difference. Except for them being able to kill you, of course. That's a pretty noticeable difference."""
    *""" Demon Skull projectiles (spawned by Archdemon meteors, Demon Krall Elite, etc) are now destructible and can be shot down. Hard to hit, though."""
    *""" RFPC and LRPC projectiles were bugged; plasma burns would not affect any pawns that stood still. This has been fixed."""
    *""" ShitPupae damage increased by 20 in both attack modes. They're slow and relatively weak for their size and speed, so they needed more damage."""
    *""" Lots of under-the-hood code cleanup and enhancements and minor bugfixes."""

    ![10-26-2012]: Open Beta Patch v5.01 Released
    """P-p-p-patch time. The first patch for Open Beta! Mainly just fixing up campaign bugs and a few other things."""

    !!!!"""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    |MechBag |Shoots explosive shrapnel / energy projectiles. Creates minions on death. |
    |MechBagMinion |Shoots explosive shrapnel chunks. |
    |StupidDoperBag |Fires Piddledoper projectiles. |

    !!!!Campaign Changes:
    *Hellcastle (Menu Map)
    **""" Text labels added to teleporters so you can identify them as you approach. More banners added throughout the castle to point you to them more easily as well."""
    **""" Improved lighting and visuals - lanterns upgraded, decorations added in some locations, etc."""
    **""" Geometric stability improved. Fewer BSP errors and glitches."""
    *Frostclaw Access (Map 7)
    **""" Technical fixes and gameplay modifications."""
    *Frostclaw Outpost (Map 8)
    **""" Gameplay tweaks: should be much more difficult on Unreal and Hard, especially in the upper level. More combat, more item drops, more obliteration."""
    **""" Improved translator messaging to give players a better sense of what needs to happen to complete the level."""
    **""" Added signs to key areas to make locating and identifying them easier."""
    **""" Significantly reduced health for destructible objects, especially ones that have to be destroyed to finish the map."""
    *Highlands of Despair (Map 15)
    **""" Fixed music discrepancy. The map now uses Chrono Wave by Cybernetika. Crater.umx is no longer necessary for the map to function."""
    *""" Other Maps: lots of misc. technical fixes."""

    !!!!Other changes:
    *""" Piddledoper alt fire range halved, primary fire damage slightly boosted."""
    *""" Fixed Hell Gun alt fire bug where bots were unable to damage players."""
    *""" Fixed Pupae issue where piles of them would result in auto-bug-death from Pupae jumping on top of their buddies' heads and causing "stomp" damage. Similarly, other EXUScriptedPawns can only deal stomp damage now if the stomper has more mass than the stomped."""
    *""" Tachyon Driver alt fire now guarantees target will explode into gibs when killed as long as the Tachyon Storm or the blast wave is the last thing to damage it and the target can be gibbed. Just like the primary fire!"""
    *""" Ice Queens and Flak Brutes no longer spam-fire repeatedly when they lose visual contact."""
    *""" Turbo Skaarj Berserkers now fire three projectiles per shot (so six total every attack), but have less health and are no longer immune to their own damage type. Flak projectiles used by pawns also have reduced damage, max splash radius, and max sensor radius."""
    *""" Fixed a bunch of MP pawns set to drop Energizer Balls when killed that I forgot to update. All pawns should now drop the proper loot."""
    *""" AdvancedCreatureFactories, HellHoes, and DevilBirds/Sentinels/Watchers can now allow random loot drops that override the pawns' defaults. See code comments in the respective classes (in UED, go to Edit Script and read the green // stuff) to see how they work if you aren't sure."""

    ![10-11-2012]: OPEN BETA LAUNCH
    """Oh man. It's finally here. FINALLY. Also: WE NOW HAVE PROPER WIKI DOCUMENTATION! Check that shit out because this text file is probably super obsol... wait a minute, you're already reading the fucking wiki, smartass. Note that the Other Changes list down below is just going to have a collection of highlights, because there's so many changes that it's not practical to write them all!"""

    !!!!"""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    |AdvancedDemonKrallMP |Drops a Demonball Flare on death.|
    |AdvancedDoomOrbMP |Explodes after 120 seconds. LARGE explosion!|
    |AnnihilationTrooper |Carries a Clusterfucker (MP version).|
    |[[Brussalid]] |Infects other pawns and makes them explode into new Brussalids!|
    |ClusternukeBruteMP |Drops a Clusternuke Flare on death.|
    |[[Discordian]] |Spams grenades and drops a Flare Crate on death.|
    |DemonSkaarjMasterMP |Explodes into an ~AdvancedDoomOrbMP on death.|
    |ExtremeLaserWarlord |An ~ExtremeLaserLord that flies. Basically.|
    |HellTrooper |Carries a Hell Gun (MP version).|
    |HellgunnerMercenary |Heavy machinegunner.|
    |PlasmaTrooper |Carries an RFPC (MP version).|
    |VerminBag |Cannon fodder.|
    |VerminBagger |Generates Vermin Bags.|
    |VerminBaggerMP |Drops a Missile Backpack on death.|
    |UltraChargerExtreme |Explodes into Super Sneers on death.|
    |UltraChargerMP |Drops an ~UltraBelt on death.|

    !!!!Other changes:
    * [[Deleted Items]]: """Loads of old classes have been deleted or renamed to trim the fat and prevent bugs. You may need to update your MonsterSpawn.ini - check out the Deleted Items article if you think you're missing something."""
    *""" Several material-based projectiles can now be shot down if you have a weapon strong enough to do it. This mostly applies to things like missiles, Archdemon/Lavatitan meteors, etc. Energy projectiles cannot be shot down, and neither can your own weapons' projectiles. Generally, the bigger, more dangerous projectiles are vulnerable."""
    *""" SHITLOADS of improvements and features added to EXUScriptedPawn which allows modders to do all kinds of ridiculously useful stuff with them, like specifying melee damage types or setting them to spawn when triggered instead of using a bunch of CreatureFactories. TONS of stuff. See the documentation for details!"""
    *""" Seeking projectiles improved across the board! They are amazing now."""
    *""" New blood & gore system! Pawns now have colorful blood and explode into colorful gibs - not just red and green! There are also new impact/damage effects, and pawns can use a custom skin for their gib chunks. Pawns that cast light will (optionally) explode into light-emitting gibs, too. Best of all? KICKABLE GIBS. You can fucking kick gibs around. It's glorious."""
    *""" Weapon balance and design changes! Most guns have been significantly modified. Visit the Hellcastle Firing Range to try them out!"""

    ![10-15-2010]: v4.01 - Patching stuff
    """Fixed the Clusterfucker seek issues, made some balance adjustments, finished some stuff that didn't make it into Demo 4, etc. I've also gone on an inventory clutter-reducing rampage by filtering out shitty items and replacing them with better ones (or not at all). This means you'll have fewer flares to cycle, but the ones you DO have are a hell of a lot more useful and entertaining. Battle Seeds are also gone from the campaign, replaced with Combat Seeds. Same with Battle Fruit."""

    !!!!"""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    |AdvancedDemonKrallMP |Drops a Demonball Flare on death.|
    |AdvancedTurboSkaarjMP |Drops a Plasma Sprayer Flare on death.|
    |ExtremelyExtremeWeirdBerserkerMP |Drops a Super Clusternuke Flare on death.|
    |FireFiendMP |Drops a Hellfire Flare on death.|
    |MegaDemonKrallMP |Drops a Demonblast Flare on death.|
    |PlasmaBeast |A beastly beast, made of the beastliest plasma.|
    |PopperMP |Drops a Munitions Party Mix Flare on death.|
    |RadioactiveBileQueenMP |Drops a Fusion Flare on death.|
    |UltraCharger |A really fucking dangerous Charger!|

    !!!!Other changes:
    *""" Fucker Cola, Carbonated Blood, and EXU Unreal Health now give up to 500 health instead of 400."""
    *""" Added the EXU Ammo Fabricator mutator for MP. It regenerates your ammo like Excessive Time, but doesn't regen your health. Works in singleplayer too."""
    *""" Added the Super Clusternuke Flare. This spawns 10 Clusternuke Balls and 20 Super Balls. Nothin' fancy yo"""
    *""" Added the Fusion Flare. This one spawns an orb which floats into the air, spawning seeker projectiles until it explodes with a moderately powerful blast."""
    *""" Added the Shockburst Flare. It's pretty overkill, spawning a Clustershock explosion and six saturation bomblets in addition to four mini Shockballs."""
    *""" Added the Hellfire Flare. It does zero damage to the user, but projects both demonic and fiery damage upon your foes by spawning a single, large fire pillar in the middle of a pulsing demonic hellblast, all while spawning smaller fire pillars around the ring of the hellblast's radius. The fire pillars can reach high into the air and toast Gasbags right out of the god damned SKY. Awesome."""
    *""" Clusterfucker no longer locks onto horsefly swarms or Doom/Saint Orbs."""
    *""" Made bullet-type projectiles visible, which makes stuff like the Hellfighter's vulcan cannon look REALLY scary."""
    *""" Rebalanced several MP weapons (no effect on SP or coop). The EnergyAR is slightly more powerful, the RFPC uses double the ammo in both fire modes, and some other misc. subtle changes."""
    *""" Fixed Barrel 'o Fun so you can pick up new barrels while you have a Sun or Chaos Barrel in your inventory."""
    *""" Fixed the spacing on the EXU Scoreboard so map titles don't get wrapped onto the next line at or above 1024x768."""
    *""" Fixed Clusterfucker seek problems."""
    *""" Boosted the damage of Super Balls from 185 to 200 and increased max wall hits from 75 to 90."""
    *""" Boosted TurboGasbag health from 250 to 275 and GiantTurboGasbag from 12000 to 16000."""

    ![7-25-2010]: v4.00 - ~EXU2: Batshit Insane - Demo 4 AWW YEEEEEUH
    """LLLLLLLLLLLOTS of code optimizations, I mean -L-O-T-S-. There's also been a number of MAJOR ***MAJOR*** bug fixes, including weapon freezes when you ran out of ammo, a fucking-god-damned-bajillion netcode tweaks and performance improvements, graphical updates, new home-made ghettotastic sounds, brand new features, aaaaaall sorts of stuff."""

    """Lots more SP campaign improvements. There are now optional keybindings you can make for a variety of EXU's inventory, such as the jump boots, Battle Seeds, etc. You can see them in your Controls config thing in UT's options. There are 33 new creatures, too, and some REALLY awesome creature AI improvements for lots of maps. I also finally got around to making the 400th Pawn! We're well past 400 pawns by now but I have since learned how to code it myself and I remembered the idea, so now it's done! It is HILARIOUS. I will not be responsible for any crashes resulting from its usage."""

    """But you know what the best part about this release is? I mean -the- -best- part. It's not Demo 4. It's not the bugfixes. It's not the netcode improvements. It's not the monsters. It's the Flare Crates. I came up with this idea a while ago as a solution to losing all your flares when you die in coop, and then UArchitect went on a coding/texturing rampage and produced the ultimate masterpiece. I'll let you fuck around with them yourself. They're absolutely awesome."""

    !!!!"""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    |AdvancedDemonKrall |Fires a shotgun blast of mini demon balls.|
    |AdvancedTurboSkaarj |Shoots a burst of 3 projectiles.|
    |AdvancedSkaarjAssassin |Shoots Descent-style plasma balls.|
    |BeamBag |Beamy.|
    |BeamSkyTentacle |Shoots a nasty blue beam.|
    |BeamTentacle |Shoots a nasty green beam.|
    |[[Bouncer]] |Skaarj that lobs bouncy things.|
    |CycloneMercenary |Spammy mercenary.|
    |DoomPolice |Flying, tougher Doom Trooper.|
    |DoomSquid |Extremely dangerous!|
    |DoomTrooper |Has a powerful burst-fire machine gun.|
    |EliteSkaarjAssassin |Very sneaky, very nasty. Kinda.|
    |EXUSK6Behemoth |The wonderful ~SK-6 Brute from The Last Fortress.|
    |FireBursterBrute |Burster Brute but with fireballs.|
    |FireDropper |Flying Skaarj that throws napalm.|
    |FireFiend |Fiery.|
    |FourHundredthPawn |Holy shit.|
    |HandCannonKrall |Shoots with a 15th-century hand cannon.|
    |[[Hellfighter]] |A demonic military aircraft. EXTREME DANGER.|
    |[[Hellsphere]] |Demonic version of the Laser Sphere.|
    |MajorCycloneBag |VERY spammy gasbag.|
    |MegaDemonKrall |Fires a Hellbeam. Nasty.|
    |MinorCycloneBag |Spammy gasbag.|
    |PolarisFighter |Like the Hellfighter, but friendly in SP.|
    |PlasmaPolice |Sprays Descent-style plasma balls.|
    |RockMonster |A flying sentient boulder miniboss thing.|
    |StupidBursterBag |Very stupid, very bursty.|
    |SuperHellsphere |Hellsphere that uses Hellblasts. DANGEROUS!|
    |TurboDemonBrute |Big dude that ain't happy.|
    |UltimateCycloneBag |EXTREMELY SPAMMY gasbag.|
    |[[Ultrabag]] |Boss bag. Campaign spoilers abound.|
    |UltraEnergyBag |Charges up a huge-ass energy bolt.|
    |UltrasprayBrute |Base class for a variety of turrets.|

    !!!!The biggest "Other changes" list yet:
    *""" Shock Flare damage increased from 600 to 1000."""
    *""" The Screamer no longer respawns online. The Extractor no longer gets dropped online when you die, either."""
    *""" UArch gave the Freezer an incredibly badass facelift. Check it out in a multiplayer game! And with Pentapower!"""
    *""" The Screamer Missile Launcher now can lock onto targets like the Clusterfucker can! The alt will still launch a dumbfire, though, even if you are locked on to something."""
    *""" Major improvements to the Archdemon. This thing is EXTREMELY aggressive now; better not screw around!"""
    *""" Added the Chaos Barrel (EXU.ChaosBarrelNade). Can YOU figure out what the hell this thing does?"""
    *""" Fixed Barrel 'o Fun and Suns so that you can't pick up the item if you already have one. This prevents you from accidentally picking up a barrel when you're full, effectively wasting the extra one."""
    *""" Added EXU: Unreal Gun Swap mutator to replace Unreal weapons with EXU versions since EXU Gun Swap (now EXU: UT Gun Swap) didn't before. They're separate mutators to prevent any potential incompatibilities."""
    *""" The Contact Beam is now completely fixed! No more visual buggeration and/or fuckery. It also has all new sounds!"""
    *""" Flare Crates for coop are now in! In coop, when you die, if you were carrying any flares, you will leave behind a FLARE CRATE containing all of your flares! Aren't we nice? Oh, but there's a catch: you have to destroy the crate to get the flares out. No biggie, right? Well, when you destroy the crate, it randomly chooses one of the flares and detonates it. That's right. RANDOM FLARE EXPLOSION FOR EACH CRATE! And on top of that, the explosion will scatter all the flares within in all directions! Have fun hunting those things down! And, if you wish, you can summon these offline. If you summon a flare crate, its contents will be randomized, including amount, so you'll get randomly-sized crates. You'll never know what to expect! WARNING: DESTROYING TOO MANY OF THESE AT ONCE *WILL* OBLITERATE UT WITH AN ENORMOUS CRASH. Be careful OR ELSE BAD THINGS WILL HAPPEN"""
    *""" Built in an anti-telefrag system for EXUScriptedPawns. Positive block magnitude repels the disc, 0 does nothing (and the pawn remains telefraggable), and a negative number repels the disc AND destroys it. Also supports effect spawning at the impact site of the translocator disc. A number of pawns are now un-telefraggable, some of which destroy the disc, so be careful what you try to kill the easy way!"""
    *""" Applied sound to tons of pawns that didn't have shoot sounds before. This makes some enemies more detectable in combat, but is mostly a cosmetic change."""
    *""" Added ambient sounds to a lot of projectiles so you can hear them whizzing past you."""
    *""" Removed self-damage from Piddledoper splash damage on Easy and Medium. Decreased recharge rate slightly."""
    *""" Boosted the select rate for all weapons (except LRPC) by 15% to make them cycle quicker in combat."""
    *""" Added EXUFullAmmo powerup which maxes out your ammo for all guns except the Piddledoper, LRPC, and Screamer."""
    *""" Added LaserEnergizerUpgrade for the EnergyAR. It boosts its ROF by 25% every time you get one (up to 200% of the original firing speed)."""
    *""" Fixed a SHIT TON OF TEXTURES that had not-quite-black edges. This means that a whole bunch of old explosion effects from Unreal 1 and a number from EXU have been corrected so that the ugly yellow/green/whatever borders are no longer visible! Yay!"""
    *""" You now take 25% less damage on Easy instead of 20% less. Projectile speed remains unchanged at 25% less than Hard and Unreal (Medium still has 10% damage / 10% speed reduction)."""
    *""" Fixed EXU2Coop so that the basemutator and HUD are properly applied. This means global difficulty nerfs for Easy and Medium now apply to coop as well as SP games."""
    *""" Recoded Pentapower. The HUD display is now correct, the visual effects have been improved (weapon overlays instead of changing the gun's skin), and the fire sounds now work with all EXU weapons. Woop!"""
    *""" Boosted Flakball Flares so that they use wide-area flak (higher max blast radius) and bumped damage up for those projectiles (95 to 300). Flakball Flares should now be a lot better at killing things because they pretty much sucked before."""
    *""" Increased damage and splash radius of Flak Flare flak shells (90 damage to 150, 150 radius to 175)."""
    *""" Gasbags now will strafe really fast and more often than before. I'm honestly not sure why they do this, but I kinda like it! I actually think it has to do with me adding MakeNoise() calls all over EXU's weapons, which alerts pawns that you are about to do something (i.e. shoot them in the face)."""
    *""" FS2 Flak (i.e. Clusterfucker primary shots) now have a smart detonation system. In addition to the dynamic blast radius, the projectile will ALSO detonate if any pawn is detected within the blast radius, even if the projectile did not directly hit the pawn. This means that shots which otherwise would have missed their target will now explode as long as their splash damage is big enough to hit the nearby target. This means the primary shots will be MUCH better at saturating an area and far less wasteful if your aim isn't perfect. It IS called the Clusterfucker, after all; you aren't supposed to be careful with it!"""
    *""" The EXU Shotty's spread was updated (made better), so I created an EXUShottyMP gun that has less damage to compensate (also because the EXUShotty's damage was half its intended amount all along, so the gun would have been extremely overpowered in MP if I gave it double damage)."""
    *""" Rewrote the Shitgun's projectile code to improve effects, performance, etc. They have the same gameplay stats so you probably won't even notice a difference. Well, except for one thing: THE SHITGUN CANISTERS NOW WORK PROPERLY IN WATERZONES! HOORAY! It's only been like FOUR FUCKING YEARS since they last behaved correctly, but now they do! You can also shoot the canisters individually to detonate them manually, and you can lay traps by placing several canisters in one area and then detonating them all at once (they chain-react quite nicely)."""
    *""" Improved Pupae lunging behavior (most noticeable for really big ones). They are much more dangerous now if they get a chance to lunge after you."""
    *""" Increased Archdemon dodge speed, making it better able to strafe out of the way of LRPC balls and the like."""
    *""" Heavy Shield belts, as well as the new Heavy Bapes and Heavy Helm items, will set your mass really high while equipped. This prevents enemies from blasting you all over the place. Especially helpful on dangerous ledges where you could easily fall off if an enemy shot you the wrong way."""
    *""" Added Biohazard Flare. This spawns shit AND biogel all over the place - LOTS of it."""
    *""" Improved Bio Flare and Slime Rockets. EXU's Biogel no longer explodes on contact with projectiles, making it much more capable of saturating areas."""
    *""" The Extractor also now has a gore burst mode. When it sucks up enough damage, it empties its tanks - violently - spraying compressed gibs all over the place. For free! It does tons of damage, but don't rely on it. It's more of a fun gimmick than anything, but hey, it could save your ass in some cases."""
    *""" Upped Extractor damage-per-second from 1200 to 1900. Lots of Extractor love this patch! BECAUSE THE EXTRACTOR OWNS"""
    *""" BY POPULAR DEMAND: Gave the Extractor alt fire a sniper-like zoom function. This is, of course, completely ridiculous since the Extractor is a point-blank weapon, but now it can be used like binoculars to scope out targets at range!"""
    *""" Fixed Extractor primary causing self-damage when fired against a mover."""
    *""" Fixed LaserSpheres so they always detonate instantly upon death instead of after a short delay."""
    *""" Added level.bDropDetail support to various effects. If the gamespeed goes below your MinDesiredFramerate, then extraneous effects will not be spawned, improving performance. Keep in mind, though, that if your MinDesiredFramerate is too high, a lot of effects will never spawn; if it's too low, they always will, but you won't enjoy performance benefits if your game gets slow. If I were you, I'd set the min desired to whatever you consider to be just above the slowest acceptable gamespeed. This should help prevent things from getting too laggy in really intense firefights."""
    *""" Housekeeping work and strengthening of the campaign story."""
    *""" Changed the Clusterfucker's ammo icon so it doesn't look nearly identical to the RFPC's ammo. I know, they both still use the UT Eightball mesh and one of them really needs a visual makeover. If there's time, it'll happen."""
    *""" Added new Battle Flares(TM): Megablast Flare, Napalm Flare, Clustershock Flare, Demonblast Flare, Plasma Tornado Flare, and the Gas-Killer Flare. The first generates a huge fuckoff explosion, the second burns things, the third is like 10 Shock Flares in one, the fourth is a fucking insanely powerful blast of Hellish energy, the fifth creates a spiral of plasma, and the last one will utterly devastate all Gasbags in a massive area--but ONLY Gasbags!"""
    *""" MASSIVE improvement to Clusterfucker alt fire. Rocket seeking ability has been fixed up so that rockets can acquire targets better, especially at long range, and there is also a nice locking functionality. If you focus your reticle on one target for long enough (not long), you'll lock onto it instead of whatever is closest to you. Of course, simply spamming rockets will make them go after whatever needs to die, but this lock ability gives you a little more control when you have a second or two to spare."""
    *""" Finally added a visual effect and audio cue for when Battle Fruits / Combat Fruits spawn from their respective seeds."""
    *""" Fixed all guns that use more than 1 ammo per shot which froze when you fired a more-than-one-ammouse shot when you had less than the required amount of ammo available. No more freezing! Yay!"""
    *""" Increased damage on EnergyAR (and MP version, proportionally) so that the primary fire is now slightly more efficient than the alt. The primary bolts each do 220 (up from 200) damage, while the alt still does 1050. This means that five primaries now deal 1100 damage total. I made this change because, in practice, the primary was kinda useless when you could just spam the alt. Now, though, they're about equal, and since the primary is technically better, it should be used more often. Alt is for when you want to get out a lot of damage right in one instant; primary is better for breaking down a hard target."""
    *""" Added Blast Bapes item. Put on these shoes and BLAM, every time you jump, an explosion damages everything nearby!"""
    *""" Fixed Laser Spheres' weird bug! It was caused by them having a low DrawScale and bHidden=True... for some reason. I gave them a masked texture instead so you can't see the Gasbag base, just the sphere."""
    *""" The ThreeHundrethPawn no longer fires Fun Barrels since the Fun Barrel was updated. It makes them too laggy if they shoot like 4 or 5 at once. They still fire their whole huge-ass shitload of other projectiles, though, don't worry."""
    *""" Increased OldSearchlight charge from 5000 to 7500."""
    *""" Improved FireSlith and FireQueen skins somewhat so they aren't so hideous."""
    *""" Changed the Barrel 'o Fun and Barrel 'o Suns so that both fire modes are the same (the alt fire). The non-falling mode was always pretty useless, but I DID leave in the OldFunBarrelNade and OldSunBarrelNade weapons which use both fire modes if you REEEEEALLY want them."""
    *""" Changed SteelBrute, SteelQueen, and SteelSlith to shoot long-range flak instead of those crappy flak grenades."""
    *""" Fixed up Giant Turbo Gasbags and Giga Demon Gasbags so that they spawn lesser gasbags every time they attack, making them much more dangerous and fun to deal with."""
    *""" Added the Flare Gun weapon for SP. This actually allows you to fire your flares like projectiles at long range. The primary fire makes them explode on contact, while the alt lets them bounce and explode after a timer. Keep in mind, though, that alt flares can be detonated mid-air by projectiles or splash damage like normal flares, so watch out!"""
    *""" Various fixes to projectiles for coop, solving visual bugs and/or broken functionality."""
    *""" Fixed the Juggernaut Cannon's alt fire rocket so it uses a powerful hellblast instead of a weaker MP hellblast."""
    *""" Added a very short but forceful ShakeView to Clusterfucker-style flak explosions."""
    *""" Reduced ShakeView radius on Hyper Flakker so it won't shake coop players' views from all the fuck over the map."""
    *""" Increased Ultra Demon Flare damage output from 1000 to 7500. I didn't realize this was so low all along!"""
    *""" Shrunk Shit Canister collision radius and height so it is closer to the actual size of the mesh. Was 10/5, now is 7/4."""
    *""" Fixes for projectiles with damage radii too small to hurt large creatures. This means that things like Clusterfucker Rockets and RFPC plasma now can properly hurt stuff like titans and Sky Tentacles! Hooray!"""
    *""" Increased damage and blast radius for Skaarj Fiends to increase the penalty incurred when telefragging them."""
    *""" Made Flak Sky Tentacles rapid-fire; they no longer shoot one huge wall of slow flak. They now have fast long-range flak, so watch out."""
    *""" Increased Sky Tentacles' ROF by 2x across the board, and some variants have even more, like 4-5-6x."""
    *""" Reduced Mass of FlyingSquids so that they don't fall to the ground instantly after attacking you."""
    *""" Cut Elite Shrapnel Mercenaries' damage by half and fixed their ProjectileSpeed so they are instant-hit-like as they should have been."""
    *""" Reduced odds of big-ticket item drops from Magic Armor Seeds and Seed Seeds by quite a lot."""
    *""" Reduced Flare drops in Seed Seeds from 5 of a kind to 2 of a kind, and reduced the multi-Seed Seed drop to 3 seeds instead of 5."""

    ![2-15-2009]: v3.01 - ~EXU2: Batshit Insane - Demo 3 v4 Patch
    """I didn't bother releasing new versions of this file for the other patches (v2, v3) since they mostly just had campaign-specific stuff, but this time there are a few EXU.u-related changes and actually a new monster!"""

    !!!!"""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    |PsychoChargerMP |Drops a Heavy Shield Belt.|

    !!!!Other changes:
    *""" Reclassed the RFPC under lazyweapon so it performs better online, offline, AND the bot AI is better. It also has nice third-person muzzle flashes visible now."""
    *""" UA worked out a fix for the Barrel 'o Fun / Barrel 'o Suns so it doesn't instantly fire if you select it accidentally"""
    *""" Increased the recharge speed of the Piddledoper just a bit"""
    *""" Misc. fixes for accessed nones and shit"""

    ![2-9-2009]: v3.00 - ~EXU2: Batshit Insane - Demo 3 released!
    """All sorts of craziness has gone on under the hood. There have literally been HUNDREDS of minor tweaks and bugfixes, various classes have been noticeably improved (either visually or gameplay-wise), a few new weapons are in, and there are 23 new critters, putting us over 400! All in all, this release is fucking great."""

    !!!!"""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    |AdvancedLaserSphere |A drone that shoots blue lasers at you.|
    |[[Archdemon]] |Batshit Insane spoilers! Don't summon it. """:|"""|
    |DarkPupae|
    |DemonSkaarjMaster |A beefier ~DemonSkaarjLord with an evil halo.|
    |DemonSkaarjMasterII	 |A scripted specialty! Dare you kill one?|
    |ElectroVampireKrall |Sorta fucked up.|
    |ExtremelyExtremeHyperLord |Very, very extreme.|
    |ExtremelyExtremeLaserLord |Very, very extreme.|
    |ExtremelyExtremeShockBerserker |Very, very extreme.|
    |ExtremelyExtremeWeirdBerserker |Very, very extreme.|
    |FlyingFuckerFish|
    |KamikazePupae|
    |LaserSphere |A drone that shoots green lasers at you.|
    |LavaTitan|
    |MegaRedSkaarj|
    |PsychoCharger|
    |PupaeBombardier |A huge gasbag that barfs out Kamikaze Pupae.|
    |PupaeVomiteer |A huge gasbag that barfs out Turbo Pupae.|
    |RocketBlastShitfucker |Rocket-spammin' brute.|
    |ShockCommando|
    |ShockTrooper|
    |SkaarjFiend |It can deal damage even when killed.|
    |TorpedoFish |Basically a guided missile.|

    !!!!Other changes:
    *""" Fixed a really goddamn retarded bug where some projectiles weren't doing the full extent of the damage they should have been doing due to HurtRadius. Did you know that Damage*0.5 or whatever means it sets the WHOLE PROJECTILE'S damage that way instead of JUST the splash damage? I thought you could have a direct hit be more damaging than the splash radius, but NOOOOOOOOOO. Oh well. I fixed some gimped projectiles and rebalanced some other stuff. Now the RFPC is perfect! And so is the Clusterfucker primary."""
    *""" Added 2 new mutators: Deemer to Screamer and UDamage to PentaPower. The former turns the Redeemer into a Screamer missile launcher, which is a lot less devastating than the LRPC (and it only has 1 missile in it, like the Redeemer), making it a good choice for those who think the LRPC is just TOO AWESOME (I can understand) for their MP games. UDamage to PentaPower does the exact opposite by replacing UDamage with PentaPower, and PentaPower multiplies your guns' damage outby 7 instead of 3, and it lasts for several MINUTES. Not even I am sure if I can recommend using this one!"""
    *""" Massively upgraded the Hyper Flakker primary fire! Now it uses sounds from Dead Space's Line Gun (can you tell I really, REALLY like Dead Space?) and does a fuckton more damage. It fires 18 bolts in a wider, but still plus-shaped formation instead of the old 7. Also, each bolt used to do 75 damage; now, each bolt does 166.666666 damage, putting the total damage output at 3000 per shot (assuming all 18 bolts hit the same target). This is, so far at least, a pretty good figure, since the Hyper Flakker has much less ammo than other guns, and it fires slowly. The bolts also move 2x faster. On top of all this, a new MP version of the Hyper Flakker was made for multiplayer games, because 3000 damage in a wide, fast-moving pile of lasers is ridiculously overpowered. The bolts do 25 damage each in MP for a total of 360, which in practice is a very good, balanced amount, since most of the time, not every bolt is going to hit. EXU Weapon Modifier has been updated to take care of this (as well as EXU.int). You don't need to make any changes for MP games; just enjoy the new, better firepower."""
    *""" Fixed up Demon pawn skins so they don't look like utter shit"""
    *""" Slight adjustments to some MP weapons"""
    *""" Fixed an age-old problem with the RFPC MP projectiles that made them stupidly overpowered. They now are doing the amount of damage they should have been doing all along."""
    *""" Fixed a bug left by Epic (thanks guys <3) where Skaarj Warriors only do 20 or 17 damage in melee on Unreal difficulty, since SOMEONE put in absolute values in their PostBeginPlay() instead of proportional adjustments. :| """
    *""" Fixed big pupae classes (Boss Pupae, Uber Pupae, Uber Boss Pupae, etc) so that they can actually bite you now."""
    *""" Added the Screamer Missile Launcher, a single-use, long-range weapon that fires a fast, high-damage dumbfire warhead. Summon with EXU.EXULAW (yeah, I tried to use the Deus Ex LAW mesh but it was all fucked up, so it uses a smaller Redeemer mesh, for now at least)."""
    *""" Improved weapon sound effects, including new Shitgun shit canister explosion sounds from Dead Space which are hilarious """
    *""" Changed Pupae-spawning projectiles (and any other projectiles that shit out pawns) so that their payload doesn't remain floating in air. This means that, for instance, when you kill a Queen at range, the Pupae will fall down instead of sitting in the air until they see you."""
    *""" Increased Extractor damage from 1000 to 1200 damage per second to make it even MORE attractive if you somehow thought it wasn't good enough before. Seriously. Use the motherfucking Extractor. It's awesome. Still no alt fire yet, however."""
    *""" Added more bloblet particles for the Shit Canister explosions."""
    *""" Fixed Demon Skaarj Lords so that they never engage in melee combat and instead focus on firing their projectiles."""
    *""" Fixed creature AI so that any enemies with the same TeamTag will remain friendly to each other. This means that, for example, Demons will not stupidly get into fights with other Demons, regardless of species. This prevents silly stalemates from occurring where a bunch of monsters fight, yet no one wins, and they all ignore the player(s)."""
    *""" Added the Contact Beam, a replacement for the Freezer in SP games! The Contact Beam is based on the totally badass high-damage energy weapon from Dead Space, which is where it gets its sound effects. To use, hold the fire button; as you charge, the energy will grow. Once the charge is ready, you may continue holding the charge, or you may release the fire button to deliver an instant-hit beam of extreme damage to your target. The alt fire is a kinetic area-effect radius around the user, good for flinging enemies away so you can blast them with the primary."""
    *""" Moved content from EXUParticles and EXUAExtras into EXU, so those two packages are no longer necessary."""
    *""" Regrouped a lot of generic EXU effects and projectiles so that they don't clog up the actor list in UED. This is useful pretty much only to me and UA, but I thought I'd mention it BECAUSE I'M JUST SUCH A NICE GUY"""
    *""" Added Combat Boots armor item. About as good as a Turbo Helm, but slightly better."""
    *""" Added the Firestorm Generator item. This new pickup, when activated, projects a localized pyrokinesis field around the user, damaging any creatures within the expansive radius by blasting them with bursts of heat. Can be activated and deactivated and used whenever and wherever desired until its charge is drained."""
    *""" Modified all queens to burst out a number of their projectiles on death, so don't go trying to telefrag them! Except Turbo and Psycho Queens--you can still telefrag them. And you should."""
    *""" Added the NuclearKeg. +200, up to 999."""
    *""" Added the HeavyFlakBattery weapon, which is still incomplete, but absurdly powerful. HUGE splash damage."""
    *""" DemonKrallElite now fire homing demon skull projectiles. Why? I don't know."""
    *""" Added InsaneBoots and UltraPsychoInsaneBoots. The former will launch you extremely high and also deal damage to anything nearby from the force of the blast required to launch you into the air, and the latter will let you jump from the bottom of the Sunspire to the top (just for fun)."""
    *""" Added the TML, which stands for Tornado Missile Launcher. It's a development tool primarily (TML is easy to type, so changing its projectile in-game is simple), but it's nothing more than a RFPC with a different projectile in primary (the Tornado missile, which is really pretty fun to use)."""
    *""" Added some new seed types and new effects for when something spawns from one of them: Armor Seeds, Magic Armor Seeds, and Seed Seeds. Armor Seeds only give you an EXU Armor, but can be deployed anywhere at any time. Magic Armor Seeds can give you anything from an EXU Armor to an Ultrabelt, but the better inventory is harder to come by. Seed Seeds can give you... just about anything! Beware!"""
    *""" Seeker missiles (and other seeking projectiles) now seek properly and are totally badass!"""
    *""" Updated EXU Pinata to accommodate more health types and prevent Extractor drops."""
    *""" Boosted RFPC projectiles' damage and splash damage by about 2x (SP version)."""
    *""" Made Advanced Doom Orbs use hellblasts as their alt fire instead of demon bolts... for variety! They are also the only orbs which will actively (albeit slowly) chase you (so they can use their hellblasts)."""
    *""" Changed Demon Rockets so that they explode with MP hellblasts (Hell Gun alt fire) instead of Clusternuke explosions."""
    *""" Created a new Demon Bolt projectile speficially for creatures that is weaker than the MP version they used before. Also reduced the ProjectileSpeed for various creatures that use Demon Bolts."""

    ![3-8-2008]: v2.01
    """Added some effects, fixed some balance things, and other small, miscellaneous changes."""

    !!!!Other changes:
    *""" Cut MomentumTransfer on the RFPC primary fire by 60%. This should prevent you from getting stuck if you try to jump when you are under fire, which was seriously annoying."""
    *""" Added a carcass type for Saint Bags. Don't worry, I still have lots of plans to improve the overall visual style of the Saint-class pawns, but I haven't gotten to it yet. Think really excessively glowy shit and death particles."""
    *""" Reduced charge on Frost Armor from 10,000 to 9,000."""
    *""" Added glowy glowiness to the plasma balls (medium and mega) to make them look nicer."""
    *""" Reduced CREATURES' Freeze balls' speed (2100 to 1900), damage (25 to 20), and MomentumTransfer (30,000 to 10,000) to make them less instakillage."""
    *""" Tweaked the various Pupae classes to diversify them some more."""
    *""" Gave the RFPC muzzle flashes in both fire modes and tweaked the RFPCMP's damage. I increased the alt and decreased the primary a little. The SP version is unchanged; I haven't thoroughly tested it since I haven't made any maps that use it yet. Also gave the Hell Gun and EXU Shotty muzzle flashes."""
    *""" Gave the EnergyAR really badass muzzle flash effects thanks to UArchitect's leet textures he made for something else that ended up not getting used [for that purpose]! Also added small spark explosions to the bolt impacts. The EnergyAR looks much, much better now."""
    *""" Fixed a light color bug on the Advanced Doom Orb that made it glow purple instead of red."""

    ![2-1-2008]: v2.00 - ~EXU2: Batshit Insane Demo 2 release.
    """FUCKERLOADS of generic improvements and miscellaneous tweaks. EXU's code has been completely redesigned to make way for smaller (file size) updates when sounds and textures remain unchanged. Now, instead of downloading one 15MB EXU.u, you will only need to download a 1-2MB EXU.u and keep EXU-Sounds.u and EXU-Textures.u in your System folder. If those change, updates for them will be released individually; otherwise, you can expect much smaller downloads in the future when code alone gets changed. No more redownloading 15MB for a single bugfix! Huzzah! Also: added 39 creatures!"""

    """Also, I just calculated for the hell of it that EXU2 originally started with 225 creatures back in August of 2006. It's come quite a way!"""

    !!!!"""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    |AdvancedDoomOrb |Can't be killed, but very slow and dumb.|
    |AdvancedSaintOrb |Can't be killed, but very slow and dumb.|
    |AntiTankRiotMercenary |Fires shitloads of plasma balls. Watch out.|
    |BioMercenaryElite|
    |DemonCommandoEliteMP |Drops the Juggernaut Cannon.|
    |DemonKrallElite|
    |DemonKrallEliteMP |Drops a Demon Saturation Flare.|
    |DemonSkaarjLord |This fucker can *fly.*|
    |DoomOrb |Can't be killed, but very slow and dumb.|
    |ElitePopper |Shoots tons and tons of UT grenades.|
    |EliteHyperPopper |Shoots tons and tons of Hyper Grenades.|
    |EnergyMercenaryElite |Just a bigger, nastier Energy Merc.|
    |EnergyMercenaryEliteMP |Drops a ~TurboEAR.|
    |FlyingSquid|
    |FuckerSquid|
    |GiantBioBag|
    |GiantDemonGasbag|
    |GiantTurboGasbag |Spawns Turbo Gasbags.|
    |GigaDemonGasbag |Shoots Demon Bolts and spawns Demon Gasbags.|
    |HyperPopper |Shoots tons and tons of Hyper Grenade Bomblets.|
    |HyperPsychoQueen |Fires hyper rockets / spawns TONS of Hyper Pupae.|
    |JerkKrall |Fires bolt with 1 damage but flings you FAR away.|
    |MegaDemonGasbag |Shoots Demon Bolts. Watch out for this sucker.|
    |MiniDoomOrb |Can't be killed, but very slow and dumb.|
    |MiniSaintOrb |Can't be killed, but very slow and dumb.|
    |[[Popper]] |Shoots tons and tons of U1 grenades.|
    |SaintKrallElite|
    |SaintOrb |Can't be killed, but very slow and dumb.|
    |SaintSkaarjLord|
    |[[Shitbag]]|
    |ShitMercenary|
    |ShitMercenaryElite |Shoots the improved shitballs and shit canisters.|
    |ShitMercenaryEliteMP |Drops the Shitgun.|
    |ShitmercenaryMP |Drops the Shitgun.|
    |ShockKrallElite|
    |ShockKrallEliteMP |Drops a Shockball Flare.|
    |ShrapnelMercenaryMP |Drops the Combat Shotgun.|
    |SniperCharger |A Charger variant that shoots its "WHA!" at you.|
    |SuperChargerMP |Drops a Barrel 'O Suns.|

    !!!!Absolutely gargantuan list of other changes more for my own reference than anyone else's at this point:
    *""" ===NOTE:=== Seeker Rockets are actually dumbfire for this release, but they have more splash and damage to compensate. This is because UA hasn't been able to figure out how to make them select random targets reliably without lagging the game yet, so it may be a while before the Clusterfucker and stuff can actually seek in the alt fire, but the new missile burst is still much better than the old mode."""
    *""" Revamped the Saint projectiles and added a HeavySaintBall variant. Adjusted splash and damage somewhat."""
    *""" Added Seeker Missile Flare. This fires the new Clusterfucker alt seeker rockets - 100 of them."""
    *""" Added Shock Saturation Flare. Like the Demon Saturation Flare, it shoots 7 rockets that explode into shock combos."""
    *""" Changed the Clusterfucker alt fire to a new 8-missile burst fire. Overall, these 8 missiles do more damage than 8 primaries can do, but they don't have as much splash. However, they all will randomly acquire targets and seek them, and they rarely miss. Uses awesome SupCom sound effects."""
    *""" Added the Demon Saturation Flare. This thing fires out seven rockets which, after 0.45 seconds, explode into Hell Gun alt fire area-effect blasts that will not harm the user (or other demons), but will utterly ruin the shit of anything else caught in the damage area. An excellent room-clearer."""
    *""" Added the Bouncilaser Flare. This flare spawns tons of bouncing EnergyAR bolts, both primary and alt fire. You better have a really REALLY fucking good place to hide if you decide to use this, because it is capable of clearing entire maps."""
    *""" Added Combat Seeds. These items are like Battle Seeds, but they instead spawn Blood Fruit, which give you +100 health (to a max of 500)."""
    *""" Made Hyper Pupae the same size as Crazy Pupae, but less speedy / damaging / weak. For variety. The fat ones were useless."""
    *""" Added Frost Armor. Has massive charge and armor absorption (10,000 / 96%) for superior protection. Used in SP."""
    *""" Added the Demon Flare. This is just a one-time-use Hell Gun alt fire which won't damage the flare tosser (or demons)."""
    *""" The Hell Gun alt fire has finally been redesigned! Instead of that shitty stream of useless pentagrams, you get something rather unique: a very hard-hitting area-effect weapon that does no damage to the user, but inflicts massive damage against any pawns surrounding the user--in front, behind, above and below. It uses 15 ammo, but does proportionally more damage than the primary, making it an excellent riot-control tactical weapon. It has a relatively long recharge time, though, so use it wisely. It does less proportional damage in MP. The best part, though, are the new visuals done by UArchitect, which you have just got to see. They look fucking BAD ASS and totally suit the design of the fire mode. UA and I both agreed that this idea would be great when we first thought of it, and we weren't wrong at all. The sound effect is awesome, too; it's the Cybran T3 Siege Assault Bot, the Loyalist, EMP death blast sound from Supreme Commander."""
    *""" RFPC alt fire projectiles now have proper physics. You can lob them significantly greater distances. Also, the alt fire now uses 10 ammo per shot to balance its effectiveness at long range, and the primary's splash radius has been reduced from 112 to 80, but the splash damage has been increased from 19 to 30. The alt fire's damage has been balanced accordingly (boosted to meet the cost)."""
    *""" EXU's code has been completely redesigned to split the sounds and textures into their own packages, making code updates much more convenient to upload and download."""
    *""" ShitMercenaryMP now drops the OldShitgun, and the ShitMercenaryEliteMP drops the official one. It also shoots the gun's projectiles, so watch out when it decides to spam canisters!"""
    *""" Shitgun totally redesigned: old Shitgun is now known as EXU.OldShitgun and won't appear in any games unless you summon it. The new Shitgun, made per complaints from EBM and UBerserker that the old Shitgun was useless, is awesome. The primary fires at the same rate and does the same damage, but it now spits out three smaller shitballs on every surface impact, which also stick to surfaces and explode, albeit with less damage and splash. However, when stuck to a ceiling, ALL shitballs (except the miniature ones) will rapidly drip down shit droplets that explode on impact for 10 damage each, making the Shitgun a good tactical weapon for various situations. The alt fire is even better: now, instead of you charging it up and releasing a giant shit gob that explodes into smaller ones on impact, you launch a large canister full of shit (which looks just like the ammo, only slightly smaller) that will fly through the air and stick to whatever surface it contacts. It will NOT detonate on contact with a creature; it only explodes after its one-second timer has gone off, which activates as soon as it makes contact with a surface. When it explodes, it does tons of damage and flings whatever is nearby FAR away (like the old alt fire, but better) and simultaneously spews out a LOT of primary fire shitballs. When in a water zone, the shit canister will not detonate; rather, it floates to the surface, its collision radius quadruples, and it becomes a proximity mine. When a creature gets close enough, it explodes. This makes it more effective against water-based enemies if you can lure them to the surface. The alt uses 15 points of ammo, though it can be launched pretty fast. It has become an amazing tactical weapon, and it's now enormously more potent in MP games. Thanks again to UArchitect for fixing stuff that was broken!"""
    *""" Shitgun beefed up slightly in ROF and damage. Piddledoper nerfed slightly (splash radius and damage decreased, recharge time increased). The Clusterfucker's alt fire now shoots faster, but still uses twice as much ammo and has the same spread. [Edit: the Shitgun here is now the OldShitgun]"""
    *""" Decreased MomentumTranfer of Freeze Blasts so they aren't as ridiculously powerful in their ability to make you take fall damage just by blasting you into the ceiling and having you fall back down again really fast. Hopefully they are a little less annoying now, but I don't want them to be TOO weak..."""
    *""" Adjusted the EXU Shotty, Energy AR, and Clusterfucker's pickup ammo ammount to better reflect the amount of ammo each gun uses. The EXU Shotty now comes with only 50 rounds in the gun instead of 200, and its ammo boxes give you 25 each instead of 100 for a max of 200 rounds total (instead of 900); the EnergyAR comes with 100 instead of 200, and its ammo packs give you 50 (same max amount of 900); and the Clusterfucker comes with 300, and its ammo packs give you 150 (same max of 900). I really cut down the EXU Shotty since it does a shitload of damage at point-blank range, and it would never run anywhere near empty in MP games before."""
    *""" Created the EnergyARB ("B" is for "bouncing") for use in an EXU2: Batshit Insane map. Added the Laser Suit to protect players from their own shots. Yes, these lasers bounce off of surfaces -- up to 500 times. No, that isn't a typo."""
    *""" Saint Skaarj and Saint Mercenaries have been toned down because their UNDODGABLE, NEAR-INSTANT-KILL FUCKING PROJECTILES GOT REALLY FUCKING ANNOYING. Saint Brutes were nerfed a bit too. Saint Bags were beefed up, and Saint Krall / Pope Queens left alone."""
    *""" Added the Turbo EAR, a speciality weapon. Like the EAR, it shoots those nice green lasers in primary and big fuckoff blue ones in alt mode. The difference? Eight times faster."""
    *""" The EAR lasers now go THROUGH enemies until they hit a wall or other non-living actor! This makes them much more useful against crowds, and the EAR alt is now batshit powerful, so I decreased its damage from 1100 to 1050. Now it is about equal to the primary fire in terms of damage per shot; the alt uses five ammo points for 1050 damage, while the primary uses one ammo point for 200 damage. The damage bonus isn't as necessary now when you can nail multiple targets with that one bolt. The best reason to use the alt is to ensure you will inflict maximum damage in the shortest time span possible (immediately) against really strong, large, or close enemies."""
    *""" The EXU Keg also gives you 600 health now. I made this change because the UT keg gives you 199, which is almost double the default 100 health. Since you have 300 health by default in EXU, it only makes sense that the EXU Keg gives you double that. Also, it makes the EXU Keg a more desirable item, since it is the only item in MP games that can give you more than 500 health, which is where the Energizer Balls and Blood Boxes and things stop. Well, the only item that can unless you use StuffSwapper to stick in the BloodKeg, but by doing that you are just a coward. (Actually I don't give a shit how you decide to play! Do whatever you want! Turn every ammo object into an Ultrabelt for all I care!)"""
    *""" Added the Ultra Belt and Blood Keg. The former gives you a 10,000-charge shield belt, and the latter boosts your health to 999 instantly. Both of these are designed for the extremely intense combat in Batshit Insane's levels."""
    *""" Added the Barrel 'O Suns weapon. As you might have guessed, this is just like a Barrel 'O Fun, but it fires, well, suns: giant LRPC balls that move way faster (but do the same amount of damage). Demon Chef carries Barrels 'O Suns around for his sun-slammin' needs when he has to torture dumbfucks who are damned to his world; this item is one of his spares. Primary makes the suns fly straight, and alt makes them fall, which tends to make them spread out a lot more in certain cases, since the shockwaves make the airborne suns rise up again and then dip back down. EXTREMELY POWERFUL WEAPON CAPABLE OF NEUTRALIZING HORDES (100+, dead serious) OF *SUPER CHARGERS* IN ONE BLOW! DO NOT THROW THIS ANYWHERE NEAR A WALL OR YOU WILL BE COMPLETELY AND UTTERLY VAPORIZED!"""
    *""" Added the Juggernaut Cannon, a stupidly powerful gun that pretty much makes you into a Demon Juggernaut. The primary fires demon bolts EXTREMELY RAPIDLY (though they still use 3 ammo each) and the alt fires a Demon Rocket, which explodes into a clusternuke explosion for insta-killage of almost everything non-demon. This rocket uses 10 ammo."""
    *""" Clusterfucker flak now has a dynamic blast radius; that is, the longer it flies, the larger its blast radius is! Great for saturating large areas at longer range now. Also, at very close range, you won't blow yourself up. Point blank is fair game, though."""
    *""" Blood Boxes now give health up to 500, making them more desirable (and a better reward for killing MP Demon Juggernauts)."""
    *""" Fixed weirdly huge EXU gun collision issues for most of the weapons."""
    *""" Fixed Pupae who had Green Foot Syndrome (missing a MultiSkins(0) entry)."""

    ![1-22-2007]: v1.13 - MONSTERSPAWN 3.02 IS OUT! HOLY FUCKING YES!!!
    """Now you can have up to ***1200*** (20 lists of 60) DIFFERENT CREATURES to choose from. THAT IS A FUCKING LOT. Definitely grab this if you don't have it yet! Also, I've worked on fleshing out the different pawn "families" (fire, bio, freeze, etc.) and stuff. 33 new enemies are available! I made a lot of major gameplay tweaks, too; check below. The EXU Shotty is also done, which completes the arsenal! FUCK YES!"""

    !!!!""""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    |AssassinMedicMercenary |A tougher, combat-ready Medic Merc with more to offer.|
    |CrazyQueen |Blows up into Crazy Pupae on death.|
    |DemonCommando |Shoots Pentagrams in spray; Demon Bolt in rocket mode.|
    |DemonCommandoElite |Crazy-dangerous. Fires nothing but Demon Bolts.|
    |DemonJuggernaut |HOLY SHIT HIT THE DIRT, OH GOD HELP ME OH GOD OH GOD|
    |DemonJuggernautMP |Drops a Blood Box. FUCK THIS THING HOLY FUCKING SHIT|
    |FirePupae|
    |FireQueen	 |Splodes into many Fire Pupae on death.|
    |FireSlith |Splodes into some Fire Pupae on death.|
    |IceQueen |Splodes into many Ice Pupae on death.|
    |LaserBitchMercenary |Spews EXUDAmmo1 (splash enabled) lasers all over.|
    |NuclearSlith |Splodes into some Nuclear Pupae on death.|
    |PulseMercenaryElite|
    |PulseMercenaryEliteMP |Drops an ~EXUUnrealHealth.|
    |PulseMercenaryMP |Drops an ~EXUUnrealHealth.|
    |PulseSkaarjMP |Drops an Energizer Ball.|
    |ShitBrute|
    |ShitBruteMP |Drops a Shit Helm.|
    |ShitPupae|
    |ShitQueen |Launches Shitballs.|
    |ShitSlith |Spits Shitglobs. Splodes into some shit pupae on death.|
    |ShockMercenaryElite	 |Causes massive shock combos around itself.|
    |ShockMercenaryEliteMP |Drops an ~EXUUnrealHealth.|
    |ShockMercenaryMP |Drops an ~EXUUnrealHealth.|
    |ShockPupae|
    |ShockQueen |Fires Shock Rockets and splodes into Shock Pupae.|
    |ShockSlith |Fires Shock Rockets and splodes into Shock Pupae.|
    |SlimePupae|
    |SlimeQueen |Fires Slime Rockets and splodes into Slime Pupae.|
    |SlimeSlith |Fires Slime Rockets and splodes into Slime Pupae.|
    |SteelPupae|
    |SteelQueen |Fires Flak Grenades and splodes into Steel Pupae.|
    |SteelSlith |Fires Flak Grenades and splodes into Steel Pupae.|

    !!!!Other changes:
    *""" EXU's official shotgun is done! Hell yes. UA cranked out the code and I added the finishing touches, and now it's awesome. Also added the EXU: Add Combat Shotgun mutator and defined the EXU Shotty (aka Combat Shotgun) in EXU.int so you can use it with ArenaMatch or whatever."""
    *""" Made Nuclear Pupae smaller, which is better for gameplay."""
    *""" Changed some of the items in EXU Pinata's health drop; replaced the EXU Keg with the Mini Keg and the EXU Box with EXU Unreal Health."""
    *""" TurboPulseSkaarj is now known as just the PulseSkaarj. Same with PulseSkaarjMP."""
    *""" Added Blood Box and Carbonated Blood health items. Demon Fucker Brutes drop the latter, but the former is pretty much SP-only right now. Also added EnergizerBallVI, VII, VIII, and IX. Also added MiniKegII item; this one has twice the juice!"""
    *""" EnergyAR primary and secondary projectiles, medium plasma balls (RFPC alt fire), and LRPC plasma balls no longer detonate when impacting gibs. This makes gameplay much more realistic; after all, a giant ball of plasma or a high-powered laser should be able to easily penetrate small chunks of flesh, right? They DO explode on contact with carcasses and other decorations (and live creatures, of course)."""
    *""" Massively improved the Hell Gun. The primary now fires high-power Demon Bolts that move quickly and do a large amount of splash damage, as well as spawning a number of smaller, weaker, slower-moving pentagrams. A direct hit can cause all of the pentagrams to spawn directly into the target, which really adds up and turns the projectile into a hugely powerful one. The alt fire has been slowed down somewhat, but its power has been boosted. Overall, it is much better for multiplay and I'm sure it will hold up well in SP (as it has saved my ass many times against creatures and bots alike in MP). The new primary sound effects kick ass, too."""
    *""" EXU Add Gun mutators are here and functional! HELL YES! This means you can play with EXU2 guns in MP via EXU Gun Swap, OR you can just add them to your inventory from the start, Excessive-style! I'm pretty sure they will work with Excessive guns too, but I haven't tried that yet."""
    *""" Decreased the Hyper Flakker's pickup ammo amount to 50 and the Hyper Cells to 25. This is for balance."""
    *""" Made a PiddledoperMP specifically for mutiplay games. It's slightly slower and significantly weaker to make it act more like a sidearm and less like an overpowered primary weapon, which is how the normal Piddledoper acts in MP. Not anymore!"""
    *""" Added the DemonClip ammo item for the Hell Gun. It's worth half as much as a Box of Souls."""

    ![1-2-2007]: v1.12
    """Added some creatures (5) and adjusted some stuff! Huzzah!"""

    !!!!"""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    |EnergyMercenary|
    |EnergyMercenaryMP |Drops an Energy AR.|
    |LargeMargeMercMP |Drops the Large Marge. Why would you use this?|
    |PulseMercenary|
    |ShockMercenary|

    !!!!Other changes:
    *""" Fixed the Giant Fuckoff Rocket sound effects to prevent crashes on some machines. They were 16 bit. Stupid. Stupid. I should have fixed this ages ago!"""
    *""" Added some Chaos Flares: Flakball Flare, Hyperball Flare, Rocketball Flare, and Shockball Flare. These are extremely powerful when used correctly (or even incorrectly, as is the case with the Hyperball Flare)."""
    *""" Freeze Flares now launch 20 Freeze Blasts (Freezer alt) instead of Ice Blasts (Freezer primary). Put in the right spot, these flares SERIOUSLY fuck shit up now. Awesome. I threw a bunch in a huge test room and shot them, and it looked like it was fucking snowing in there. Snowing explosive frozen death balls."""
    *""" The Freezer's alt fire got a makeover and both firing modes got a badly-needed power boost. Hooray! Now the alt fire uses 5 ammo per shot and fires more slowly than the primary, but it launches a normal-sized freeze ball that acts just like the primary aside from one major difference: it can bounce off of surfaces up to FIVE TIMES! And, as a bonus, each impact causes an explosion, spawning Mini Ice Blastlets that do their own splash damage! Hell yeah! You can really fuck shit up with the Freezer now. The Hell Gun is getting a makeover, too, so stay tuned."""
    *""" Adjusted EXUMercenary so that all subclasses have an alt fire avaiable to them. Most of them use the same projectile for the SpawnRocket function, but some, like the Hyper Mercenaries and most modern EXU2 mercs, use a more powerful attack in the single-shot SpawnRocket mode. Watch out; this makes them MUCH more dangerous! Hyper Mercenaries now fire whole Hyper Grenades!!"""
    *""" Tempest missiles (Missile Mercenary, Missile Skaarj, etc) aren't set to bProjTarget=True anymore. Not sure why it was to begin with. Anyway, those missiles won't detonate your projectiles prematurely."""
    *""" UA fixed the Bio Flares so they don't just insta-splode! They are more useful now. Thank God for that."""
    *""" Added the Large Marge. It's just an LRPC on speed; I only use it for testing. It's really so ridiculously overpowered that it's not even remotely fun to seriously use. Also, you will kill yourself repeatedly with it. Don't summon this."""

    ![12-26-2006]: v1.11
    """Bug fixery and cosmetic changes. Added two mutators for MP games."""

    !!!!Other changes:
    *""" Shrunk the Pentagram texture to (hopefully) prevent D3D mipmapping crash problems (thanks dude who emailed me)."""
    *""" Got rid of a lot of the ugly, not-completely-transparent hues on the edges of some explosion spirte textures, making them not look like squares (Pentagrams too). This process isn't done yet; I have to find the other problematic textures."""
    *""" Colorized the Clusternuke shockwaves to be red; same for Demon Queen/Slith death explosions, Freeze, and Crazy Slith death explosions. Those have a subtle blue and purple hue, respectively."""
    *""" Set all EXU2 guns and ammo classes to automatically have zero AmbientGlow. This is because I'm too lazy to go and manually set that on ALL the items in EXU2: Batshit Insane, and it doesn't look that much worse in UT. It's actually more realistic this way. Also, all of the guns are set to bRotatingInventory=False. Besides, playing with EXU2 guns in UT is a recipe for disaster unless you use damage scaling or an arena mutator like Arena Match."""
    *""" Added EXU Gun Swap mutator to switch all (except for the Sniper Rifle right now, which will be replaced by the EXU Shotty) UT guns and ammo with EXU versions."""
    *""" Added EXU Health Charger mutator to give you health that recharges 5 points every 0.5 seconds (0.1 second faster than ExcessiveTime)."""

    ![12-25-2006]: v1.10
    """Semi-SA release that didn't get much attention so I just kept expanding on it! Also released with the first demo of EXU2 - Batshit Insane. I added a fuckton of new stuff, including lots of EXU1 pawns that I never bothered to put in EXU2 at first. *82* new pawn classes are available (hell yes!), as are a few projectile and other unimportant classes (like carcass types) used by said pawns."""

    !!!!"""New content: (As always, "summon EXU.<ClassName>" or place EXU.<ClassName> into your MonsterSpawn.ini.)"""
    |color:black; ''======== PAWN CLASS ========'' |color:black; ''================ DESCRIPTION ================'' |h
    |BarrelSlithMP |Drops a Barrel O' Fun.|
    |BehemothTitan |From ~EXU-DasaCellars.|
    |BioSkaarj |Shoots bio globs.|
    |BioSkaarjMP |Drops ~EXU Bandages.|
    |BioSWAT |Shoots Slime Rockets.|
    |BlueBag |Like an Extreme Shock Berserker in Gasbag form. Weird.|
    |BlueBagMP |Drops an Energizer Ball.|
    |BlueSlith |Seen in an ~EXU1 Bonus Map.|
    |CrazySlith |Explodes into Crazy Pupae on death.|
    |CrazySlithMP |Drops an Energizer Ball.|
    |DemonChefsCousin |Good Lord don't summon this.|
    |DemonGasbagMP |Drops an Energizer Ball.|
    |DemonPolice|
    |DemonSWAT |Shoots a Demon Rocket.|
    |DemonTentacle|
    |EnergyGasbagMP |Drops an Energizer Ball.|
    |ExtremeLaserLord |From ~EXU-ExtremeDark.|
    |ExtremeLaserLordMP |Drops an Energizer Ball.|
    |ExtremeShockBerserker |From ~EXU-ExtremeDark.|
    |ExtremeShockBerserkerMP |Drops an Energizer Ball.|
    |FatHugeMerc |Stupid, fat-huge Mercenary from ~EXU-Noork.|
    |FireSkaarj |Shoots fireballs and runs around all crazy like.|
    |FireSkaarjMP |Drops an Energizer Ball.|
    |FlakPolice |From ~EXU-NaliLord.|
    |FlakSWAT |Shoots Flak Rockets.|
    |FlakTentacle|
    |FreezeBagMP |Drops an Ice Cube.|
    |FreezeSlithMP |Drops an Ice Cube.|
    |FuckerSkaarjBerserker |From ~EXU-SkyBase.|
    |FuckerWarlord |From ~EXU-NaliC.|
    |FuckoffKrall |Fires the Giant Fuckoff Rocket.|
    |FuckoffMercenary |Fires lots of Giant Fuckoff Rockets.|
    |FusionTentacle|
    |GooBrute |Seen in an ~EXU1 Bonus Map.|
    |GooBruteMP |Drops an Energizer Ball.|
    |[[Hyperbitch]] |Like a Bitchfucker, but shoots lasers.|
    |HyperbitchMP |Drops an Energizer Ball.|
    |HyperGasbagMP |Drops an Energizer Ball.|
    |HyperPolice |Shoots Dispersion Level 5 lasers with splash damage.|
    |HyperSWAT |Shoots Hyper Rockets.|
    |IcePupae|
    |InvisibleFireTentacle|
    |InvisibleMiniGrenadeBrute |From ~EXU-DasaPass.|
    |JerkMerc |Asshole. Fires Excessive Razor Alt blades.|
    |LunaticMP |Explodes into Energizer Balls on death.|
    |MegaShockSkaarjLord |From ~EXU-QueenEnd.|
    |MiniFlakFucker |From an ~EXU1 Bonus Map.|
    |MiniMissileBrute |Launches Tempest Missiles.|
    |MiniRazorBrute |From ~EXU-Dark.|
    |MiniRocketBrute |From ~EXU-ISVDeck4.|
    |MiniSkaarj |From ~EXU-Dark.|
    |NuclearBag |Vomits fusion projectiles and glows. VERY aggressive.|
    |NuclearBagMP |Drops an Energizer Ball.|
    |NuclearPupae|
    |NuclearSkaarj|
    |NuclearSkaarjMP |Drops an Energizer Ball.|
    |PiddledoperMercenary|
    |PiddledoperMercenaryMP |Drops a Piddledoper.|
    |PlasmaBag |Spits a medium plama ball (RFPC alt fire). DANGEROUS!|
    |PsychoRazorTentacle |From an ~EXU1 Bonus Map.|
    |PulseSkaarj |Skaarj Warrior that shoots Excessive pulse balls.|
    |PulseSWAT |Shoots Pulse Rockets.|
    |QueenQueen |Spits out yellow fireballs that spawn Vermin Queens.|
    |RadioactiveBileQueen |Fires a bunch of fusion balls.|
    |RazorIceSkaarj |From ~EXU-SkyTown.|
    |RedSkaarj	 |Seen in an ~EXU1 Bonus Map.|
    |RocketTentacle|
    |ShitMercenary|
    |ShitMercenaryMP |Drops the Shitgun.|
    |ShockSkyTentacle |Fires Shock Rockets.|
    |ShockSWAT |Fires Shock Rockets.|
    |ShrapnelMercenary |Spews Excessive Flak Chunks. Watch out for this jerk.|
    |SkaarjSkaarj |Fires green projectiles that spawn Vermin Skaarj.|
    |SlimerMercenary|
    |ThreeHundredthPawn |What the Christ?|
    |TurboFuckerBrute |More powerful Fucker from ~EXU-ExtremeDark.|
    |TurboFuckerBruteMP |Drops Fucker Cola.|
    |TurboMiniFuckerBrute |More powerful Mini Fucker from ~EXU-ExtremeDark.|
    |TurboPulseSkaarjLord |From ~EXU-ExtremeEnd.|
    |VerminQueen |Small. Spits a bunch of yellow fireballs.|
    |VerminSkaarj |Small. Shoots green fireballs.|

    !!!!Other changes:
    *""" Added Battle Seeds inventory item for SP. When activated, a Battle Seed will spawn some instant-grow Battle Fruit. Great for heated combat."""
    *""" Turbo Tentacles' projectiles have been majorly boosted."""
    *""" New gun: the EnergyAR. An incredibly powerful weapon inspired by Total Annihilation turrets; good ROF, no splash damage. Very effective at taking down large targets with the alt fire and drilling through small crowds of soft targets with the primary. Coupled with battle flares, it does a wonderful job, but is prone to missing at longer ranges due to its precise nature."""
    *""" New gun: the Shitgun. A bastard child of the UT Biorifle and the Excessive Biorifle, but fires shit. Quite powerful."""
    *""" New gun: the Piddledoper, EXU's rather powerful sidearm. Can be carried akimbo, but watch out -- its ammo drains rapidly. It also does splash damage, so don't use it at point-blank range. Ammo recharges."""
    *""" Ice Cube health item (+30) added."""
    *""" Demon Slith explode into Demon Pupae and Freeze Slith explode (shatter) into Ice Pupae. Psycho Queens (if you manage to kill them) -> Turbo Pupae."""
    *""" Added BarrelNade (Barrel O' Fun) single-use weapon. Primary fire = lasers fly; Alt Fire = lasers fall."""
    *""" Added Energizer Balls as a health item to be dropped by energy-based Skaarj (ex. HyperSkaarjMP) and maybe some other shit."""
    *""" Flak Brutes / Mercenaries have been significantly upgraded to fire three bursts of Clusterfucker-style flak instead of one. Also, their projectiles have proper spawn sounds now. Flak Mercenaries also shoot six bursts at once when they aren't firing a spray."""
    *""" Demon Queens now explode into a pile of Demon Pupae on death! Anywhere between 4-16, I think."""
    *""" Bio Police, Shock Police, Pulse Police, Hyper Police, and Flak Police now have SWAT subclasses that fire rockets. Non-SWAT variants just shoot the single projectile, EXU1-style. The rocket classes so far: SlimeRocket, ShockRocket, FlakRocket, PizzaRocket, PulseRocket, and HyperRocket."""
    *""" The Clusternuke Land should be updated to take into account the new SWAT / Police types, but it isn't gameplay-critical."""
    *""" Some generic code improvements and optimizations; culled some unnecessary lines."""
    *""" Updated some pawns like the EXU Skaarj Assassin to make them better and more EXU1-like."""

    ![8-02-2006]: FIRST PUBLIC RELEASE!
    """Includes everything found in EXU2-SummonsList.txt, and then the effects and shit you don't need to bother to summon. In future releases, this file will contain a list of all the NEW summonable classes that have been added to EXU2-SummonsList.txt for your convenience. It will also act as a version tracking log."""

    !~EXU2: Batshit Insane
    !!...\System\
    {{indent{
    ~D3D10Drv.dll
    ~EXUOpenGlDrv.dll
    ~fmodex.dll
    ~RMusicPlayer.dll

    ~EXU.ini
    ~RMusicPlayer.ini
    [[uelite.ini]]

    ~D3D10Drv.int
    [[EXU.int]]
    [[EXU2BI.int]]
    ~EXUOpenGlDrv.int
    ~RMusicPlayer.int
    ~uelite.int

    [[EXU.u]]
    [[EXU2BI.u]]
    [[EXU-Sounds.u]]
    [[EXU-Textures.u]]
    ~RMusicPlayer.u
    [[UARain.u]]
    [[uelite.u]]
    }}}

    !!...\Textures\
    {{indent{
    ~EXU2EvilizedTexes.utx
    richrig.utx
    ~SoldierSkins_blackguard.utx
    }}}

    !!...\Maps\
    {{indent{
    ;[[EXU2-BI00-Menu.unr]]
    ;[[EXU2-BI01-Damnation.unr]]
    ;[[EXU2-BI02-InfernalFalls.unr]]
    ;[[EXU2-BI03-Shitstorm.unr]]
    ;[[EXU2-BI04-SoulStorage.unr]]
    ;[[EXU2-BI05-CursedPassage.unr]]
    ;[[EXU2-BI06-Gauntlet.unr]]
    ;[[EXU2-BI07-FrostclawAccess.unr]]
    ;[[EXU2-BI08-FrostclawOutpost.unr]]
    ;[[EXU2-BI09-BitterBridge.unr]]
    ;[[EXU2-BI10-TheDoomhouse.unr]]
    ;[[EXU2-BI11-Corruption.unr]]
    ;[[EXU2-BI12-DoomArena.unr]]
    ;[[EXU2-BI13-Darkness.unr]]
    ;[[EXU2-BI14-Blackness.unr]]
    ;[[EXU2-BI15-Highlands.unr]]
    ;[[EXU2-BI16-Telefire.unr]]
    }}}

    !!...\Music\
    {{indent{
    ~Cybernetika - Atropos - 03 - Starchild.mp3
    ~Cybernetika - Colossus - 01 - Gagarin.mp3
    ~Cybernetika - Colossus - 04 - Anomaly.mp3
    ~Cybernetika - Colossus - 05 - Ghost Of Midas.mp3
    ~Cybernetika - Colossus - 07 - Forged for Battle.mp3
    ~Cybernetika - Nanospheric - 03 - Earthshock.mp3
    ~Cybernetika - Scythe of Orion - 01 - Lost Technology.mp3
    ~Cybernetika - Scythe of Orion - 03 - Tyrannis.mp3
    ~Cybernetika - Scythe of Orion - 05 - Cryostasis.mp3
    ~Cybernetika - Chrono Wave.mp3
    ~Cybernetika - Destroyer.mp3
    ~Cybernetika - Valkyrie Chunk.mp3
    ~Cybernetika feat Bawss - Millipede Remix.mp3
    ~EXU2 - You Died.mp3
    ~EXU2 - Silence.mp3
    ~Nicolas Eymerich - Curse of the Inner Self.mp3
    ~Nicolas Eymerich - Pernicious Glory 3.mp3

    ~Nali.umx
    ~Opal.umx
    ~SpaceMarines.umx
    ~Unreal4.umx
    ~Warlord.umx
    }}}

    !!...\Sounds\
    {{indent{
    ~mier1snd.uax
    }}}

    - - -

    Here are detailed installation instructions for ~EXU2. You can skip ahead to the section most relevant to you if you already have patches, Bonus Pack 4, and Oldskool installed and configured.

    !Quick Instructions:
    #Extract the EXU archive to your ..\~UnrealTournament\ directory
    #Copy msvcr71.dll to ..\Windows\System32\ on 32-bit Windows or ..\Windows\~SysWOW64\ on 64-bit IF YOU NEED TO. This fixes an error message with ~RMusicPlayer every time you start UT, but not everyone needs it. The error doesn't actually break the game, either, and music still works anyway.
    #Start a new Singleplayer Game, select ~EXU2: Batshit Insane and commence the destruction.

    !Section 1: Setup on a brand new Unreal Tournament install
    #Install UT from your CD or Steam or whatever
    #Download and install UT Patch 436. This is an .exe that will update your game to the latest official version. The Steam version probably already has this.
    #Install UT Bonus Pack 4* (included with EXU).
    #*''NOTE:'' The file is a UMOD, which is very easy to install assuming your file associations are set up properly. Just double-click it, point it to your UT install, and go. If you cannot load the UMOD file because the extension isn't registered, run ~UTRegFix.exe (also included). This will add registry keys for .umod files and allow you to run them. If you think ~UTRegFix.exe is a Satanic plot to blow up your computer, you can download a UMOD browser tool and manually extract the files.
    #Install Oldskool Amp'd v2.39 (included). This is also a UMOD, so extract Oldskool239.umod and run it.
    #After installing Oldskool, set it up in-game. Launch UT, and under the Mod menu item, you should see an "Activate Oldskool" choice. Do that. You should then be able to see Oldskool menu entries, such as Start New Singleplayer Game and Oldskool Configuration.
    #Proceed to Section 2.

    !Section 2: Configuring Oldskool Amp'd v2.39
    #Go to Options >> Oldskool Configuration:
    #*''Single Player:'' Most of these settings do not apply, but ~SinglePlayer ~Auto-Taunt is worth having if you use a funny voicepack, Load w/ Pause is a personal preference, and Unreal Air Control should be checked. Permanent Carcasses and Permanent Decals should not apply in EXU, but it's safer to leave them unchecked.
    #*''Keys:'' Bind Next Item, Previous Item, Activate Item, Quicksave, and Quickload to keys. Reload is not used in EXU, but other mods may require it.
    #*''Music:'' Ensure Force Music is //unchecked//.
    #*''Mutator:'' This only pertains to the Oldskool Amp'd mutator you can apply manually to your games. Not necessary for EXU.
    #*''Options:'' None of these settings are needed for EXU.
    #Proceed to Section 3.

    !Section 3: Configuring UT:
    #Go to Options >> Preferences >> ''Video'':
    #*This is very important! Be sure your video driver is either ~EXUOpenGL or ~D3D10+. To select a video driver:
    #**Click "Change" on the Video tab
    #**UT will ask you to restart, then show you a screen asking if you want to show certified devices or all. Click "Show all devices."
    #**You should see ~EXUOpenGL Support and ~Direct3D10 Support listed. Pick one, then click Next, Next, and Run.
    #**UT should now be running a more advanced renderer that works better, assuming your machine wasn't built in the 90's. If you notice weird graphical anomalies or glitches, go to Options >> Advanced Options. There, under Rendering, expand the device you are using and play around with the settings. [[Chris Dohnal's page|http://www.cwdohnal.com/utglr/settings.html]] outlines what each setting does, so be sure to check that for ~OpenGL. [[D3D10 settings|http://kentie.net/article/d3d10drv/]] are covered a bit at the author's webpage.
    #*Ensure Show Decals and Use Dynamic Lighting are checked, Color Depth is 32 bit, and everything else is on High. Tweak Brightness and Resolution to taste.
    #*Set Min Desired Framerate to 30 or so. This will tell UT to spawn less important effects if your framerate dips below the threshold. If you have a really beefy computer, you can set it to zero, but note that the engine itself is fairly old and even on a modern system, things can chug during heavy firefights. Especially in EXU.
    #''Game, Audio, Input, HUD:'' Set up how you like.
    #Proceed to Section 4.

    !Section 4: EXU Setup
    #''Unpack the EXU Archive:'' At this point you've probably already unpacked the EXU .zip to your UT folder, but if not, do so. If you aren't sure where a file belongs or things get misplaced, consult the [[EXU2 Files List]].
    #''Configure ~RMusicPlayer's volume:'' Start a new game. You should hear music begin playing; if it's too loud/quiet, go to Mod >> ~RMusicPlayer :: Volume Control and drag the slider to where you want it, then RESTART UT. If you don't restart, the slider will reset to whatever the last set value was (in this case, the default) when you change maps. Restart UT every time you change the volume slider if you want it to stick; otherwise, it will only persist until the next music event or level change. Pretty sure this is a bug, but it's an easy enough workaround.
    #''Start the Game:'' Go to Game >> New Singleplayer Game and select ~EXU2: Batshit Insane from the list, then begin!

    !Recommended Stuff
    #Go back to Options >> Controls and check out the ~EXU2 Keybindings. I highly recommend binding these to hotkeys:
    #*Armor Seeds
    #*Combat Seeds
    #*Firestorm Generator
    #*Missile Backpack
    #*Old Searchlight
    #*~EXU Jumpboots
    #*Jump Boots are especially valuable on speed-dial, as they can make escaping a firefight or reducing falling damage way easier.
    #Bind UT's Translocator / The Extractor weapon group (1) to a key or extra mouse button for quick selection
    #Bind Unreal's Translator to a key. This isn't doable via the main UT menu, but can be done easily enough:
    #*Go to Options >> Advanced Options (or type "preferences" into the UT console, accessible with the tilde [~] key)
    #*Go to Advanced >> Raw Key Bindings
    #*Find the key you want to use for the binding and type in "activatetranslator" for that key, then close the window.

    - - -

    !@@Updated Jan. 24, 2013, v5.03@@
    ''Note that this list may be outdated, as many bugs are identified after a release. For the latest bug notes, check [[this thread|http://www.unrealsp.org/forums/viewtopic.php?f=37&t=2668]] on the ~EXU2 Forums.''

    !!CRITICAL ~GAME-DISRUPTING BULLSHIT
    *Saves will sometimes get corrupted. This isn't an EXU bug; it's the engine fucking up. [[See here for the fix|SaveBugs]].
    *Setting ~MaxDecals higher than 1000, then saving, will crash UT. This is an engine bug with lists >1000 entries. Leave ~MaxDecals at 1000 or lower.

    !!General Issues
    *Some wiki content is out of date, particularly the actor classes page.
    *~RMusicPlayer: After setting the volume, the slider resets after loading saves or switching levels if you don't restart UT first. To fix, simply choose the volume you want, save, and restart UT. It will stick until you make another change. Repeat as necessary.
    *~RMusicPlayer: You may get an error message about missing msvcr71.dll every time you load a map with mp3 music. The game will otherwise work (even the music), but it's annoying. To fix, copy the included msvcr71.dll to ..\Windows\System32\ on 32-bit Windows or ..\Windows\~SysWOW64\ on 64-bit.
    *Coop bugs: caused mostly by the engine itself, and many are unfixable. For your first playthrough, I recommend playing offline so you have a (mostly... hopefully) bug-free experience.
    *If you use ~EXUOpenGL.drv as your renderer, set ~bUseS3TC=True in your preferences. ~EXUOpenGL (and possibly Chris Dohnal's ~OpenGL renderer) will downsample any 512x512 textures to 256 if ~S3TC is turned off. Enabling it will prevent this behavior while we fix the bug / find a better ~OpenGL renderer. ~D3D10 doesn't seem to have this problem.

    !!Gameplay
    *Some pawns seriously fuck up their indirect fire aim and miss by a mile while otherwise being competent shots. Mercenaries are also unable to aim properly while standing still.
    *HUD five-item display does not "wrap" the inventory list, currently, so when you reach the end of your list, it displays only four or three items instead of looping back to the beginning.

    !!Campaign
    *Your second Piddledoper disappears after switching maps. Because I enjoy this unintentional balance mechanism, it won't be fixed. A Legless Krall stole it.

    ''If you encounter anything not listed in here, let me know ASAP in the latest release thread on the [[EXU2 Forums!|http://www.unrealsp.org/forums/viewforum.php?f=37]]''

    ~EXU2: Batshit Insane is the singleplayer campaign for ~EXU2. This article will eventually cover much more detail about it! But basically, well, you fight demons and stuff.

    !!!Maps (Currently):
    {{indent{
    ;[[EXU2-BI00-Menu.unr]]
    ;[[EXU2-BI01-Damnation.unr]]
    ;[[EXU2-BI02-InfernalFalls.unr]]
    ;[[EXU2-BI03-Shitstorm.unr]]
    ;[[EXU2-BI04-SoulStorage.unr]]
    ;[[EXU2-BI05-CursedPassage.unr]]
    ;[[EXU2-BI06-Gauntlet.unr]]
    ;[[EXU2-BI07-FrostclawAccess.unr]]
    ;[[EXU2-BI08-FrostclawOutpost.unr]]
    ;[[EXU2-BI09-BitterBridge.unr]]
    ;[[EXU2-BI10-TheDoomhouse.unr]]
    ;[[EXU2-BI11-Corruption.unr]]
    ;[[EXU2-BI12-DoomArena.unr]]
    ;[[EXU2-BI13-Darkness.unr]]
    ;[[EXU2-BI14-Blackness.unr]]
    ;[[EXU2-BI15-Highlands.unr]]
    ;[[EXU2-BI16-Telefire.unr]]
    }}}

    System package containing code and sound/texture assets used for [[EXU2: Batshit Insane]]. Contains HUD elements and a number of other campaign-specific things. Requires [[EXU.u]] and all packages that EXU.u depends upon.

    !!Dependencies
    [[UARain.u]], [[EXU.u]] (<<tiddler [[EXU.u##Dependencies]]>>)/%
    !end Dependencies
    %/

    stuff

    ~EXUHealth has support for custom glowy overlay effects (ex: BloodBox). The glow texture is automatically overlaid ONLY IF ~MultiSkins[7] is not None. It inherits the owner's mesh, fatness, scale, etc. on its own. Be sure that the ~DrawScale is the same as the ~PickupViewScale (as usual), or else the overlay scale will be wrong! The overlay scale is inherited from ~DrawScale.

    To customize the parameters for the overlay actor itself (which defaults to STGlow), override the tick function.

    !The Screamer Missile Launcher
    This heavy-duty missile launcher is used by Polaris heavy infantry for anti-air and anti-tank duties. The primary fire and alternate fire both launch a single Screamer missile, though the primary allows for missile locks.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~EXULAW |
    |''Primary Fire:'' | Seeking Warhead |
    |''Alternate Fire:'' | Dumbfire Warhead |
    |''Range:'' | Very Long |
    |''Ammo Type:'' | [[Screamer Missile|EXULAmmo]] |
    |''Ammo Capacity:'' | 5 |
    |''Ammo Usage:'' | 1 |
    |''Damage Output:'' | Very High |
    |''Special Features:'' |color:red; - N/A - |

    ''PRIMARY FIRE:'' Launches a Screamer missile. If the reticle is pointed at a single target within lock range for more than a couple of seconds, a lock will be established, and the warhead will seek the locked target when fired.

    ''ALTERNATE FIRE:'' Shoots a dumbfire Screamer missile.

    ''NOTES:'' A good choice for softening up hard targets or destroying small crowds. Beware the large splash radius and shrapnel.

    A very complex pawn yo

    !The Combat Shotgun
    This five-barreled Demonic anti-personnel weapon combines two of history's most revered firearms: the shotgun and the minigun. It can unload all of its chambers at once for a massive, front-loaded kick-to-the-face, or it can spin up its barrels and fire one shell at a time in rapidfire mode. With its armor-piercing Bruteshot pellets, the Combat Shotgun can utterly annihilate most foes at short range, often with a single blast.

    @@Note that the minigun fire mode was never completed for the EXU Shotty, but you can experiment with it via EXU.~MegablasterShotty for fun@@

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~EXUShotty |
    |''Primary Fire:'' | Bruteshot Burst |
    |''Alternate Fire:'' | Minigun |
    |''Range:'' | Medium |
    |''Ammo Type:'' | [[Bruteshot Shells|EXUShottyAmmo]] |
    |''Ammo Capacity:'' | 555 |
    |''Ammo Usage:'' | 25 / 5 |
    |''Damage Output:'' | High |
    |''Splash Damage:'' |color:red; - N/A - |
    |''Special Features:'' | Minigun |

    ''PRIMARY FIRE:'' Fires five Bruteshot shells at once, resulting in a wide spray of 25 armor-piercing pellets. In minigun mode, fires a single shell with every trigger pull.

    ''ALTERNATE FIRE:'' Spins up the barrels for minigun mode. Holding the alternate fire trigger keeps the barrels spinning.

    ''MINIGUN:'' When minigun mode is engaged, the alternate fire will spin the barrels while the primary will fire shells. The rate of fire depends on how fast the barrels are currently spinning, allowing for variable fire rates. Semi-automatic fire is possible even while the barrels spin.

    ''NOTES:'' The primary fire makes short work of tough enemies up close. Engaging the minigun mode allows for rapid-but-controlled firing against aerial targets or distant enemies, dealing less damage but conserving ammo. The barrels can be spun manually even when not firing, allowing a shooter to fight in rapidfire mode at a moment's notice. Beware, though, that while the gun is spinning down from minigun mode, it will continue to fire single shells until the speed has stabilized. The spin-up and spin-down motions are when the shooter is most vulnerable due to the limited damage output.

    bunch of useful shit

    !The Translocator
    While not a weapon per se, the Translocator can be used as one, and it is an extremely useful navigation tool. It allows for combat-scouting, fast escapes to safe zones, and traversal of large spaces in a fraction of the time.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | Botpack.Translocator |
    |''Primary Fire:'' | Launch / Recall Disc |
    |''Alternate Fire:'' | Teleport to Disc |
    |''Range:'' | Any |
    |''Ammo Type:'' |color:red; - N/A - |
    |''Ammo Capacity:'' |color:red; - N/A - |
    |''Ammo Usage:'' |color:red; - N/A - |
    |''Damage Output:'' | Instagib or None |
    |''Special Features:'' |color:red; - N/A - |

    ''PRIMARY FIRE:'' Launches a Translocator disc or recalls a previously-launched disc. WARNING: If the disc takes damage, attempting to recall the disc will kill you!

    ''ALTERNATE FIRE:'' Teleports to a placed disc. WARNING: If the disc takes damage, attempting to teleport to it will also kill you!

    ''NOTES:'' The Translocator is best used as an exploration and escape device, but is perfectly capable of killing most enemies instantly. If a disc lands on an enemy and you teleport into it, the enemy will be reduced to gib chunks in a split second. However, many enemies are resistant to Translocator discs and will actively fling them away. Some enemies even destroy the disc when it is repulsed, so use caution when probing unusual targets. Always watch for the orange glow on the disc; this indicates that you can safely teleport to or recall it.

    /% special flags for the class tree go here
    flags: {{{!}}}
    %/

    the brains of any turret

    !!Known issues
    test

    stuff

    components are basically a turrets equivalent of the weapon/tournamentweapon classes, turrets are actually fully functional right now, but making turret weapons (components) is much like making normal weapons before lazyweapon was introduced
    the exuturretguncomponent will eventually become an equivalent of lazyweapon for turret guns

    !The Energy AR
    The Energy AR is a high-precision, high-damage energy projector used by Polaris military forces. In addition to its ammunition efficiency, respectable damage output, and long effective range, the Energy AR's projectiles can pierce an unlimited number of targets.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~EnergyAR |
    |''Primary Fire:'' | Medium Piercing Bolt |
    |''Alternate Fire:'' | Heavy Piercing Bolt |
    |''Range:'' | Very Long |
    |''Ammo Type:'' | [[Energy Cell|EXUEARAmmo]] |
    |''Ammo Capacity:'' | 900 |
    |''Ammo Usage:'' | 1 / 5 |
    |''Damage Output:'' | Moderate / High |
    |''Splash Damage:'' |color:red; - N/A - |
    |''Special Features:'' | Piercing Bolts / ROF Upgrades |

    ''PRIMARY FIRE:'' Fires a single, high-speed medium energy bolt with great precision.

    ''ALTERNATE FIRE:'' Fires a single, high-speed heavy energy bolt. Slightly less precise than the primary and uses five times as much energy, but deals roughly five times as much damage.

    ''PIERCING BOLTS:'' Each energy bolt can pierce an unlimited number of enemies (although they will not pass through hard surfaces). Further, bolts that pierce more than one target will deal extra damage to any subsequent targets, and the damage dealt is increased for each target hit (up to a maximum of eight targets). If you hit nine targets, the ninth target will only take as much damage as the eighth, but will still take far more damage than the first.

    ''ROF UPGRADES:'' The Energy AR can be upgraded up to four times to increase its firing speed. Each upgrade increases the speed by 25%, so the maximum firing speed is twice the stock rate.

    ''NOTES:'' The Energy AR is one if the most reliable ranged weapons available. The primary fire is slightly more efficient than the alternate, though the alternate outputs damage at a higher overall rate. This gun is most effective against large numbers of enemies lined up in narrow choke points, especially when multiple targets can be hit by individual bolts. Hammering softer targets with the primary and hard targets with the alt is similarly potent.

    Welcome to Excessive Unreal 2's wiki! This is very, VERY, VERY WIP, even moreso than the mod right now! It's sort of a mess! Sorry about that!

    Anyway, see the menu on the left for useful things, like how to [[install the mod|EXU2 Installation]], get up to speed on [[known bugs|EXU2 Known Bugs]], etc.

    This WILL be further updated in the future! I swear to shit!

    Please visit the [[Official EXU2 Forums|http://www.unrealsp.org/forums/viewforum.php?f=37]] for more up-to-date information and happenings, including custom content made by other folks!

    [[Latest version|EXU2 Changelog]]: @@''v5.03''@@

    !The Extractor
    The Extractor is an industrial mining vacuum used to suck up slag and useless bulk. This man-portable version has been modified for ease of use in cramped environments, and for some dumb reason, it has a scope.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.Extractor |
    |''Primary Fire:'' | Continuous Suction |
    |''Alternate Fire:'' | Variable Scope |
    |''Range:'' | Melee |
    |''Ammo Type:'' |color:red; - N/A - |
    |''Ammo Capacity:'' |color:red; - N/A - |
    |''Ammo Usage:'' |color:red; - N/A - |
    |''Damage Output:'' | Very High |
    |''Splash Damage:'' | Low (Gore Blast Only) |
    |''Special Features:'' | Gore Blast |

    ''PRIMARY FIRE:'' Holding the trigger while within melee range of an enemy will suck the guts right out of them, dealing extreme amounts of damage very quickly.

    ''ALTERNATE FIRE:'' Extends the scope.

    ''GORE BLAST:'' Every bit of matter suctioned off an enemy contributes to the Extractor's storage tanks. At 100% capacity, any additional material will cause the Extractor to violently purge its containers, releasing a deluge of extremely nasty, pressurized gib mush. This gore burst does incredible damage, projecting hazardous flash bits at long range. The gib pieces also inflict splash damage. Additionally, these gibs deal no self-damage, somehow. """~Gore Magic~"""

    ''NOTES:'' Using the Extractor can prevent embarrassing self-damage incidents, conserve ammo, and provide limitless gore blast entertainment. The scope is useful for scouting out large areas and lining up shots for long-range weapons.

    this page will explain how fireoffset works
    abandon guesswork and make sure projectiles are spawned at the physically correct location without resorting to trial and error
    what "looks right" is often not correct, and may result in projectiles spawning outside the world when near floors/walls

    !The Firestorm Generator
    The

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Attack Type:'' | |
    |''Range:'' | |
    |''Capacity:'' | |
    |''Damage Output:'' | |
    |''Special Features:'' | |

    ''NOTES:''

    !The Flare Gun
    This modified grenade launcher is capable of projecting Battle Flares long distances at great speed. Depending on the Flare type loaded, the Flare Gun can range from a close-quarters support weapon to a long-range artillery piece. Note that the Flare Gun can only be selected if a Battle Flare is selected in the inventory list, though Flare types can be changed while the gun is held.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~FlareGun |
    |''Primary Fire:'' | Impact Flare |
    |''Alternate Fire:'' | Bouncing Flare |
    |''Range:'' | Long |
    |''Ammo Type:'' | [[Battle Flares|EXUCombatFlare]] |
    |''Ammo Capacity:'' |color:red; - N/A - |
    |''Ammo Usage:'' | 1 |
    |''Damage Output:'' | High to Extreme |
    |''Special Features:'' |color:red; - N/A - |

    ''PRIMARY FIRE:'' Fires a single Battle Flare set to explode on contact with any surface or creature. Flares travel with an indirect arc trajectory, albeit at great speed.

    ''ALTERNATE FIRE:'' Launches a single Battle Flare set to bounce off of surfaces. These Flares will not explode on contact with creatures, but can be shot mid-air or detonated with splash weaponry. Like the primary fire, alternate-fired flares travel with an indirect trajectory.

    ''NOTES:'' The Flare Gun excels as a support weapon, but has limited application as a primary firearm due to the relative scarcity of Battle Flares. It is best used as a tool for softening up large, heavily-defended areas from a distance or clearing out heavily-infested rooms from around a corner.

    !The Freezer

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.Freezer |
    |''Primary Fire:'' | Frozen Fireball |
    |''Alternate Fire:'' | Bouncing Frozen Fireblast |
    |''Range:'' | Long |
    |''Ammo Type:'' | [[Frozen Fire|FrozenFire]] |
    |''Ammo Capacity:'' | 900 |
    |''Ammo Usage:'' | 1 / 5 |
    |''Damage Output:'' | Moderate |
    |''Special Features:'' |color:red; - N/A - |

    ''PRIMARY FIRE:''

    ''ALTERNATE FIRE:''

    ''NOTES:''

    !The
    The

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~BarrelNade |
    |''Primary Fire:'' | |
    |''Alternate Fire:'' | |
    |''Range:'' | |
    |''Ammo Type:'' | |
    |''Ammo Capacity:'' | |
    |''Ammo Usage:'' | |
    |''Damage Output:'' | |
    |''Special Features:'' | |

    ''PRIMARY FIRE:''

    ''ALTERNATE FIRE:''

    ''NOTES:''

    To get started with this blank [[TiddlyWiki|http://tiddlywiki.org/]], you'll need to modify the following tiddlers:
    * [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
    * [[MainMenu]]: The menu (usually on the left)
    * [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
    You'll also need to enter your username for signing your edits: <<option txtUserName>>

    !The Hell Gun
    This high-powered Demonic pulse rifle is the mainstay of Hell's infantry regiments. Its main attack delivers high-yield bolts of compressed soul energy, and the secondary attack releases a powerful shockwave around the user.

    @@Note that as of v5.03, damage stacking is not yet implemented, but should be soon!@@

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~HellGun |
    |''Primary Fire:'' | Demon Bolt |
    |''Alternate Fire:'' | Hellblast |
    |''Range:'' | Long / Short |
    |''Ammo Type:'' | [[Soul Cartridge|CannedPentagrams]] |
    |''Ammo Capacity:'' | 900 |
    |''Ammo Usage:'' | 3 / 15 |
    |''Damage Output:'' | Moderate / High |
    |''Splash Damage:'' | Moderate / High |
    |''Special Features:'' | Damage Stacking  |

    ''PRIMARY FIRE:'' Fires demon bolts: high-speed, high-damage explosive energy projectiles with a long effective range. When detonating, these projectiles also release a number of slower pentagrams which can hit other targets, increasing the bolt's damage output.

    ''ALTERNATE FIRE:'' Unleashes a Hellblast, a powerful demonic shockwave, around the weapon's holder.

    ''DAMAGE STACKING:'' Every hit dealt to a target with the Hell Gun will decrease that target's resistance to Hell damage. This means that the Hell Gun will become more powerful against that specific target with every subsequent hit.

    ''NOTES:'' Demon bolts deliver the primary thrust of the Hell Gun's firepower, but can be dangerous to use in close-quarters combat. The alternate fire Hellblast, however, negates this liability; Hellblasts will not harm their instigator. This makes the Hell Gun a well-balanced tactical weapon, since switching from long- to short-range targeting is fast and simple.

    Be aware, though, that many Demons are immune to both fire modes from the Hell Gun, and some can even absorb its energy. Others, however, will take more and more damage with every hit, making this weapon a good choice against hard targets in a drawn-out battle when other weapons are unavailable or ineffective. Similarly, many energy-based enemies are inherently vulnerable to the Hell Gun and will take more damage than normal.

    !The Hyper Flakker
    Few are sure exactly what this weapon //is//, but anyone who has used it can vouch for its incredible firepower. It appears to be a piece of raw energy found exclusively in Hell, and it projects this same energy in a weaponized form. The primary fire shoots a wave of bolts in a wide plus-shaped formation, while the alt launches a single Hyper Grenade.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~HyperFlakker |
    |''Primary Fire:'' | Energy Wave |
    |''Alternate Fire:'' | Energy Grenade |
    |''Range:'' | Long / Medium |
    |''Ammo Type:'' | [[Hyper Cells|HyperCells]] |
    |''Ammo Capacity:'' | 250 |
    |''Ammo Usage:'' | 1 |
    |''Damage Output:'' | High |
    |''Splash Damage:'' | None / Low |
    |''Special Features:'' |color:red; - N/A - |

    ''PRIMARY FIRE:'' Releases a relatively slow wave composed of multiple projectiles, concentrated heaviest in the center. Hitting a target with the edges of the wave will not interrupt the other projectiles, allowing them to continue on and potentially hit more targets.

    ''ALTERNATE FIRE:'' Launches a Hyper Grenade. Hyper Grenades will, either on contact or after a few seconds, burst into 3-5 bomblets. Each bomblet will explode into a spray of energy projectiles fired in all directions, and each projectile deals splash damage.

    ''NOTES:'' The primary fire is very effective at knocking down hard targets and cutting through small groups of weaker enemies, while the alt fire excels at clearing out rooms. With luck, a single Hyper Grenade can detonate all its bomblets inside a single target, dealing massive amounts of damage. However, due to the unpredictable nature of Hyper Grenades and their submunitions, excessive use of them can be very dangerous.

    /***
    |Name|InlineJavascriptPlugin|
    |Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
    |Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
    |Version|1.9.6|
    |Author|Eric Shulman|
    |License|http://www.TiddlyTools.com/#LegalStatements|
    |~CoreVersion|2.1|
    |Type|plugin|
    |Description|Insert Javascript executable code directly into your tiddler content.|
    ''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
    !!!!!Documentation
    >see [[InlineJavascriptPluginInfo]]
    !!!!!Revisions
    <<<
    2010.12.15 1.9.6 allow (but ignore) type="..." syntax
    |please see [[InlineJavascriptPluginInfo]] for additional revision details|
    2005.11.08 1.0.0 initial release
    <<<
    !!!!!Code
    ***/
    //{{{
    version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 6, date: new Date(2010,12,15)};

    config.formatters.push( {
    	name: "inlineJavascript",
    	match: "\\<script",
    	lookahead: "\\<script(?: type=\\\"[^\\\"]*\\\")?(?: src=\\\"([^\\\"]*)\\\")?(?: label=\\\"([^\\\"]*)\\\")?(?: title=\\\"([^\\\"]*)\\\")?(?: key=\\\"([^\\\"]*)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
    	handler: function(w) {
    		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
    		lookaheadRegExp.lastIndex = w.matchStart;
    		var lookaheadMatch = lookaheadRegExp.exec(w.source)
    		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
    			var src=lookaheadMatch[1];
    			var label=lookaheadMatch[2];
    			var tip=lookaheadMatch[3];
    			var key=lookaheadMatch[4];
    			var show=lookaheadMatch[5];
    			var code=lookaheadMatch[6];
    			if (src) { // external script library
    				var script = document.createElement("script"); script.src = src;
    				document.body.appendChild(script); document.body.removeChild(script);
    			}
    			if (code) { // inline code
    				if (show) // display source in tiddler
    					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
    				if (label) { // create 'onclick' command link
    					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
    					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
    					link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
    					link.tiddler=w.tiddler;
    					link.onclick=function(){
    						this.bufferedHTML="";
    						try{ var r=eval(this.code);
    							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
    								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
    							if(this.bufferedHTML.length)
    								s.innerHTML=this.bufferedHTML;
    							if((typeof(r)==="string")&&r.length) {
    								wikify(r,s,null,this.tiddler);
    								return false;
    							} else return r!==undefined?r:false;
    						} catch(e){alert(e.description||e.toString());return false;}
    					};
    					link.setAttribute("title",tip||"");
    					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
    					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
    					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
    					link.setAttribute("href",URIcode);
    					link.style.cursor="pointer";
    					if (key) link.accessKey=key.substr(0,1); // single character only
    				}
    				else { // run script immediately
    					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
    					var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
    					try	 { var out=eval(c); }
    					catch(e) { out=e.description?e.description:e.toString(); }
    					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
    				}
    			}
    			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
    		}
    	}
    } )
    //}}}

    // // Backward-compatibility for TW2.1.x and earlier
    //{{{
    if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
    	if(limit > 0) text = text.substr(0,limit);
    	var wikifier = new Wikifier(text,formatter,null,tiddler);
    	return wikifier.wikifyPlain();
    }
    //}}}

    // // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
    //{{{
    if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
    //}}}

    !~EXU2's Items
    A list of all the inventory items in ~EXU2, sorted alphabetically by class. You can summon these ingame with the "summon EXU.<~ClassName>" command.

    |>||
    |>|color:black; !''Health'' |
    |>||
    |BloodBox |+50, up to 500.|
    |BloodFruit |+100, up to 500.|
    |BloodKeg |+999, up to 999. The ultimate healer.|
    |CarbonatedBlood |+40, up to 500. Demon Fucker's version of the Fucker Cola.|
    |EnergizerBall |+20, up to 500. Several variants (~EnergizerBallII - IX).|
    |EXUBandages |+15, up to 500.|
    |EXUBandagesII |+3, up to 500. Disappears. Medic Mercenaries shoot these at you.|
    |EXUBox |+40, up to 300.|
    |EXUFruit |+60, up to 400. Instant grow.|
    |EXUKeg |+600, up to 600. Immediate double health.|
    |EXUUnrealHealth |+40, up to 500.|
    |EXUVial |+10, up to 400.|
    |FuckerCola |+50, up to 500.|
    |IceCube |+30, up to 500.|
    |MiniKeg |+100, up to 500. Medic Mercenaries drop these.|
    |MiniKegII |+200, up to 500. Assassin Medic Mercs drop these.|
    |NuclearKeg |+200, up to 999.|
    |>||
    |>|color:black; !''Armor'' |
    |>||
    |BioHelm |Protects against bio damage. Only 1 helm can be worn at a time. (Most helms have a charge of 450.)|
    |BlastHelm	 |Protects against Exploded damage type, including Clusterfucker-style flak.|
    |CombatBoots |1000-charge, high-absorption feet security.|
    |DemonHelm |Protects against Hell damage.|
    |EXUArmor	 |750-charge UT armor with cooler-looking black EXU skin.|
    |EXUShieldBelt |1000-charge Shield Belt. Absorbs all damage until destroyed.|
    |EXUThighpads |500-charge Thigh Pads with awesomized EXU skin.|
    |FireHelm |Protects against Burned damage, plasma included (not LRPC).|
    |FreezeHelm |Protects against Frozen damage.|
    |FrostArmor |Crazy-good armor with 5000 charge. No protection types, though.|
    |HeavyBapes |1500-charge Combat Boots. Prevent you from being knocked around.|
    |HeavyHelm |700-charge helmet thing. Prevents you from being knocked around.|
    |HeavyShieldBelt |5000-charge Shield Belt. Prevents you frWHATEVER YOU GET IT.|
    |LaserSuit |Protects against energy bolts from the ~EnergyAR and other things.|
    |MagnificentArmor |7500-charge armor which really is quite magnificent.|
    |MegaKevlarSuit |Nuke Suit. Protects against nukes and falling damage.|
    |MegaToxinSuit |Tox/Shock Suit. Protects against bio and jolted (shock) damage.|
    |SaintSuit |Protects against Hell damage.|
    |ShockHelm |Protects against shock damage.|
    |SuperToxinSuit |A Tox/Shock suit that never goes away. Mostly for diagnostic use.|
    |TurboHelm |600-charge helm with increased absorption; no protection type.|
    |UltraBelt |10000-charge shieldbelt for maximum protection.|
    |>||
    |>|color:black; !''Battle Flares(TM)'' |
    |>||
    |BioFlare |Unleashes a deluge of biogel and a damage radius.|
    |BiohazardFlare |BIOHAZARD! Sprays bioglobs AND shit AND has TWO damage radii!|
    |BouncilaserFlare |Shits out a storm of bouncing lasers, green and blue. CAREFUL!|
    |ClusternukeFlare |Spawns some Clusternuke Balls.|
    |ClustershockFlare |Explodes several times, Shock Flare-style. Worth about 10 of 'em.|
    |CNadeFlare |Spawns shit tons of Clusterfuck 'Nades.|
    |DemonballFlare |Deploys a Demonball that generates hellblasts on each wall hit.|
    |DemonblastFlare |Explodes in a gargantuan blast of demonic energy.|
    |DemonFlare |Spawns a Hellblast (which won't damage you).|
    |DemonSaturationFlare |Deploys 7 rockets that all explode in Hellblasts.|
    |FlakFlare |Spawns lots of Excessive Flak Shells.|
    |FlakballFlare |Launches a single Hyper Flakball.|
    |FreezeFlare |Spawns lots of freeze blast (bouncing) projectiles.|
    |FusionFlare |Deploys an orb which spawns seeker projectiles until it explodes.|
    |GaskillFlare |Blows the absolute shit out of every Gasbag in a gigantic radius.|
    |HellfireFlare |Burns the shit out of everything with a ring of fire pillars.|
    |HyperballFlare |Launches a single Hyperball.|
    |HyperFlare |Spawns 12 Hyper Grenade Bomblets. Translates to 540 lasers.|
    |HorrorFlare |The horror.|
    |MunitionsFlare |Spawns a huge crapload of random explosives and shit!|
    |NadeFlare |Spawns a huge load of 'nades.|
    |NapalmFlare |Generates a pillar of fire. Not very napalm-y I guess. SCREW YOU|
    |NuclearFlare |Spawns a Redeemer blast.|
    |MegablastFlare |Huge-ass explosion that does a shitload of damage.|
    |PlasmaSprayerFlare |Spews fucktons of bouncing plasma balls all over the place.|
    |RazorFlare |Spawns asstons of razor blades all over the place.|
    |RocketballFlare |Launches a single Hyper Rocketball.|
    |RocketFlare |Spawns loads of rockets.|
    |SeekerMissileFlare |Fires shit tons of seeker missiles.|
    |ShockballFlare |Launches a single Hyper Shockball.|
    |ShockburstFlare |Massively overkill saturation and shockball combo flare.|
    |ShockFlare |Explodes with an Excessive shock combo.|
    |ShockSaturationFlare |Like the Demonic variant, but with shock explosions.|
    |SuperClusternukeFlare |Spawns Super Balls AND Clusternuke Balls.|
    |SuperFlare |Spawns a bunch of super balls. Don't stick around after launching.|
    |UltraDemonFlare |Mega hellblast. Still no self-damage.|
    |>||
    |>|color:black; !''Other Pickups'' |
    |>||
    |ArmorSeeds |Spawns EXU Armor in the field.|
    |BattleSeeds |Spawns insta-grow Battle Fruit.|
    |BlastBapes |Generates a bigass explosion every time you jump!|
    |CombatSeeds |Spawns insta-grow Blood Fruit.|
    |EXUJumpboots |~Anti-Grav Boots with extra charge and no expiration.|
    |EXUFullAmmo |A giant bucket full of ammo! Maxes out all guns (except LRPC, Screamer, etc.)|
    |FirestormGenerator |Projects bursts of fire around you to ward off assholes.|
    |FuckerBoots |EXU Jumpboots with a Shoe Fucker, but it doesn't respawn (yet).|
    |InsaneBoots |Makes you jump stupidly high AND generates a bigass explosion.|
    |MagicArmorSeeds |Spawns a random armor class!|
    |MissileBackpack |Shoots seeker missiles out of a goddamn backpack!|
    |MondoJumpboots |Infinite charge U1 jumpboots with fall protection.|
    |PentaPower |Amplifies your damage by 7x for a few minutes!|
    |SeedSeeds |Spawns a random... thing!|

    !The ~Long-Range Plasma Cannon (LRPC)
    The LRPC is an absolutely devastating powerhouse of raw destruction, the pinnacle of firepower, the end-all be-all of long-range heavy artillery. This shoulder-mounted anti-starship cannon can obliterate all but the toughest foes in a single blast, lay waste to enormous crowds, and annihilate defensive positions from afar. Its massive projectiles inflict excruciating plasma burns on anything even close to the line of fire. The impact shockwave from a single pulse is enough to instantaneously eradicate a horde of enemies. In a brutal, oppressive hellscape, where little is afforded to the condemned, the LRPC delivers retribution without fail; its destructive capabilities cannot be matched by any other handheld weapon. The LRPC is king. The LRPC is your god.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.LRPC |
    |''Primary Fire:'' | Mega Plasma Ball |
    |''Alternate Fire:'' | Mega Plasma Ball |
    |''Range:'' | Extreme |
    |''Ammo Type:'' | [[LRPC Pack|LRPCPack]] |
    |''Ammo Capacity:'' | 25 |
    |''Ammo Usage:'' | 1 |
    |''Damage Output:'' | Extreme |
    |''Splash Damage:'' | Extreme |
    |''Special Features:'' | Plasma Burn |

    ''PRIMARY FIRE:'' Projects a single, titanic plasma ball.

    ''ALTERNATE FIRE:'' See above.

    ''PLASMA BURN:'' Like the RFPC, LRPC plasma projectiles will scorch nearby enemies. These plasma pulses, however, inflict extraordinarily worse plasma burns, hot enough to reduce weaker enemies to smoldering ash instantly.

    ''NOTES:'' With great power comes great responsibility. The LRPC's blast radius is as spectacular as its damage potential, making this cannon a tremendous liability in the hands of a careless user. Shoot from a distance if you value your body's structural integrity. The LRPC's only other downside is its very long refire delay and its low ammunition capacity.

    !The Large Marge
    The Large Marge is an LRPC on crack. It is fully automatic, has obscene ammo capacity, and is just generally stupid as hell and no really don't fucking use it. Seriously.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~LargeMarge |
    |''Primary Fire:'' | Mega Plasma Ball |
    |''Alternate Fire:'' | Mega Plasma Ball |
    |''Range:'' | Extreme |
    |''Ammo Type:'' | LMPack |
    |''Ammo Capacity:'' | 999 |
    |''Ammo Usage:'' | 1 |
    |''Damage Output:'' | Extreme |
    |''Special Features:'' |color:red; - N/A - |

    ''PRIMARY FIRE:'' Fires a Mega Plasma Ball.

    ''ALTERNATE FIRE:'' Fires a Mega Plasma Ball.

    ''NOTES:'' Will annihilate just about anything nearly instantly - including you.

    ----
    [[Main Page|Entry.unr]]
    ----
    [[Installation|EXU2 Installation]]
    [[Known Issues|EXU2 Known Bugs]]
    [[Version History|EXU2 Changelog]]
    ----
    [[EXU2: Batshit Insane]]
    [[Weapons]]
    [[Items]]
    [[Bestiary]]
    ----
    [[EXU2 Actor List|EXU2 Actor Class Tree]]
    [[EXU2 Files List]]
    [[Credits]]
    ----
    [[EXU2 Forum|http://www.unrealsp.org/forums/viewforum.php?f=37]]
    ----

    /%
    ''"""Wiki Related"""''
    ----
    [[Transclusions]]
    [[TiddlyWiki Markup|http://tiddlywiki.org/wiki/TiddlyWiki_Markup]]
    [[Customization|http://tiddlywiki.org/wiki/Customization]]
    [[TiddlyTools|http://www.tiddlytools.com]]
    [[TiddyVault|http://tiddlyvault.tiddlyspot.com]]
    [[TiddlyThemes|http://tiddlythemes.com]]
    [[Installing Plugins|http://mnteractive.com/archive/how-to-install-a-tiddlywiki-plugin]]
    %/

    !The Missile Backpack
    The

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Attack Type:'' | |
    |''Range:'' | |
    |''Capacity:'' | |
    |''Damage Output:'' | |
    |''Special Features:'' | |

    ''NOTES:''

    this page will explain how flashS and flashY work to position the 2d muzzleflash
    note: future lazyweapon will have a better muzzleflash system

    !The
    The

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Primary Fire:'' | |
    |''Alternate Fire:'' | |
    |''Range:'' | |
    |''Ammo Type:'' | |
    |''Ammo Capacity:'' | |
    |''Ammo Usage:'' | |
    |''Damage Output:'' | |
    |''Special Features:'' | |

    ''PRIMARY FIRE:''

    ''ALTERNATE FIRE:''

    ''NOTES:''

    <!--{{{-->
    <!-- <div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'> -->
    <div class='header'>
    <!-- <div class='headerShadow'>
    <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
    <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
    </div> -->
    <div class='headerForeground'>
    <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
    <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
    </div>
    </div>
    <div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
    <div id='sidebar'>
    <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
    <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
    </div>
    <div id='displayArea'>
    <div id='messageArea'></div>
    <div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
    <div id='tiddlerDisplay'></div>
    </div>
    <!--}}}-->

    !The Piddledoper
    A faithful, recharging energy pistol. Though traditionally used to harass and control enormous Hellbeasts, this sidearm packs quite a punch against weaker foes.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.Piddledoper |
    |''Primary Fire:'' | Rapidfire Pulse Stream |
    |''Alternate Fire:'' | Continuous Beam |
    |''Range:'' | Long / Medium |
    |''Ammo Type:'' | [[Piddle Charger|PiddleCharger]] |
    |''Ammo Capacity:'' | 999 (Recharges) |
    |''Ammo Usage:'' | 1 per shot / 3 per tick |
    |''Damage Output:'' | Low / Moderate |
    |''Splash Damage:'' | Low / None |
    |''Special Features:'' |color:red; - N/A - |

    ''PRIMARY FIRE:'' Automatic fire. Sprays small energy pulses in a steady stream. Pulses deal splash damage.

    ''ALTERNATE FIRE:'' Continuous beam fire. Hold to fire a medium-range, high-powered energy beam for continuous damage.

    ''NOTES:'' Avoid self-damage with the primary by using the alt beam up close, and save the primary for long-range targets. The primary is more ammo-efficient than the alt, too, so watch your counters when beaming stuff!

    they call him hawgg

    hawgg pigguh

    this page will explain how playerviewoffset works
    abandon guesswork and place a weapon exactly where you want to onscreen without resorting to trial and error

    pretty stealthy

    !The Rapidfire Plasma Cannon (RFPC)
    This 32-kilocycle plasma cannon is a devastating heavy weapon at almost any range. Designed for both anti-personnel and anti-tank duties, the RFPC is among the largest infantry-portable weapons available, and it even works effectively against low-flying aircraft. Despite its massive size for an infantry weapon, it is quite compact compared to the heavy-duty plasma cannons found on tanks, aircraft, turrets, and warships, and thus cannot fit its own dedicated fusion reactor. Thus, the RFPC requires energy packs, and it consumes them voraciously.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.RFPC |
    |''Primary Fire:'' | Rapid Plasma Discharge |
    |''Alternate Fire:'' | Medium Plasma Ball |
    |''Range:'' | Long / Long |
    |''Ammo Type:'' | [[Plasma Pack|PlasmaPack]] |
    |''Ammo Capacity:'' | 900 |
    |''Ammo Usage:'' | 1 / 10 |
    |''Damage Output:'' | Moderate / High |
    |''Splash Damage:'' | Low / High |
    |''Special Features:'' | Plasma Burn |

    ''PRIMARY FIRE:'' Spews forth a rapid, if inaccurate, stream of plasma pulses. These projectiles can inflict plasma burns.

    ''ALTERNATE FIRE:''  Lobs a single medium plasma ball, maxing out the cannon's energy potential for a brief moment. These projectiles are indirect and arc through the air to their target before exploding. Like the primary fire, the alternate fire's plasma pulses inflict plasma burns, though they are much more potent and have a strong kinetic effect.

    ''PLASMA BURN:'' Due to the extreme heat emitted by plasma pulses, near misses can still damage enemies by scorching them. Burns from individual primary fire pulses are fairly minor, while burns from the medium plasma balls can be deadly on their own.

    ''NOTES:'' This weapon is extraordinarily powerful despite its propensity to churn through ammunition with wild abandon. Only a few pulses are necessary to take down most enemies, and the primary fire can unleash dozens of them in little time. However, due to the extreme fire rate and lack of a long barrel to control the shots, the RFPC is rather inaccurate at long range. The alternate fire is slightly more accurate when aimed properly, though it requires skill to use effectively.

    Also note that the large blast radii from medium plasma balls can be a severe threat to a careless shooter. While the RFPC is excellent at decimating large enemy forces from afar, caution is absolutely necessary in close-quarters combat situations.

    !Fixing Save Bugs
    This engine's save system basically serializes a copy of the entire map + whatever is going on in it at the time. Naturally, in EXU, this means it saves a TON of info. Sometimes, the engine just shits itself. Unfortunately, I have no idea what conditions actually cause this to happen, but it's usually when a lot of stuff is going on all at once.
    #When you notice saves are broken, open the console (press ~ or Tab) and type "showlog"
    #If you see an "error moving Save.tmp to ~Save##.usa" somewhere, ~Save##.usa is corrupted
    #To fix: save your current game in a different slot (or in any normal slot if your Save1000.usa, which is the Quicksave, got corrupted)
    #Close UT and open your ..\UT\Save\ folder
    #Delete ~Save##.usa, where ## = the number of the corrupt save
    #Reopen UT, load your functional save, and save over the now-dead slot (there will still be a name here)
    #Try saving again in that slot and it should work. Hooray
    I know this is kinda shitty, but it's the best I can do for now!

    To avoid this issue, make a save in a new slot at the end of each map before you load the next one. This way, save corruption won't take you back so far. I also recommend starting with a clean slate before you play, i.e. no save files at all. But saves from other map packs should not impact EXU at all, nor should EXU affect them.

    !The Shitgun
    A specialized riot-control tool designed by Hell's security forces, this disgusting weapon adds both insult AND injury to crowds of the damned and the restless.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.Shitgun |
    |''Primary Fire:'' | Shitball |
    |''Alternate Fire:'' | Shit Canister |
    |''Range:'' | Medium |
    |''Ammo Type:'' | [[Shit Jar|ShitJar]] |
    |''Ammo Capacity:'' | 900 |
    |''Ammo Usage:'' | 1 / 15 |
    |''Damage Output:'' | Moderate / High |
    |''Splash Damage:'' | Low / High |
    |''Special Features:'' | Fragmentation / Canisters |

    ''PRIMARY FIRE:'' Fires singular shitballs at a decent rate. Projectiles have an indirect fire trajectory, stick to walls, float in water, and explode after a few seconds if contact with a target is not made.

    ''ALTERNATE FIRE:'' Launches a single high-explosive Shit Canister. Canisters have an indirect fire trajectory like the primary, but with lesser range. They will also stick to walls and explode after a quick timer countdown, but will behave like proximity mines in water.

    ''FRAGMENTATION:'' Shitballs will stick to any hard surface on contact and simultaneously release 3-5 smaller shitballs. Submunition shitballs will also stick to surfaces if they don't hit any targets. If a shitball attaches itself to a ceiling, it will fragment AND begin dripping down small shit droplets.

    ''CANISTERS:'' Shit Canisters do not directly impact targets. Instead, they explode one second after contacting (and adhering to) a hard surface. The explosion releases a powerful damage wave AND a number of shitballs. If a Shit Canister lands in water, it activates its proximity sensor. The canister will float to the surface and explode when shot or an enemy comes within its detonation radius. Floating canisters have no expiration timer.

    ''NOTES:'' The Shitgun is an excellent crowd controller. The primary fire, even if you miss, can make short work of individual soft targets via fragmentation, while the alt fire offers devastating explosive power and unique tactical advantages. Since Shit Canisters don't explode on contact with enemies, they can be launched into the center of a crowd to deal maximum damage and scatter the survivors. Furthermore, since they float in water, canisters can be positioned strategically to create shitty mine fields. These fields can even be triggered manually with small arms fire, and chain reactions are quite easy to prepare. Luring a hard target into a shit-infested pool is an excellent killing tactic.

    ~EXU2 Info Dumpster

    /*{{{*/
    #viewport {
    	width: 320px;
    	height: 200px;
    	background: #ddd;
    	border: 1px solid #000;
    }

    .header {
    	padding: 0 0 10px 0;
    	background-color: transparent;
    	background-position: bottom;
    	background-repeat: repeat-x;
    	background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAKCAYAAACe5Y9JAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACxJREFUeNpiZGBgcAFiBhYg/gFjfMcQgTN+YjB+gRjMQMwExH9BDBD4BxBgAHwTCTCa1j81AAAAAElFTkSuQmCC);
    }

    .header a:hover {
    	background:transparent;
    }

    /*.header {background:[[ColorPalette::PrimaryMid]];}
    .headerShadow {color:[[ColorPalette::Foreground]];}
    .headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
    .headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}*/

    .headerForeground {
    	color:[[ColorPalette::Background]];
    	background: #230000;
    	background-position: left;
    	background-repeat: no-repeat;
    	position:relative !important;
    	padding:1em 0 1em 220px;
    	left:0px;
    	top:0px;
    background-image: url(data:image/jpeg;base64, );
    }

    .tiddlyLinkExisting {
    	font-weight:bold;
    }
    .tiddlyLinkNonExisting {
    	font-style: inherit;
    	color: #b40;
    }

    /* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
    a.tiddlyLinkNonExisting.shadow {
    	font-weight: bold !important;
    	color: #678 !important;
    }

    #mainMenu {
    	width:12em;
    }

    #sidebar {
    	width:16em;
    }

    #displayArea {
    	margin:1em 17em 0 15em;
    }

    /*
    .viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}
    */

    hr {
    	height: 2px;
    	border: 0;
    	border-top: 2px solid #ccc;
    	border-bottom: 2px solid #fff;
    }

    #sidebarOptions .sliderPanel {
    	background: [[ColorPalette::SecondaryLight]] !important;
    }

    /*}}}*/

    !The
    The

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~SunBarrelNade |
    |''Primary Fire:'' | |
    |''Alternate Fire:'' | |
    |''Range:'' | |
    |''Ammo Type:'' | |
    |''Ammo Capacity:'' | |
    |''Ammo Usage:'' | |
    |''Damage Output:'' | |
    |''Special Features:'' | |

    ''PRIMARY FIRE:''

    ''ALTERNATE FIRE:''

    ''NOTES:''

    !The Tachyon Driver
    The Tachyon Driver is an extremely powerful energy weapon. Useful as both a sniper rifle and a hard-hitting blaster at close range, this gun is best suited to neutralizing tough enemies from afar. When foes close in, the Tachyon Driver still manages to deal enormous amounts of devastation with ease thanks to the alternate fire mode's large blast radius and tachyon storms. Scientifically speaking, no one has any idea how this gun actually works. No, really, nobody.

    |color:black; ''===== ITEM ====='' |color:black; ''===== DETAILS ====='' |h
    |''Class Name:'' | EXU.~TachyonDriver |
    |''Primary Fire:'' | Charged Beam |
    |''Alternate Fire:'' | Area Blast |
    |''Range:'' | Long / Short |
    |''Ammo Type:'' | [[Tachyon Stuff|ContactBeans]] |
    |''Ammo Capacity:'' | 50 |
    |''Ammo Usage:'' | 1 |
    |''Damage Output:'' | Very High |
    |''Splash Damage:'' | Low / Very High |
    |''Special Features:'' | Tachyon Storm |

    ''PRIMARY FIRE:'' When held, charges the weapon up to 100%. At 100%, the charge can be held indefinitely. Upon release, the weapon fires a long-range, instant-hit beam that deals incredible amounts of damage.

    ''ALTERNATE FIRE:'' Projects a two-stage wave of destruction. The first stage deals large amounts of damage and knocks back any enemies that survive it, while the second affects any targets still alive and in range with a tachyon storm.

    ''TACHYON STORM:'' A tachyon storm is an aura of energy that surrounds an enemy, dealing continuous damage to the targeted foe and any other enemies that get close to the storm. When the target dies or the storm expires, it explodes with a sizable shockwave. Be mindful that enemies can still attack while affected by a storm.

    ''NOTES:'' This gun is ideal for taking out dangerous foes quickly, and it is incapable of harming the user with self-damage. The primary fire is slightly more powerful than the alternate overall, but the alternate fire's tachyon storms have the potential to dish out more damage than expected due to their delayed explosions and splash damage. Both fire modes can scatter tough enemies that are armored enough to survive the attack but not heavy enough to stay in place. However, because of the weapon's low firing rate and ammunition capacity, care must be taken to maximize its utility.

    !!Files and Packages

    See [[EXU2 Files List]] for where everything goes

    - We should turn this page into something broader with links to specific topics, like editing functions and all that

    !!!System
    {{indent{
    ;[[EXU.ini]]
    :exu main config file
    ;[[EXU.int]]
    :exu main localization file
    ;[[EXU.u]]
    :description
    ://dependencies: <<tiddler [[EXU.u##Dependencies]]>>//
    ;[[EXU2BI.u]]
    :description
    ://dependencies: <<tiddler [[EXU2BI.u##Dependencies]]>>//
    ;[[EXU-Sounds.u]]
    :description
    ://dependencies: //
    ;[[EXU-Textures.u]]
    :description
    ://dependencies: //

    ;[[UELite.ini]]
    :description
    ://dependencies: //
    ;[[UELite.u]]
    :description
    ://dependencies: //
    ;[[UARain.u]]
    :description
    ://dependencies: //
    }}}
    !!!Textures
    {{indent{
    ;[[EXU2EvilizedTexes.utx]]
    :description
    ;[[Soldierskins_blackguard.utx]]
    :description
    }}}
    !!!Sounds
    {{indent{
    ;[[Mier1snd.uax]]
    :Comes from the Assault Bonus Pack. Used by Hellfighters and other vehicles in EXU.u and certain maps.
    }}}
    !!!Maps
    {{indent{
    ;[[EXU2-BI00-Menu.unr]]
    ;[[EXU2-BI01-Damnation.unr]]
    ;[[EXU2-BI02-InfernalFalls.unr]]
    ;[[EXU2-BI03-Shitstorm.unr]]
    ;[[EXU2-BI04-SoulStorage.unr]]
    ;[[EXU2-BI05-CursedPassage.unr]]
    ;[[EXU2-BI06-Gauntlet.unr]]
    ;[[EXU2-BI07-FrostclawAccess.unr]]
    ;[[EXU2-BI08-FrostclawOutpost.unr]]
    ;[[EXU2-BI09-BitterBridge.unr]]
    ;[[EXU2-BI10-TheDoomhouse.unr]]
    ;[[EXU2-BI11-Corruption.unr]]
    ;[[EXU2-BI12-DoomArena.unr]]
    ;[[EXU2-BI13-Darkness.unr]]
    ;[[EXU2-BI14-Blackness.unr]]
    ;[[EXU2-BI15-Highlands.unr]]
    ;[[EXU2-BI16-Telefire.unr]]
    }}}

    /***
    |''Name:''|TiddlersBarPlugin|
    |''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
    |''Version:''|1.2.5|
    |''Date:''|Jan 18,2008|
    |''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
    |''Author:''|Pascal Collin|
    |''License:''|[[BSD open source license|License]]|
    |''~CoreVersion:''|2.1.0|
    |''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
    !Demos
    On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
    !Installation
    #import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
    #save and reload
    #''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
    #optionally, adjust StyleSheetTiddlersBar
    !Tips
    *Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
    *Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
    *By default, click on the current tab close all others tiddlers.
    !Configuration options
    <<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
    <<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed.
    <<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
    <<option txtPreviousTabKey>> previous tab access key.
    <<option txtNextTabKey>> next tab access key.
    !Code
    ***/
    //{{{
    config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
    config.options.chkHideTabsBarWhenSingleTab  = config.options.chkHideTabsBarWhenSingleTab  ? config.options.chkHideTabsBarWhenSingleTab  : false;
    config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
    config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
    config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
    config.macros.tiddlersBar = {
    	tooltip : "see ",
    	tooltipClose : "click here to close this tab",
    	tooltipSave : "click here to save this tab",
    	promptRename : "Enter tiddler new name",
    	currentTiddler : "",
    	previousState : false,
    	previousKey : config.options.txtPreviousTabKey,
    	nextKey : config.options.txtNextTabKey,
    	tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
    	handler: function(place,macroName,params) {
    		var previous = null;
    		if (config.macros.tiddlersBar.isShown())
    			story.forEachTiddler(function(title,e){
    				if (title==config.macros.tiddlersBar.currentTiddler){
    					var d = createTiddlyElement(null,"span",null,"tab tabSelected");
    					config.macros.tiddlersBar.createActiveTabButton(d,title);
    					if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
    					previous = "active";
    				}
    				else {
    					var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
    					var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
    					btn.setAttribute("tiddler", title);
    					if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
    					previous=btn;
    				}
    				var isDirty =story.isDirty(title);
    				var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
    				c.setAttribute("tiddler", title);
    				if (place.childNodes) {
    					place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
    					place.insertBefore(d,place.firstChild);
    				}
    				else place.appendChild(d);
    			})
    	},
    	refresh: function(place,params){
    		removeChildren(place);
    		config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
    		if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
    			story.refreshAllTiddlers();
    			if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
    			config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
    		}
    	},
    	isShown : function(){
    		if (config.options.chkDisableTabsBar) return false;
    		if (!config.options.chkHideTabsBarWhenSingleTab) return true;
    		var cpt=0;
    		story.forEachTiddler(function(){cpt++});
    		return (cpt>1);
    	},
    	selectNextTab : function(){  //used when the current tab is closed (to select another tab)
    		var previous="";
    		story.forEachTiddler(function(title){
    			if (!config.macros.tiddlersBar.currentTiddler) {
    				story.displayTiddler(null,title);
    				return;
    			}
    			if (title==config.macros.tiddlersBar.currentTiddler) {
    				if (previous) {
    					story.displayTiddler(null,previous);
    					return;
    				}
    				else config.macros.tiddlersBar.currentTiddler=""; 	// so next tab will be selected
    			}
    			else previous=title;
    			});
    	},
    	onSelectTab : function(e){
    		var t = this.getAttribute("tiddler");
    		if (t) story.displayTiddler(null,t);
    		return false;
    	},
    	onTabClose : function(e){
    		var t = this.getAttribute("tiddler");
    		if (t) {
    			if(story.hasChanges(t) && !readOnly) {
    				if(!confirm(config.commands.cancelTiddler.warning.format([t])))
    				return false;
    			}
    			story.closeTiddler(t);
    		}
    		return false;
    	},
    	onTabSave : function(e) {
    		var t = this.getAttribute("tiddler");
    		if (!e) e=window.event;
    		if (t) config.commands.saveTiddler.handler(e,null,t);
    		return false;
    	},
    	onSelectedTabButtonClick : function(event,src,title) {
    		var t = this.getAttribute("tiddler");
    		if (!event) event=window.event;
    		if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
    			config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
    		return false;
    	},
    	onTiddlersBarAction: function(event) {
    		var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
    		if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
    	},
    	createActiveTabButton : function(place,title) {
    		if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
    			var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
    			btn.setAttribute("tiddler", title);
    		}
    		else
    			createTiddlyText(place,title);
    	}
    }

    story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
    story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;

    story.closeTiddler = function(title,animate,unused) {
    	if (title==config.macros.tiddlersBar.currentTiddler)
    		config.macros.tiddlersBar.selectNextTab();
    	story.coreCloseTiddler(title,false,unused); //disable animation to get it closed before calling tiddlersBar.refresh
    	var e=document.getElementById("tiddlersBar");
    	if (e) config.macros.tiddlersBar.refresh(e,null);
    }

    story.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle){
    	story.coreDisplayTiddler(config.macros.tiddlersBar.tabsAnimationSource,tiddler,template,animate,unused,customFields,toggle);
    	var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;
    	if (config.macros.tiddlersBar.isShown()) {
    		story.forEachTiddler(function(t,e){
    			if (t!=title) e.style.display="none";
    			else e.style.display="";
    		})
    		config.macros.tiddlersBar.currentTiddler=title;
    	}
    	var e=document.getElementById("tiddlersBar");
    	if (e) config.macros.tiddlersBar.refresh(e,null);
    }

    var coreRefreshPageTemplate = coreRefreshPageTemplate ? coreRefreshPageTemplate : refreshPageTemplate;
    refreshPageTemplate = function(title) {
    	coreRefreshPageTemplate(title);
    	if (config.macros.tiddlersBar) config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"));
    }

    ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)

    config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n";
    config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .button {border:0}\n";
    config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .tab {white-space:nowrap}\n";
    config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar {padding : 1em 0.5em 2px 0.5em}\n";
    config.shadowTiddlers.StyleSheetTiddlersBar += ".tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}\n";
    config.shadowTiddlers.StyleSheetTiddlersBar += ".tiddler, .tabContents {border:1px [[ColorPalette::TertiaryPale]] solid;}\n";
    config.shadowTiddlers.StyleSheetTiddlersBar +="/*}}}*/";
    store.addNotification("StyleSheetTiddlersBar", refreshStyles);

    config.refreshers.none = function(){return true;}
    config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");

    //}}}

    transclusions are some cool ass shit yo™
    they allow you to include inline content from other tiddlers inside another tiddler
    examples below
    ----
    ''a transclusion of [[PimpBrute]]''
    <<tiddler [[PimpBrute]]>>
    ----
    ''a slider transclusion of [[PimpBrute]]''
    <<slider chkTestSlider [[PimpBrute]] "Expand PimpBrute" "Expand PimpBrute">>
    ----
    ''a partial transclusion of [[MainMenu]] showing only the ~GameHawgg section''
    <<tiddler [[MainMenu##GameHawggSection]]>>
    ----
    ''transclusions can also be be <<tiddler [[PrettyStealthy]]>>, the text '<<tiddler [[PrettyStealthy]]>>' is actually transcluded from [[PrettyStealthy]]''
    ----
    ''a partial self transclusion of a section on this page''
    <<tiddler [[Transclusions##Section]]>>
    ----
    ''a partial self transclusion of a hidden section on this page''
    <<tiddler [[Transclusions##HiddenSection]]>>
    ----
    ''a slice from [[ColorPalette]]''
    <<tiddler [[ColorPalette::PrimaryDark]]>>
    ----

    /%
    !HiddenSection
    this be some hidden data yo
    !end HiddenSection
    %/

    !Section
    this is a visible section
    !end Section

    !!Class Tree
    *Object ^^@@[[Core.u]]@@^^
    **Actor ^^@@[[Engine.u]]@@^^
    ***[[UARainGens]]
    ****[[UAFixedRain]]
    ****[[UALocalRain]]
    ***[[UARainParticle]]

    !!Class Tree
    *Object ^^@@[[Core.u]]@@^^
    **Actor ^^@@[[Engine.u]]@@^^
    ***Info ^^@@[[Engine.u]]@@^^
    ****[[UELStatic]]
    ***[[UELite]]
    ****[[LEmitter]]
    ****[[LParticle]]
    **UELCanvasgrab

    ----
    fucking around with trees below
    {{{
    +-Object
      +-Actor
      | +-UELite
      | +-LEmitter
      | +-LParticle
      +- UELCanvasgrab
    }}}

    {{{
    ◆─Object
      ◇─Actor
      │ ◇─UELite
      │   ├─LEmitter
      │   └─LParticle
      └─UELCanvasgrab
    }}}

    Chief Fuckface

    !~EXU2's Arsenal
    In Hell, you'll be up against a lot of really nasty shit. What better way to respond than with a bunch of big fuckoff weapons of extreme devastation? Learn how they work to maximize their destructive power.
    !!Primary Weapons
    #[[The Extractor|Extractor]]
    #[[The Piddledoper|Piddledoper]]
    #[[The Shitgun|Shitgun]]
    #[[The EnergyAR|EnergyAR]]
    #[[The Hyper Flakker|HyperFlakker]]
    #[[The Hell Gun|HellGun]]
    #[[The Tachyon Driver|TachyonDriver]]
    #[[The Clusterfucker|Clusterfucker]]
    #[[The RFPC|RFPC]]
    #[[The LRPC|LRPC]]
    !!Support Weapons
    *[[The Translocator|EXUTranslocator]]
    *[[The Flare Gun|FlareGun]]
    *[[The Screamer Missile Launcher|EXULAW]]
    *[[The Firestorm Generator|FirestormGenerator]] (Item)
    *[[The Missile Backpack|MissileBackpack]] (Item)
    !!Secret/Misc. Weapons
    *[[The Barrel 'o Fun|FunBarrelNade]]
    *[[The Barrel 'o Suns|SunBarrelNade]]
    *[[The Combat Shotgun|EXUShotty]]
    *[[The Chaos Barrel|ChaosBarrelNade]]
    *[[The Freezer|Freezer]]
    *[[The Large Marge|LargeMarge]]
    *[[The Brute Doll|BruteDoll]]