[MM1.07][DIY][.8a] Automated Cranial Projectors v1.1a

Post here your released mods

[MM1.07][DIY][.8a] Automated Cranial Projectors v1.1a

Postby Wriph » Mon Nov 26, 2012 1:45 am

AUTOMATED CRANIAL PROJECTORS (ACPs) v1.1a
by Wriph
Graphics special thanks to LittleMikey
Reload inspired by YetiChow's suggestions

ACPs v1.1a for MM: DOWNLOAD
Mod Manager

My very first mod! This adds 5 head launcher turrets that are built with 1 wood, 2 of the appropriate ITE, and 3 of the appropriate head. They are found in the utilities/traps menu.

Image

Stats are based on the monster most likely to drop the head. Each turret consists of an ACP entity and an ACP base at creation. On a 1 day CD, the base becomes "charged" and can be reloaded with a head to spawn a new (or another) ACP entity. ACP entities can be "Disenchanted" to retrieve 1 normal head, or made "Tidy" to move them to the nearest appropriate base should they move.

Compatibility note: 1.1a for the first time mods vanilla entries. I didn't want to, but it was the best way to make it work. So if you have a mod which changes any vanilla enemy livingentity, I suggest installing it after ACPs v1.1a. All that will happen is the monster loses its hate for acps, which is undesirable but doesn't break anything.

v1.1a Changes
-All enemies now hate the ACPs
-Added "Tidy" command to ACPs - this moves them to the nearest appropriate base in case they move.
v1.1 Changes
- New graphics!
- No more autospawn - the base of the ACP can now be reloaded once a day and costs 1 head. This is signified when the base brightens and name changes to "Charged <monster> ACP Base"
- The ACP entity can now be disenchanted to retrieve one head.
- Stats (primarily HP) lowered because the new system allows you to stack multiple ACP entities on a single base.

DIY section

I wanted to do a DIY section because without them, I don't know that I would have ever gotten this started. The DIY I have to give primary props to is Bow Sentry by smithforge. I had the idea for mine before reading it, but it was instrumental in working out the details and getting myself going. Also thanks to anyone who answered my questions on these forums ;)

DIY updates for v1.1a

A small update with a lot of code (copy/paste and replace are your friends). No code sections here, just a description. Need to in livingentities.xml make every enemy include in their hate tag goblinacp,hobgoblinacp,ghoulacp,trollacp,snickeracp. In actions.xml, we add 5 actions, a qtidyXXXXacp where XXXX is the monster type. The queue here is simple:

pickFriendly
move XXXXacpbase,XXXXacpbaser
unlock /

Then add the actions to the appropriate entities in livingentities.xml.

DIY updates for v1.1

We'll be building off the DIY for 1.0 (found after this section) for how to DIY the updates to v1.1. The full xmls will be placed here so the only thing you'll need from the 1.0 section is menu_right.xml.

