Combo editing help [another question unsolved]

In this forum you will find and post information regarding the modding of Star Wars Battlefront 2. DO NOT POST MOD IDEAS/REQUESTS.

Moderator: Moderators

Post Reply
MileHighGuy
Jedi
Jedi
Posts: 1194
Joined: Fri Dec 19, 2008 7:58 pm

Combo editing help [another question unsolved]

Post by MileHighGuy »

im new to combos and im trying to make the wampa attack 2 transition back to attack 1 and so on

so would i just delete the transitions after the attack 2 state?
and how would i make the transition back to attack 1?
Last edited by MileHighGuy on Sun May 10, 2009 8:29 pm, edited 3 times in total.
MetalcoreRancor
Brigadier General
Brigadier General
Posts: 628
Joined: Thu Jun 07, 2007 11:13 am
Projects :: No Mod project currently.
Games I'm Playing :: swbf origin
xbox live or psn: No gamertag set

Re: combo editing help

Post by MetalcoreRancor »

Hidden/Spoiler:
[code]State("ATTACK1")
{
Posture("Stand");
Animation("stand_attack1a");

InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
Edge(0);
DamageTime(5, 12, "Frames");
DamageLength(1.0);
DamageWidth(1.25);
Damage(300);
Push(10.0);
}

// Duration(20, "Frames");

Sound("com_weap_melee_swing");

Transition("ATTACK2")
{
If()
{
TimeStart(0.0);
TimeEnd(0.25, "FromEnd"); //, "SyncIfOvertime");
Posture("Stand");
Button("Fire", "Press");
}
}
Transition("RECOVER1");
}

State("RECOVER1")
{
Posture("Stand");
Animation("stand_attack1a_end")
{
// SyncType("attack1b", "ByTime");
AimType("None");
BlendOutTime(0.15);
BlendTimeTo("standalert_idle_emote", 0.3);
}

InputLock(0.3, "All", "!Thrust");
AlignedToThrust();

Transition("IDLE")
{
If()
{
Break(0.3); // break out after 0.2 seconds if:
ButtonsPressed("Any");
}
}
}

State("ATTACK2")
{
Posture("Stand");
Animation("stand_attack1b")
{
// SyncType("attack1b", "ByTime");
AimType("None");
BlendInTime(0.3);
BlendOutTime(0.15);
}

InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
Edge(1);
DamageTime(6, 13, "Frames");
DamageLength(1.5);
DamageWidth(1.25);
Damage(300);
Push(10.0);
}

// Duration(23, "Frames");

Sound("com_weap_melee_swing");

Transition("ATTACK3")
{
If()
{
TimeStart(0.0);
TimeEnd(0.25, "FromEnd"); //, "SyncIfOvertime");
Posture("Stand");
Button("Fire", "Press");
// Thrust(">", 0.9);
// ThrustAngle(-45, 45);
}
}
Transition("RECOVER2");
}

State("RECOVER2")
{
Posture("Stand");
Animation("stand_attack1b_end")
{
// SyncType("attack1c", "ByTime");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
BlendTimeTo("standalert_idle_emote", 0.3);
}

InputLock(0.3, "All", "!Thrust");
AlignedToThrust();

Transition("IDLE")
{
If()
{
Break(0.3); // break out after 0.2 seconds if:
ButtonsPressed("Any");
}
}
}[/code]
I've hidden the base coding above this, of the Attack states 1 and 2.

Now, if you'll notice there is a Recovery state in Attack1. If you do manage to delete the transitions from Attack2 and tie it to attack1, you will have to also keep in mind the Recovery is in there to end the attack and put you back in idle. To loop your attacks into a consecutive attack pattern, I advise this course of action.

Code: Select all

        }
    }
    Transition("RECOVER2");
}

Take the above sample, and rename RECOVER2 in the Quotation marks to ATTACK1

And take out this line from the Transition line in attack1 to attack2
TimeEnd(0.25, "FromEnd"); //, "SyncIfOvertime");
This will let you start the attack2 from any point in attack 1.
Finally, replace
Transition("RECOVER1");

