Tay Ferret Games

video games and other stuff made by Tay the Ferret.

hey, kids! this website contains sexual content.

make sure your parents aren't watching, or you might get in trouble.

XML config documentation

this is the complete documentation for every XML tag you can use in the Pokémon-Amie configuration files.

some sections are still incomplete, but it'll be done soon!


(back to the modding tutorial)


<config>

the whole file needs to be wrapped inside <config> </config> tags.


<touch>

each touch definition assigns a name to a group of collision spheres. the name gets referenced in later parts of the config file.


<name>

name that will be referenced later in the config file.


<sub_strings>

a comma-separated list of strings to match against collision sphere names.

a collision sphere is part of this touch group if any part of it contains any of the sub-strings.


this tag is required unless you have an <inverse> tag.

(bug: you should probably be able to have a touch definition with only a <toy /> tag and no sub-strings, but currently that doesn't work. )


<inverse>

make this touch definition the inverse of another touch definition. (include all collision spheres not included in the specified touch definition.)


<or_none />

activate this touch when the player isn't touching any collision spheres.


this tag requires the touch definition to have <sub_strings> or <inverse> too. there's a built-in touch definition named "none" if you need it.


<toy />

include all collision spheres on the current sex toy object, if any.


built-in touch definitions

there are some pre-defined touch definitions named "any" and "none". you don't have to define them yourself, but you can use their names later in the config file.

"any" is active when any collision sphere on the character is being touched. (it doesn't include collision spheres on the sex toy.)

"none" is active when no collision spheres are being touched.


sound-changing touch definitions (optional, recommended)

if you name a touch definition "rub_sound_genitals", the game will play a different rubbing sound whenever touching that group. this is to indicate when the player is arousing the Pokémon.

if you name a touch definition "rub_sound_pre_orgasm", the game will play a different rubbing sound whenever touching that group during the pre-orgasm pose. this is to indicate when the Pokémon is approaching orgasm!

the pre-orgasm sound overrides the genital sound during the pre-orgasm pose.


examples

<config>

    ...

    <--! activated when touching the penis, sheath, or balls. -->
    <touch>
        <name>genitals</name>
        <sub_strings>penis,sheath,balls</sub_strings>
    </touch>

    <--! activated when touching any collision spheres that aren't
	included in the "genitals" touch definition. -->
    <touch>
        <name>not_genitals</name>
        <inverse>genitals</inverse>
    </touch>

    <--! activated when touching butt spheres, sex toy spheres,
        or touching nothing at all. -->
    <touch>
        <name>confused</name>
        <sub_strings>butt</sub_strings>
        <toy />
        <or_none />
    </touch>

    <--! getting turned on! -->
    <touch>
        <name>rub_sound_genitals</name>
        <sub_strings>penis,balls,pawpad,ear</sub_strings>
    </touch>

    <--! so close! -->
    <touch>
        <name>rub_sound_pre_orgasm</name>
        <sub_strings>penis</sub_strings>
        <toy />
    </touch>

    ...

</config>
			

<vert_swap>

defines one or more vertex swap states; one per vertex swap group.


<name>

the name of this collection of states, referenced later by poses.


<touch> (optional)

activate these states only when the specified touch group is active.

if you don't specify this tag, then these states will become the default (they'll be active unless overridden by a touch or a blink).


<group>

values for one vertex swap group.


<name>

name of a vertex swap group.


<state>

name of the state to activate for this group.


examples

<config>

    ...

    <vert_swap>
        <name>blink</name>
		
        <group>
            <name>eyes</name>
            <state>shut</state>
        </group>
    </vert_swap>

    <vert_swap>
        <name>default</name>
		
        <group>
            <name>mouth</name>
            <state>shut</state>
        </group>
        <group>
            <name>eyes</name>
            <state>open</state>
        </group>
    </vert_swap>

    <vert_swap>
        <name>happy</name>
        <touch>head</touch>
		
        <group>
            <name>mouth</name>
            <state>smile</state>
        </group>
        <group>
            <name>eyes</name>
            <state>shut_happy</state>
        </group>
    </vert_swap>

    <pose>
        ...
		
        <vert_swap_blink>blink</vert_swap_blink>
        <vert_swap>default</vert_swap>
        <vert_swap>happy</vert_swap>
		
        ...
    </pose>

    ...

</config>
			

<vert_fade>

defines fade parameters for a single vertex swap state.

<vert_fade> overrides <vert_swap> for all groups it's active on, so you probably shouldn't use both swapping and fading on the same group. I've only used <vert_fade> for blushing so far.


<name>

the name of this fade definition, referenced later by poses.


<group>

name of a vertex swap group.


<state>

name of the state to fade for this group.


<touch> (optional)

fade in when touching this touch group. fade out when not touching, or when you don't include this tag.


<fade_dur> (optional)

amount of seconds it takes to fade from fully transparent to fully opaque (or the other way around if the player isn't touching).

default: 0.0 (instant)


<fade_min> (optional)

the minimum transparency from 0.0 to 1.0 (0.0 being fully transparent).

default: 0.0


<fade_max> (optional)

the maximum transparency.

default: 1.0


examples

<config>

    ...

    <vert_fade>
        <name>blush_fade_in</name>
        <group>blush</group>
        <state>on</state>
		
        <touch>6.0</touch>
        <fade_dur>6.0</fade_dur>
    </vert_fade>

    <vert_fade>
        <name>blush</name>
        <group>blush</group>
        <state>on</state>
		
        <--! keep it faded in even when not touching. -->
        <fade_min>1.0</fade_min>
    </vert_fade>

    ...

    <pose>
        ...
        <--! can only have one vert_fade for the "blush" group in each pose. -->
        <vert_fade>blush_fade_in</vert_fade>
        ...
    </pose>

    <pose>
        ...
        <vert_fade>blush</vert_fade>
        ...
    </pose>

    ...

</config>
			

<toy>

(I'll write this section if requested.)


<cum>

defines ejaculation parameters which can be used in any pose.


<name>

identifier to be referenced later by poses.


<attach_bone>

each shot of semen originates from an animation bone on the character. specify its name here.

the semen will shoot in the direction this bone is pointing.

the bone doesn't have to have any vertices weighted to it, but it does need to be marked as a deform bone and have a vertex group named after it (even if that group has no vertices in it).


<object>

the full name of the Blender object to use for the semen model.

if the name of the Blender file is cum.blend and the object is horse_cum, then this value would be "cum.horse_cum"

there are multiple models already in cum.blend that you can use.


<armature>

the full name of the Blender armature object for the semen model.

(for example: "cum.horse_cum_arma".)


<count> (optional)

the number of times to shoot semen.

default: keep shooting until the pose ends.


<period>

the number of seconds between each shot of semen.


<transparency> (optional)

how thick or transparent it looks. 0.0 is the most transparent, 1.0 is the most thick.

default: 1.0


<power> (optional)

affects hard/far the semen will shoot.

default: 1.0


<scale> (optional)

scales the cum mesh.

default: 0.3 (don't ask me why!)


<no_sound /> (optional)

if you use this tag, any poses that use this <cum> definition will not make any <cum_sound>s.


example

<config>

    ...

    <cum>
        <name>orgasm</name>
        <attach_bone>penis_tip</attach_bone>
        <object>cum.horse_cum</object>
        <armature>cum.horse_cum_arma</armature>
		
        <count>3</count>
        <period>0.667</period>
        <transparency>0.9</transparency>
        <power>2.5</power>
        <scale>0.5</scale>
    </cum>

    ...

    <pose>
        ...
        <cum>orgasm</cum>
        ...
    </pose>

    ...

</config>
			

<cum_sound>

define a sound to be played upon each ejaculation.

you can make multiple <cum_sound> definitions and it'll pick a random one for each ejaculation.


the tags for a <cum_sound> are the same as a <sound>


example

<config>

    ...

    <cum>
        <name>orgasm</name>
        ...
    </cum>

    ...

    <cum_sound>
        <file>snd/flareonCry136.wav</file>
        <volume>0.2</volume>
        <pitch_mod_const>1.2</pitch_mod_const>
        <pitch_mod>4.5</pitch_mod>
    </cum_sound>
    <cum_sound>
        <file>snd/flareonCry136.wav</file>
        <volume>0.2</volume>
        <pitch_mod_const>1.4</pitch_mod_const>
        <pitch_mod>4.0</pitch_mod>
    </cum_sound>

    ...

    <pose>
        ...
        <cum>orgasm</cum>
        ...
    </pose>

    ...

</config>
			

<additive_anim>

defines an animation that can be activated in any pose on top of the main looping animation for that pose.

depending on its blend mode and type, it can be added to the main animation, blended with it, or replace it completely.

an additive animation's influence can change during the course of a pose between 0.0 (no influence) and 1.0 (full influence).


this section might seem complicated, but the rub/look horizontal/vertical animation types are really easy to animate, and you can pretty much copy and paste from Mew's or Zebstrika's or Flareon's XML and adjust values until it looks right!

and if you have a specific effect you want to do with additive animations but can't figure out how, just ask me (email or whatever) and I'll let you know the best way, if it's possible.


<name>

identifies this animation and its parameters when it's referenced later by poses.


<anim>

the name of the Action in Blender.


<blend_mode>

how this animation will blend with the pose's main animation.

there are 3 blend modes:


<type>

the additive animation's type determines how it will be triggered and what will affect its influence.

there are 7 types:


each type has its own values.

the type-specific values are all optional and their defaults are given below.


values for "fade_loop"

<touch>

start fading in while the player is touching this touch group, and fade out when not touching.

default: if you don't use this tag, the animation will just fade out (toward 0.0 influence).


<anim_dur>

this animation's duration in seconds. it's usually best to have it match the duration of the main pose's animation, but you don't have to do that.

default: 1.0


<fade_dur>

the time (in seconds) that it takes to fade from 0.0 influence to 1.0 influence (or from 1.0 to 0.0 if not touching).

default: 1.0


<inactive_fade_out_dur>

the time (in seconds) that it takes to fade from 1.0 influence to 0.0 influence when the additive animation becomes inactive (when the character transitions to a pose without this additive animation).

default: 1.0


<start_influence>

the influence to start at every time this animation becomes active (the start of the first pose it's used in).

default: 0.0


values for "fade_static"

<touch>

(same as "fade_loop".)


<fade_dur>

(same as "fade_loop".)


<inactive_fade_out_dur>

(same as "fade_loop".)


<start_influence>

(same as "fade_loop".)


<instant_blend />

makes the blend no longer depend on influence. the animation is always fully blended in as long as the influence is greater than 0.0.

the animation's current frame is still controlled by the influence though.

no default. (it's just an empty tag.)


values for "rub_horizontal", "rub_vertical"

<touch>

(same as "fade_loop", except for the default.)

default: "any"


<center>

this value corresponds to a point in the animation from 0.0 to 1.0.

the animation settles to the center value when the player is touching the character, moving away from the center the faster they rub.

default: 0.5


<max_speed>

the animation moves as fast as it can away from its center when the mouse moves at this speed.

default: 5.0


<multiplier>

scale the speed at which the animation's influence changes.

default: 1.0


<smooth>

the animation is more responsive at low smooth values (toward 0.0) and more laggy at high smooth values (toward 1.0).

the animation won't move away from its center at all when smooth is 1.0.

default: 0.9



values for "look_horizontal", "look_vertical", "penetration"

<smooth>

(same as "rub_horizontal"/"rub_vertical".)


<range_scale>

the maximum influence. (so if <range_scale> is 0.5, it will only ever get halfway through the animation.)

"look_horizontal", "look_vertical" types are centered at 0.5 and "penetration" is centered at 0.0, so a <range_scale> of 0.5 would scale the range to [0.25, 0.75] for "look_*" types, and [0.0, 0.5] for "penetration".

default: 1.0



examples

<config>

    ...

    <additive_anim>
        <name>thrust</name>
        <anim>idle_side_thrust</anim>
        <blend_mode>replace_all</blend_mode>
        <type>fade_loop</type>

        <touch>penis</touch>
        <anim_dur>1.8</anim_dur>
        <fade_dur>6.0</fade_dur>
        <inactive_fade_out_dur>0.75</inactive_fade_out_dur>
    </additive_anim>

    ...

    <pose>
        ...
        <add_anim>thrust</add_anim>
        ...
    </pose>

    ...

</config>
			

<first_pose> (optional)

the name of the pose to start on when a Pokémon is selected.


its default value is the first pose in the XML file.


example

<config>

    ...

    <first_pose>idle</first_pose>

    ...

    <pose>
        <name>whatever</name>
        ...
    </pose>
    <pose>
        <name>idle</name>
        ...
    </pose>

    ...

</config>
			

<pre_orgasm_pose> (optional, recommended)

the name of the pose that happens right before the Pokémon's orgasm. the game can play a different rubbing sound during this pose.


example

<config>

    ...

    <pre_orgasm_pose>thrusting</pre_orgasm_pose>

    ...

    <pose>
        <name>thrusting</name>
        ...
    </pose>
    <pose>
        <name>orgasm</name>
        ...
    </pose>

    ...

</config>
			

<pose>

<name>

the name of this pose. referenced in the rest of the config file.


<anim>

the name of an Action in Blender to use as the main looping animation.


<anim_dur>

the duration of the main animation in seconds.


<camera_anim>

the name of the camera animation to use for this pose.

for example, if the Action name is "cam:idle", you'd put "idle" here.


<vert_swap> (optional)

allow a <vert_swap> state to be active in this pose.

you can have multiple <vert_swap> definitions per pose.


<vert_swap_blink> (optional)

if you use this tag, the character will randomly blink during this pose.

this tag specifies which <vert_swap> definition it will switch to while blinking.

you can only have one of these per pose.


<vert_fade> (optional)

allow a <vert_fade> state to be active in this pose.

you can have multiple <vert_fade> definitions per pose, but they're not made to overlap groups like the <vert_swap> tags are; each pose should only have one <vert_fade> per group, unlike <vert_swap>.


<add_anim>

activate an additive animation for this pose.

this references an <additive_anim> earlier in the config file.

you can have multiple additive animations in one pose.


<toy>

if this tag is used, a sex toy will appear for the whole pose.

the name references a toy definition earlier in the config file.


<cum>

if this tag is used, the character will start ejaculating in this pose.

the name references a cum definition earlier in the config file.


<transition>

this defines when to transition from this pose to a new one. usually when touching a certain touch group for a certain amount of time.

you can have multiple transitions in one pose.


example

<config>

    ...
	
    <vert_swap>
        <name>blink</name>
        ...
    </vert_swap>
    <vert_swap>
        <name>default</name>
        ...
    </vert_swap>
    <vert_swap>
        <name>pleasure</name>
        ...
    </vert_swap>

    ...
	
    <vert_fade>
        <name>blush</name>
        ...
    </vert_fade>

    ...
	
    <toy>
        <name>big_horse_dildo</name>
        ...
    </toy>

    ...
	
    <cum>
        <name>orgasm</name>
        ...
    </cum>

    ...
	
    <additive_anim>
        <name>head_rub_x</name>
        ...
    </additive_anim>
    <additive_anim>
        <name>head_rub_y</name>
        ...
    </additive_anim>
    <additive_anim>
        <name>sheath_rub</name>
        ...
    </additive_anim>

    ...

    <pose>
        <name>orgasm</name>
        <anim>thrusting</anim>
        <anim_dur>2.0</anim_dur>

        <camera_anim>orgasm</camera_anim>

        <vert_swap_blink>blink</vert_swap_blink>
        <vert_swap>default</vert_swap>
        <vert_swap>pleasure</vert_swap>
		
        <vert_fade>blush</vert_fade>
		
        <toy>big_horse_dildo</toy>

        <cum>orgasm</cum>

        <add_anim>head_rub_x</add_anim>
        <add_anim>head_rub_y</add_anim>
        <add_anim>sheath_rub</add_anim>
		
        <--! there's an example of transitions in a later section -->
        <transition>
            ...
        </transition>
        <transition>
            ...
        </transition>
    </pose>

    ...

</config>
			

<transition>

transitions define when to switch from the current pose to a new one.

a pose can have as many transitions as you want, but each transition only has one trigger.

transitions will only be triggered at the end of the current animation loop so you can smoothly match up the animation for each pose.


<trigger>

describes the conditions that trigger the transition.

all triggers need a <type> tag, plus any other tags specific to that type.


"touch" <trigger>

triggered after touching a certain touch group for an amount of time.


"anim_loop" <trigger>

triggered after the pose's animation goes through a certain number of loops.


"add_anim_threshold" <trigger>

triggered when one of the additive animations on this pose gets to a certain point.


<new_pose> (optional)

the name of the pose to switch to when this transition gets triggered.

if you leave out this tag, the transition will go back to the previous pose.


<sound> (optional)

play a sound effect when the transition is triggered.


examples

<config>

    ...
	
    <touch>
        <name>arousal</name>
        ...
    </touch>
	
    ...
	
    <additive_anim>
        <name>knot_expand</name>
        ...
    </additive_anim>

    ...

    <pose>
        <name>idle</name>
		
        ...
		
        <--! get aroused after over 3.5 seconds of continuous petting. -->
        <transition>
            <trigger>
                <type>touch</type>
                <touch_name>arousal</touch_name>
                <touch_dur>3.5</touch_dur>
            </trigger>
			
            <new_pose>aroused</new_pose>
        </transition>
    </pose>

    <pose>
        <name>aroused</name>
		
        ...
		
        <--! orgasm when the knot gets big enough. -->
        <transition>
            <trigger>
                <type>add_anim_threshold</type>
                <add_anim_name>knot_expand</add_anim_name>
                <threshold>1.0</threshold>
                <compare>greater_or_equal</compare>
            </trigger>
			
            <new_pose>orgasm</new_pose>
        </transition>
    </pose>

    <pose>
        <name>orgasm</name>
		
        ...
		
        <--! stop orgasm after 5 animation loops. -->
        <transition>
            <trigger>
                <type>anim_loop</type>
                <loop_count>5</loop_count>
            </trigger>
			
            <new_pose>afterglow</new_pose>
			
            <sound>
                <file>snd/happy_growl.wav</file>
                <volume>0.35</volume>
                <pitch_mod>0.8</pitch_mod>
            </sound>
        </transition>
    </pose>

    <pose>
        <name>afterglow</name>
        ...
    </pose>

    ...

</config>