We'll start with actions.xml, since here is the bulk of code changes. We're adding 2 actions per ACP, one to "disenchant" an ACP entity, and one to reload our new "charged" acp base that we'll add in items. Of note here is the <replaceCellItem> tag, which alters the "charged" version to the normal version, disallowing reloads until the CD expires. You might notice in the reload command there's two move tags to the same place. This is because during the wait action, if an enemy appears, the toenie can move to attack it, finish the action, and place the entity incorrectly. This helps ensure that doesn't happen.
Code: Select all
   <action>
      <id>qgoblinacp</id>

      <priorityID>itemconstruction</priorityID>

      <queue>
         <pick>rmwood</pick>
         <move>carpentrybench</move>
         <wait>16</wait>
         <destroyItem />
         <unlock />   
         <pick>goblinite</pick>
         <move>itesmithy</move>
            <wait>16</wait>
            <destroyItem />
            <pick>goblinite</pick>
            <move>itesmithy</move>
            <wait>32</wait>
            <destroyItem />
            <unlock />
            <pick>goblinhead</pick>
            <wait>8</wait>
            <destroyItem />
            <pick>goblinhead</pick>
            <wait>8</wait>
            <destroyItem />
            <pick>goblinhead</pick>
            <wait>16</wait>
            <destroyItem />
         <unlock />
            <createItem>goblinacpbase</createItem>
            <createFriendly>goblinacp</createFriendly>       
         </queue>
      </action>

   <action>
      <id>qhobgoblinacp</id>

      <priorityID>itemconstruction</priorityID>

      <queue>
         <pick>rmwood</pick>
         <move>carpentrybench</move>
         <wait>16</wait>
         <destroyItem />
         <unlock />   
         <pick>hobgoblinite</pick>
         <move>itesmithy</move>
            <wait>16</wait>
            <destroyItem />
            <pick>hobgoblinite</pick>
            <move>itesmithy</move>
            <wait>32</wait>
            <destroyItem />
            <unlock />
            <pick>hobgoblinhead</pick>
            <wait>8</wait>
            <destroyItem />
            <pick>hobgoblinhead</pick>
            <wait>8</wait>
            <destroyItem />
            <pick>hobgoblinhead</pick>
            <wait>16</wait>
            <destroyItem />
            <unlock />
            <createItem>hobgoblinacpbase</createItem>
            <createFriendly>hobgoblinacp</createFriendly>       
         </queue>
      </action>

   <action>
      <id>qghoulacp</id>

      <priorityID>itemconstruction</priorityID>

      <queue>
         <pick>rmwood</pick>
         <move>carpentrybench</move>
         <wait>16</wait>
         <destroyItem />
         <unlock />   
         <pick>ghoulite</pick>
         <move>itesmithy</move>
            <wait>16</wait>
            <destroyItem />
            <pick>ghoulite</pick>
            <move>itesmithy</move>
            <wait>32</wait>
            <destroyItem />
            <unlock />
            <pick>ghoulhead</pick>
            <wait>8</wait>
            <destroyItem />
            <pick>ghoulhead</pick>
            <wait>8</wait>
            <destroyItem />
            <pick>ghoulhead</pick>
            <wait>16</wait>
            <destroyItem />
            <unlock />
            <createItem>ghoulacpbase</createItem>
            <createFriendly>ghoulacp</createFriendly>       
         </queue>
      </action>

   <action>
      <id>qtrollacp</id>

      <priorityID>itemconstruction</priorityID>

      <queue>
         <pick>rmwood</pick>
         <move>carpentrybench</move>
         <wait>16</wait>
         <destroyItem />
         <unlock />   
         <pick>ogreite</pick>
         <move>itesmithy</move>
            <wait>16</wait>
            <destroyItem />
            <pick>ogreite</pick>
            <move>itesmithy</move>
            <wait>32</wait>
            <destroyItem />
            <unlock />
            <pick>trollhead</pick>
            <wait>8</wait>
            <destroyItem />
            <pick>trollhead</pick>
            <wait>8</wait>
            <destroyItem />
            <pick>trollhead</pick>
            <wait>16</wait>
            <destroyItem />
            <unlock />
            <createItem>trollacpbase</createItem>
            <createFriendly>trollacp</createFriendly>       
         </queue>
      </action>

   <action>
      <id>qsnickeracp</id>

      <priorityID>itemconstruction</priorityID>

      <queue>
         <pick>rmwood</pick>
         <move>carpentrybench</move>
         <wait>16</wait>
         <destroyItem />
         <unlock />   
         <pick>snickerite</pick>
         <move>itesmithy</move>
            <wait>16</wait>
            <destroyItem />
            <pick>snickerite</pick>
            <move>itesmithy</move>
            <wait>32</wait>
            <destroyItem />
            <unlock />
            <pick>snickerhead</pick>
            <wait>8</wait>
            <destroyItem />
            <pick>snickerhead</pick>
            <wait>8</wait>
            <destroyItem />
            <pick>snickerhead</pick>
            <wait>16</wait>
            <destroyItem />
            <unlock />
            <createItem>snickeracpbase</createItem>
            <createFriendly>snickeracp</createFriendly>       
         </queue>
      </action>
   
   <action>
      <id>qdisenchantgoblinacp</id>
      <priorityID>butcheringkilling</priorityID>
      <name>Disenchant</name>
      <queue>
         <pickFriendly useSource="true">goblinacp</pickFriendly>
         <wait>36</wait>
         <destroyFriendly />
         <unlock />
         <createItem>goblinhead</createItem>
      </queue>
   </action>
   
   <action>
      <id>qdisenchanthobgoblinacp</id>
      <priorityID>butcheringkilling</priorityID>
      <name>Disenchant</name>
      <queue>
         <pickFriendly useSource="true">hobgoblinacp</pickFriendly>
         <wait>36</wait>
         <destroyFriendly />
         <unlock />
         <createItem>hobgoblinhead</createItem>
      </queue>
   </action>
   
   <action>
      <id>qdisenchantsnickeracp</id>
      <priorityID>butcheringkilling</priorityID>
      <name>Disenchant</name>
      <queue>
         <pickFriendly useSource="true">snickeracp</pickFriendly>
         <wait>36</wait>
         <destroyFriendly />
         <unlock />
         <createItem>snickerhead</createItem>
      </queue>
   </action>
   
   <action>
      <id>qdisenchantghoulacp</id>
      <priorityID>butcheringkilling</priorityID>
      <name>Disenchant</name>
      <queue>
         <pickFriendly useSource="true">ghoulacp</pickFriendly>
         <wait>36</wait>
         <destroyFriendly />
         <unlock />
         <createItem>ghoulhead</createItem>
      </queue>
   </action>
   
   <action>
      <id>qdisenchanttrollacp</id>
      <priorityID>butcheringkilling</priorityID>
      <name>Disenchant</name>
      <queue>
         <pickFriendly useSource="true">trollacp</pickFriendly>
         <wait>36</wait>
         <destroyFriendly />
         <unlock />
         <createItem>trollhead</createItem>
      </queue>
   </action>
   
   <action>
      <id>qreloadgoblinacp</id>
      <priorityID>itemconstruction</priorityID>
      <name>Reload</name>
      <queue>
         <pick>goblinhead</pick>
         <move>goblinacpbaser</move>
         <wait>36</wait>
         <destroyItem />
         <move>goblinacpbaser</move>
         <replaceCellItem>goblinacpbase</replaceCellItem>
         <unlock />
         <createFriendly>goblinacp</createFriendly>
      </queue>
   </action>
   
   <action>
      <id>qreloadhobgoblinacp</id>
      <priorityID>itemconstruction</priorityID>
      <name>Reload</name>
      <queue>
         <pick>hobgoblinhead</pick>
         <move>hobgoblinacpbaser</move>
         <wait>36</wait>
         <destroyItem />
         <move>hobgoblinacpbaser</move>
         <replaceCellItem>hobgoblinacpbase</replaceCellItem>
         <unlock />
         <createFriendly>hobgoblinacp</createFriendly>
      </queue>
   </action>
   
   <action>
      <id>qreloadsnickeracp</id>
      <priorityID>itemconstruction</priorityID>
      <name>Reload</name>
      <queue>
         <pick>snickerhead</pick>
         <move>snickeracpbaser</move>
         <wait>36</wait>
         <destroyItem />
         <move>snickeracpbaser</move>
         <replaceCellItem>snickeracpbase</replaceCellItem>
         <unlock />
         <createFriendly>snickeracp</createFriendly>
      </queue>
   </action>
   
   <action>
      <id>qreloadghoulacp</id>
      <priorityID>itemconstruction</priorityID>
      <name>Reload</name>
      <queue>
         <pick>ghoulhead</pick>
         <move>ghoulacpbaser</move>
         <wait>36</wait>
         <destroyItem />
         <move>ghoulacpbaser</move>
         <replaceCellItem>ghoulacpbase</replaceCellItem>
         <unlock />
         <createFriendly>ghoulacp</createFriendly>
      </queue>
   </action>
   
   <action>
      <id>qreloadtrollacp</id>
      <priorityID>itemconstruction</priorityID>
      <name>Reload</name>
      <queue>
         <pick>trollhead</pick>
         <move>trollacpbaser</move>
         <wait>36</wait>
         <destroyItem />
         <move>trollacpbaser</move>
         <replaceCellItem>trollacpbase</replaceCellItem>
         <unlock />
         <createFriendly>trollacp</createFriendly>
      </queue>
   </action>