with
Transition("ATTACK2");

And add a transition line just like ATTACK1, but on ATTACK2 to attack1.

See this example
Hidden/Spoiler:
[code]State("ATTACK2")
{
Posture("Stand");
Animation("stand_attack1b")
{
// SyncType("attack1b", "ByTime");
AimType("None");
BlendInTime(0.3);
BlendOutTime(0.15);
}

InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
Edge(1);
DamageTime(6, 13, "Frames");
DamageLength(1.5);
DamageWidth(1.25);
Damage(300);
Push(10.0);
}

// Duration(23, "Frames");

Sound("com_weap_melee_swing");

Transition("ATTACK1")
{
If()
{
TimeStart(0.0);
Posture("Stand");
Button("Fire", "Press");
// Thrust(">", 0.9);
// ThrustAngle(-45, 45);
}
}
Transition("RECOVER2");
}

State("RECOVER2")
{
Posture("Stand");
Animation("stand_attack1b_end")
{
// SyncType("attack1c", "ByTime");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
BlendTimeTo("standalert_idle_emote", 0.3);
}

InputLock(0.3, "All", "!Thrust");
AlignedToThrust();
Transition("ATTACK3")
{
If()
{
TimeStart(0.0);
Posture("Stand");
Button("Fire", "Press");
}
}
Transition("IDLE")
{
If()
{
Break(0.3); // break out after 0.2 seconds if:
ButtonsPressed("Any", "!Fire");
}
}
}[/code]
MileHighGuy
Jedi
Jedi
Posts: 1194
Joined: Fri Dec 19, 2008 7:58 pm

Re: combo editing help

Post by MileHighGuy »

thanks, ill try that out now

Edit: thanks! this worked perfectly. and now i understand alot more about combos

Edit #2: i have renamed the ATTACK_CLAP transitions (at the beginnig of the file) to DASHATTACK but even if i press my primary fire, the dashattack is used, what is wrong?

heres my combo
Hidden/Spoiler:
[code]OffhandAnimation("stand_useforce", "FIRE")
{
Loop("FinalFrame");
AimType("Torso");
BlendInTime(0.15);
BlendOutTime(0.15);
}
OffhandAnimation("stand_useforce", "FIRE2");
OffhandAnimation("stand_useforce", "CHARGE");

Animation("stand_attack1a_end");
Animation("stand_attack1b");
Animation("stand_attack1a_upper")
{
AimType("None");
BlendInTime(0.0);
BlendOutTime(0.3);
BlendTimeTo("stand_attack1a_end", 0.0);
BlendTimeTo("stand_attack1b", 0.2);
}
Animation("stand_attack1a_lower")
{
BlendInTime(0.3);
BlendOutTime(0.3);
BlendTimeTo("stand_attack1a_end", 0.0);
BlendTimeTo("stand_attack1b", 0.15);
}

// Throw stuff....
ThrowAnimation("stand_throw");

State("IDLE")
{
Duration(0.0); // infinite duration
EnergyRestoreRate(); // (0.0, "FromSoldier")
InputLock(0.15, "Sprint", "Jump", "Crouch");

Transition("DASHATTACK") //<fmr ATTACK_CLAP
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Stand", "Crouch", "Sprint");
Button("Reload", "Press");
}
}
Transition("DASHATTACK") //<fmr ATTACK_CLAP
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Stand", "Crouch", "Sprint");
Button("FireSecondary", "Press");
}
}
Transition("ATTACK1")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Stand", "Crouch");
Button("Fire", "Press");
}
}
Transition("DASHATTACK")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Sprint");
Button("Fire", "Press");
}
}
Transition("JUMPATTACK_FALL")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Jump", "Jet");
//The following should be true during a jetjump, jump, or fall
// unless we're more than 0.35 seconds from the apex
//NOTE: This may not allow luke to jump attack during longer falls
// or falling from a force jump when it could.
VelocityY(">", -6.3);
TimeInPosture(">", 0.5);
Button("Fire", "Press");
}
}
}

//Forward declare animations to allow BlendTimeTo references:
Animation("stand_attack1b_end");
Animation("stand_attack1c");

