Jump to content

Something like .sab files for...


Recommended Posts

How difficult would it be to implement new features in a way similar to the .sab files?

Things like '.gun' for guns, '.sty' for saber styles, and '.for' for force abilities?

 

The reason I'm asking is that people are going to start making things like those 3 I listed and then go about bugging coders to implement them into JA. If these type of file extensions could be made that would cut down on the request that people (like me) that are going to need help from coders.

 

.sty files

An option to set the new style to behave like a JA default. This would include all the damage values, transition animations, block values, etc.

SaberStyleValues blue, yellow, red, desann, tavion, dual, staff

 

A way to set the number of swings in a style. Pretty much the same as the .sab value.

 

An option to determine how transitions were handled.

SetTransition spin, or arc

This Could also be used to set individual transitions.

SetTransition Both_t4_br_to_tr spin

Away to set damage values for the transitions like in the red stance.

TransitionDamage 0-999999999

 

Setting input commands for special moves and what animations to play as the special moves.

 

Setting individual movement animations for the weapon.

SetWalkForward Both_walkforward_katanamaru

SetWalkBack

SetRunForward

SetRunBack

SetCrouch

SetJump

 

Rolls or flips for kung-fu-y styles

 

Setting custom force animations.

SetForceChoke Both_forcechokeVader

SetForceLightning Both_focerlightning_Apprentice

 

 

 

 

.gun files

 

Set things like rate of fire, projectile speed, splash damage.

Is the weapon able to be dual-wielded?

DualWieldAble 1 0

Or is it a larger two-handed weapon that should be harder to pull?

TwoHanded 1 0

 

Setting custom animations would be handy for things like pistols, rilfes, and bazookas!

If a cover system is installed then a way to make cover included here too.

SetFire

SetIdle

SetRunForward

SetCoverStand

SetCoverCrouch

 

 

 

.for files

 

Setting alignment.

ForceAlignment light, dark, neutral

Including other 'alignments' could be useful for magic: earth, fire, wind, water, HEART! lightning, cold, etc

 

Once again setting custom animations would be really good here.

SetForceAnim Both_forcepush_fart

 

Range, cone of effect, beam, continuous, blast, etc would be good.

 

 

Link to comment

i think i know what yer talking about theoretically...

granted im still going thru the tutorials on how to even read code.. but...

theoretically...

it would need to be something like when the code defines saberstyle_1...

and u replace it to something like saberstyle_x...

then u define saberstyle_x to use whatever u name as xxxxx.sty is right?

 

so it knows to change the saberstyle to whatever u name.sty?

 

am i close here? 

 

but then every saberstyle u add wouldnt actually be nothing like a .sab file.. itll be a small chunk of code i think?

Link to comment

JKG did .wpn files and .stance files, but they used different formatting and a faster parser. I can show you some samples:

 

 

{
  "name": "@JKG_ITEMS_WEAPON_FLECHETTE",
  "type": "WP_FLECHETTE",
  "variation": 0,
  "classname": "weapon_flechette",
  "description": "@MENUS_THE_PRIMARY_WEAPON_OF",

  "visual": {
     "viewmodel": "models/weapons2/golan_arms/golan_arms.md3",
     "worldmodel": "models/weapons2/golan_arms/golan_arms_w.glm",
     "hudicon": "gfx/hud/w_icon_flechette",
     "hudnaicon": "gfx/hud/w_icon_flechette_na",
     "selectsound": "sound/weapons/flechette/select.wav",

     "indicators": {
        "ammo": [ "models/weapons2/flechette_pistol/numbers3", "models/weapons2/flechette_pistol/numbers2", "models/weapons2/flechette_pistol/numbers1" ],
        "firemode": "models/weapons2/flechette_pistol/firemode"
     },

     "primary": {
        "type": "blaster",

        "muzzlefx": "slugthrowers/muzzleflash",
        "firesound": [
           "sound/weapons/flechette/launch.wav",
           "sound/weapons/flechette/oldie_shot1.wav",
           "sound/weapons/flechette/shot2.wav",
           "sound/weapons/flechette/shot3.wav"
        ],
        "projectilemodel": "models/weapons2/golan_arms/projectileMain.md3",
        "projectilefx": "flechette/shot",
        "miss": { "impactfx": "flechette/wall_impact" },
        "hit": { "impactfx": "flechette/flesh_impact" }
        },
         "secondary": {
            "type": "blaster",

            "muzzlefx": "slugthrowers/muzzleflash",
            "firesound": [
                "sound/weapons/flechette/launch.wav",
                "sound/weapons/flechette/oldie_shot1.wav",
                "sound/weapons/flechette/shot2.wav",
                "sound/weapons/flechette/shot3.wav"
            ],
            "projectilemodel": "models/weapons2/golan_arms/projectile.md3",
            "projectilefx": "flechette/alt_shot",
            "miss": { "impactfx": "flechette/wall_impact" },
            "hit": { "impactfx": "flechette/flesh_impact" }
         }
   },

   "stats": {
        "slot": 1,
        "reloadtime": 2000,
        "ammo": "AMMO_METAL_BOLTS",
        "reloadmodifier": 0.6,
        "speed": 0.95
   },

   "primaryattack": {
        "damage": 10,
        "ballistic": true,
        "projectiles": 10,
        "ammocost": 10,
        "firedelay": 400,
        "recoil": 5.0,
        "spread": 3.5,
        "projectileclass":"flech_proj",
        "meansofdeath": "MOD_FLECHETTE"
   },

   "playeranims": {
        "idle": { "torso": "BOTH_IDLE1", "legs": "BOTH_IDLE1" },
        "reload": { "torso": "TORSO_DROPWEAP1" },
        "ready": { "torso": "TORSO_WEAPONREADY3", "legs": "BOTH_STAND1" },
        "firing": { "torso": "BOTH_ATTACK3" }
   },

   "weaponanims": {
        "ready": "READY",
        "reload": "RELOAD",
        "firing": "FIRING"
   }
}