Next we'll tackle items.xml. What we've added here from v1.0 is the secondary "Charged" version of the ACP base that allows the reload action, as well as making the normal base switch to the charged version after 1 day (2880 turns).
Code: Select all
   <goblinacpbase>
      <name>Goblin ACP Base</name>
      <happiness>-1</happiness>
      <locked>true</locked>
      <maxAge>2880</maxAge>
      <maxAgeItem>goblinacpbaser</maxAgeItem>
   </goblinacpbase>
   
   <goblinacpbaser>
      <name>Charged Goblin ACP Base</name>
      <happiness>-1</happiness>
      <locked>true</locked>
      <action>qreloadgoblinacp</action>
   </goblinacpbaser>
   
   <hobgoblinacpbase>
      <name>Hobgoblin ACP Base</name>
      <happiness>-1</happiness>
      <locked>true</locked>
      <maxAge>2880</maxAge>
      <maxAgeItem>hobgoblinacpbaser</maxAgeItem>
   </hobgoblinacpbase>
   
   <hobgoblinacpbaser>
      <name>Charged Hobgoblin ACP Base</name>
      <happiness>-1</happiness>
      <locked>true</locked>
      <action>qreloadhobgoblinacp</action>
   </hobgoblinacpbaser>
   
   <snickeracpbase>
      <name>Snicker ACP Base</name>
      <happiness>-1</happiness>
      <locked>true</locked>
      <maxAge>2880</maxAge>
      <maxAgeItem>snickeracpbaser</maxAgeItem>
   </snickeracpbase>
   
   <snickeracpbaser>
      <name>Charged Snicker ACP Base</name>
      <happiness>-1</happiness>
      <locked>true</locked>
      <action>qreloadsnickeracp</action>
   </snickeracpbaser>
   
   <ghoulacpbase>
      <name>Ghoul ACP Base</name>
      <happiness>-1</happiness>
      <locked>true</locked>
      <maxAge>2880</maxAge>
      <maxAgeItem>ghoulacpbaser</maxAgeItem>
   </ghoulacpbase>
   
   <ghoulacpbaser>
      <name>Charged Ghoul ACP Base</name>
      <happiness>-1</happiness>
      <locked>true</locked>
      <action>qreloadghoulacp</action>
   </ghoulacpbaser>
   
   <trollacpbase>
      <name>Troll ACP Base</name>
      <happiness>-1</happiness>
      <locked>true</locked>
      <maxAge>2880</maxAge>
      <maxAgeItem>trollacpbaser</maxAgeItem>
   </trollacpbase>
   
   <trollacpbaser>
      <name>Charged ACP Base</name>
      <happiness>-1</happiness>
      <locked>true</locked>
      <action>qreloadtrollacp</action>
   </trollacpbaser>

   <goblinacphead>
      <name>Goblin ACP Head</name>

      <ranged>true</ranged>
      <rangedAmmo>goblinacphead</rangedAmmo>
      <rangedCharges>INFINITE</rangedCharges>

      <location>WEAPON</location>
      <attack>1d575+1312</attack>
      <defense>1d599+1700</defense>
      <damage>1d89+255</damage>
      <LOS>13</LOS>
      <verb>bites</verb>
      <verbInfinitive>bite</verbInfinitive>

      <tags>misc</tags>
   </goblinacphead>

   <hobgoblinacphead>
      <name>Hobgoblin ACP Head</name>

      <ranged>true</ranged>
      <rangedAmmo>hobgoblinacphead</rangedAmmo>
      <rangedCharges>INFINITE</rangedCharges>

      <location>WEAPON</location>
      <attack>1d599+1700</attack>
      <defense>1d569+1615</defense>
      <damage>1d149+425</damage>

      <LOS>8</LOS>
      <verb>burns</verb>
      <verbInfinitive>burn</verbInfinitive>

      <tags>misc</tags>
   </hobgoblinacphead>

   <ghoulacphead>
      <name>Ghoul ACP Head</name>

      <ranged>true</ranged>
      <rangedAmmo>ghoulacphead</rangedAmmo>
      <rangedCharges>INFINITE</rangedCharges>

      <location>WEAPON</location>
      <attack>1d1799+5100</attack>
      <defense>1d2549+5825</defense>
      <damage>1d279+550</damage>

      <LOS>15</LOS>
      <verb>curses</verb>
      <verbInfinitive>curse</verbInfinitive>

      <tags>misc</tags>
   </ghoulacphead>
   
   <trollacphead>
      <name>Troll ACP Head</name>

      <ranged>true</ranged>
      <rangedAmmo>trollacphead</rangedAmmo>
      <rangedCharges>INFINITE</rangedCharges>

      <location>WEAPON</location>
      <attack>1d1199+3400</attack>
      <defense>1d1249+1875</defense>
      <damage>1d749+2125</damage>

      <LOS>8</LOS>
      <verb>attacks</verb>
      <verbInfinitive>attack</verbInfinitive>

      <tags>misc</tags>
   </trollacphead>

   <snickeracphead>
      <name>Snicker ACP Head</name>

      <ranged>true</ranged>
      <rangedAmmo>snickeracphead</rangedAmmo>
      <rangedCharges>INFINITE</rangedCharges>

      <location>WEAPON</location>
      <attack>1d659+1870</attack>
      <defense>1d149+3952</defense>
      <damage>1d179+510</damage>

      <LOS>9</LOS>
      <verb>bites</verb>
      <verbInfinitive>bite</verbInfinitive>

      <tags>misc</tags>
   </snickeracphead>

Next up is livingentities.xml. The main code change here from 1.0 is adding the action to "dissenchant" the ACP entity. Minor changes include nerfing down the base stats as now multiples of an ACP entity can exist on a single base. Attack, damage, and defense seem low (10x level) but remember the main stats are on the custom head they equip. HP was calculated as 0.5 x (max possible HP of the monster), with 75% of that straight and 25% on a 1dX.
Code: Select all
<goblinacp>
      <type>FRIENDLY</type>
      <hate>ENEMY</hate>
      <level>2</level>

      <name>Goblin ACP</name>
      <attack>20</attack>
      <attackSpeed>6</attackSpeed>
      <defense>20</defense>
      <healthPoints>1d253+758</healthPoints>
      <attackVerb>whallops</attackVerb>
      <attackVerbInfinitive>whallop</attackVerbInfinitive>
      <damage>20</damage>

      <LOS>1d5</LOS>
      <movePCT>0</movePCT>
      <walkSpeed>0</walkSpeed>
      <grouping>true</grouping>
      <equip>goblinacphead</equip>
      <action>qdisenchantgoblinacp</action>
   </goblinacp>

   <hobgoblinacp>
      <type>FRIENDLY</type>
      <hate>ENEMY</hate>
      <level>3</level>

      <name>Hobgoblin ACP</name>
      <attack>30</attack>
      <attackSpeed>6</attackSpeed>
      <defense>30</defense>
      <healthPoints>1d332+995</healthPoints>
      <attackVerb>whallops</attackVerb>
      <attackVerbInfinitive>whallop</attackVerbInfinitive>
      <damage>30</damage>

      <LOS>1d5</LOS>
      <movePCT>0</movePCT>
      <walkSpeed>0</walkSpeed>
      <grouping>true</grouping>
      <equip>hobgoblinacphead</equip>
      <action>qdisenchanthobgoblinacp</action>
   </hobgoblinacp>

   <ghoulacp>
      <type>FRIENDLY</type>
      <hate>ENEMY</hate>
      <level>8</level>

      <name>Ghoul ACP</name>
      <attack>80</attack>
      <attackSpeed>5</attackSpeed>
      <defense>80</defense>
      <healthPoints>1d568+1706</healthPoints>
      <attackVerb>whallops</attackVerb>
      <attackVerbInfinitive>whallop</attackVerbInfinitive>
      <damage>80</damage>

      <effectsImmune>plagued</effectsImmune>

      <LOS>1d5</LOS>
      <movePCT>0</movePCT>
      <walkSpeed>0</walkSpeed>
      <grouping>true</grouping>
      <equip>ghoulacphead</equip>
      <action>qdisenchantghoulacp</action>
   </ghoulacp>

   <trollacp>
      <type>FRIENDLY</type>
      <hate>ENEMY</hate>
      <level>8</level>

      <name>Troll ACP</name>
      <attack>80</attack>
      <attackSpeed>4</attackSpeed>
      <defense>80</defense>
      <healthPoints>1d647+1940</healthPoints>
      <attackVerb>whallops</attackVerb>
      <attackVerbInfinitive>whallop</attackVerbInfinitive>
      <damage>80</damage>

      <LOS>1d5</LOS>
      <movePCT>0</movePCT>
      <walkSpeed>0</walkSpeed>
      <grouping>true</grouping>
      <equip>trollacphead</equip>
      <action>qdisenchanttrollacp</action>
   </trollacp>

   <snickeracp>
      <type>FRIENDLY</type>
      <hate>ENEMY</hate>
      <level>6</level>

      <name>Snicker ACP</name>
      <attack>60</attack>
      <attackSpeed>8</attackSpeed>
      <defense>60</defense>
      <healthPoints>1d426+1275</healthPoints>
      <attackVerb>whallops</attackVerb>
      <attackVerbInfinitive>whallop</attackVerbInfinitive>
      <damage>60</damage>

      <LOS>1d5</LOS>
      <movePCT>0</movePCT>
      <walkSpeed>0</walkSpeed>
      <grouping>true</grouping>
      <equip>snickeracphead</equip>
      <action>qdisenchantsnickeracp</action>
   </snickeracp>

