User:Kernelmethod/Sandbox: Difference between revisions

Add proof-of-concept for creatures
Rename "Snapjaw Wizard" -> "Snapjaw Mage"
Line 1: Line 1:
Modding Tutorial: ''Snapjaw Wizards!''
Modding Tutorial: ''Snapjaw Mages!''


Welcome! If you're looking to get started with modding Caves of Qud, this tutorial is a good place to start.
Welcome! If you're looking to get started with modding Caves of Qud, this tutorial is a good place to start.


In this tutorial, we're going to add a new creature to the game -- the great and mystical '''''snapjaw wizard'''''. Along the way we're going to be helped by my friends {{qud text|&MRulimispruce, legendary sprouting orb}} and {{qud text|&MPyovya, legendary mopango}}.
In this tutorial, we're going to add a new creature to the game -- the great and mystical '''''snapjaw mage'''''. Along the way we're going to be helped by my friends {{qud text|&MRulimispruce, legendary sprouting orb}} and {{qud text|&MPyovya, legendary mopango}}.


{| style = "margin: 1em;font-family:Source Code Pro;"
{| style = "margin: 1em;font-family:Source Code Pro;"
Line 19: Line 19:
By the end of this tutorial, you'll have created a new mod which
By the end of this tutorial, you'll have created a new mod which


* introduces two new creatures, the {{qud text|snapjaw wizard of &Rfire}} and the {{qud text|snapjaw wizard of &Cice}}, and
* introduces two new creatures, the {{qud text|snapjaw mage of &Rfire}} and the {{qud text|snapjaw mage of &Cice}}, and
* introduces two books that function as missile weapons, the {{qud text|tome of &Rfire}} and the {{qud text|tome of &Cice}}.
* introduces two books that function as missile weapons, the {{qud text|tome of &Rfire}} and the {{qud text|tome of &Cice}}.


Line 49: Line 49:


<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
SnapjawWizard
SnapjawMage
├── manifest.json
├── manifest.json
└── preview.png
└── preview.png
Line 69: Line 69:


<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
SnapjawWizard
SnapjawMage
├── manifest.json
├── manifest.json
├── ObjectBlueprints
├── ObjectBlueprints
│   └── Creatures.xml
│  └── Creatures.xml
└── preview.png
└── preview.png
</syntaxhighlight>
</syntaxhighlight>


With that out of the way, let's start adding our new snapjaw wizard to <code>Creatures.xml</code>:
With that out of the way, let's start adding our new snapjaw mage to <code>Creatures.xml</code>:


<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?>
<objects>
<objects>
   <object Name="Pyovya_SnapjawWizard_Snapjaw Wizard" Inherits="Snapjaw">
   <object Name="Pyovya_SnapjawMage_Snapjaw Mage" Inherits="Snapjaw">
   </object>
   </object>
</objects>
</objects>
Line 88: Line 88:
Let's break this down:
Let's break this down:
* The <code>object</code> tag tells Qud that we want to add a new creature.
* The <code>object</code> tag tells Qud that we want to add a new creature.
* The <code>Name</code> attribute is a unique identifier for our new creature (it's not the name of the creature as it appears in-game -- we'll get to that shortly). You'll use this identifier whenever you want to wish for a new snapjaw wizard.
* The <code>Name</code> attribute is a unique identifier for our new creature (it's not the name of the creature as it appears in-game -- we'll get to that shortly). You'll use this identifier whenever you want to wish for a new snapjaw mage.
* The <code>Inherits</code> attribute says that our new creature should "inherit" all of the properties of the <code>Snapjaw</code> creature.
* The <code>Inherits</code> attribute says that our new creature should "inherit" all of the properties of the <code>Snapjaw</code> creature.


Line 94: Line 94:
| style = "padding:0em 1em;"| [[File:Sprouting orb.png|40px]]
| style = "padding:0em 1em;"| [[File:Sprouting orb.png|40px]]
| style= "color:#155352" | <
| style= "color:#155352" | <
| style = "border:1px solid #155352;padding:0.5em 1em;" | Hey, why'd you add the <code>Pyovya_SnapjawWizard</code> bit to the front of the name of the creature? Why not just call it a <code>Snapjaw Wizard</code>?
| style = "border:1px solid #155352;padding:0.5em 1em;" | Hey, why'd you add the <code>Pyovya_SnapjawMage</code> bit to the front of the name of the creature? Why not just call it a <code>Snapjaw Mage</code>?
|}
|}


