Editing .sab

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 2: Line 2:


A each saber has the following syntax in a .sab file:
A each saber has the following syntax in a .sab file:
{| class="wikitable"
|-
| [Saber_name]


<nowiki>[Saber_name]
{
{
    [Key] [Value]
    [Key] [Value]
}</nowiki>


Where <code>[saber_name]</code> is the name the game refers to the saber by (and the name you can use with the [[Saber (Command)|/saber command]]) and the <code>[key]</code>s are various variables the [[Modder|modder]] can assign <code>[value]</code>s to, to give the hilt properties. A modder can put as many keys between the curly braces as they wish. Any keys that are not present will be given their default values.
[Key] [Value]
 
[Key] [Value]


}
|}
Where [saber_name] is the name the game refers to the saber by (and the name you can use with the [[Saber (Command)|/saber command]] in [[japlus]]) and the [key]s are various variables the [[Modder|modder]] can assign [value]s to, to give the hilt properties. A modder can put as many keys between the curly braces as they wish. Any keys that are not present will be given their default values.


==Keys==
==Keys==
===Standard Keys===
===Standard Keys===
 
* name - this is the name that will appear in the [[menu]]. you can either type a name inside quote marks (eg "MUG's Saber") or point it to a menu string (as with single_1)
{| class="wikitable"
* '''saberType''' - either SABER_SINGLE for a [[Single Saber|normal saber]] or SABER_STAFF for a [[Staff|two-handed Darth Maul style hilt]].
! name       !! note
* '''saberModel''' - the [[.glm File|glm file]] that contains the [[model]] for the [[hilt]].
|-
* '''soundOn''' - the [[Sound|sound]] file to play when the saber is activated.
| name        || this is the name that will appear in the [[menu]]. you can either type a name inside quote marks (eg "MUG's Saber") or point it to a menu string (as with single_1)
* '''soundLoop''' - the sound file to loop while it is on.
|-
* '''soundOff''' - I think you get the idea now.
| saberType  || either SABER_SINGLE for a [[Single Saber|normal saber]] or SABER_STAFF for a [[Staff|two-handed Darth Maul style hilt]].
* '''saberLength''' - This should normally be 40 for a [[single saber]] and 32 for a [[staff]].
|-
* '''saberColor''' - Should always be set to "random". but you can type the name of another colour if you really want.
| saberModel  || the [[.glm File|glm file]] that contains the [[model]] for the [[hilt]].
|-
| customSkin  || a .skin file to apply to the saber hilt model, if any (overrides saber hilt model's internal texture mapping), needs file path (ex. models/weapons2/saber_reborn/jedi.skin)
|-
| soundOn    || the [[Sound|sound]] file to play when the saber is activated.
|-
| soundLoop  || the sound file to loop while it is on.
|-
| soundOff    || I think you get the idea now.
|-
| saberLength || This should normally be 40 for a [[single saber]] and 32 for a [[staff]].
|-
| saberColor  || Should always be set to "random". but you can type the name of another colour if you really want.
|}
 
 
===Staff Keys===
===Staff Keys===
 
* '''numBlades''' - 2 for a [[staff]], you can enter more if the hilt [[model]] allows for it. Maximum is 8.
{| class="wikitable"
* '''throwable''' - Set to 0 for a staff so that the saber is not [[Saber Throw|throwable]].
! name        !! note
* '''singleBladeStyle''' - the style to use when set to one blade. Should normally be "medium". (fast, medium, strong, desann, tavion)
|-
* '''singleBladeThrowable''' - set to 1 to make the staff [[Saber Throw|throwable]] when set to one blade. If you set throwable to 1 and this value to 0 for a saber staff, it allows the saber to be thrown with both blades ignited.
| numBlades                  || 2 for a [[staff]], you can enter more if the hilt [[model]] allows for it. Maximum is 8.
* '''brokenSaber1''' and '''brokenSaber2''' - This is unused in [[BaseJKA|base]] multiplayer, but was supposed to be model files to use when your staff gets broken. It does work however in Single Player. It may be used in some mods, so set it to the usual value of "brokenstaff", or whatever broken staff model the mod has.
|-
* '''twoHanded''' - set this to 1 for a staff. According to notes in assets1.pk3 this restricts [[force powers]] but makes the hilt stronger in [[Saber Lock|locks]] and [[Parrying|parries]].
| throwable                  || Set to 0 for a staff so that the saber is not [[Saber Throw|throwable]]. This allows a saber to kick. Set this to 1, and "singleBladeThrowable" to 0 for throwable saber staffs.
|-
| singleBladeStyle          || the style to use when set to one blade. Should normally be "medium". (fast, medium, strong, desann, tavion)
|-
| singleBladeThrowable      || set to 1 to make the staff [[Saber Throw|throwable]] when set to one blade. If you set throwable to 1 and this value to 0 for a saber staff, it allows the saber to be thrown with both blades ignited.
|-
| brokenSaber1, brokenSaber2 || This is unused in [[BaseJKA|base]] multiplayer, but was supposed to be model files to use when your staff gets broken. It does work however in Single Player. It may be used in some mods, so set it to the usual value of "brokenstaff", or whatever broken staff model the mod has.
|-
| twoHanded                  || set this to 1 for a staff. This restricts [[force powers]] if g_saberRestrictForce is set to 1, but makes the hilt stronger in [[Saber Lock|locks]] and [[Parrying|parries]]. And it makes the hilt break through other sabers(breakParryBouns).
|}
 
 
===Sword and Non-lightsaber-blade Weapon Keys===
===Sword and Non-lightsaber-blade Weapon Keys===
 
* '''noDlight''' - 1 (removes the saber's [[dynamic glow]] [[effect]])
{| class="wikitable"
* '''noBlade''' - 1 (Removes the [[saber blade]] effect)
! name          !! note
* '''noIdleEffect''' - 1 (prevents the saber from drawing effects or doing [[damage]] when it collides with stuff without you doing an attack.
|-
* '''noWallMarks''' - 1 Pretty obvious.
| noDlight      || 1 (removes the saber's [[dynamic glow]] [[effect]])
* '''trailStyle''' - 0 For no [[Trail Effect|trail]], 1 for a saber trail, 2 for a sword trail.
|-
* '''idleInBack''' - Does nothing unless you are using [[JA+]]. 1 to make the weapon go in whatever [[holster]] you selected over your back when out of use, 2 to make it go over your back without a holster.
| noBlade      || 1 (Removes the [[saber blade]] effect)
* '''bounceOnWalls''' - Optionally you may want to set this to 1 to make it hit walls. This can be very annoying however, as several attacks always hit the floor.
|-
| noIdleEffect  || 1 (prevents the saber from drawing effects or doing [[damage]] when it collides with stuff without you doing an attack.
|-
| noWallMarks  || 1 Pretty obvious.
|-
| trailStyle    || 0 For no [[Trail Effect|trail]], 1 for a saber trail, 2 for a sword trail.
|-
| idleInBack    || Does nothing unless you are using [[JA+]]. 1 to make the weapon go in whatever [[holster]] you selected over your back when out of use, 2 to make it go over your back without a holster.
|-
| bounceOnWalls || Optionally you may want to set this to 1 to make it hit walls. This can be very annoying however, as several attacks always hit the floor.
|}
 
 
===Misc Keys===
===Misc Keys===
{| class="wikitable"
* '''notInMP''' - set this to one to make the saber nonselectable in MP.
! name                !! note
* '''saberStyle''' - a single combat style/stance which the saber is locked in.
|-
* '''lockable''' - 0/1
| notInMP            || set this to one to make the saber nonselectable in MP.
* '''disarmable''' - 0/1
|-
* '''blocking''' - 0 to stop the character from trying to auto block projectiles
| saberStyle          || a single combat style/stance which the saber is locked in. (fast, medium, desann, tavion etc.)
* '''forceRestrict''' - a [[Force|power]] to restrict if twoHanded is set to 1. Enter the key multiple times to block multiple powers:
|-
:* FP_HEAL
| saberStyleLearned  || stances that are given to the player upon being given the saber
:* FP_LEVITATION
|-
:* FP_SPEED
| saberStyleForbidden || which styles can't be used with the saber, doesn't take away the styles from the player but doesn't allow them to be used with the saber
:* FP_PUSH
|-
:* FP_PULL   
| lockable            || 0/1 (if it can be in a saber lock)
:* FP_TELEPATHY   
|-
:* FP_GRIP   
| disarmable          || 0/1 (if it can be disarmed)
:* FP_LIGHTNING   
|-
:* FP_SABERTHROW   
| blocking            || 0 to stop the character from trying to auto block projectiles (shots will bounce off however)
:* FP_SABER_DEFENSE   
|-
:* FP_SABER_OFFENSE   
| forceRestrict      || a [[Force|power]] to restrict if twoHanded is set to 1. The cvar g_saberRestrictForce may have to be set to 1. Enter the key multiple times to block multiple powers:
:* FP_RAGE   
* FP_HEAL
:* FP_PROTECT   
* FP_LEVITATION
:* FP_ABSORB   
* FP_SPEED
:* FP_DRAIN   
* FP_PUSH
:* FP_SEE
* FP_PULL   
* '''lockBonus''' - a bonus in [[saber lock|saber locks]]
* FP_TELEPATHY   
* '''parryBonus''' - a bonus in [[parrying|parries]]
* FP_GRIP   
* '''breakParryBonus''' - a bonus to break a parry
* FP_LIGHTNING   
* '''disarmBonus''' - you should get the idea by now...
* FP_SABERTHROW   
* '''returnDamage''' - 1 to make a saber keep spinning and doing damage when returning from a [[Saber Throw|throw]], rather than flying straight back.
* FP_SABER_DEFENSE   
* '''customSkin''' - an alternate [[texture]] to apply to the model.
* FP_SABER_OFFENSE   
* '''onInWater''' - 1 to allow on in [[Water|water]].
* FP_RAGE   
* '''boltToWrist''' - if 1, attaches the [[hilt]] to the wrist rather than the hand, so you can make claws and the likes.
* FP_PROTECT   
* '''noDismemberment''' - set to 1 for clubs and blunt weapons.
* FP_ABSORB   
* '''alwaysBlock''' - set to 1 for shields etc. This also lets you block when you normally couldn't, such as mid-swing or when knocked over.
* FP_DRAIN   
* '''noManualDeactivate''' - if 1, you cant switch [[dual]] and [[staff]] to single mode. you can still press 1 to deactivate the [[saber]].
* FP_SEE
* '''saberRadius''' - (normally 3) how wide the saber's first blade should be (minimum of 0.25)
|-
* '''bladeStyle2Start''' - set this to a blade number. Any keys set after this line in the .sab entry will apply only to blades of the set number or higher, allowing you to give different blades different properties (should allow you to have a weapon with one sword blade and one saber blade and the like). This is unconfirmed, so test thoroughly if you use it. You should even be able to use this line multiple times with different values.
| lockBonus          || a bonus in [[saber lock|saber locks]]
|-
| parryBonus          || a bonus in [[parrying|parries]]. In Single Player, to block sabers with a break parry bonus, this must equal that bonus +2 (ex. a saber needs a PB of 3 to block a BPB of 1).
|-
| breakParryBonus    || a bonus to break a parry. In Single Player, values of 1+ makes medium, staff, tavion, and perhaps duals stance swings uninterruptible. At most they can only be blocked partially. And without this setting, 'twoHanded 1' can make the hilt break through other sabers. In addition, using Force Rage is capable of breaking parries temporarily.
|-
| disarmBonus        || you should get the idea by now...
|-
| returnDamage        || 1 to make a saber keep spinning and doing damage when returning from a [[Saber Throw|throw]], rather than flying straight back.
|-
| customSkin          || an alternate [[texture]] to apply to the model.
|-
| onInWater          || 1 to allow on in [[Water|water]].
|-
| boltToWrist        || if 1, attaches the [[hilt]] to the wrist rather than the hand, so you can make claws and the likes.
|-
| noDismemberment    || set to 1 for clubs and blunt weapons.
|-
| alwaysBlock        || set to 1 for shields etc. This also lets you block when you normally couldn't, such as mid-swing or when knocked over.
|-
| noManualDeactivate  || if 1, you cant switch [[dual]] and [[staff]] to single mode. you can still press 1 to deactivate the [[saber]].
|-
| saberRadius        || (normally 3) how wide the saber's first blade should be (minimum of 0.25)
|-
| bladeStyle2Start    || used to define which blades use bladeStyle and which ones sue bladeStyle2, set to the number of last blade you want to use the default style. Example file can be found at the bottom.
|}
 
※ Once a player holds a saber(.sab) having 'saberStyle' or 'saberStyleLearned' or 'saberStyleForbidden', Restricting npc's saberStyle by editing .sab file will be nullified and npcs are going to begin switching their style regardless of your option.  I think the function of the code which restricts their saberStyle is focused on the player, so restriction on other npc does not working properly.
 


===Crazy Keys===
===Crazy Keys===
 
* '''moveSpeedScale''' - (decimals allowed) makes the character [[speed]] change. (e.g 0.5 is half speed, 2 is double speed)
{| class="wikitable"
* '''animSpeedScale''' - (decimals allowed) Attack speed. (e.g 0.5 is half speed, 2 is double speed)
! name            !! note
* '''knockbackScale''' - amount that hit players are knocked back
|-
* '''damageScale''' - Usually this is only helpful for making over powered sabers, but you can also make low damage training sabers with it.
| moveSpeedScale  || (decimals allowed) makes the character [[speed]] change. (e.g 0.5 is half speed, 2 is double speed)
* '''splashDamage''' - 100% of this value is dealt at point of impact, 0% delt at the splash radius:
|-
* '''splashRadius''' - maximum range of splash damage
| animSpeedScale  || (decimals allowed) Attack speed. (e.g 0.5 is half speed, 2 is double speed)
* '''splashKnockback''' - scales like splashDamage
|-
| knockbackScale  || amount that hit players are knocked back
|-
| damageScale    || Usually this is only helpful for making over powered sabers, but you can also make low damage training sabers with it.
|-
| splashDamage    || 100% of this value is dealt at point of impact, 0% delt at the splash radius:
|-
| splashRadius    || maximum range of splash damage
|-
| splashKnockback || scales like splashDamage
|}
 
 
===Multiple Blade Keys===
===Multiple Blade Keys===
* '''saberLength2'''
* '''saberLength3'''
* etc. (up to 8)


* saberLength2, saberLength3 etc. (up to 8)
* '''saberColor2'''
* saberColor2 etc.
* etc
* saberRadius2 etc.
 


* '''saberRadius2'''
* etc
===Custom Sound Keys===
===Custom Sound Keys===
Set any of the following to a valid [[sound file]]:
Set any of the following to a valid [[sound file]]:
{| class="wikitable"
* '''spinsound''' - when the saber is [[Saber Throw|thrown]]. Also used in [[Kata|katas]].
! name        !! note
* '''swingSound1'''
|-
* '''swingSound2'''
| spinsound    || when the saber is [[Saber Throw|thrown]]. Also used in [[Kata|katas]].
* '''swingSound3'''
|-
* '''fallSound1'''
| swingSound1 ||
* '''fallSound2'''
|-
* '''fallSound3'''
| swingSound2 ||
* '''hitSound1'''
|-
* '''hitSound2'''
| swingSound3 ||
* '''hitSound3'''
|-
* '''blockSound1''' - these are for when your attacks are blocked, not the other way around.
| fallSound1   || for when the saber falls to the ground
* '''blockSound2'''
|-
* '''blockSound3'''
| fallSound2   ||
* '''bounceSound1'''
|-
* '''bounceSound2'''
| fallSound3   ||
* '''bounceSound3'''
|-
| hitSound1   ||
|-
| hitSound2   ||
|-
| hitSound3   ||
|-
| blockSound1  || these are for when your attacks are blocked, not the other way around.
|-
| blockSound2 ||
|-
| blockSound3 ||
|-
| bounceSound1 || these are for your blade/saber bouncing off a wall
|-
| bounceSound2 ||
|-
| bounceSound3 ||
|}
 
 
===Effects===
===Effects===
Set these to  valid [[.efx File|.efx files]]:
Set these to  valid [[.efx File|.efx files]]:
{| class="wikitable"
* '''hitPersonEffect''' - impact on players
! name            !! note
* '''g2MarksShader''' - Marks left on players
|-
* '''hitOtherEffect''' - impact on walls
| hitPersonEffect || impact on players
* '''blockEffect''' - when you [[parrying|parry]] a blow
|-
* [[bladeEffect]] - Use an .efx file instead of a [[lightsaber]] blade. Reports of this causing crashes when the saber is thrown.
| g2MarksShader  || Marks left on players
|-
| hitOtherEffect  || impact on walls
|-
| blockEffect    || when you [[parrying|parry]] a blow
|-
| [[bladeEffect]] || Use an .efx file instead of a [[lightsaber]] blade. Reports of this causing crashes when the saber is thrown.
|}
 
 
===Animations===
===Animations===
Set these to a name from [[anims.h]] or [[BehavEd]]. Animations are handled [[server-side]], so you can adjust the animations of [[base]] sabers on your [[server]] and players will see the new [[Animation|animations]]. They will also see animations set in [[custom saber|custom sabers]] that they don't have, so long as those sabers are saved on the server, and the animations are [[base]].
Set these to a name from [[anims.h]] or [[BehavEd]]. Animations are handled [[server-side]], so you can adjust the animations of [[base]] sabers on your [[server]] and players will see the new [[Animation|animations]]. They will also see animations set in [[custom saber|custom sabers]] that they don't have, so long as those sabers are saved on the server, and the animations are [[base]].
 
* '''readyAnim
* readyAnim
* drawAnim
* drawAnim
* putawayAnim
* putawayAnim
Line 242: Line 130:
* meditateAnim
* meditateAnim
* flourishAnim
* flourishAnim
* gloatAnim
* gloatAnim'''
 
 
===Disable Moves===
===Disable Moves===
Set these to 1 to disable each move:
Set these to 1 to disable each move:
 
'''* noRollStab
* noRollStab
* noPullAttack
* noPullAttack
* noBackAttack
* noBackAttack
Line 260: Line 144:
* noCartwheels
* noCartwheels
* noKicks
* noKicks
* noMirrorAttacks (the stab left and right at once attack with [[Dual|dual sabers]])
* noMirrorAttacks''' - The stab left and right at once attack with [[Dual|dual sabers]].
 
 
===Move Replacements===
===Move Replacements===
====Moves to Replace (Keys)====
====Moves to Replace (Keys)====
 
* '''kataMove''' - [[kata]]
{| class="wikitable"
* '''lungeAtkMove''' - [[lunge]]
! name              !! note
* '''jumptAtkUpMove''' - jump + attack
|-
* '''jumpAtkFwdMove''' - [[dfa]]
| kataMove          || [[kata]]
* '''jumpAtkBackMove''' - (like staff reverse dfa flip)
|-
* '''jumptAtkRightMove''' - (like [[butterfly]])
| lungeAtkMove      || [[lunge]]
* '''jumpAtkLeftMove''' - (like [[butterfly]])
|-
| jumptAtkUpMove    || jump + attack
|-
| jumpAtkFwdMove    || [[dfa]]
|-
| jumpAtkBackMove  || (like staff reverse dfa flip)
|-
| jumptAtkRightMove || (like [[butterfly]])
|-
| jumpAtkLeftMove  || (like [[butterfly]])
|}
 
====Moves to Set (Values)====
====Moves to Set (Values)====
 
* '''LS_NONE''' - Do a regular attack
* LS_NONE (regular attack)
'''* LS_A_TL2BR
* LS_A_TL2BR
* LS_A_L2R
* LS_A_L2R
* LS_A_BL2TR
* LS_A_BL2TR
Line 345: Line 213:
* LS_DUAL_FB
* LS_DUAL_FB
* LS_DUAL_LR
* LS_DUAL_LR
* LS_HILT_BASH
* LS_HILT_BASH'''
 


==Example Custom .SAB==
==Example Custom .SAB==
===Spoon Hilt===
===Spoon Hilt===
{| class="wikitable"
|-
| spoon


<nowiki>spoon
{
{
    name          "Spoon of Death"
    saberType    SABER_SINGLE
    saberModel    "models/weapons2/spoon/spoon.glm"
    saberLength  10
    noWallMarks  1
    throwable    1
    notInMP      0
    noDlight      1
    noBlade      1
    trailStyle    1
    noIdleEffect  1
    onInWater    1
    norollStab    0
    bounceOnWalls 1
    idleinback    2
    soundOn      "sound/weapons/spoonofdeath/on.mp3"
    soundOff      "sound/weapons/spoonofdeath/off.mp3"
    soundLoop    "sound/effects/null.wav"
    swingSound1  "sound/weapons/spoonofdeath/swing1.mp3"
    swingSound2  "sound/weapons/spoonofdeath/swing2.mp3"
    swingSound3  "sound/weapons/spoonofdeath/swing3.mp3"
    spinSound    "sound/weapons/spoonofdeath/on.mp3"
    fallSound1    "sound/weapons/spoonofdeath/fall1.mp3"
    fallSound2    "sound/weapons/spoonofdeath/fall2.mp3"
    fallSound3    "sound/weapons/spoonofdeath/fall3.mp3"
    fallSound4    "sound/weapons/spoonofdeath/fall4.mp3"
    hitSound1    "sound/weapons/spoonofdeath/hit1.mp3"
    hitSound2    "sound/weapons/spoonofdeath/hit2.mp3"
    hitSound3    "sound/weapons/spoonofdeath/hit3.mp3"
    blockSound1  "sound/weapons/spoonofdeath/fall1.mp3"
    blockSound2  "sound/weapons/spoonofdeath/fall2.mp3"
    blockSound3  "sound/weapons/spoonofdeath/fall3.mp3"
}</nowiki>


===BladeStyle2Start example===
name "Spoon of Death"
 
saberType SABER_SINGLE
 
saberModel "models/weapons2/spoon/spoon.glm"
 
saberLength 10
 
noWallMarks 1
 
throwable 1
 
notInMP 0
 
noDlight 1
 
noBlade 1
 
trailStyle 1
 
noIdleEffect 1
 
onInWater 1
 
norollStab 0
 
bounceOnWalls 1
 
idleinback 2
 
soundOn "sound/weapons/spoonofdeath/on.mp3"


<nowiki>dual_test
soundOff "sound/weapons/spoonofdeath/off.mp3"
{
 
name "Test"
soundLoop "sound/effects/null.wav"
saberType SABER_STAFF
 
saberModel "models/weapons2/saber_dual_1/saber_dual_1.glm"
swingSound1 "sound/weapons/spoonofdeath/swing1.mp3"
soundOn "sound/weapons/saber/saberon.wav"
 
soundLoop "sound/weapons/saber/saberhum4.wav"
swingSound2 "sound/weapons/spoonofdeath/swing2.mp3"
soundOff "sound/weapons/saber/saberoff.wav"
 
saberColor red
swingSound3 "sound/weapons/spoonofdeath/swing3.mp3"
saberColor2 blue
 
numBlades 2
spinSound "sound/weapons/spoonofdeath/on.mp3"
saberLength 32
 
saberStyle staff
fallSound1 "sound/weapons/spoonofdeath/fall1.mp3"
throwable 0
 
singleBladeStyle medium
fallSound2 "sound/weapons/spoonofdeath/fall2.mp3"
singleBladeThrowable 1
 
brokenSaber1 brokenstaff
fallSound3 "sound/weapons/spoonofdeath/fall3.mp3"
brokenSaber2 brokenstaff
 
twoHanded 1
fallSound4 "sound/weapons/spoonofdeath/fall4.mp3"
 
//define Bladestyle 1, you can have a maximum of 2 bladestyles per saber
hitSound1 "sound/weapons/spoonofdeath/hit1.mp3"
noblade 0
 
trailstyle 0
hitSound2 "sound/weapons/spoonofdeath/hit2.mp3"
noDlight 0
 
hitSound3 "sound/weapons/spoonofdeath/hit3.mp3"
//define Bladestyle2
 
noblade2 1
blockSound1 "sound/weapons/spoonofdeath/fall1.mp3"
trailstyle2 1
 
noDlight2 1
blockSound2 "sound/weapons/spoonofdeath/fall2.mp3"
 
blockSound3 "sound/weapons/spoonofdeath/fall3.mp3"


//Tell the game to use bladestyle2 for all blades after Blade 1
}
BladeStyle2Start 1
|}
}</nowiki>


[[Category:File Types]]
[[Category:File Types]]
Please note that all contributions to Jedi Knight Wiki | JKHub are considered to be released under the Public Domain (see JKHub:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)