Gandalf (Wizard)

Nomad or What

Wayfarer
Supporter
Joined
Nov 25, 2012
Messages
713
Location
Wherever the winds take me
"Gandalf"-style wizard, 4 different skins. Uses Civ V Scout animations with fireball (city attack) effects included in the .ftsxml. High detail and poly count (3,000+), so should ideally be used as an individual unit or great person. Source art from Atlantica Online.

EDIT: Updated effects to six different varieties: City attack, Dromon fire, GDR Railgun, Rocket Artillery, GDR Rocket, and XCOM Plasma Rifle. Images of effects below. :END EDIT


Images of various effects:

Artillery Rocket

Dromon Fire

Dromon Smoke on Wizard Staff

Mech Railgun

Mech Rocket

XCOM Plasma Rifle

DOWNLOAD HERE
:)
 
Last edited:
Magnificent unit :) I'll use him as a Great Mage - a kind of Great Person with combat ability.

Btw, the beard looks like composed from 2 parts - smaller and larger. So perhaps you can remove the second part and make a version with a smaller beard...
 
Btw, the beard looks like composed from 2 parts - smaller and larger. So perhaps you can remove the second part and make a version with a smaller beard...

That effect comes from the lack of transparency alpha channel in Civ V; I try to reshape the UV mapping to avoid them but occasionally I miss a couple. Fortunately it can't be seen at scale in-game.

The beard is easy enough to separate; the bottom portion is on a different mesh.
 
Great job!

Do you happen to know if the "city attack fireball" animation fires if this unit is made to do a ranged attack on another unit?

I ask because I figure that most modders will want some kind of ranged attack animation from these. I have a very complex hack to do this, but it'd be better to have animation in the unit. (I know it sounds weird, but the Rocket Artillery ranged attack animation is actually a pretty good representation for a Magic Missile spell, if you are looking for an animation.)