You'll need menu_right.xml, which can be found below in the 1.0 DIY section. It's unaltered in 1.1.

Last is the graphics.ini. First off, because v1.1 uses some custom graphics now, we'll need our new .png file, which can be downloaded here: ACPs.png

The png sheet gives us our new entity heads (made semi-transparent with the subtle effect of ITE colored glowing eyes). The main thing here is to remember that while they're only ~32 pixels wide, we need to make them ~64 pixels tall to matchup with the base, and so we want to be sure the space below them is blank, as well as leaving space to the right in case we need to add or shave pixels to align it (as you'll note in the graphics.ini, all of them ended up needing pixel padding on both height and width to align). The png also has an 8 frame animation for a subtle glowing effect for the base object.

Color coding helps us make those bases ITE colored. In this case, I've opted to have the base object be the ITE color code -5 from each RGB, and +5 to each RGB for the "charged" version of the base. This means the non-charged base is slightly darker and the charged base slightly brighter. Additionally, the 8 frame animation runs at a 16 delay for non-charged and half that, 8, for charged.
Code: Select all
[goblinacpbase]TILE_X = 0
[goblinacpbase]TILE_Y = 0
[goblinacpbase]TILE_HEIGHT=64
[goblinacpbase]TILE_WIDTH=32
[goblinacpbase]COLOR = 67,154,94
[goblinacpbase]ANIMATION_TILES = 8
[goblinacpbase]ANIMATION_FRAME_DELAY = 16
[goblinacpbase]TEXTURE_FILE = ACPs.png

[goblinacpbaser]TILE_X = 0
[goblinacpbaser]TILE_Y = 0
[goblinacpbaser]TILE_HEIGHT=64
[goblinacpbaser]TILE_WIDTH=32
[goblinacpbaser]COLOR = 77,164,104
[goblinacpbaser]ANIMATION_TILES = 8
[goblinacpbaser]ANIMATION_FRAME_DELAY = 8
[goblinacpbaser]TEXTURE_FILE = ACPs.png

[goblinacp]TILE_X = 0
[goblinacp]TILE_Y = 2
[goblinacp]TILE_HEIGHT = 66
[goblinacp]TILE_WIDTH = 35
[goblinacp]TEXTURE_FILE = ACPs.png

[goblinacphead]TILE_X = 6
[goblinacphead]TILE_Y = 0
[goblinacphead]COLOR = 225,225,225
[goblinacphead]TEXTURE_FILE = military.png

[hobgoblinacpbase]TILE_X = 0
[hobgoblinacpbase]TILE_Y = 0
[hobgoblinacpbase]TILE_HEIGHT=64
[hobgoblinacpbase]TILE_WIDTH=32
[hobgoblinacpbase]COLOR = 159,167,55
[hobgoblinacpbase]ANIMATION_TILES = 8
[hobgoblinacpbase]ANIMATION_FRAME_DELAY = 16
[hobgoblinacpbase]TEXTURE_FILE = ACPs.png

[hobgoblinacpbaser]TILE_X = 0
[hobgoblinacpbaser]TILE_Y = 0
[hobgoblinacpbaser]TILE_HEIGHT=64
[hobgoblinacpbaser]TILE_WIDTH=32
[hobgoblinacpbaser]COLOR = 169,177,65
[hobgoblinacpbaser]ANIMATION_TILES = 8
[hobgoblinacpbaser]ANIMATION_FRAME_DELAY = 8
[hobgoblinacpbaser]TEXTURE_FILE = ACPs.png

[hobgoblinacp]TILE_X = 2
[hobgoblinacp]TILE_Y = 2
[hobgoblinacp]TILE_HEIGHT = 68
[hobgoblinacp]TILE_WIDTH = 36
[hobgoblinacp]TEXTURE_FILE = ACPs.png

[hobgoblinacphead]TILE_X = 8
[hobgoblinacphead]TILE_Y = 0
[hobgoblinacphead]COLOR = 225,225,225
[hobgoblinacphead]TEXTURE_FILE = military.png

[ghoulacpbase]TILE_X = 0
[ghoulacpbase]TILE_Y = 0
[ghoulacpbase]TILE_HEIGHT=64
[ghoulacpbase]TILE_WIDTH=32
[ghoulacpbase]COLOR = 178,57,178
[ghoulacpbase]ANIMATION_TILES = 8
[ghoulacpbase]ANIMATION_FRAME_DELAY = 16
[ghoulacpbase]TEXTURE_FILE = ACPs.png

[ghoulacpbaser]TILE_X = 0
[ghoulacpbaser]TILE_Y = 0
[ghoulacpbaser]TILE_HEIGHT=64
[ghoulacpbaser]TILE_WIDTH=32
[ghoulacpbaser]COLOR = 188,67,188
[ghoulacpbaser]ANIMATION_TILES = 8
[ghoulacpbaser]ANIMATION_FRAME_DELAY = 8
[ghoulacpbaser]TEXTURE_FILE = ACPs.png

[ghoulacp]TILE_X = 4
[ghoulacp]TILE_Y = 2
[ghoulacp]TILE_HEIGHT = 68
[ghoulacp]TILE_WIDTH = 36
[ghoulacp]TEXTURE_FILE = ACPs.png

[ghoulacphead]TILE_X = 10
[ghoulacphead]TILE_Y = 0
[ghoulacphead]COLOR = 225,225,225
[ghoulacphead]TEXTURE_FILE = military.png

[trollacpbase]TILE_X = 0
[trollacpbase]TILE_Y = 0
[trollacpbase]TILE_HEIGHT=64
[trollacpbase]TILE_WIDTH=32
[trollacpbase]COLOR = 178,171,159
[trollacpbase]ANIMATION_TILES = 8
[trollacpbase]ANIMATION_FRAME_DELAY = 16
[trollacpbase]TEXTURE_FILE = ACPs.png

[trollacpbaser]TILE_X = 0
[trollacpbaser]TILE_Y = 0
[trollacpbaser]TILE_HEIGHT=64
[trollacpbaser]TILE_WIDTH=32
[trollacpbaser]COLOR = 188,181,169
[trollacpbaser]ANIMATION_TILES = 8
[trollacpbaser]ANIMATION_FRAME_DELAY = 8
[trollacpbaser]TEXTURE_FILE = ACPs.png

[trollacp]TILE_X = 3
[trollacp]TILE_Y = 2
[trollacp]TILE_HEIGHT = 69
[trollacp]TILE_WIDTH = 37
[trollacp]TEXTURE_FILE = ACPs.png