Line 100: Line 100:
| style = "padding:0em 1em;"| [[File:Mopango_pilgrim.png|40px]]
| style = "padding:0em 1em;"| [[File:Mopango_pilgrim.png|40px]]
| style= "color:#155352" | <
| style= "color:#155352" | <
| style = "border:1px solid #155352;padding:0.5em 1em;" | When writing a mod, it's common courtesy to prefix unique identifiers with your name, an underscore <code>_</code>, followed by the mod's name. This ensures that if somebody else writes their own Snapjaw Wizard mod, your mod won't conflict with theirs.
| style = "border:1px solid #155352;padding:0.5em 1em;" | When writing a mod, it's common courtesy to prefix unique identifiers with your name, an underscore <code>_</code>, followed by the mod's name. This ensures that if somebody else writes their own Snapjaw Mage mod, your mod won't conflict with theirs.
|}
|}


Line 122: Line 122:
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?>
<objects>
<objects>
   <object Name="Pyovya_SnapjawWizard_Snapjaw Wizard" Inherits="Snapjaw">
   <object Name="Pyovya_SnapjawMage_Snapjaw Mage" Inherits="Snapjaw">
     <part Name="Description" Short="A great hero of the snapjaws." />
     <part Name="Description" Short="A great hero of the snapjaws." />
     <part Name="Render" DisplayName="snapjaw wizard" Tile="Assets_Content_Textures_Creatures_sw_snapjaw_warrior.bmp" ColorString="&amp;O" DetailColor="Y" />
     <part Name="Render" DisplayName="snapjaw mage" Tile="Assets_Content_Textures_Creatures_sw_snapjaw_warrior.bmp" ColorString="&amp;O" DetailColor="Y" />
   </object>
   </object>
</objects>
</objects>
</syntaxhighlight>
</syntaxhighlight>


Before I did into the new XML we've added, save <code>Creatures.xml</code>. Reload your mods, start a new game and wish for a <code>Pyovya_SnapjawWizard_Snapjaw Wizard</code>. You should a new snapjaw like the one below show up:
Before I did into the new XML we've added, save <code>Creatures.xml</code>. Reload your mods, start a new game and wish for a <code>Pyovya_SnapjawMage_Snapjaw Mage</code>. You should a new snapjaw like the one below show up:


(IMAGE HERE, INCLUDING DESCRIPTION OF SNAPJAW)
(IMAGE HERE, INCLUDING DESCRIPTION OF SNAPJAW)


Congrats! You've successfully added a snapjaw wizard to your game.
Congrats! You've successfully added a snapjaw mage to your game.


{| style = "margin: 1em;font-family:Source Code Pro;"
{| style = "margin: 1em;font-family:Source Code Pro;"
Line 141: Line 141:
|}
|}


Well, it's still a little bare-bones, but you have indeed created a new creature called a <code>snapjaw wizard</code> and spawned it in your game! Give yourself a pat on the back, Rulimispruce.
Well, it's still a little bare-bones, but you have indeed created a new creature called a <code>snapjaw mage</code> and spawned it in your game! Give yourself a pat on the back, Rulimispruce.


