Plugin Player Models
PPMs allow to put new character models into the XreaL game.
Note: This document is Work In Progress (WIP). We will use [character] in this document to represent information requiring the name of the model.
player_[character].pk3 Layout
All characters are located in:
XreaL/base/models/players/
models/players/[character]/animation.cfg models/players/[character]/body_d.tga // diffuse texture models/players/[character]/body_local.tga // normal map models/players/[character]/body_s.tga // gloss map Icons are nesseary for the user interface to represent the character models/players/[character]/icon_default.tga models/players/[character]/icon_blue.tga models/players/[character]/icon_red.tga models/players/[character]/blue.tga // blue skin for teamplay models/players/[character]/red.tga // red skin for teamplay Skin files manage what textures should be used for the invidual meshes. models/players/[character]/body_default.skin models/players/[character]/body_blue.skin models/players/[character]/body_red.skin The entire player can be modelled with a single mesh. There is no need anymore to divide the player model into head, lower and upper parts. models/players/[character]/body.md5mesh Player Animations: models/players/[character]/idle.md5anim models/players/[character]/run.md5anim models/players/[character]/walk.md5anim models/players/[character]/walk_forward.md5anim models/players/[character]/walk_backward.md5anim models/players/[character]/crouch.md5anim models/players/[character]/crouch_walk_forward.md5anim models/players/[character]/jump.md5anim models/players/[character]/fall.md5anim models/players/[character]/soft_land.md5anim models/players/[character]/taunt.md5anim models/players/[character]/jump.md5anim Weapon specific models/players/[character]/gauntlet_aim.md5anim models/players/[character]/gauntlet_fire.md5anim models/players/[character]/machinegun_fire.md5anim
Tags
Tags are connection points for other model parts and represent the limited hierarchical system of the game. They include links between the three character body parts and the weapons. Keep in mind that these tags are representations of geometry so they can be animated to represent that geometry. For example, tag_head represents the head, tag_torso represents the torso and tag_weapon represents the weapon. This is important to understand since for example, any time the character is performing a locomotive animation, the upper body can and will animate independently of the lower body, using the relative position of the tag as a base or 'home' position. The tags for the body parts and weapons are named tag_weapon, tag_torso and tag_head.
Animation
Basically the order of animations goes: full body (animations that combine both upper and lower), upper body, and lower body. Each character file has the following animations in them and for now that's all the modeler is allowed. The division is basically death (all body parts), extraneous upper body, and dedicated locomotive animations. That way all the upper body animations can be performed at any time, separate from whatever it is that that lower body animations may be doing. There is a set number of animation types which are (in order):
death1 (approx. 30 frames)
death2 (approx. 30 frames)
death3 (approx. 30 frames)
taunt (approx. 45 frames)
weapon attack (exactly 6 frames)
melee attack (exactly 6 frames)
change weapon (exactly 9 frames)
weapon idle (exactly 1 frame)
melee idle (exactly 1 frame)
crouched walk (approx. 10 frames)
walk (approx. 15 frames)
run (approx. 12 frames)
backpedal (approx. 10 frames)
swim (approx. 10 frames)
jump forward (approx. 10 frames)
jump forward-land (approx. 6 frames)
jump backward (approx. 10 frames)
jump backward-land (approx. 6 frames)
standing idle (approx. 10 frames)
crouched idle (approx. 10 frames)
turn in place (approx. 8 frames)
Review the Model
Copy the code at the bottom into your XreaL/base/autoexec.cfg. Load up XreaL. Bring down the console. Load a simple map by typing "\devmap test_box". After loading the map type "\model [character name]". Hit your Show Score key (default is TAB). You should see your new model here. Tweak the frame rates in your animation.cfg file and save them. Type in "\vid_restart" on the console and hit enter to see the changes.
Simple Keypad-Controlled Modelviewer:
bind kp_5 "toggle cg_thirdperson;vstr a0;vstr r40" bind kp_uparrow "vstr closer" bind kp_downarrow "vstr farther" bind kp_leftarrow "vstr left" bind kp_rightarrow "vstr right" set a0 "cg_thirdpersonangle 0;set left vstr a10;set right vstr a350" set a10 "cg_thirdpersonangle 10;set left vstr a20;set right vstr a0" set a20 "cg_thirdpersonangle 20;set left vstr a30;set right vstr a10" set a30 "cg_thirdpersonangle 30;set left vstr a40;set right vstr a20" set a40 "cg_thirdpersonangle 40;set left vstr a50;set right vstr a30" set a50 "cg_thirdpersonangle 50;set left vstr a60;set right vstr a40" set a60 "cg_thirdpersonangle 60;set left vstr a70;set right vstr a50" set a70 "cg_thirdpersonangle 70;set left vstr a80;set right vstr a60" set a80 "cg_thirdpersonangle 80;set left vstr a90;set right vstr a70" set a90 "cg_thirdpersonangle 90;set left vstr a100;set right vstr a80" set a100 "cg_thirdpersonangle 100;set left vstr a110;set right vstr a90" set a110 "cg_thirdpersonangle 110;set left vstr a120;set right vstr a100" set a120 "cg_thirdpersonangle 120;set left vstr a130;set right vstr a110" set a130 "cg_thirdpersonangle 130;set left vstr a140;set right vstr a120" set a140 "cg_thirdpersonangle 140;set left vstr a150;set right vstr a130" set a150 "cg_thirdpersonangle 150;set left vstr a160;set right vstr a140" set a160 "cg_thirdpersonangle 160;set left vstr a170;set right vstr a150" set a170 "cg_thirdpersonangle 170;set left vstr a180;set right vstr a160" set a180 "cg_thirdpersonangle 180;set left vstr a190;set right vstr a170" set a190 "cg_thirdpersonangle 190;set left vstr a200;set right vstr a180" set a200 "cg_thirdpersonangle 200;set left vstr a210;set right vstr a190" set a210 "cg_thirdpersonangle 210;set left vstr a220;set right vstr a200" set a220 "cg_thirdpersonangle 220;set left vstr a230;set right vstr a210" set a230 "cg_thirdpersonangle 230;set left vstr a240;set right vstr a220" set a240 "cg_thirdpersonangle 240;set left vstr a250;set right vstr a230" set a250 "cg_thirdpersonangle 250;set left vstr a260;set right vstr a240" set a260 "cg_thirdpersonangle 260;set left vstr a270;set right vstr a250" set a270 "cg_thirdpersonangle 270;set left vstr a280;set right vstr a260" set a280 "cg_thirdpersonangle 280;set left vstr a290;set right vstr a270" set a290 "cg_thirdpersonangle 290;set left vstr a300;set right vstr a280" set a300 "cg_thirdpersonangle 300;set left vstr a310;set right vstr a290" set a310 "cg_thirdpersonangle 310;set left vstr a320;set right vstr a300" set a320 "cg_thirdpersonangle 320;set left vstr a330;set right vstr a310" set a330 "cg_thirdpersonangle 330;set left vstr a340;set right vstr a320" set a340 "cg_thirdpersonangle 340;set left vstr a350;set right vstr a330" set a350 "cg_thirdpersonangle 350;set left vstr a0;set right vstr a340" set r5 "cg_thirdpersonrange 5;set farther vstr r10;set closer vstr r500" set r10 "cg_thirdpersonrange 10;set farther vstr r20;set closer vstr r5" set r20 "cg_thirdpersonrange 20;set farther vstr r30;set closer vstr r10" set r30 "cg_thirdpersonrange 30;set farther vstr r40;set closer vstr r20" set r40 "cg_thirdpersonrange 40;set farther vstr r50;set closer vstr r30" set r50 "cg_thirdpersonrange 50;set farther vstr r60;set closer vstr r40" set r60 "cg_thirdpersonrange 60;set farther vstr r70;set closer vstr r50" set r70 "cg_thirdpersonrange 70;set farther vstr r80;set closer vstr r60" set r80 "cg_thirdpersonrange 80;set farther vstr r90;set closer vstr r70" set r90 "cg_thirdpersonrange 90;set farther vstr r100;set closer vstr r80" set r100 "cg_thirdpersonrange 100;set farther vstr r120;set closer vstr r90" set r120 "cg_thirdpersonrange 120;set farther vstr r140;set closer vstr r100" set r140 "cg_thirdpersonrange 140;set farther vstr r160;set closer vstr r120" set r160 "cg_thirdpersonrange 160;set farther vstr r180;set closer vstr r140" set r180 "cg_thirdpersonrange 180;set farther vstr r200;set closer vstr r160" set r200 "cg_thirdpersonrange 200;set farther vstr r220;set closer vstr r180" set r220 "cg_thirdpersonrange 220;set farther vstr r240;set closer vstr r200" set r240 "cg_thirdpersonrange 240;set farther vstr r260;set closer vstr r220" set r260 "cg_thirdpersonrange 260;set farther vstr r280;set closer vstr r240" set r280 "cg_thirdpersonrange 280;set farther vstr r300;set closer vstr r260" set r300 "cg_thirdpersonrange 300;set farther vstr r350;set closer vstr r280" set r350 "cg_thirdpersonrange 350;set farther vstr r400;set closer vstr r300" set r400 "cg_thirdpersonrange 400;set farther vstr r500;set closer vstr r350" set r500 "cg_thirdpersonrange 500;set farther vstr r5;set closer vstr r400"