[My "complex hack" is to combine a single unit member (my spellcaster) with an "Invisible Rocket Artillery" member (kindly supplied by Nutty). It's complex because I use Lua to plop this special unit on the map only when the spell is cast.]
 
Great job!
Do you happen to know if the "city attack fireball" animation fires if this unit is made to do a ranged attack on another unit?

Yep, sure does...I tested it in-game already. No real hack necessary; I just changed the scout attack_a (1100), attack_b (2100), and charge_attack (1140) codes to be defined as the city_attack animation (1160 & 1180). Then, I changed the attack codes in the .ftsxml triggers file to be identical to the city attack effects. Finally, I defined the unit in the .xml file to have RangedCombat with Range=1. So, effectively it is a scout unit that fires as an archer and always uses city attack animations when it attacks.

Here is the code if you are interested:

Wizard_M4.fxsxml:
Spoiler :

<Asset>
<Mesh file="Wizard_M4.gr2"/>
<Animation file="Scout_IdleA.gr2" ec="1000"/>
<Animation file="Scout_FidgetA.gr2" ec="1040"/>
<Animation file="Scout_IdleA_Trans_IdleB.gr2" ec="1020"/>
<Animation file="Scout_IdleB.gr2" ec="2000"/>
<Animation file="Scout_FidgetB.gr2" ec="2040"/>
<Animation file="Scout_IdleB_Trans_IdleA.gr2" ec="2020"/>
<Animation file="Scout_Fortify.gr2" ec="1500"/>
<Animation file="Scout_Fortify_Idle_Trans_IdleA.gr2" ec="1580"/>
<Animation file="Scout_Fortify_Idle.gr2" ec="1520"/>
<Animation file="Scout_Fortify_Idle_Fidget.gr2" ec="1540"/>
<Animation file="Scout_Fortify_Idle_Trans_Combat_Ready_Idle.gr2" ec="1560"/>
<Animation file="Scout_Combat_Ready_Idle.gr2" ec="1620"/>
<Animation file="Scout_Combat_Ready.gr2" ec="1600"/>
<Animation file="Scout_Combat_Ready_Idle_Trans_IdleA.gr2" ec="1640"/>
<Animation file="Scout_Shuffle.gr2" ec="1450"/>
<Animation file="Scout_Run.gr2" ec="1400"/>
<Animation file="Scout_Stop_Run.gr2" ec="1440"/>
<Animation file="Scout_Run_Stop_IdleB.gr2" ec="2440"/>
<Animation file="Scout_Charge_Run.gr2" ec="1120"/>
<Animation file="Scout_Attack_City.gr2" ec="1100, 1140, 1160, 1180, 2100"/>
<Animation file="Scout_Victory.gr2" ec="1800"/>
<Animation file="Scout_Bombard_Defense.gr2" ec="1280"/>
<Animation file="Scout_Bombard_Defense_Idle.gr2" ec="1285"/>
<Animation file="Scout_Bombard_Defense_Trans_IdleA.gr2" ec="1290"/>
<Animation file="Scout_Death_A.gr2" ec="1200"/>
<Animation file="Scout_Death_A_Idle.gr2" ec="1220"/>
<Animation file="Scout_Death_B.gr2" ec="2200"/>
<Animation file="Scout_Death_B_Idle.gr2" ec="2220"/>
<Texture file="WIZARDM4_MAP00.dds"/>
<Texture file="WIZARDM4_MAP01.dds"/>
<Texture file="WIZARDM4_MAP02.dds"/>
<Texture file="black_4x4.dds"/>
<Texture file="Unit_Environment_Dull.dds"/>
<Texture file="Unit_Environment_Sharp.dds"/>
<Texture file="Unit_Irradiance.dds"/>
<BoneUsage>
<Bone name="Staff"/>
<Bone name="Base HumanSpine2"/>
<Bone name="bone_STAFF_high"/>
<Bone name="bone_STAFF_low"/>
<Bone name="Base HumanRPalm"/>
</BoneUsage>
<TimedTrigger file="FX_Triggers_Wizard.ftsxml"/>
<AnimGraph file="RUN_CHARGE_SHUFFLE_TO_SHUFFLE_RUN_CHARGE.dge"/>
<AnimGraph file="IDLE_OFFSET_CONTINUE_TRUE_GRAPH.dge"/>
<AnimGraph file="FORTIFY_FIDGET_GRAPH.dge"/>
<AnimGraph file="ENTER_FORTIFY.dge"/>
<AnimGraph file="LEAVE_BOMBARD_DEFEND_TRANS_IDLE_A_GRAPH.dge"/>
<AnimGraph file="DEATH_FINAL_GRAPH.dge"/>
<AnimGraph file="BOMBARD_DEFEND_LOOP_GRAPH.dge"/>
<AnimGraph file="ENTER_BOMBARD_DEFEND_GRAPH.dge"/>
<AnimGraph file="DEATH_GRAPH.dge"/>
<AnimGraph file="LEAVE_COMBAT_READY.dge"/>
<AnimGraph file="ENTER_COMBAT_READY_GRAPH.dge"/>
<AnimGraph file="FORTIFY_LEAVE_GRAPH.dge"/>
<AnimGraph file="COMBAT_READY_GRAPH.dge"/>
<AnimGraph file="FORTIFY_GRAPH.dge"/>
<AnimGraph file="TRANSITIONS_FOR_IDLES.dge"/>
<AnimGraph file="STOP_RUNNING.dge"/>
<AnimGraph file="IDLE_GRAPH.dge"/>
<AnimGraph file="FIDGETS_GRAPH.dge"/>
<AnimGraph file="MELEE_ATTACKS.dge"/>
<StateMachine file="1_OMNI_STATE_01.fsmxml"/>
<AnimGraph file="RUN_CHARGE_SHUFFLE_LOOP.dge"/>
<AnimGraph file="ATTACK_TO_RUN_CHARGE_SHUFFLE.dge"/>
<AnimGraph file="ATTACK_CITY_TO_RUN_CHARGE_SHUFFLE.dge"/>
<AnimGraph file="START_RUN_CHARGE_SHUFFLE.dge"/>
<AnimGraph file="SHUFFLE_STOP_GRAPH.dge"/>
</Asset>


FX_Triggers_Wizard.ftsxml:
Spoiler :

<triggers>

<!-- "Scout_AttackA.gr2" ec="1100" replaced by "Scout_Attack_City.gr2" in .fxsxml file; ec="1100" effects replaced with ec="1160" to represent city attack effects for Attack "A" -->

<trigger type="FTimedTriggerSound" id="32" time="0.5629633" duration="0" repeat="0" ec="1100" track="1" tier="0" event="AS3D_UNIT_SCOUT_ATTACK_VOX_G" bone=""/>
<trigger type="FTimedTriggerEffect" id="16" time="0.08333332" duration="0.56" repeat="0" ec="1100" track="2" tier="0" event="ART_DEF_VEFFECT_MELEE_TORCH_PROJECTILE" bone="Base HumanRPalm"/>
<trigger type="FTimedTriggerTransfer" id="43" time="0.6333333" duration="0" repeat="0" ec="1100" track="3" tier="0" refid="16" speed="0" tangent.x="0.256407171" tangent.y="-0.9349204" tangent.z="0.245314345"/>
<trigger type="FTimedTriggerSound" id="24" time="0.562963" duration="0" repeat="0" ec="1100" track="1" tier="1" event="AS3D_UNIT_SCOUT_THROW_TORCH_T1" bone=""/>
<trigger type="FTimedTriggerSound" id="41" time="0.562963" duration="0" repeat="0" ec="1100" track="1" tier="2" event="AS3D_UNIT_SCOUT_THROW_TORCH_T2" bone=""/>
<trigger type="FTimedTriggerSound" id="42" time="0.5833335" duration="0" repeat="0" ec="1100" track="1" tier="0" event="AS3D_UNIT_SCOUT_SWORD_SWING_LOW" bone=""/>
<trigger type="FTimedTriggerSound" id="45" time="0.8925928" duration="0" repeat="0" ec="1100" track="1" tier="0" event="AS3D_UNIT_SCOUT_THROW_TORCH" bone=""/>

<!-- "Scout_AttackB.gr2" ec="2100" replaced by "Scout_Attack_City.gr2" in .fxsxml file; ec="2100" effects replaced with ec="1180" to represent city attack effects for Attack "B" -->

<trigger type="FTimedTriggerSound" id="44" time="0.562962949" duration="0" repeat="0" ec="2100" track="1" tier="0" event="AS3D_UNIT_SCOUT_ATTACK_VOX_G" bone=""/>
<trigger type="FTimedTriggerEffect" id="22" time="0.08333332" duration="0.56" repeat="0" ec="2100" track="2" tier="0" event="ART_DEF_VEFFECT_MELEE_TORCH_PROJECTILE" bone="Base HumanRPalm"/>
<trigger type="FTimedTriggerTransfer" id="34" time="0.6333333" duration="0" repeat="0" ec="2100" track="3" tier="0" refid="22" speed="0" tangent.x="0.256407171" tangent.y="-0.9349204" tangent.z="0.245314345"/>
<trigger type="FTimedTriggerSound" id="69" time="0.5833335" duration="0" repeat="0" ec="2100" track="1" tier="0" event="AS3D_UNIT_SCOUT_SWORD_SWING_LOW" bone=""/>
<trigger type="FTimedTriggerSound" id="70" time="0.8870372" duration="0" repeat="0" ec="2100" track="1" tier="0" event="AS3D_UNIT_SCOUT_THROW_TORCH" bone=""/>
<trigger type="FTimedTriggerSound" id="71" time="0.562963" duration="0" repeat="0" ec="2100" track="1" tier="1" event="AS3D_UNIT_SCOUT_THROW_TORCH_T1" bone=""/>
<trigger type="FTimedTriggerSound" id="79" time="0.562963" duration="0" repeat="0" ec="2100" track="1" tier="2" event="AS3D_UNIT_SCOUT_THROW_TORCH_T2" bone=""/>

<!-- "Scout_Charge_Attack.gr2" ec="1140" replaced by "Scout_Attack_City.gr2" in .fxsxml file; ec="1140" effects replaced with ec="1180" to represent city attack effects for Charge Attack -->

<trigger type="FTimedTriggerSound" id="52" time="0.562962949" duration="0" repeat="0" ec="1140" track="1" tier="0" event="AS3D_UNIT_SCOUT_ATTACK_VOX_G" bone=""/>
<trigger type="FTimedTriggerEffect" id="53" time="0.08333332" duration="0.56" repeat="0" ec="1140" track="2" tier="0" event="ART_DEF_VEFFECT_MELEE_TORCH_PROJECTILE" bone="Base HumanRPalm"/>
<trigger type="FTimedTriggerTransfer" id="54" time="0.6333333" duration="0" repeat="0" ec="1140" track="3" tier="0" refid="53" speed="0" tangent.x="0.256407171" tangent.y="-0.9349204" tangent.z="0.245314345"/>
<trigger type="FTimedTriggerSound" id="55" time="0.5833335" duration="0" repeat="0" ec="1140" track="1" tier="0" event="AS3D_UNIT_SCOUT_SWORD_SWING_LOW" bone=""/>
<trigger type="FTimedTriggerSound" id="56" time="0.8870372" duration="0" repeat="0" ec="1140" track="1" tier="0" event="AS3D_UNIT_SCOUT_THROW_TORCH" bone=""/>
<trigger type="FTimedTriggerSound" id="59" time="0.562963" duration="0" repeat="0" ec="1140" track="1" tier="1" event="AS3D_UNIT_SCOUT_THROW_TORCH_T1" bone=""/>
<trigger type="FTimedTriggerSound" id="60" time="0.562963" duration="0" repeat="0" ec="1140" track="1" tier="2" event="AS3D_UNIT_SCOUT_THROW_TORCH_T2" bone=""/>

<!-- "Scout_Attack_City.gr2" ec="1160" appears as normal, unedited -->

<trigger type="FTimedTriggerSound" id="33" time="0.5629633" duration="0" repeat="0" ec="1160" track="1" tier="0" event="AS3D_UNIT_SCOUT_ATTACK_VOX_G" bone=""/>
<trigger type="FTimedTriggerEffect" id="23" time="0.08333332" duration="0.56" repeat="0" ec="1160" track="2" tier="0" event="ART_DEF_VEFFECT_MELEE_TORCH_PROJECTILE" bone="Base HumanRPalm"/>
<trigger type="FTimedTriggerTransfer" id="31" time="0.6333333" duration="0" repeat="0" ec="1160" track="3" tier="0" refid="23" speed="0" tangent.x="0.256407171" tangent.y="-0.9349204" tangent.z="0.245314345"/>
<trigger type="FTimedTriggerSound" id="4" time="0.562963" duration="0" repeat="0" ec="1160" track="1" tier="1" event="AS3D_UNIT_SCOUT_THROW_TORCH_T1" bone=""/>
<trigger type="FTimedTriggerSound" id="15" time="0.562963" duration="0" repeat="0" ec="1160" track="1" tier="2" event="AS3D_UNIT_SCOUT_THROW_TORCH_T2" bone=""/>
<trigger type="FTimedTriggerSound" id="38" time="0.5833335" duration="0" repeat="0" ec="1160" track="1" tier="0" event="AS3D_UNIT_SCOUT_SWORD_SWING_LOW" bone=""/>
<trigger type="FTimedTriggerSound" id="48" time="0.8925928" duration="0" repeat="0" ec="1160" track="1" tier="0" event="AS3D_UNIT_SCOUT_THROW_TORCH" bone=""/>

<!-- "Scout_Attack_City.gr2" ec="1180" appears as normal, unedited -->

<trigger type="FTimedTriggerSound" id="78" time="0.562962949" duration="0" repeat="0" ec="1180" track="1" tier="0" event="AS3D_UNIT_SCOUT_ATTACK_VOX_G" bone=""/>
<trigger type="FTimedTriggerEffect" id="17" time="0.08333332" duration="0.56" repeat="0" ec="1180" track="2" tier="0" event="ART_DEF_VEFFECT_MELEE_TORCH_PROJECTILE" bone="Base HumanRPalm"/>
<trigger type="FTimedTriggerTransfer" id="30" time="0.6333333" duration="0" repeat="0" ec="1180" track="3" tier="0" refid="17" speed="0" tangent.x="0.256407171" tangent.y="-0.9349204" tangent.z="0.245314345"/>
<trigger type="FTimedTriggerSound" id="49" time="0.5833335" duration="0" repeat="0" ec="1180" track="1" tier="0" event="AS3D_UNIT_SCOUT_SWORD_SWING_LOW" bone=""/>
<trigger type="FTimedTriggerSound" id="50" time="0.8870372" duration="0" repeat="0" ec="1180" track="1" tier="0" event="AS3D_UNIT_SCOUT_THROW_TORCH" bone=""/>
<trigger type="FTimedTriggerSound" id="51" time="0.562963" duration="0" repeat="0" ec="1180" track="1" tier="1" event="AS3D_UNIT_SCOUT_THROW_TORCH_T1" bone=""/>
<trigger type="FTimedTriggerSound" id="72" time="0.562963" duration="0" repeat="0" ec="1180" track="1" tier="2" event="AS3D_UNIT_SCOUT_THROW_TORCH_T2" bone=""/>

</triggers>
 
[My "complex hack" is to combine a single unit member (my spellcaster) with an "Invisible Rocket Artillery" member (kindly supplied by Nutty). It's complex because I use Lua to plop this special unit on the map only when the spell is cast.]

It seems to me that there is an easier way to do this. Instead of creating an invisible unit with Lua, just alter the .ftsxml file. So, the current city attack effects simply reference rocket artillery effects instead and use the appropriate bone as the origination point ("Base HumanRPalm" in the case of this unit).

Test my unit in game (it downloads as a ready-to-go test mod) and see what you think of the current effects. If it looks satisfactory, let me know and I will test the unit using Rocket Artillery effects in lieu of city attack effects.
 
I use FramedArchitect's recolored Scouts, they have ranged attacks and don't need any invisible members.
 
Instead of ..., just alter the .ftsxml file.
Because I had tried this (for many hours) without success :crazyeye:. There have been a number of other threads started by modders who wanted to hook up existing range animations to different units. But all of us were too ignorant about art assets to get anything working.

Just to be clear, are you saying this can be done in fxsxml and ftsxml files only, without modding gr2? Or is that only the case when you are re-jiggering within a unit's own animations (e.g., using city attack for ranged attack but not borrowing from another unit). Or can I hook up any ranged animation to any unit this way?
 
No, he's referring to the effect (the projectile, in this case), not the model's animation--but it does make the complexity of using an invisible unit unnecessary. You just have to figure out which bone to which to attach the effect (note that Granny Viewer is capable of displaying bone names). You then reference the bone in the BoneUsage section in the .fxsxml, and then refer to the bone in your .ftsxml (see the examples in Nomad's post #5).
 
You then reference the bone in the BoneUsage section in the .fxsxml, and then refer to the bone in your .ftsxml (see the examples in Nomad's post #5).

I edited the .ftsxml triggers spoiler for clarity to easily identify how each attack is defined.
 
Because I had tried this (for many hours) without success :crazyeye:. There have been a number of other threads started by modders who wanted to hook up existing range animations to different units. But all of us were too ignorant about art assets to get anything working.

Just to be clear, are you saying this can be done in fxsxml and ftsxml files only, without modding gr2? Or is that only the case when you are re-jiggering within a unit's own animations (e.g., using city attack for ranged attack but not borrowing from another unit). Or can I hook up any ranged animation to any unit this way?

No modding the .gr2 at all; it is done entirely through the .fxsxml and .ftsxml files. I just confirmed that it works by added a slew of various special effects to these wizards. Download the latest file and try them for yourself. Then, reverse-engineer the information contained in the .ftsxml files and apply them to whichever units you want to modify.

There is one caveat: Some special effects (such as the Dromon) have unique bones that assist in creating an effect. So for these, unless you create a custom animation that adds this bone into the model, you will not get the desired effect. I overcame this somewhat with the wizard by coupling the Dromon fire with a city attack effect; at scale, it is hardly noticeable. Nevertheless, without the bone and animation that it uses the Dromon fire will not project outward as it should. Fortunately, most effects only require point of origination which can be assigned to any bone desired.
 
Holy cow, I cannot believe how good the XCOM plasma ray and GDR railgun effects look. Just a question, in each of those pictures, who is attacking? Kinda hard to tell with all those explosions and colored rays of light going off...
Great unit though Nomad, even without the effects. Though the effects make it ten times better.:mischief:
 
Holy cow, I cannot believe how good the XCOM plasma ray and GDR railgun effects look. Just a question, in each of those pictures, who is attacking? Kinda hard to tell with all those explosions and colored rays of light going off...

It's difficult to get a screen capture of these effects with proper timing :(

I would recommend downloading the files (it's a complete mod) and setting up a small game using it. Barbarians spawn these guys as well which makes it a lot of fun (and they are setup to be SERIOUSLY OP against all of the rival civs). You will see just how cool the effects are, particularly the plasma beam (deathray wizard) and mech autocannon (railgun wizard) effects. Those knocked my socks off! The flame wizard isn't bad, either. I am not a big fan of the two missile attacks because they look too much like a rocket and not enough like a "magic missile" for my taste. The last one uses city attack animations which also look decent but have been overplayed.

Some of the effects originate from the right hand (Base HumanRPalm) and others from the staff. The deathray originates from his head - frickin' laser beams!!! :mwaha:
 
Ooh, nice. I think the GDR attack effect looks the best with the model, but the Dromon looks good too.
 
OK, I got 5 of the effects working for different spells in v5 (just released). Now I've seen them in-game and it is much more impressive than the screenshots! Even the missiles look convincingly magical.

It's kind of funny now because the Wizard changes robe color when casting different spells. I know how to fix that but I was in a hurry to get out a working version with these guys...
 
OK, I got 5 of the effects working for different spells in v5 (just released). Now I've seen them in-game and it is much more impressive than the screenshots! Even the missiles look convincingly magical.

It's kind of funny now because the Wizard changes robe color when casting different spells. I know how to fix that but I was in a hurry to get out a working version with these guys...

Augh, ended up playing a hotseat game with my brother all weekend, so I still haven't gotten to try the wizard out. Keen to see these effects! (Although I did manage to get a cool-looking new UI graphic done!) I'm planning to use the Dromon fire for my Sorceress, while conserving the GDR railgun graphic for my Master Spark-casting Witches, eventually...

As for the robes... perhaps mages wear mana-reactive robes, that change color depending on what manner of magic they're casting? :p

Also, one other thought... I recall when looking at the effects from G&K, the Great Prophet has a pair of effects associated with the founding of a religion (a burst of light and something else). While the number of attack spells that don't actually fire projectiles is probably rather slim, I do wonder if it's another possible effect to tie to a spellcasting -- perhaps for some kind of Charm or Death spell or whatnot, that could hurt an enemy without actually firing something at them...

Admittedly, projectile spells probably DO look far cooler anyways. :p
 
Top Bottom