State("ATTACK1")
{
Posture("Stand");
Animation("stand_attack1a");

InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
Edge(0);
DamageTime(5, 12, "Frames");
DamageLength(1.0);
DamageWidth(1.25);
Damage(300);
Push(10.0);
}

// Duration(20, "Frames");

Sound("com_weap_melee_swing");

Transition("ATTACK2")
{
If()
{
TimeStart(0.0);
Posture("Stand");
Button("Fire", "Press");
}
}
Transition("ATTACK2");
}

State("RECOVER1")
{
Posture("Stand");
Animation("stand_attack1a_end")
{
// SyncType("attack1b", "ByTime");
AimType("None");
BlendOutTime(0.15);
BlendTimeTo("standalert_idle_emote", 0.3);
}

InputLock(0.3, "All", "!Thrust");
AlignedToThrust();

Transition("IDLE")
{
If()
{
Break(0.3); // break out after 0.2 seconds if:
ButtonsPressed("Any");
}
}
}

State("ATTACK2")
{
Posture("Stand");
Animation("stand_attack1b")
{
// SyncType("attack1b", "ByTime");
AimType("None");
BlendInTime(0.3);
BlendOutTime(0.15);
}

InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
Edge(1);
DamageTime(6, 13, "Frames");
DamageLength(1.5);
DamageWidth(1.25);
Damage(300);
Push(10.0);
}

// Duration(23, "Frames");

Sound("com_weap_melee_swing");

Transition("ATTACK1")
{
If()
{
TimeStart(0.0);
Posture("Stand");
Button("Fire", "Press");
// Thrust(">", 0.9);
// ThrustAngle(-45, 45);
}
}
Transition("RECOVER2");
}

State("RECOVER2")
{
Posture("Stand");
Animation("stand_attack1b_end")
{
// SyncType("attack1c", "ByTime");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
BlendTimeTo("standalert_idle_emote", 0.3);
}

InputLock(0.3, "All", "!Thrust");
AlignedToThrust();

Transition("IDLE")
{
If()
{
Break(0.3); // break out after 0.2 seconds if:
ButtonsPressed("Any");
}
}
}

State("ATTACK3")
{
Posture("Stand");
Animation("stand_attack1c")
{
// SyncType("attack1c", "ByTime");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
}

Sound("com_weap_throw");

//set a duration so we will go to state RECOVER3 before the animation ends

AlignedToThrust();

AnimatedMove()
{
VelocityZ(13.0);
VelocityX(0.0);
VelocityFromThrust(0.0);
VelocityFromStrafe(1.0);
}

StrafeFactor(0.5);
TurnFactor(0.5);

Duration(16, "Frames");

InputLock("All", "!Thrust"); // lock all controls for duration of state
Attack()
{
Edge(0);
AttackID("attack3right");
DamageTime(16, 20, "Frames");
DamageLength(1.5);
DamageWidth(1.25);
Damage(300);
Push(15.0);
}
Attack()
{
Edge(1);
AttackID("attack3left");
DamageTime(16, 20, "Frames");
DamageLength(1.5);
DamageWidth(1.25);
Damage(300);
Push(15.0);
}

Transition("ATTACK3_LAND");
}

State("ATTACK3_LAND")
{
Posture("Stand");
Animation("stand_attack1c")
{
// SyncType("attack1c", "ByTime");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
}

Sound("com_weap_melee_swing");

//set a duration so we will go to state RECOVER3 before the animation ends

AlignedToThrust();

AnimatedMove()
{
VelocityZ(0.0);
VelocityX(0.0);
VelocityFromThrust(0.5);
VelocityFromStrafe(1.0);
}

StrafeFactor(0.5);
TurnFactor(0.5);

InputLock("All", "!Thrust"); // lock all controls for duration of state
Attack()
{
Edge(0);
AttackID("attack3right");
DamageTime(16, 20, "Frames");
DamageLength(1.5);
DamageWidth(1.25);
Damage(300);
Push(15.0);
}
Attack()
{
Edge(1);
AttackID("attack3left");
DamageTime(16, 20, "Frames");
DamageLength(1.5);
DamageWidth(1.25);
Damage(300);
Push(15.0);
}

Transition("IDLE");
}


