I have heard of this kind of thing happening a lot, but it hasnt happened to me yet.
Anyway, my kyle.cog for GaSII checks to see if the player is using either of 2 skins, if not, the cog switches the skin to be compatable with the system. I did this because one of my weapons has support for using 2 of that weapon at the same time, and the only way to do this is to make a skin with the left handed gun already there.
SO, This cog works fine in SP and MP LEC levels, but not in any usermade levels. Well, the cog works, but it wont set the models at all. Also, if I start a game using a skin that is supported by the system, it gives me the error message that i coded in for when the skin doesnt work, then switches the skin to ky.3do (default model).
mmodels are the 2 reular supported skins without a gun built in.
wmodels are the 2 supported skins with the left handed gun in place.
I didn't used to document my cogs at all, so there is little or no reference as to what is going on, if you have any questions ask me.
------------------
I'm just an old man with a skooma problem.
Anyway, my kyle.cog for GaSII checks to see if the player is using either of 2 skins, if not, the cog switches the skin to be compatable with the system. I did this because one of my weapons has support for using 2 of that weapon at the same time, and the only way to do this is to make a skin with the left handed gun already there.
SO, This cog works fine in SP and MP LEC levels, but not in any usermade levels. Well, the cog works, but it wont set the models at all. Also, if I start a game using a skin that is supported by the system, it gives me the error message that i coded in for when the skin doesnt work, then switches the skin to ky.3do (default model).
mmodels are the 2 reular supported skins without a gun built in.
wmodels are the 2 supported skins with the left handed gun in place.
I didn't used to document my cogs at all, so there is little or no reference as to what is going on, if you have any questions ask me.
Code:
# Jedi Knight Cog Script
#
# KYLE.COG
#
# Main script for the player. Handles things like saber info,
# saber blocking animations, invulnerability at respawn, etc.
#
# [YB & CYW]
# added support for 2 berettas, shield suit, and jetpack
#
# (C) 1997 LucasArts Entertainment Co. All Rights Reserved
symbols
thing player local
int nextBlock=0 local
int bin local
int rank local
int bin00=62 local
#shield suit shtuff
model Model=-1 local
model iModel=invis.3do local
#beretta shtuff
model mmodel0=kya18.3do local
model mmodel1=kya19.3do local
model wmodel0=2gtroop.3do local
model wmodel1=bryg2s.3do local
#gib/blood
template blood=+bloodstain local
template bloodcloud=+bloodcloud local
template head=limb1 local
template torso=limb2 local
template arm=limb3 local
template leg=limb4 local
flex shield local
flex damage local
sound outsnd=SCAlarm.wav local
int pmodel=-1 local
int force_blinding=0 local
int blindingEffectHandle=-1 local
int PulledWeapon local
int playersector local
vector playerpos local
int bub local
template tpl=+FPBryarPistol local
template tpl1=+FPBryarPistol local
template tpl2=+FPBryarPistol local
template tpl3=+FPSTrifle local
template tpl4=+FPDetonator local
template tpl5=+FPCrossbow local
template tpl6=+FPRepeaterGun local
template tpl7=+FPRailGun local
template tpl8=+FPSeqCharge local
template tpl9=+FPConcRifle local
template smoke_tpl=+heavysmoke local
int smoke local
template teleport_particles=+telesparks local
sound teleportsnd=ForceThrow01.WAV local
template bubble_tpl=bubble local
template bubble_tpl2=bubble2 local
template bubble_tpl3=bubble3 local
template splash_tpl=+watersplash local
template splash_tpl2=+watersplash2 local
int a_splash local
int sender local
int source local
keyframe povBlockAnim0=SabVblk0.key local
keyframe povBlockAnim1=SabVblk1.key local
keyframe povBlockAnim2=SabVblk2.key local
keyframe blockAnim0=KYblock0.key local
keyframe blockAnim1=KYblock1.key local
keyframe blockAnim2=KYblock2.key local
int dummy=0 local
int blockPOVTrack=-1 local
int blockTrack=-1 local
int griptrackID=-1 local
message startup
message killed
message newplayer
message timer
message blocked
message skill
message damaged
message splash
message user0
message pulse
end
# ========================================================================================
code
startup:
player = GetLocalPlayerThing();
SetTimerEx(1, 101, -1, -1);
if(!IsMulti()) call init_kyle;
// Bubbles
if(IsMulti())
SetTimerEx(4 + 5 * rand(), 2, 0, 0);
else
SetTimerEx(2 + 5 * rand(), 2, 0, 0);
Return;
# ........................................................................................
killed:
if(player != GetSenderRef()) Return;
SetThingModel(player, wmodel0[pmodel]);
if(IsMulti()) SendTrigger(-1, 5000, player, 0, 0, 0);
else ParseArg(player, "puppet=ky.pup");
check = 0;
SetPulse(0);
//Gibs for multi player + backpack crap
if(IsMulti())
{
SetThingFlags(player, 0x10);
SendTrigger(-1, 1000, player, GetThingVel(GetSourceRef()), 0, 0);
CreateBackpack(player);
ClearActorFlags(player, 0x2000);
}
// clean up force powers stuff
if(blindingEffectHandle!=-1)
{
freeColorEffect(blindingEffectHandle);
blindingEffectHandle = -1;
}
ClearActorFlags(player, 0x800);
KillTimerEx(27);
force_blinding = 0;
ClearActorFlags(player, 0x40000);
if(griptrackID != -1)
{
StopKey(player, griptrackID, 0.1);
griptrackID = -1;
}
Return;
# ........................................................................................
damaged:
if(GetParam(1) == 32) call make_bubbles;
damage = GetParam(0);
if(IsInvActivated(player, bin00) == 1)
{
shield = GetInv(player, 117);
player = GetSenderRef();
if(shield > 0)
{
AddDynamicTint(player, 0, damage/100, damage/100);
shield = shield - damage;
if(shield <= 0) {
damage = -shield;
SetInv(player, bin00, 1.0);
SetInvActivated(player, bin00, 0);
Print("Shield Suit has run out of energy");
PlaySoundLocal(outsnd, 1.0, 0.0, 0); }
else {
damage = 0;
jkStringClear();
jkStringConcatAsciiString("Shield Suit at ");
jkStringConcatFlex(shield);
jkStringOutput();
jkStringClear(); }
SetInv(player, 117, shield);
}
}
else if(IsMulti()) SendTrigger(-1, 2000, player, 0, 0, 0);
else { CreateThingAtPos(bloodcloud, GetThingSector(victim), GetThingPos(victim), '0 0 0');
CreateThingAtPos(blood, GetThingSector(victim), GetThingPos(victim), '0 0 0'); }
ReturnEx(damage);
Return;
# ........................................................................................
make_bubbles:
playersector = GetThingSector(player);
playerpos = VectorAdd(GetThingPos(player), '0 0 0.075');
for(bub = 1; bub < 1 + 3 * rand(); bub = bub + 1)
{
CreateThingAtPosNR(bubble_tpl[3 * rand()], playersector, VectorAdd(playerpos, VectorScale(VectorNorm(VectorSet(rand()-0.5, rand()-0.5, rand()-0.5)), 0.05)), '0 0 0');
Sleep(0.05);
// Don't create too many bubbles over the network...
if(!IsMulti())
{
CreateThingAtPos(bubble_tpl3, playersector, VectorAdd(playerpos, VectorScale(VectorNorm(VectorSet(rand()-0.5, rand()-0.5, rand()-0.5)), 0.05)), '0 0 0');
Sleep(0.05);
}
}
Return;
# ........................................................................................
newplayer:
call init_kyle;
// If it's multiplayer
if(IsMulti()) call init_multi_kyle;
// Start Bubbles
SetTimerEx(2 + 5 * rand(), 2, 0, 0);
Return;
# ........................................................................................
timer:
if(GetSenderId() == 1) // Invulnerable for a while
{
// jkSetInvulnerable(GetParam(0), 0);
ClearActorFlags(GetParam(0), 8);
Return;
}
else
if(GetSenderId() == 2) // Bubbles check
{
if(GetThingHealth(player) < 1) Return;
if((GetThingFlags(player) & 0x2000000) && !(GetPhysicsFlags(player) & 0x100000))
call make_bubbles;
if(IsMulti())
SetTimerEx(4 + 5 * rand(), 2, 0, 0);
else
SetTimerEx(2 + 5 * rand(), 2, 0, 0);
Return;
}
else
if(GetSenderId() == 24)
{
// A pulled weapon must be made takeable again
SetCollideType(GetParam(0), 1);
Return;
}
else
if(GetSenderId() == 27)
{
if(blindingEffectHandle!=-1)
{
freeColorEffect(blindingEffectHandle);
blindingEffectHandle = -1;
}
// Get the effect ramping down
AddDynamicTint(player, 200 + 8 * rank, 210 + 10 * rank, 200 + 8 * rank);
ClearActorFlags(player, 0x800);
force_blinding = 0;
Return;
}
else
if(GetSenderId() == 31)
{
if(griptrackID != -1)
{
StopKey(player, griptrackID, 0.1);
griptrackID = -1;
}
ClearActorFlags(player, 0x40000);
Return;
}
else
if(GetSenderID() == 100) SetPulse(0.01);
else
if(GetSenderID() == 101)
{
Model=GetThingModel(player);
if((model != mmodel0) && (model != mmodel1))
{
SetThingModel(player, mmodel0);
if(IsMulti()) Print("Error: model not compatabple with GaSII system.");
Model=GetThingModel(player);
if(IsMulti()) Print("Error accounted for, please use GaSII skins in the future.");
}
}
Return;
# ........................................................................................
blocked:
if(player != GetSenderRef()) Return;
if (blockPOVTrack != -1)
{
jkStopPOVKey( player, blockPOVTrack, 0.1 );
blockPOVTrack = -1;
}
if (blockTrack != -1)
{
StopKey( player, blockTrack, 0.1 );
blockTrack = -1;
}
// PlaySoundThing(hitSound14, player, 1.0, -1, -1, 0);
blockPOVTrack = jkPlayPOVKey(player, povBlockAnim0[nextBlock], 2, 0x1a);
blockTrack = PlayKey(player, blockAnim0[nextBlock], 2, 0x1a);
nextBlock = nextBlock + 1;
if(nextBlock > 2)
nextBlock = 0;
Return;
# ........................................................................................
// This message is sent from the weap_saber.cog
user0:
if (blockPOVTrack != -1)
{
jkStopPOVKey( player, blockPOVTrack, 0.1 );
blockPOVTrack = -1;
}
if (blockTrack != -1)
{
StopKey( player, blockTrack, 0.1 );
blockTrack = -1;
}
Return;
# ........................................................................................
skill:
// player might be dead when skill: arrives over the net...
if(GetThingHealth(player) <= 0) Return;
// Handle multiplayer force power effects
bin = GetParam(0);
rank = GetParam(1);
if(bin == 24) // Force Pull
{
ReturnEx(0);
if(!IsInvActivated(player, 28)) // Absorb makes player immune to Pull
{
if((GetCurWeapon(player) != 1) && (GetCurWeapon(player) != 10))
{
// Create a powerup corresponding to the current weapon
PulledWeapon = CreateThingAtPos(tpl[GetCurWeapon(player)], GetThingSector(player), GetThingPos(player), '0 0 0');
// Make the powerup collide later
SetTimerEx(0.2, 24, PulledWeapon, 0);
// Duplicate for internet games
SetTimerEx(0.25, 24, PulledWeapon, 0);
// Throw the powerup at the player
ApplyForce(PulledWeapon, VectorScale(VectorNorm(VectorSub(GetThingPos(GetSourceRef()), GetThingPos(player))), 30));
// Remove the weapon from the player
ChangeInv(player, GetCurWeapon(player), -1);
// Switch to fists
SelectWeapon(player, 1);
ReturnEx(1);
}
}
Return;
}
else
if (bin == 27) // Force Blinding
{
if((!force_blinding) && (!IsInvActivated(player, 23))) // Seeing makes player immune to Blinding
{
force_blinding = 1;
blindingEffectHandle = newColorEffect(0, 0, 0, 0, 0, 0, 200 + 8 * rank, 210 + 10 * rank, 200 + 8 * rank, 1.0);
SetActorFlags(player, 0x800);
SetTimerEx(4 * rank, 27, player, 0);
ReturnEx(1);
}
else
{
ReturnEx(0);
}
Return;
}
else
if (bin == 31) // Force Grip
{
if(!IsInvActivated(player, 29)) // Protection makes player immune to Grip
{
griptrackID = PlayMode(player, 25);
SetActorFlags(player, 0x40000);
// Print("You are taking Grip damage");
jkPrintUNIString(player, 300);
DamageThing(player, 2 * rank, 0x8, GetSourceRef());
SetTimerEx(0.5, 31, player, 0);
ReturnEx(1);
}
else
{
ReturnEx(0);
}
Return;
}
else
if (bin == 34) // Deadly Sight
{
// Print("You are taking Deadly Sight damage");
jkPrintUNIString(player, 301);
DamageThing(player, 4 * rank, 0x8, GetSourceRef());
smoke = CreateThingAtPosNR(smoke_tpl, GetThingSector(player), GetThingPos(player), '0 0 0');
// Raise the tint above the normal damage tint
if(GetCurrentCamera() == 0)
AddDynamicTint(player, 0.15, 0.0, 0.07);
ReturnEx(1);
Return;
}
ReturnEx(-1);
Return;
# ........................................................................................
splash:
// splash: messages are only sent to the local player's cogs
// (class cog and capture cog) for performance reasons...
sender = GetSenderRef();
source = GetSourceRef();
// actor or player ?
if((GetThingType(sender) == 2) || (GetThingType(sender) == 10))
{
// whatever source (i.e. enter or leave, don't care)
a_splash = CreateThingAtPosNR(splash_tpl2, GetThingSector(sender), GetThingPos(sender), '0 0 0');
}
// these are mostly the projectiles...
else
{
// on entering only
if(source == 1)
// not if player is submerged, but still do it if he's on the surface
if(!(GetThingFlags(player) & 0x2000000) || (GetPhysicsFlags(player) & 0x100000))
a_splash = CreateThingNR(splash_tpl, sender);
}
Return;
# ........................................................................................
init_kyle:
// make sure we can see the player if he was gibbed previously
ClearThingFlags(player, 0x10);
SetActorFlags(player, 8);
SetInvAvailable(player, 41, 1);
SetTimerEx(1.50, 1, player, 0);
SetTimerEx(2, 100, -1, -1);
// Set Health to full
SetThingHealth(player, 100);
// Set Mana to full
SetInv(player, 14, GetInv(player, 20) * 50);
// Set Shields to 100 minimum
if(GetInv(player, 60) < 100) SetInv(player, 60, 100);
// Set Battery to 100 minimum
if(GetInv(player, 13) < 100) SetInv(player, 13, 100);
// Set the power boost to 1.0
SetInv(player, 63, 1.0);
// When player starts, give him fists, and a bryar.
SetInv(player, 1, 1.0);
SetInv(player, 2, 1.0);
// Give 50 energy minimum
if(GetInv(player, 11) < 50) SetInv(player, 11, 50.0);
// Bacta
if(GetInv(player, 40) == 0)
SetInvAvailable(player, 40, 0);
else
SetInvAvailable(player, 40, 1);
// IR Goggles
SetInv(player, 41, 1);
SetInvAvailable(player, 41, 1);
// Field Light
SetInv(player, 42, 1);
SetInvAvailable(player, 42, 1);
SetInvActivated(player, 42, 0);
ClearActorFlags(player, 4);
jkEndTarget();
Return;
# ........................................................................................
init_multi_kyle:
SetTimerEx(2, 100, -1, -1);
SetInv(player, 41, 1);
SetInvAvailable(player, 41, 1);
SetInvActivated(player, 41, 0);
// Set Weapons
ClearThingFlags(player, 0x10);
SetInv(player, 1, 1.0);
SetInv(player, 2, 1.0);
SetInv(player, 3, 0.0);
SetInv(player, 4, 0.0);
SetInv(player, 5, 0.0);
SetInv(player, 6, 0.0);
SetInv(player, 7, 0.0);
SetInv(player, 8, 0.0);
SetInv(player, 9, 0.0);
SetInv(player, 10, 1.0);
// Set Ammo
SetInv(player, 11, 50.0);
SetInv(player, 12, 0.0);
SetInv(player, 15, 0.0);
// Remove bacta tank and IR goggles
SetInv(player, 40, 0);
SetInvAvailable(player, 40, 0);
// Set shields to 100
SetInv(player, 60, 100);
// Do respawn effects
dummy = CreateThingAtPos(teleport_particles, GetThingSector(player), GetThingPos(player), '0 0 0');
dummy = PlaySoundThing(teleportsnd, player, 1.0, -1, -1, 0x180);
SetFireWait(player, -1);
SetMountWait(player, 0);
SetCurInvWeapon(player, 0);
SelectWeapon(player, AutoSelectWeapon(player, 1));
Return;
#
pulse:
if (GetInv(player, 3) == 2)
{
if ((GetCurWeapon(player) == 3) && (check == 0))
{
if(GetThingModel(player) == mmodel0) pmodel = 0;
else
if(GetThingModel(player) == mmodel1) pmodel = 1;
PrintInt(pmodel);
SetThingModel(player, wmodel0[pmodel]);
check = 1;
}
else
if ((GetInv(player, 3) !=2) || (GetCurWeapon(player) != 3))
{
check = 0;
if (model != -1)
{
SetThingModel(player, mmodel0[pmodel]);
}
}
}
if (IsInvActivated(player, bin00) == 1) SetThingModel(player, iModel);
else
if ((IsInvActivated(player, bin00) == 0) && (GetThingModel(player) == iModel)) SetThingModel(player, Model);
return;
end
------------------
I'm just an old man with a skooma problem.
I'm just an old man with a skooma problem.