[trollacphead]TILE_X = 9
[trollacphead]TILE_Y = 0
[trollacphead]COLOR = 225,225,225
[trollacphead]TEXTURE_FILE = military.png

[snickeracpbase]TILE_X = 0
[snickeracpbase]TILE_Y = 0
[snickeracpbase]TILE_HEIGHT=64
[snickeracpbase]TILE_WIDTH=32
[snickeracpbase]COLOR = 216,80,179
[snickeracpbase]ANIMATION_TILES = 8
[snickeracpbase]ANIMATION_FRAME_DELAY = 16
[snickeracpbase]TEXTURE_FILE = ACPs.png

[snickeracpbaser]TILE_X = 0
[snickeracpbaser]TILE_Y = 0
[snickeracpbaser]TILE_HEIGHT=64
[snickeracpbaser]TILE_WIDTH=32
[snickeracpbaser]COLOR = 226,90,189
[snickeracpbaser]ANIMATION_TILES = 8
[snickeracpbaser]ANIMATION_FRAME_DELAY = 8
[snickeracpbaser]TEXTURE_FILE = ACPs.png

[snickeracp]TILE_X = 1
[snickeracp]TILE_Y = 2
[snickeracp]TILE_HEIGHT = 69
[snickeracp]TILE_WIDTH = 35
[snickeracp]TEXTURE_FILE = ACPs.png

[snickeracphead]TILE_X = 7
[snickeracphead]TILE_Y = 0
[snickeracphead]COLOR = 225,225,225
[snickeracphead]TEXTURE_FILE = military.png

DIY for v1.0

So to DIY, we'll start with items.xml - what we'll need here is 2 things for each ACP, so 10 objects in total - a base object to spawn the ACP, and the version of the head it will equip. You'll insert these entries before the </items> tag at the end of the xml. You might note here that the head copies have the main stats and the primary verbs lifted from the monsters (aside replacing kick with bite) - this is because in tests I noted that damage was not additive; the ranged weapon was the only damage that happened. In case this applied to attack, defense and LoS values as well, I used the primary stats here instead of on the living entity ACP.
Code: Select all
   <goblinacpbase>
      <name>Goblin ACP Base</name>
      <happiness>-1</happiness>
      <spawn>goblinacp</spawn>
      <spawnTurns>2500</spawnTurns>
      <locked>true</locked>
   </goblinacpbase>

   <hobgoblinacpbase>
      <name>Hobgoblin ACP Base</name>
      <happiness>-1</happiness>
      <spawn>hobgoblinacp</spawn>
      <spawnTurns>2500</spawnTurns>
      <locked>true</locked>
   </hobgoblinacpbase>

   <ghoulacpbase>
      <name>Ghoul ACP Base</name>
      <happiness>-1</happiness>
      <spawn>ghoulacp</spawn>
      <spawnTurns>2500</spawnTurns>
      <locked>true</locked>
   </ghoulacpbase>

   <trollacpbase>
      <name>Troll ACP Base</name>
      <happiness>-1</happiness>
      <spawn>trollacp</spawn>
      <spawnTurns>2500</spawnTurns>
      <locked>true</locked>
   </trollacpbase>   

   <snickeracpbase>
      <name>Snicker ACP Base</name>
      <happiness>-1</happiness>
      <spawn>Snickeracp</spawn>
      <spawnTurns>2500</spawnTurns>
      <locked>true</locked>
   </snickeracpbase>   

   <goblinacphead>
      <name>Goblin ACP Head</name>

      <ranged>true</ranged>
      <rangedAmmo>goblinacphead</rangedAmmo>
      <rangedCharges>INFINITE</rangedCharges>

      <location>WEAPON</location>
      <attack>1d575+1312</attack>
      <defense>1d599+1700</defense>
      <damage>1d89+255</damage>
      <LOS>13</LOS>
      <verb>bites</verb>
      <verbInfinitive>bite</verbInfinitive>

      <tags>misc</tags>
   </goblinacphead>

   <hobgoblinacphead>
      <name>Hobgoblin ACP Head</name>

      <ranged>true</ranged>
      <rangedAmmo>hobgoblinacphead</rangedAmmo>
      <rangedCharges>INFINITE</rangedCharges>

      <location>WEAPON</location>
      <attack>1d599+1700</attack>
      <defense>1d569+1615</defense>
      <damage>1d149+425</damage>

      <LOS>8</LOS>
      <verb>burns</verb>
      <verbInfinitive>burn</verbInfinitive>

      <tags>misc</tags>
   </hobgoblinacphead>

   <ghoulacphead>
      <name>Ghoul ACP Head</name>

      <ranged>true</ranged>
      <rangedAmmo>ghoulacphead</rangedAmmo>
      <rangedCharges>INFINITE</rangedCharges>

      <location>WEAPON</location>
      <attack>1d1799+5100</attack>
      <defense>1d2549+5825</defense>
      <damage>1d279+550</damage>

      <LOS>15</LOS>
      <verb>curses</verb>
      <verbInfinitive>curse</verbInfinitive>

      <tags>misc</tags>
   </ghoulacphead>
   
   <trollacphead>
      <name>Troll ACP Head</name>

      <ranged>true</ranged>
      <rangedAmmo>trollacphead</rangedAmmo>
      <rangedCharges>INFINITE</rangedCharges>

      <location>WEAPON</location>
      <attack>1d1199+3400</attack>
      <defense>1d1249+1875</defense>
      <damage>1d749+2125</damage>

      <LOS>8</LOS>
      <verb>attacks</verb>
      <verbInfinitive>attack</verbInfinitive>

      <tags>misc</tags>
   </trollacphead>

   <snickeracphead>
      <name>Snicker ACP Head</name>

      <ranged>true</ranged>
      <rangedAmmo>snickeracphead</rangedAmmo>
      <rangedCharges>INFINITE</rangedCharges>

      <location>WEAPON</location>
      <attack>1d659+1870</attack>
      <defense>1d149+3952</defense>
      <damage>1d179+510</damage>

      <LOS>9</LOS>
      <verb>bites</verb>
      <verbInfinitive>bite</verbInfinitive>

      <tags>misc</tags>
   </snickeracphead>