State("DASHATTACK")
{
Posture("Stand");
Animation("stand_dashattack")
{
AimType("FullBody");
BlendInTime(0.10);
BlendOutTime(0.25);
}

Sound("com_weap_melee_swing");

Duration(7, "Frames");

EnergyRestoreRate(0.0);

AnimatedMove()
{
VelocityZ(27.0);
VelocityX(0.0);
VelocityFromThrust(5.0);
VelocityFromStrafe(1.0);
}
TurnFactor(0.3);

InputLock("All", "!Thrust");
Attack()
{
Edge(2);
AttackID("dash_right");
DamageTime(5, 9, "Frames");
DamageLength(0.5);
DamageWidth(2.25);
Damage(800);
Push(20.0);
}

Transition("DASHATTACK2");
}

State("DASHATTACK2")
{
Posture("Stand");
Animation("stand_dashattack")
{
AimType("FullBody");
BlendInTime(0.10);
BlendOutTime(0.25);
}

AnimatedMove()
{
VelocityZ(0.0);
VelocityX(0.0);
VelocityFromThrust(0.5);
VelocityFromStrafe(1.0);
}
TurnFactor(0.3);

EnergyRestoreRate(0.0);

InputLock("All", "!Thrust");
Attack()
{
Edge(2);
AttackID("dash_right");
DamageTime(5, 9, "Frames");
DamageLength(0.5);
DamageWidth(2.25);
Damage(800);
Push(20.0);
}
Attack()
{
Edge(0);
AttackID("dash_right");
DamageTime(9, 14, "Frames");
DamageLength(0.5);
DamageWidth(1.25);
Damage(300);
Push(20.0);
}

Transition("IDLE");
}

// forward declare jumpattack_land, since jumpattack_fall refers to it:
Animation("jumpattack_land");

State("JUMPATTACK_FALL")
{
Posture("Jump");
Animation("jumpattack_fall")
{
Loop("FinalFrame");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
// BlendTimeTo("jumpattack_land", 0.15);
}

Sound("com_weap_throw");

Duration(0);

EnergyRestoreRate(0.0);

Gravity(4.0);
GravityVelocityTarget(-20.0); // accelerate us
AnimatedMove();
InputLock("All", "!Thrust"); // lock all buttons for duration of state

Transition("JUMPATTACK_LAND")
{
If()
{
Break();
Posture("Stand");
}
}
Transition("IDLE")
{
If()
{
Break();
Posture("Any", "!Stand", "!Jump", "!Jet");
}
}
}

State("JUMPATTACK_LAND")
{
Posture("Stand");

Animation("jumpattack_land")
{
AimType("FullBody");
//SyncType("jumpattack_land", "ByTime");
BlendInTime(0.00);
BlendOutTime(0.20);
}

RestartAnimation();
Duration(4, "Frames");

EnergyRestoreRate(0.0);

AnimatedMove();
InputLock("All");

Transition("JUMPATTACK_LAND2");
}

State("JUMPATTACK_LAND2")
{
Posture("Stand");

Animation("jumpattack_land")
{
AimType("FullBody");
//SyncType("jumpattack_land", "ByTime");
BlendInTime(0.00);
BlendOutTime(0.20);
}

EnergyRestoreRate(0.0);

PlayExplosion(); // yep...

AnimatedMove();
InputLock("All");
}

State("ATTACK_CLAP")
{
Posture("Stand");
Animation("stand_alternate_attack")
{
// SyncType("attack1c", "ByTime");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
}

Sound("com_weap_melee_swing", 15, "Frames");

//set a duration so we will go to state RECOVER3 before the animation ends

AlignedToThrust();

StrafeFactor(0.5);
TurnFactor(0.5);

InputLock("All", "!Thrust"); // lock all controls for duration of state
Attack()
{
Edge(0);
DamageTime(17, 20, "Frames");
DamageLength(1.5);
DamageWidth(1.25);
Damage(400);
Push(20.0);
}
Attack()
{
Edge(1);
DamageTime(17, 20, "Frames");
DamageLength(1.5);
DamageWidth(1.25);
Damage(400);
Push(20.0);
}

Transition("IDLE");
}[/code]
error log
Hidden/Spoiler:
Message Severity: 2
.\Source\Combo.cpp(2635)
Combo[a11a0085]::State[ATTACK2]::Transition: failed to add Combo::Transition to state 'RECOVER2_ATTACK' [194b5358] (86 needed)