I don't have a sample of a .stance file to show you but they were a lot longer as they went into depth with each move etc.

Link to comment

ahhhh... im so glad i can kinda read this now... me likey...

i might just totally stray off from modelling to finish comprehending this c++

me likey lots

 

thats like... serious customizing for everything. which is killer

Link to comment

The coders didn't want to detail the specs of each gun and saber stance balance issue, so instead of doing that, we made the modellers/playtesters work on that. Better balancing, better communications, better everything all around. Protip: make as much as you can into human-readable files as you can without reducing load times to a crawl. Much less work for you.

katanamaru and ChalklYne like this
Link to comment

They're purely optional fields, with a default option. iirc, the fields that NEED to be defined are as follows:

  • type
  • variation
  • classname
  • visual -> primary
  • primaryattack
  • stats

There's more than that even. You can define splash damage, which has some really nifty damage area stuff (such as radius damage dealt over an increasingly large area, or damage done in waves etc), support for our damage type system (Cold/Fire/Lightning/Force Damage, with additional Ignition/On Fire, Freeze, Stun, Carbonite, Chill, and Poison sub-types, among others I think), and there's also stuff for bouncing missiles.

Link to comment

Yeah I like the fields to be optional. That way if a person doesn't know exactly what to chance in the .sty file they can let it balance out with a default style.

 

The easier it is to read and manipulate will allow for more people to use it. That's the real beauty of the .sab files to me. Most everything in there is easy to understand and written clearly. Some definitions need a little expanding, but that's in the acceptable realm.

 

The code you posted for the gun is nice and I would gladly take it if that was the only way people wanted to make it. But if it could be "cleaned" up it would let lots of other people use it seamlessly.

 

Think of all the gun models on jk3files that could be given their own space!

 

 

If this idea is taken up I'll help with coming up with more fields for the styles. Those were some of the ones I could come up with off the top of my head.

Ah heck, I'll just go back and add them to the original post.

Link to comment

The problem with such a system is that it's particularly nasty to implement. In addition to the format handling itself (which admittedly is the easiest part), you have to actually implement the use of these fields. It's a bit tedious but the time spent towards these fields can outweigh the downsides.  

Link to comment

Yeah I figured it would be a major undertaking. I was wondering if coders would think it was worth that time and effort to get a system up and working in order to not have every weapon modeller, force effect, and animator breathing down their neck to get our stuff in game.

 

Think of all the good mods that have come from being able to make .npc and .sab file manipulations. I think it is a very worthy undertaking, but it is ultimately up to the people who will have to do the coding work.

 

Another pro! If this was done it would help with compatibility! I wouldn't have to worry if CoderA put one of my styles in game and CoderB put another in and as a result of two different methods they became uncompatible. I imagine this would also help with performance. If the game ran multiple new styles from the same structure that would be more efficient than running different code branches, right?

Link to comment