Next we'll tackle livingentities.xml. The notable things here are that each needs to <equip> their proper custom head and that each dies after 2475 turns via maxage (25 turn downtime between spawns then if comparing with the above 2500 spawn time). Also, their attack, defense, damage, and LoS stats are identical, lifted from the original head objects, as the main stats are on the custom heads as noted above. Lastly I made their attack verb whallop for testing purposes, so I would know if they somehow unequipped their cutsom head. This all gets inserted before </livingentities> at the end of the file.
Code: Select all
   <goblinacp>
      <type>FRIENDLY</type>
      <hate>ENEMY</hate>
      <level>2</level>

      <name>Goblin ACP</name>
      <attack>1d444+428</attack>
      <attackSpeed>6</attackSpeed>
      <defense>1d14+43</defense>
      <healthPoints>1d645+1377</healthPoints>
      <attackVerb>whallops</attackVerb>
      <attackVerbInfinitive>whallop</attackVerbInfinitive>
      <damage>1d89+255</damage>

      <maxAge>2475</maxAge>

      <LOS>1d5</LOS>
      <movePCT>0</movePCT>
      <walkSpeed>0</walkSpeed>
      <grouping>true</grouping>
      <equip>goblinacphead</equip>
   </goblinacp>

   <hobgoblinacp>
      <type>FRIENDLY</type>
      <hate>ENEMY</hate>
      <level>3</level>

      <name>Hobgoblin ACP</name>
      <attack>1d444+428</attack>
      <attackSpeed>6</attackSpeed>
      <defense>1d14+43</defense>
      <healthPoints>1d895+1759</healthPoints>
      <attackVerb>whallops</attackVerb>
      <attackVerbInfinitive>whallop</attackVerbInfinitive>
      <damage>1d89+255</damage>

      <maxAge>2475</maxAge>

      <LOS>1d5</LOS>
      <movePCT>0</movePCT>
      <walkSpeed>0</walkSpeed>
      <grouping>true</grouping>
      <equip>hobgoblinacphead</equip>
   </hobgoblinacp>

   <ghoulacp>
      <type>FRIENDLY</type>
      <hate>ENEMY</hate>
      <level>8</level>

      <name>Ghoul ACP</name>
      <attack>1d444+428</attack>
      <attackSpeed>5</attackSpeed>
      <defense>1d14+43</defense>
      <healthPoints>1d299+4250</healthPoints>
      <attackVerb>whallops</attackVerb>
      <attackVerbInfinitive>whallop</attackVerbInfinitive>
      <damage>1d89+255</damage>

      <effectsImmune>plagued</effectsImmune>

      <maxAge>2475</maxAge>

      <LOS>1d5</LOS>
      <movePCT>0</movePCT>
      <walkSpeed>0</walkSpeed>
      <grouping>true</grouping>
      <equip>ghoulacphead</equip>
   </ghoulacp>

   <trollacp>
      <type>FRIENDLY</type>
      <hate>ENEMY</hate>
      <level>8</level>

      <name>Troll ACP</name>
      <attack>1d444+428</attack>
      <attackSpeed>4</attackSpeed>
      <defense>1d14+43</defense>
      <healthPoints>1d1349+3825</healthPoints>
      <attackVerb>whallops</attackVerb>
      <attackVerbInfinitive>whallop</attackVerbInfinitive>
      <damage>1d89+255</damage>
      
      <maxAge>2475</maxAge>

      <LOS>1d5</LOS>
      <movePCT>0</movePCT>
      <walkSpeed>0</walkSpeed>
      <grouping>true</grouping>
      <equip>trollacphead</equip>
   </trollacp>

   <snickeracp>
      <type>FRIENDLY</type>
      <hate>ENEMY</hate>
      <level>6</level>

      <name>Snicker ACP</name>
      <attack>1d444+428</attack>
      <attackSpeed>8</attackSpeed>
      <defense>1d14+43</defense>
      <healthPoints>1d149+3252</healthPoints>
      <attackVerb>whallops</attackVerb>
      <attackVerbInfinitive>whallop</attackVerbInfinitive>
      <damage>1d89+255</damage>

      <maxAge>2475</maxAge>

      <LOS>1d5</LOS>
      <movePCT>0</movePCT>
      <walkSpeed>0</walkSpeed>
      <grouping>true</grouping>
      <equip>snickeracphead</equip>
   </snickeracp>

We've got our friendlies and our objects, now townfolk need an action to make them. Actions.xml is our destination. Of note here is that the queue doesn't require returning to a utility after crafting the ITEs - this is to cut down on wasted time when getting the 3 heads. Also, while it doesn't need it, I've opted to spawn the ACP entity on item creation; one could leave that out and wait for it to spawn instead. Insert the following before </actions> at the end of the file.
Code: Select all
   <action>
      <id>qgoblinacp</id>

      <priorityID>itemconstruction</priorityID>

      <queue>
         <pick>rmwood</pick>
         <move>carpentrybench</move>
         <wait>16</wait>
         <destroyItem />
         <unlock />   
         <pick>goblinite</pick>
         <move>itesmithy</move>
               <wait>16</wait>
               <destroyItem />
               <pick>goblinite</pick>
               <move>itesmithy</move>
               <wait>32</wait>
               <destroyItem />
               <unlock />
               <pick>goblinhead</pick>
               <wait>8</wait>
               <destroyItem />
               <pick>goblinhead</pick>
               <wait>8</wait>
               <destroyItem />
               <pick>goblinhead</pick>
               <wait>16</wait>
               <destroyItem />
               <unlock />
               <createItem>goblinacpbase</createItem>
               <createFriendly>goblinacp</createFriendly>       
            </queue>
      </action>

   <action>
      <id>qhobgoblinacp</id>

      <priorityID>itemconstruction</priorityID>

      <queue>
         <pick>rmwood</pick>
         <move>carpentrybench</move>
         <wait>16</wait>
         <destroyItem />
         <unlock />   
         <pick>hobgoblinite</pick>
         <move>itesmithy</move>
               <wait>16</wait>
               <destroyItem />
               <pick>hobgoblinite</pick>
               <move>itesmithy</move>
               <wait>32</wait>
               <destroyItem />
               <unlock />
               <pick>hobgoblinhead</pick>
               <wait>8</wait>
               <destroyItem />
               <pick>hobgoblinhead</pick>
               <wait>8</wait>
               <destroyItem />
               <pick>hobgoblinhead</pick>
               <wait>16</wait>
               <destroyItem />
               <unlock />
               <createItem>hobgoblinacpbase</createItem>
               <createFriendly>hobgoblinacp</createFriendly>       
            </queue>
      </action>

   <action>
      <id>qghoulacp</id>

      <priorityID>itemconstruction</priorityID>

      <queue>
         <pick>rmwood</pick>
         <move>carpentrybench</move>
         <wait>16</wait>
         <destroyItem />
         <unlock />   
         <pick>ghoulite</pick>
         <move>itesmithy</move>
               <wait>16</wait>
               <destroyItem />
               <pick>ghoulite</pick>
               <move>itesmithy</move>
               <wait>32</wait>
               <destroyItem />
               <unlock />
               <pick>ghoulhead</pick>
               <wait>8</wait>
               <destroyItem />
               <pick>ghoulhead</pick>
               <wait>8</wait>
               <destroyItem />
               <pick>ghoulhead</pick>
               <wait>16</wait>
               <destroyItem />
               <unlock />
               <createItem>ghoulacpbase</createItem>
               <createFriendly>ghoulacp</createFriendly>       
            </queue>
      </action>

   <action>
      <id>qtrollacp</id>

      <priorityID>itemconstruction</priorityID>

      <queue>
         <pick>rmwood</pick>
         <move>carpentrybench</move>
         <wait>16</wait>
         <destroyItem />
         <unlock />   
         <pick>ogreite</pick>
         <move>itesmithy</move>
               <wait>16</wait>
               <destroyItem />
               <pick>ogreite</pick>
               <move>itesmithy</move>
               <wait>32</wait>
               <destroyItem />
               <unlock />
               <pick>trollhead</pick>
               <wait>8</wait>
               <destroyItem />
               <pick>trollhead</pick>
               <wait>8</wait>
               <destroyItem />
               <pick>trollhead</pick>
               <wait>16</wait>
               <destroyItem />
               <unlock />
               <createItem>trollacpbase</createItem>
               <createFriendly>trollacp</createFriendly>       
            </queue>
      </action>

   <action>
      <id>qsnickeracp</id>

      <priorityID>itemconstruction</priorityID>

      <queue>
         <pick>rmwood</pick>
         <move>carpentrybench</move>
         <wait>16</wait>
         <destroyItem />
         <unlock />   
         <pick>snickerite</pick>
         <move>itesmithy</move>
               <wait>16</wait>
               <destroyItem />
               <pick>snickerite</pick>
               <move>itesmithy</move>
               <wait>32</wait>
               <destroyItem />
               <unlock />
               <pick>snickerhead</pick>
               <wait>8</wait>
               <destroyItem />
               <pick>snickerhead</pick>
               <wait>8</wait>
               <destroyItem />
               <pick>snickerhead</pick>
               <wait>16</wait>
               <destroyItem />
               <unlock />
               <createItem>snickeracpbase</createItem>
               <createFriendly>snickeracp</createFriendly>       
            </queue>
      </action>