Message Severity: 2
.\Source\Combo.cpp(2635)
Combo[a11a0085]::State[ATTACK2]::Transition: failed to add Combo::Transition to state 'RECOVER2' [75ae3ecb] (87 needed)

Message Severity: 2
.\Source\Combo.cpp(2635)
Combo[a11a0085]::State[RECOVER2]::Transition: failed to add Combo::Transition to state 'IDLE' [c301cf93] (88 needed)

Message Severity: 2
.\Source\Combo.cpp(2635)
Combo[a11a0085]::State[RECOVER2_ATTACK]::Transition: failed to add Combo::Transition to state 'ATTACK3' [58b1ec4a] (89 needed)

Message Severity: 2
.\Source\Combo.cpp(2635)
Combo[a11a0085]::State[ATTACK3]::Transition: failed to add Combo::Transition to state 'IDLE' [c301cf93] (90 needed)

Message Severity: 2
.\Source\Combo.cpp(2635)
Combo[a11a0085]::State[JUMPATTACK_FALL]::Transition: failed to add Combo::Transition to state 'JUMPATTACK_LAND' [7d5471df] (91 needed)

Message Severity: 2
.\Source\Combo.cpp(2635)
Combo[a11a0085]::State[JUMPATTACK_FALL]::Transition: failed to add Combo::Transition to state 'IDLE' [c301cf93] (92 needed)

Message Severity: 2
.\Source\Combo.cpp(2635)
Combo[a11a0085]::State[JUMPATTACK_LAND]::Transition: failed to add Combo::Transition to state 'JUMPATTACK_LAND2' [38ef5817] (93 needed)
i think i need to raise my soldieranimation memorypool, correct?

Edit #3: i rasied all my combo and soldieranimation memorypools, it still doesnt work, but no errors now
Last edited by MileHighGuy on Sun May 10, 2009 10:13 pm, edited 2 times in total.
User avatar
Fiodis
Master of the Force
Master of the Force
Posts: 4145
Joined: Wed Nov 12, 2008 9:27 pm
Projects :: Rannoch + Tientia + Tools Programming

Re: combo editing help [another question unsolved]

Post by Fiodis »

This:

Code: Select all

    Transition("DASHATTACK")
    {
        If()
        {
            Break();    // all transitions are breaking if Duration is 0
            Posture("Sprint");
            Button("Fire", "Press");
        }
    }
is in your combo. This says that if you press primary fire (left-click usually) it will do the dashattack. I'd recommend removing it.

EDIT - Oh, wait, nvm just notice the "sprint" parameter.
MetalcoreRancor
Brigadier General
Brigadier General
Posts: 628
Joined: Thu Jun 07, 2007 11:13 am
Projects :: No Mod project currently.
Games I'm Playing :: swbf origin
xbox live or psn: No gamertag set

Re: combo editing help [another question unsolved]

Post by MetalcoreRancor »

Transition("DASHATTACK") //<fmr ATTACK_CLAP
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Stand", "Crouch", "Sprint");
Button("FireSecondary", "Press");
}
}

You can't have Dash attack operate like this, it needs to be from Sprint posture alone, so take out stand and crouch from that. The dash attack is only supppose to activate when your actually dashing and the posture insures that if you sprint and hit Fire, you will dash attack, but if you walk and hit fire you'll regular attack.
User avatar
Fiodis
Master of the Force
Master of the Force
Posts: 4145
Joined: Wed Nov 12, 2008 9:27 pm
Projects :: Rannoch + Tientia + Tools Programming

Re: combo editing help [another question unsolved]