{| style = "margin: 1em;font-family:Source Code Pro;"
{| style = "margin: 1em;font-family:Source Code Pro;"
Line 159: Line 159:
=== Using custom tiles ===
=== Using custom tiles ===


Instead of having our snapjaw wizards look like off-color snapjaw warriors, let's add a snazzy new tile to the game to use for our wizards! Just pop open a pixel editor, create a 16px x 24px black-and-white tile, save it as a --
Instead of having our snapjaw mages look like off-color snapjaw warriors, let's add a snazzy new tile to the game to use for our mages! Just pop open a pixel editor, create a 16px x 24px black-and-white tile, save it as a --


{| style = "margin: 1em;font-family:Source Code Pro;"
{| style = "margin: 1em;font-family:Source Code Pro;"
Line 171: Line 171:
DOWNLOAD LINK FOR NEW TILE
DOWNLOAD LINK FOR NEW TILE


In your mod directory, create a new folder called <code>Textures/</code>; in that folder, create a new subfolder called <code>Pyovya_SnapjawWizard/</code>; and in there, create another subfolder called <code>Creatures/</code>. Save <code>snapjaw_wizard.png</code> there, so that your mod folder now looks like this:
In your mod directory, create a new folder called <code>Textures/</code>; in that folder, create a new subfolder called <code>Pyovya_SnapjawMage/</code>; and in there, create another subfolder called <code>Creatures/</code>. Save <code>snapjaw_mage.png</code> there, so that your mod folder now looks like this:


<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
SnapjawWizard
SnapjawMage
├── manifest.json
├── manifest.json
├── ObjectBlueprints
├── ObjectBlueprints
│   └── Creatures.xml
│  └── Creatures.xml
├── preview.png
├── preview.png
└── Textures
└── Textures
     └── Pyovya_SnapjawWizard
     └── Pyovya_SnapjawMage
         └── snapjaw_wizard.png
         └── snapjaw_mage.png
</syntaxhighlight>
</syntaxhighlight>


Now, let's change the <code>Render</code> part for our wizards to use this new tile:
Now, let's change the <code>Render</code> part for our mages to use this new tile:


<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<part Name="Render" DisplayName="snapjaw wizard" Tile="Pyovya_Snapjaw/snapjaw_wizard.png" ColorString="&amp;O" DetailColor="Y" />
<part Name="Render" DisplayName="snapjaw mage" Tile="Pyovya_Snapjaw/snapjaw_mage.png" ColorString="&amp;O" DetailColor="Y" />
</syntaxhighlight>
</syntaxhighlight>


Line 198: Line 198:
=== Adding inventory ===
=== Adding inventory ===


We'll keep adding stuff to our snapjaw wizard to round them out a bit more. First of all, like any good wizard, they need a {{favilink|walking stick}} and some [[book|books]]. Let's give them some clothes to equip while we're at it. Add the following XML to your creature:
We'll keep adding stuff to our snapjaw mage to round them out a bit more. First of all, like any good mage, they need a {{favilink|walking stick}} and some [[book|books]]. Let's give them some clothes to equip while we're at it. Add the following XML to your creature:


<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
Line 207: Line 207:
</syntaxhighlight>
</syntaxhighlight>


By setting <code>Number="1-2"</code> and <code>Chance="10"</code> in that last line, we've given our wizards a 10% chance of holding 1-2 books when they spawn.
By setting <code>Number="1-2"</code> and <code>Chance="10"</code> in that last line, we've given our mages a 10% chance of holding 1-2 books when they spawn.


=== Adding skills ===
=== Adding skills ===


Let's give our wizard the [[Cudgel]] skill as well, so that they're a little bit better at fighting with that walking stick:
Let's give our mage the [[Cudgel]] skill as well, so that they're a little bit better at fighting with that walking stick:


<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
Line 219: Line 219:
=== Changing stats ===
=== Changing stats ===


The base <code>Snapjaw</code> creature that we're inheriting from has really low stats, so we're going to bump up our wizard's stats a little.
The base <code>Snapjaw</code> creature that we're inheriting from has really low stats, so we're going to bump up our mage's stats a little.


<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
Line 225: Line 225:
<stat Name="DV" Value="4" />
<stat Name="DV" Value="4" />


<!-- Raise ego to make the wizard's mental mutations a little more powerful -->
<!-- Raise ego to make the mage's mental mutations a little more powerful -->
<stat Name="Ego" Value="17" />
<stat Name="Ego" Value="17" />


Line 244: Line 244:
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<tag Name="DynamicObjectsTable:Snapjaws" />
<tag Name="DynamicObjectsTable:Snapjaws" />
<tag Name="AggregateWith" Value="Pyovya_SnapjawWizard_Snapjaw Wizard" />
<tag Name="AggregateWith" Value="Pyovya_SnapjawMage_Snapjaw Mage" />
</syntaxhighlight>
</syntaxhighlight>


FINAL VERSION OF CREATURE XML BEFORE GOING TO THE NEXT SECTION
FINAL VERSION OF CREATURE XML BEFORE GOING TO THE NEXT SECTION


== Using your creature as a base: Elemental Wizards ==
== Using your creature as a base: Elemental Mages ==


{| style = "margin: 1em;font-family:Source Code Pro;"
{| style = "margin: 1em;font-family:Source Code Pro;"
| style = "padding:0em 1em;"| [[File:Sprouting orb.png|40px]]
| style = "padding:0em 1em;"| [[File:Sprouting orb.png|40px]]
| style= "color:#155352" | <
| style= "color:#155352" | <
| style = "border:1px solid #155352;padding:0.5em 1em;" | Hold up a second. How is this creature a wizard? It doesn't have any kind of magic spells!
| style = "border:1px solid #155352;padding:0.5em 1em;" | Hold up a second. How is this creature a mage? It doesn't have any kind of magic spells!
|}
|}


I was just getting to that!
I was just getting to that!


So far, we've sketched out most of the properties, skills, and stats that a snapjaw wizard should have. Now we're going to create two types of wizards: '''''fire wizards''''' and '''''ice wizards'''''. Under your definition of the <code>Pyovya_SnapjawWizard_Snapjaw Wizard</code> creature in <code>Creatures.xml</code>, add two new creatures:
So far, we've sketched out most of the properties, skills, and stats that a snapjaw mage should have. Now we're going to create two types of mages: '''''fire mages''''' and '''''ice mages'''''. Under your definition of the <code>Pyovya_SnapjawMage_Snapjaw Mage</code> creature in <code>Creatures.xml</code>, add two new creatures:


<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?>
<objects>
<objects>
   <object Name="Pyovya_SnapjawWizard_Snapjaw Wizard" Inherits="Snapjaw">
   <object Name="Pyovya_SnapjawMage_Snapjaw Mage" Inherits="Snapjaw">
     <!-- All of the stuff that you added in the previous section... -->
     <!-- All of the stuff that you added in the previous section... -->
     <tag Name="BaseObject" Value="*noinherit" />
     <tag Name="BaseObject" Value="*noinherit" />
Line 277: Line 277:
<objects>
<objects>
   <!--
   <!--
   Skipped: the XML that defines the "Pyovya_SnapjawWizard_Snapjaw Wizard" creature
   Skipped: the XML that defines the "Pyovya_SnapjawMage_Snapjaw Mage" creature
   -->
   -->


   <object Name="Pyovya_SnapjawWizard_Fire Wizard" Inherits="Pyovya_SnapjawWizard_Snapjaw Wizard">
   <object Name="Pyovya_SnapjawMage_Fire Mage" Inherits="Pyovya_SnapjawMage_Snapjaw Mage">
   </object>
   </object>


   <object Name="Pyovya_SnapjawWizard_Ice Wizard" Inherits="Pyovya_SnapjawWizard_Snapjaw Wizard">
   <object Name="Pyovya_SnapjawMage_Ice Mage" Inherits="Pyovya_SnapjawMage_Snapjaw Mage">
   </object>
   </object>
</objects>
</objects>
</syntaxhighlight>
</syntaxhighlight>


Notice how we've used the <code>Inherits</code> attribute here. We're using our original snapjaw wizard creature, <code>Pyovya_SnapjawWizard_Snapjaw Wizard</code>, as a base for our fire and ice wizards. As a result, our new creatures will spawn with walking sticks, have the [[Cudgel]] skill, and so on.
Notice how we've used the <code>Inherits</code> attribute here. We're using our original snapjaw mage creature, <code>Pyovya_SnapjawMage_Snapjaw Mage</code>, as a base for our fire and ice mages. As a result, our new creatures will spawn with walking sticks, have the [[Cudgel]] skill, and so on.


Referencing the [[Modding:Colors & Object Rendering]] page, we're going to change our fire wizards' detail color to red. We're also going to give them the {{favilink|Pyrokinesis}} mutation:
Referencing the [[Modding:Colors & Object Rendering]] page, we're going to change our fire mages' detail color to red. We're also going to give them the {{favilink|Pyrokinesis}} mutation:


<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<object Name="Pyovya_SnapjawWizard_Fire Wizard" Inherits="Pyovya_SnapjawWizard_Fire Wizard">
<object Name="Pyovya_SnapjawMage_Fire Mage" Inherits="Pyovya_SnapjawMage_Fire Mage">
   <part Name="Render" DisplayName="snapjaw wizard of {{R|fire}}" Tile="Pyovya_SnapjawWizard/snapjaw_wizard.png" ColorString="&amp;O" DetailColor="R" />
   <part Name="Render" DisplayName="snapjaw mage of {{R|fire}}" Tile="Pyovya_SnapjawMage/snapjaw_mage.png" ColorString="&amp;O" DetailColor="R" />
   <mutation Name="Pyrokinesis" Level="1" />
   <mutation Name="Pyrokinesis" Level="1" />
</object>
</object>
Line 303: Line 303:
TODO: explain what's going on in the <code><mutation></code> tag.
TODO: explain what's going on in the <code><mutation></code> tag.


Now we'll make some similar changes to our ice wizards: we'll change their detail color to cyan, and give them the {{favilink|Cryokinesis}} mutation.
Now we'll make some similar changes to our ice mages: we'll change their detail color to cyan, and give them the {{favilink|Cryokinesis}} mutation.


<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<object Name="Pyovya_SnapjawWizard_Ice Wizard" Inherits="Pyovya_SnapjawWizard_Ice Wizard">
<object Name="Pyovya_SnapjawMage_Ice Mage" Inherits="Pyovya_SnapjawMage_Ice Mage">
   <part Name="Render" DisplayName="snapjaw wizard of {{C|ice}}" Tile="Pyovya_SnapjawWizard/snapjaw_wizard.png" ColorString="&amp;O" DetailColor="C" />
   <part Name="Render" DisplayName="snapjaw mage of {{C|ice}}" Tile="Pyovya_SnapjawMage/snapjaw_mage.png" ColorString="&amp;O" DetailColor="C" />
   <mutation Name="Cryokinesis" Level="1" />
   <mutation Name="Cryokinesis" Level="1" />
</object>
</object>
Line 321: Line 321:
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?>
<objects>
<objects>
   <object Name="Pyovya_SnapjawWizard_Snapjaw Wizard" Inherits="Snapjaw">
   <object Name="Pyovya_SnapjawMage_Snapjaw Mage" Inherits="Snapjaw">
     <part Name="Description" Short="Tussocks of fur dress skin stretched over taut muscle." />
     <part Name="Description" Short="Tussocks of fur dress skin stretched over taut muscle." />
     <part Name="Render" DisplayName="snapjaw wizard" Tile="Pyovya_SnapjawWizard/snapjaw_wizard.png" ColorString="&amp;O" DetailColor="Y" />
     <part Name="Render" DisplayName="snapjaw mage" Tile="Pyovya_SnapjawMage/snapjaw_mage.png" ColorString="&amp;O" DetailColor="Y" />


     <inventoryobject Blueprint="Walking Stick" Number="1" />
     <inventoryobject Blueprint="Walking Stick" Number="1" />
Line 339: Line 339:
     <property Name="Role" Value="Artillery" />
     <property Name="Role" Value="Artillery" />
     <tag Name="DynamicObjectsTable:Snapjaws" />
     <tag Name="DynamicObjectsTable:Snapjaws" />
     <tag Name="AggregateWith" Value="Pyovya_SnapjawWizard_Snapjaw Wizard" />
     <tag Name="AggregateWith" Value="Pyovya_SnapjawMage_Snapjaw Mage" />
     <tag Name="BaseObject" Value="*noinherit" />
     <tag Name="BaseObject" Value="*noinherit" />
   </object>
   </object>


   <object Name="Pyovya_SnapjawWizard_Fire Wizard" Inherits="Pyovya_SnapjawWizard_Snapjaw Wizard">
   <object Name="Pyovya_SnapjawMage_Fire Mage" Inherits="Pyovya_SnapjawMage_Snapjaw Mage">
     <part Name="Render" DisplayName="snapjaw wizard of {{R|fire}}" Tile="Pyovya_SnapjawWizard/snapjaw_wizard.png" ColorString="&amp;O" DetailColor="R" />
     <part Name="Render" DisplayName="snapjaw mage of {{R|fire}}" Tile="Pyovya_SnapjawMage/snapjaw_mage.png" ColorString="&amp;O" DetailColor="R" />
     <mutation Name="Pyrokinesis" Level="1" />
     <mutation Name="Pyrokinesis" Level="1" />
   </object>
   </object>


   <object Name="Pyovya_SnapjawWizard_Ice Wizard" Inherits="Pyovya_SnapjawWizard_Snapjaw Wizard">
   <object Name="Pyovya_SnapjawMage_Ice Mage" Inherits="Pyovya_SnapjawMage_Snapjaw Mage">
     <part Name="Render" DisplayName="snapjaw wizard of {{C|ice}}" Tile="Pyovya_SnapjawWizard/snapjaw_wizard.png" ColorString="&amp;O" DetailColor="C" />
     <part Name="Render" DisplayName="snapjaw mage of {{C|ice}}" Tile="Pyovya_SnapjawMage/snapjaw_mage.png" ColorString="&amp;O" DetailColor="C" />
     <mutation Name="Cryokinesis" Level="1" />
     <mutation Name="Cryokinesis" Level="1" />
   </object>
   </object>
Line 365: Line 365:
<objects>
<objects>
   <!-- Weapons -->
   <!-- Weapons -->
   <object Name="Pvovya_SnapjawWizard_Magic Tome" Inherits="BaseMissileWeapon">
   <object Name="Pvovya_SnapjawMage_Magic Tome" Inherits="BaseMissileWeapon">
     <part Name="Description" Short="A magical tome." />
     <part Name="Description" Short="A magical tome." />
     <part Name="Physics" Weight="1" UsesTwoSlots="true" Category="Missile Weapon" />
     <part Name="Physics" Weight="1" UsesTwoSlots="true" Category="Missile Weapon" />
Line 374: Line 374:
   </object>
   </object>


   <object Name="Pvovya_SnapjawWizard_Fire Tome" Inherits="Pvovya_SnapjawWizard_Magic Tome">
   <object Name="Pvovya_SnapjawMage_Fire Tome" Inherits="Pvovya_SnapjawMage_Magic Tome">
     <part Name="Render" DisplayName="tome of {{R|fire}}" Tile="Items/sw_book_1.bmp" ColorString="&amp;R" DetailColor="Y" />
     <part Name="Render" DisplayName="tome of {{R|fire}}" Tile="Items/sw_book_1.bmp" ColorString="&amp;R" DetailColor="Y" />
     <part Name="MissileWeapon" Skill="Rifle" AmmoChar="f" ShotsPerAction="1" AmmoPerAction="1" ShotsPerAnimation="1" WeaponAccuracy="0" />
     <part Name="MissileWeapon" Skill="Rifle" AmmoChar="f" ShotsPerAction="1" AmmoPerAction="1" ShotsPerAnimation="1" WeaponAccuracy="0" />
     <part Name="CooldownAmmoLoader" Cooldown="10" Readout="true" ProjectileObject="Pvovya_SnapjawWizard_FireTomeProjectile" />
     <part Name="CooldownAmmoLoader" Cooldown="10" Readout="true" ProjectileObject="Pvovya_SnapjawMage_FireTomeProjectile" />


     <tag Name="MissileFireSound" Value="flamethrower" />
     <tag Name="MissileFireSound" Value="flamethrower" />
Line 383: Line 383:
   </object>
   </object>


   <object Name="Pvovya_SnapjawWizard_Ice Tome" Inherits="Pvovya_SnapjawWizard_Magic Tome">
   <object Name="Pvovya_SnapjawMage_Ice Tome" Inherits="Pvovya_SnapjawMage_Magic Tome">
     <part Name="Render" DisplayName="tome of {{C|ice}}" Tile="Items/sw_book_1.bmp" ColorString="&amp;C" DetailColor="Y" />
     <part Name="Render" DisplayName="tome of {{C|ice}}" Tile="Items/sw_book_1.bmp" ColorString="&amp;C" DetailColor="Y" />
     <part Name="MissileWeapon" Skill="Rifle" AmmoChar="FR" ShotsPerAction="1" AmmoPerAction="1" ShotsPerAnimation="1" WeaponAccuracy="0" />
     <part Name="MissileWeapon" Skill="Rifle" AmmoChar="FR" ShotsPerAction="1" AmmoPerAction="1" ShotsPerAnimation="1" WeaponAccuracy="0" />
     <part Name="CooldownAmmoLoader" Cooldown="10" Readout="true" ProjectileObject="Pvovya_SnapjawWizard_IceTomeProjectile" />
     <part Name="CooldownAmmoLoader" Cooldown="10" Readout="true" ProjectileObject="Pvovya_SnapjawMage_IceTomeProjectile" />


     <tag Name="MissileFireSound" Value="hiss_low" />
     <tag Name="MissileFireSound" Value="hiss_low" />
Line 393: Line 393:


   <!-- Projectiles -->
   <!-- Projectiles -->
   <object Name="Pvovya_SnapjawWizard_FireTomeProjectile" Inherits="TemporaryProjectile">
   <object Name="Pvovya_SnapjawMage_FireTomeProjectile" Inherits="TemporaryProjectile">
     <part Name="Render" DisplayName="{{R|stream of flame}}" ColorString="&amp;R" />
     <part Name="Render" DisplayName="{{R|stream of flame}}" ColorString="&amp;R" />
     <part Name="Projectile" BasePenetration="8" BaseDamage="1d2" Attributes="Heat Fire" ColorString="&amp;R" PassByVerb="whoosh" />
     <part Name="Projectile" BasePenetration="8" BaseDamage="1d2" Attributes="Heat Fire" ColorString="&amp;R" PassByVerb="whoosh" />
Line 400: Line 400:
   </object>
   </object>


   <object Name="Pvovya_SnapjawWizard_IceTomeProjectile" Inherits="TemporaryProjectile">
   <object Name="Pvovya_SnapjawMage_IceTomeProjectile" Inherits="TemporaryProjectile">
     <part Name="Render" DisplayName="{{C|streak of ice}}" ColorString="&amp;B" />
     <part Name="Render" DisplayName="{{C|streak of ice}}" ColorString="&amp;B" />
     <part Name="Projectile" BasePenetration="4" BaseDamage="1d4" Attributes="Cold NonPenetrating" ColorString="&amp;B" PassByVerb="crackle" />
     <part Name="Projectile" BasePenetration="4" BaseDamage="1d4" Attributes="Cold NonPenetrating" ColorString="&amp;B" PassByVerb="crackle" />
Line 422: Line 422:
| style = "padding:0em 1em;"| [[File:Sprouting orb.png|40px]]
| style = "padding:0em 1em;"| [[File:Sprouting orb.png|40px]]
| style= "color:#155352" | <
| style= "color:#155352" | <
| style = "border:1px solid #155352;padding:0.5em 1em;" | I'm ready to go face these wizards in magical combat.
| style = "border:1px solid #155352;padding:0.5em 1em;" | I'm ready to go face these mages in magical combat.
|}
|}


=== Extra challenge ===
=== Extra challenge ===


Before you go, here's a little challenge that you can use to test what you've learned so far. We now have wizards of fire and ice; now, try creating a new {{qud text|snapjaw wizard of &Welectricity}}, along with a {{qud text|tome of &Welectricity}} that shoots electric projectiles. You're free to go about this however you wish, but here are some general pointers:
Before you go, here's a little challenge that you can use to test what you've learned so far. We now have mages of fire and ice; now, try creating a new {{qud text|snapjaw mage of &Welectricity}}, along with a {{qud text|tome of &Welectricity}} that shoots electric projectiles. You're free to go about this however you wish, but here are some general pointers:


* You'll probably want to give your new wizard the {{favilink|Electrical Generation}} mutation.
* You'll probably want to give your new mage the {{favilink|Electrical Generation}} mutation.
* When you're creating your {{qud text|tome of &Welectricity}}, start by having it shoot <code>ProjectileElectroPistol</code>; this is the projectile that is shot by an {{favilink|arc winder}}. Once you're ready, create your own version of this projectile by referring to how <code>ProjectileElectroPistol</code> is implemented in the game's version of <code>ObjectBlueprints/Items.xml</code>.
* When you're creating your {{qud text|tome of &Welectricity}}, start by having it shoot <code>ProjectileElectroPistol</code>; this is the projectile that is shot by an {{favilink|arc winder}}. Once you're ready, create your own version of this projectile by referring to how <code>ProjectileElectroPistol</code> is implemented in the game's version of <code>ObjectBlueprints/Items.xml</code>.


[[Category:Guides]]
[[Category:Guides]]