That stinks.

Is there away to make OpenJk only read these files if they were present? That way if none were there then the game would boot up like normal. But if new files were introduced then the game would load them.

 

Kind of like how .pk3's are read in a certain order.

Asgarath83 likes this
Link to comment

You are correct. I was thinking along the lines that OpenJK will become the main force of coding for JA. So if things are not compatible with it, it will be unlikely that other mods will be able to compete.

 

All that hard work you and the other coders are putting in is great! If someone came up with a way to do this that was seperate and uncompatible with OpenJK I think people would stick with OpenJK.

Link to comment

Oh, absolutely possible. Just fork OpenJK, and pull from it on GitHub, and you can continue to keep your code up to date. I think most people are going to rely on mods of OpenJK, as OpenJK has some extra trap_ calls and things which modders can take advantage of (eg manipulating the segments of an .efx file)

Link to comment
  • 2 years later...

JKG did .wpn files and .stance files, but they used different formatting and a faster parser. I can show you some samples:

{
  "name": "@JKG_ITEMS_WEAPON_FLECHETTE",
  "type": "WP_FLECHETTE",
  "variation": 0,
  "classname": "weapon_flechette",
  "description": "@MENUS_THE_PRIMARY_WEAPON_OF",

  "visual": {
     "viewmodel": "models/weapons2/golan_arms/golan_arms.md3",
     "worldmodel": "models/weapons2/golan_arms/golan_arms_w.glm",
     "hudicon": "gfx/hud/w_icon_flechette",
     "hudnaicon": "gfx/hud/w_icon_flechette_na",
     "selectsound": "sound/weapons/flechette/select.wav",

     "indicators": {
        "ammo": [ "models/weapons2/flechette_pistol/numbers3", "models/weapons2/flechette_pistol/numbers2", "models/weapons2/flechette_pistol/numbers1" ],
        "firemode": "models/weapons2/flechette_pistol/firemode"
     },

     "primary": {
        "type": "blaster",

        "muzzlefx": "slugthrowers/muzzleflash",
        "firesound": [
           "sound/weapons/flechette/launch.wav",
           "sound/weapons/flechette/oldie_shot1.wav",
           "sound/weapons/flechette/shot2.wav",
           "sound/weapons/flechette/shot3.wav"
        ],
        "projectilemodel": "models/weapons2/golan_arms/projectileMain.md3",
        "projectilefx": "flechette/shot",
        "miss": { "impactfx": "flechette/wall_impact" },
        "hit": { "impactfx": "flechette/flesh_impact" }
        },
         "secondary": {
            "type": "blaster",

            "muzzlefx": "slugthrowers/muzzleflash",
            "firesound": [
                "sound/weapons/flechette/launch.wav",
                "sound/weapons/flechette/oldie_shot1.wav",
                "sound/weapons/flechette/shot2.wav",
                "sound/weapons/flechette/shot3.wav"
            ],
            "projectilemodel": "models/weapons2/golan_arms/projectile.md3",
            "projectilefx": "flechette/alt_shot",
            "miss": { "impactfx": "flechette/wall_impact" },
            "hit": { "impactfx": "flechette/flesh_impact" }
         }
   },

   "stats": {
        "slot": 1,
        "reloadtime": 2000,
        "ammo": "AMMO_METAL_BOLTS",
        "reloadmodifier": 0.6,
        "speed": 0.95
   },

   "primaryattack": {
        "damage": 10,
        "ballistic": true,
        "projectiles": 10,
        "ammocost": 10,
        "firedelay": 400,
        "recoil": 5.0,
        "spread": 3.5,
        "projectileclass":"flech_proj",
        "meansofdeath": "MOD_FLECHETTE"
   },

   "playeranims": {
        "idle": { "torso": "BOTH_IDLE1", "legs": "BOTH_IDLE1" },
        "reload": { "torso": "TORSO_DROPWEAP1" },
        "ready": { "torso": "TORSO_WEAPONREADY3", "legs": "BOTH_STAND1" },
        "firing": { "torso": "BOTH_ATTACK3" }
   },

   "weaponanims": {
        "ready": "READY",
        "reload": "RELOAD",
        "firing": "FIRING"
   }
}

I don't have a sample of a .stance file to show you but they were a lot longer as they went into depth with each move etc.

 

Adding new weapons or force power in that easy modality should be really cool. o.o but this require a code works extern respect to OpenJk for compatibility reasons. ._.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...