Now we've got all the raw numbers in, so we need to make sure folks can actually build these things. Menu_right.xml is where we'll head. I've opted to place the objects in the traps menu, so you want to look for the <traps heading under the <utils heading. Before the "back" button at the end, we'll place our actions (same spot as spike trap, bear trap, etc.).
Code: Select all
                        <item code="QUEUEANDPLACE" parameter="qtrollacp" />
                        <item code="QUEUEANDPLACE" parameter="qghoulacp" />
                        <item code="QUEUEANDPLACE" parameter="qsnickeracp" />
                        <item code="QUEUEANDPLACE" parameter="qhobgoblinacp" /> 
                        <item code="QUEUEANDPLACE" parameter="qgoblinacp" />

Last but not least, we'll need to duck out the data folder and attack the graphics.ini. We need 3 graphic entries per ACP here, so 15 entries total, one for the base, one for the ACP, and one for the head. I've used two tricks here of note:

1) Using the color code on a precolored object can darken but not lighten the object - the closer to 250 (or 255, I forget) it is, the more it will look like the original, and the lower it is, the darker it will become to where values of say 0,0,0 will make any object appear pitch black. To this end, the poles and heads are darkened to values of 200,200,200 just to make them look a little different than their original counterparts. The base objects, which use the cooking fire animated graphic, were a little trickier as I was trying to emulate a shade of the ITE involved. In general the top color value of the ITE I put somewhere between 200 and 230 and based the other two numbers on the deviation. It could probably still use some tweaking but I'm satisfied for the moment.

2) The poles aren't properly aligned by default and some are crooked, so to move them to try to get them to line up nicely with the background fire item, I shaved or added a few pixels to their width and height values. This works on the basis that pixels are measured from top left, so if you want to move a picture up, add a few to the height, and shave a few for down. Add a few to width to move it left, shave a few to move it right. This of course only works if there's white space where you're adding or shaving pixels. Luckily for most of the objects there is (credit and thanks again to smithforge to cluing me in to this possibility).

So in the graphics.ini add the following at the end (or anywhere really).
Code: Select all
[goblinacpbase]TILE_X = 9
[goblinacpbase]TILE_Y = 12
[goblinacpbase]TILE_HEIGHT=64
[goblinacpbase]COLOR = 143,230,170
[goblinacpbase]ANIMATION_TILES = 2
[goblinacpbase]ANIMATION_FRAME_DELAY = 10
[goblinacpbase]TEXTURE_FILE = items.png

[goblinacp]TILE_X = 10
[goblinacp]TILE_Y = 2
[goblinacp]TILE_HEIGHT = 68
[goblinacp]TILE_WIDTH = 61
[goblinacp]COLOR = 200,200,200
[goblinacp]TEXTURE_FILE = items.png

[goblinacphead]TILE_X = 6
[goblinacphead]TILE_Y = 0
[goblinacphead]COLOR = 200,200,200
[goblinacphead]TEXTURE_FILE = military.png

[hobgoblinacpbase]TILE_X = 9
[hobgoblinacpbase]TILE_Y = 12
[hobgoblinacpbase]TILE_HEIGHT=64
[hobgoblinacpbase]COLOR = 192,200,88
[hobgoblinacpbase]ANIMATION_TILES = 2
[hobgoblinacpbase]ANIMATION_FRAME_DELAY = 10
[hobgoblinacpbase]TEXTURE_FILE = items.png

[hobgoblinacp]TILE_X = 12
[hobgoblinacp]TILE_Y = 2
[hobgoblinacp]TILE_HEIGHT = 68
[hobgoblinacp]TILE_WIDTH = 63
[hobgoblinacp]COLOR = 200,200,200
[hobgoblinacp]TEXTURE_FILE = items.png

[hobgoblinacphead]TILE_X = 8
[hobgoblinacphead]TILE_Y = 0
[hobgoblinacphead]COLOR = 200,200,200
[hobgoblinacphead]TEXTURE_FILE = military.png

[ghoulacpbase]TILE_X = 9
[ghoulacpbase]TILE_Y = 12
[ghoulacpbase]TILE_HEIGHT=64
[ghoulacpbase]COLOR = 220,99,220
[ghoulacpbase]ANIMATION_TILES = 2
[ghoulacpbase]ANIMATION_FRAME_DELAY = 10
[ghoulacpbase]TEXTURE_FILE = items.png

[ghoulacp]TILE_X = 13
[ghoulacp]TILE_Y = 2
[ghoulacp]TILE_HEIGHT = 70
[ghoulacp]TILE_WIDTH = 61
[ghoulacp]COLOR = 200,200,200
[ghoulacp]TEXTURE_FILE = items.png

[ghoulacphead]TILE_X = 10
[ghoulacphead]TILE_Y = 0
[ghoulacphead]COLOR = 200,200,200
[ghoulacphead]TEXTURE_FILE = military.png

[trollacpbase]TILE_X = 9
[trollacpbase]TILE_Y = 12
[trollacpbase]TILE_HEIGHT=64
[trollacpbase]COLOR = 200,193,181
[trollacpbase]ANIMATION_TILES = 2
[trollacpbase]ANIMATION_FRAME_DELAY = 10
[trollacpbase]TEXTURE_FILE = items.png

[trollacp]TILE_X = 14
[trollacp]TILE_Y = 2
[trollacp]TILE_HEIGHT = 66
[trollacp]TILE_WIDTH = 61
[trollacp]COLOR = 200,200,200
[trollacp]TEXTURE_FILE = items.png

[trollacphead]TILE_X = 9
[trollacphead]TILE_Y = 0
[trollacphead]COLOR = 200,200,200
[trollacphead]TEXTURE_FILE = military.png