Post by Fiodis »

Hmm, Rancor, a few combos in Dark Times and the Convo Pack have a dash attack as the third attack in the standing-combo sequence. I believe Rham Kota, for an example, finishes his heavy combo with Obi-Wan's dash attack. How is that possible, if the only posture acceptable for dash is sprint?
User avatar
Frisbeetarian
Jedi
Jedi
Posts: 1233
Joined: Wed Sep 12, 2007 3:13 pm

Re: combo editing help [another question unsolved]

Post by Frisbeetarian »

You're talking about two different things. He is talking about the dash attack as referenced in the .combo file, which should only be used as he said. You are talking about the animation that is used for the dash attach of Obi Wan and also as the third attack of Kota.
MileHighGuy
Jedi
Jedi
Posts: 1194
Joined: Fri Dec 19, 2008 7:58 pm

Re: combo editing help [another question unsolved]

Post by MileHighGuy »

MetalcoreRancor wrote:Transition("DASHATTACK") //<fmr ATTACK_CLAP
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Stand", "Crouch", "Sprint");
Button("FireSecondary", "Press");
}
}

You can't have Dash attack operate like this, it needs to be from Sprint posture alone, so take out stand and crouch from that. The dash attack is only supppose to activate when your actually dashing and the posture insures that if you sprint and hit Fire, you will dash attack, but if you walk and hit fire you'll regular attack.
is there no way to change this?
User avatar
Fiodis
Master of the Force
Master of the Force
Posts: 4145
Joined: Wed Nov 12, 2008 9:27 pm
Projects :: Rannoch + Tientia + Tools Programming

Re: combo editing help [another question unsolved]

Post by Fiodis »

I'd assume you could rig another attack like the dash attack, then, the same way that Kota uses Obi's dash anims for his third heavy attack.
MetalcoreRancor
Brigadier General
Brigadier General
Posts: 628
Joined: Thu Jun 07, 2007 11:13 am
Projects :: No Mod project currently.
Games I'm Playing :: swbf origin
xbox live or psn: No gamertag set

Re: combo editing help [another question unsolved]

Post by MetalcoreRancor »

You can have it work the way you wanted. Now that I see what you mean, you need to remember, FireSecondary means block button.

If you hit block you'll dash attack.
MileHighGuy
Jedi
Jedi
Posts: 1194
Joined: Fri Dec 19, 2008 7:58 pm

Re: combo editing help [another question unsolved]

Post by MileHighGuy »

are you suggesting i leave my combo unchanged from above post? because that way it uses the dash attack for primary fire, secondary fire, and block button
and it shouldnt be that way and i do not know what is wrong
MetalcoreRancor
Brigadier General
Brigadier General
Posts: 628
Joined: Thu Jun 07, 2007 11:13 am
Projects :: No Mod project currently.
Games I'm Playing :: swbf origin
xbox live or psn: No gamertag set

Re: combo editing help [another question unsolved]

Post by MetalcoreRancor »

The block button ingame is FireSecondary. Reload is the force button. And what you originally did here was replace the claps with Dash attack. All you have to do is remove the Stand and Crouch parts in the lines of the Posture of the dash attack transitions you changed, so they only activate in "Sprint".
MileHighGuy
Jedi
Jedi
Posts: 1194
Joined: Fri Dec 19, 2008 7:58 pm

Re: combo editing help [another question unsolved]

Post by MileHighGuy »

sorry for being difficult, but i want them to activate while standing,not only while sprinting,would i have to copy the state and rename and edit it?
and i want the normal attack to still be used when primarey fire is pressed, which for some reason is triggering dashattack, which i only wanted to replace clap attack
MetalcoreRancor
Brigadier General
Brigadier General
Posts: 628
Joined: Thu Jun 07, 2007 11:13 am
Projects :: No Mod project currently.
Games I'm Playing :: swbf origin
xbox live or psn: No gamertag set

Re: combo editing help [another question unsolved]

Post by MetalcoreRancor »

would i have to copy the state and rename and edit it?
I would definetly suggest that as the way to go, yes.
Post Reply