[snickeracpbase]TILE_X = 9
[snickeracpbase]TILE_Y = 12
[snickeracpbase]TILE_HEIGHT=64
[snickeracpbase]COLOR = 220,84,183
[snickeracpbase]ANIMATION_TILES = 2
[snickeracpbase]ANIMATION_FRAME_DELAY = 10
[snickeracpbase]TEXTURE_FILE = items.png

[snickeracp]TILE_X = 11
[snickeracp]TILE_Y = 2
[snickeracp]TILE_HEIGHT = 70
[snickeracp]TILE_WIDTH = 60
[snickeracp]COLOR = 200,200,200
[snickeracp]TEXTURE_FILE = items.png

[snickeracphead]TILE_X = 7
[snickeracphead]TILE_Y = 0
[snickeracphead]COLOR = 200,200,200
[snickeracphead]TEXTURE_FILE = military.png


And that's that!
Last edited by Wriph on Tue Dec 04, 2012 12:00 am, edited 24 times in total.
Wriph
 
Posts: 93
Joined: Tue Nov 13, 2012 7:03 am

Re: [MM1.07][DIY][.8a] Automated Cranial Projectors

Postby LittleMikey » Mon Nov 26, 2012 2:20 am

... Turrets?

DOWNLOADING NOW!@!@#!@#!@%$@!^%!#$^ADFASDFADSf
User avatar
LittleMikey
 
Posts: 986
Joined: Sat Nov 10, 2012 10:32 am
Location: Perth, Australia

Re: [MM1.07][DIY][.8a] Automated Cranial Projectors

Postby Wriph » Mon Nov 26, 2012 3:00 am

LittleMikey wrote:... Turrets?

DOWNLOADING NOW!@!@#!@#!@%$@!^%!#$^ADFASDFADSf


Let me know how they work for you and thanks for enlightening me on the special character thing in the MM topic :)
Wriph
 
Posts: 93
Joined: Tue Nov 13, 2012 7:03 am

Re: [MM1.07][DIY][.8a] Automated Cranial Projectors

Postby LittleMikey » Mon Nov 26, 2012 8:56 am

Wriph wrote:
LittleMikey wrote:... Turrets?

DOWNLOADING NOW!@!@#!@#!@%$@!^%!#$^ADFASDFADSf


Let me know how they work for you and thanks for enlightening me on the special character thing in the MM topic :)


Will do! I haven't been in today, this morning I just built them and they construct fine, tho the graphic you're using does look a little wonky, but I can understand you want to use what's already available. Once I get my next siege I'll see how they work :D
User avatar
LittleMikey
 
Posts: 986
Joined: Sat Nov 10, 2012 10:32 am
Location: Perth, Australia

Re: [MM1.07][DIY][.8a] Automated Cranial Projectors

Postby Wriph » Mon Nov 26, 2012 6:39 pm

Wonky? WONKY?!

Ok, I guess, but I actually spent a long time with the look of them - flaming head poles not your style? :p
Wriph
 
Posts: 93
Joined: Tue Nov 13, 2012 7:03 am

Re: [MM1.07][DIY][.8a] Automated Cranial Projectors

Postby LittleMikey » Tue Nov 27, 2012 12:35 am

Wriph wrote:Wonky? WONKY?!

Ok, I guess, but I actually spent a long time with the look of them - flaming head poles not your style? :p


Hehe, sorry, didn't mean to offend XD

I guess they do look good as a sort of magical ward.
User avatar
LittleMikey
 
Posts: 986
Joined: Sat Nov 10, 2012 10:32 am
Location: Perth, Australia

Re: [MM1.07][DIY][.8a] Automated Cranial Projectors

Postby GameCharmer » Tue Nov 27, 2012 2:15 am

Thanks for the mod Wriph. It seems to be working properly. :)
User avatar
GameCharmer
 
Posts: 38
Joined: Sun Nov 11, 2012 7:18 am
Location: Michigan, USA

Re: [MM1.07][DIY][.8a] Automated Cranial Projectors

Postby LittleMikey » Tue Nov 27, 2012 2:47 am

So, I have been messing around trying to find a new graphic for the ACPs (Not saying your graphics are bad, I just want to practice!). Since I have less graphics skill then a peanut I found a few royalty free images and I've been trying to get something that looks nice.

Here is my progress so far:

Image

I'm having trouble getting the sprites to the right scale, but you can see what I'm getting at. Eventually I'll have the rock floating over the stone circle, and I'll also try to add some small runes or detail to the rock. I also think I'll flip the rock upside down.

Anyway, does this appeal to you? I was trying to find a sprite for a more industrial/steampunk turret but I couldn't come up with one, everything I found is too futuristic for my linking.

Also, I've found a bug; you can delete the ACP base, but the head remains. Will they despawn after a while?
User avatar
LittleMikey
 
Posts: 986
Joined: Sat Nov 10, 2012 10:32 am
Location: Perth, Australia

Re: [MM1.07][DIY][.8a] Automated Cranial Projectors

Postby GameCharmer » Tue Nov 27, 2012 3:40 am

The graphic looks great to me!
User avatar
GameCharmer
 
Posts: 38
Joined: Sun Nov 11, 2012 7:18 am
Location: Michigan, USA

Re: [MM1.07][DIY][.8a] Automated Cranial Projectors

Postby Wriph » Tue Nov 27, 2012 6:36 am

LittleMikey wrote:So, I have been messing around trying to find a new graphic for the ACPs (Not saying your graphics are bad, I just want to practice!). Since I have less graphics skill then a peanut I found a few royalty free images and I've been trying to get something that looks nice.

Here is my progress so far:

Image

I'm having trouble getting the sprites to the right scale, but you can see what I'm getting at. Eventually I'll have the rock floating over the stone circle, and I'll also try to add some small runes or detail to the rock. I also think I'll flip the rock upside down.

Anyway, does this appeal to you? I was trying to find a sprite for a more industrial/steampunk turret but I couldn't come up with one, everything I found is too futuristic for my linking.

Also, I've found a bug; you can delete the ACP base, but the head remains. Will they despawn after a while?


That graphic looks pretty neat, might be cool even with a a head floating in the center, or for a stone thrower turret or even just "magic device" for other stuff. My ideal graphic would be like a summoning pad with the head floating in a ghostly flame and maybe even making the projectile heads be on fire too - dunno if animations would play on projectiles though, cause it'd need to be a lot faster than the current animations run turn wise.

And yes, the ACP will despawn in 2475 turns max. I can add a "deconstruct" or dismantle right click action like in bow sentry, but because the base was already there as the spawner it seemed somehow too many commands or leading to potential confusion. It may be more necessary now as I originally had it on a 1000 turn respawn before thinking a hard siege could last 1000 turns and I wanted them to not repop in the same siege if I could help it.

That actually gives me an idea though, maybe getting rid of the auto-respawn and making it instead when it dies it drops something that respawns it in X turns - but that's neither here nor there for the present as I'd have to remove the base object to let it drop something (unless you can drop living entities... hrmm).
Last edited by Wriph on Tue Nov 27, 2012 6:45 am, edited 1 time in total.
Wriph
 
Posts: 93
Joined: Tue Nov 13, 2012 7:03 am

Next

Return to Released mods

Who is online

Users browsing this forum: No registered users and 2 guests

cron