Hi!
New problem. I am attempting an Air Strike, though I don't think it is working properly... In the code, I did so that when you had a lock on someone and released the trigger, conc bullets would come raining down, if there was a high enough ceiling. 2 problems though:
1. After I've hit my target, the game quits. Not to desktop, but to the main menu.
2. It seems like only one vertex is registered because I only see one bullet come raining down, though I am sure of that there are more vertices in the level. I'm testing this in the big open level 06.
Now, you're probebly wondering about the 6 commented out FireProjectiles... Well, I can't decide how many bullets I want from each vertex, so... And also, about searching for all vertices in all sectors, that is because when I fire from the ground in 06, I'm not in the same sector as the sky. Not until I'm up on the bridges and so on do I get in the same sector as the sky. I am using HasLos to make sure I don't blow something else up by misstake, but I guess that ain't good enough... What do I need so that the bombing comes from the sky.
/Edward
New problem. I am attempting an Air Strike, though I don't think it is working properly... In the code, I did so that when you had a lock on someone and released the trigger, conc bullets would come raining down, if there was a high enough ceiling. 2 problems though:
1. After I've hit my target, the game quits. Not to desktop, but to the main menu.
2. It seems like only one vertex is registered because I only see one bullet come raining down, though I am sure of that there are more vertices in the level. I'm testing this in the big open level 06.
Code:
# Jedi Knight Cog Script
#
# WEAP_CONCRIFLE.COG
#
# WEAPON 9 Script - Concussion Rifle
#
# The trusty weapon of the Bossk race. It fires a concussive blast with a maximum
# range of 30 meters, from there it creates an explosion that has a spread of about
# 4 meters in diameter.
#
# - Not affected by MagSealed sectors/surfaces.
#
# [YB & CYW]
#
# (C) 1997 LucasArts Entertainment Co. All Rights Reserved
# ========================================================================================
symbols
model povModel=conv.3do local
model weaponMesh=cong.3do local
keyframe mountAnim=ConVmnt.key local
keyframe dismountAnim=ConVdis.key local
keyframe povfireAnim=ConVpst1.key local
keyframe povfireAnim2=detvpre1.key local
keyframe holsterAnim=kyhlstr.key local
sound mountSound=df_rif_ready.wav local
sound dismountSound=PutWeaponAway01.wav local
sound fireSound=concuss5.wav local
sound outSound=concuss1.wav local
sound callSound=i00o305z.wav local
sound incoming=Nouveau.wav local
flex fireWait=1.2 local
flex powerBoost local
flex autoAimFOV=30 local
flex autoAimMaxDist=5 local
flex holsterWait local
int dummy local
template projectile=+concbullet local
template projectile3=+concbullet2 local
template in=+lightninghit local
thing player local
thing p local
int vercount=0 local
int trackID=-1 local
int mode local
int holsterTrack local
flex rank=4 local
int victim=-1 local
int potential=-1 local
flex maxdot local
flex dot local
int selectMode=1 local
vector lv local
vector lvr local
int i local
sector sector local
thing returnpos local
template ghost=+repeaterball local
int isaflag local
message activated
message deactivated
message selected
message deselected
#message newplayer
message autoselect
message fire
message timer
end
# ========================================================================================
code
fire:
// Check that the player is still alive.
if(GetThingHealth(player) <= 0)
{
Return;
}
// Check Ammo - If we are out, autoselect best weapon.
if(GetInv(player, 12) < 8.0)
{
PlaySoundThing(outSound, player, 1.0, -1, -1, 0x80);
if(GetAutoSwitch() & 1)
SelectWeapon(player, AutoSelectWeapon(player, 1));
Return;
}
if(mode == 0)
{
dummy = FireProjectile(player, projectile, fireSound, 18, '0.02 0.15 0.0', '0 0 0', 1.0, 0x20, autoAimFOV, autoAimMaxDist);
ChangeInv(player, 12, -8.0);
ChangeFireRate(player, fireWait/powerBoost);
SetPOVShake('0.0 -.03 0.0', '4.0 0.0 0.0', .05, 80.0);
jkPlayPOVKey(player, povfireAnim, 1, 0x38);
// Provide a kick backwards
ApplyForce(player, VectorScale(GetThingLVec(player), -80));
}
else
{
ChangeFireRate(player, 0.01);
// Check all things for our victim.
victim = -1;
maxDot = 0;
// Search for all players, actors and items.
potential = FirstThingInView(player, 20 + 15 * rank, 5.5, 0x424);
while(potential != -1)
{
if(
HasLOS(player, potential) &&
(potential != player) &&
(VectorDist(GetThingPos(player), GetThingPos(potential)) <= 10) &&
!(GetThingFlags(potential) & 0x200) &&
!((jkGetFlags(potential) & 0x20) && !IsInvActivated(player, 23)) &&
!(GetPhysicsFlags(potential) & 0x400000) &&
!(GetThingType(potential)==5)
)
{
// Hack to avoid targetting a CTF flag...
IsAFlag = 0;
if(!IsAFlag)
{
dot = ThingViewDot(player, potential);
if(dot > maxDot)
{
victim = potential;
maxDot = dot;
}
}
}
potential = NextThingInView();
}
// If we have a victim...
if(victim != -1)
{
jkSetTargetColors(rand()*255,rand()*255,rand()*255);
jkSetTarget(victim);
}
else
{
jkEndTarget();
}
}
powerBoost = GetInv(player, 63);
Return;
# ........................................................................................
activated:
player = GetSourceRef();
mode = GetSenderRef();
jkSetWaggle(player, '0.0 0.0 0.0', 0);
powerBoost = GetInv(player, 63);
ActivateWeapon( player, fireWait/powerBoost, mode );
Return;
# ........................................................................................
deactivated:
player = GetSourceRef();
mode = GetSenderRef();
if(mode==1)
{
jkEndTarget();
vercount=0;
if(victim == -1) return;
sector=GetThingSector(player);
SetPOVShake('0.0 -.03 0.0', '4.0 0.0 0.0', .05, 80.0);
returnpos=FireProjectile(player,ghost,-1,-1,'0 0 0.1','0 0 0',0,0,0,0);
for(sector=0; sector<=GetSectorCount(); sector=sector+1) {
for(i=0; i<=GetNumSectorVertices(sector); i=i+1)
{
if(VectorZ(GetSectorVertexPos(sector, i))>VectorZ(GetThingPos(player))+1)
{
lv=VectorSub(GetSectorVertexPos(sector, i),GetSectorVertexPos(sector, i+1));
lvr=VectorSet(-VectorX(lv),-VectorY(lv),-VectorZ(lv));
lv=VectorSub(GetSectorVertexPos(sector, i),GetThingPos(victim));
lvr=VectorSet(-VectorX(lv),-VectorY(lv),-VectorZ(lv));
dummy=CreateThingAtPos(ghost,sector,GetSectorVertexPos(sector, i),lvr);
CaptureThing(dummy);
SetThingLook(dummy,lvr);
TeleportThing(player,dummy);
if(HasLos(player,victim)) {
p=FireProjectile(player,projectile3,-1,-1,'0 0 0','0 0 0',0,0x00,0,0);
SetThingVel(p,VectorScale(lvr,powerBoost));
// p=FireProjectile(player,projectile3,-1,-1,'.1 0 0','0 0 0',0,0x00,0,0);
// SetThingVel(p,VectorScale(lvr,powerBoost));
// p=FireProjectile(player,projectile3,-1,-1,'0 0 .1','0 0 0',0,0x00,0,0);
// SetThingVel(p,VectorScale(lvr,powerBoost));
// p=FireProjectile(player,projectile3,-1,-1,'.1 0 .1','0 0 0',0,0x00,0,0);
// SetThingVel(p,VectorScale(lvr,powerBoost));
// p=FireProjectile(player,projectile3,-1,-1,'-.1 0 0','0 0 0',0,0x00,0,0);
// SetThingVel(p,VectorScale(lvr,powerBoost));
// p=FireProjectile(player,projectile3,-1,-1,'0 0 -.1','0 0 0',0,0x00,0,0);
// SetThingVel(p,VectorScale(lvr,2*powerBoost));
// p=FireProjectile(player,projectile3,-1,-1,'-.1 0 -.1','0 0 0',0,0x00,0,0);
// SetThingVel(p,VectorScale(lvr,powerBoost));
} DestroyThing(dummy);
vercount=vercount+1;
}
} }
TeleportThing(player,returnpos);
DestroyThing(returnpos);
if(vercount>0) {
jkPlayPOVKey(player, povfireAnim2, 1, 0x38);
PlaySoundThing(callSound,player,1,-1,-1,0x0);
PlaySoundGlobal(incoming,1,0,0x0); }
}
jkSetWaggle(player, '10.0 7.0 1.0', 350);
DeactivateWeapon( player, mode );
Return;
# ........................................................................................
selected:
player = GetSourceRef();
// Play external mounting animation
PlayMode(player, 41);
// Setup the meshes and models.
jkSetPOVModel(player, povModel);
SetArmedMode(player, 1);
jkSetWeaponMesh(player, weaponMesh);
jkSetWaggle(player, '10.0 7.0 0.0', 350);
// Play mounting sound.
PlaySoundThing(mountSound, player, 1.0, -1.0, -1.0, 0x80);
// Play the animation (NOLOOP + UNIQUE + ENDPAUSE).
// The animation is held at the last frame after it is played.
trackID = jkPlayPOVKey(player, mountAnim, 0, 20);
SetMountWait(player, GetKeyLen(mountAnim));
// Clear saber flags, and allow activation of the weapon
jkClearFlags(player, 0x5);
SetCurWeapon(player, 9);
// Check Ammo - If we are out, autoselect best weapon.
if(GetInv(player, 12) < 2.0)
{
PlaySoundThing(outSound, player, 1.0, -1, -1, 0x80);
if(GetAutoSwitch() & 1)
SelectWeapon(player, AutoSelectWeapon(player, 1));
}
Return;
# ........................................................................................
deselected:
player = GetSourceRef();
PlaySoundThing(dismountSound, player, 1.0, -1, -1, 0x80);
jkPlayPOVKey(player, dismountAnim, 0, 18);
holsterWait = GetKeyLen(holsterAnim);
SetMountWait(player, holsterWait);
holsterTrack = PlayKey(player, holsterAnim, 1, 0x4);
SetTimerEx(holsterWait, 2, 0.0, 0.0);
if (trackID != -1)
{
jkStopPOVKey(player, trackID, 0);
trackID = -1;
}
jkSetWaggle(player, '0.0 0.0 0.0', 0);
Return;
# ........................................................................................
//newplayer:
// player = GetSourceRef();
//
// // Make sure that if the player is respawning, the old mount isn't playing anymore.
// if (trackID != -1)
// jkStopPOVKey(player, trackID, 0);
//
// Return;
# ........................................................................................
autoselect:
selectMode = GetSenderRef();
player = GetSourceRef();
// If the player has the weapon
if(GetInv(player, 9) != 0.0)
{
// If the player has ammo
if(GetInv(player, 12) > 7.0)
{
// query for ammo
if(selectMode == -1)
{
ReturnEx(1000.0);
Return;
}
if((selectMode == 0) && !(GetAutoPickup() & 2))
{
ReturnEx(1000.0);
Return;
}
if((selectMode == 1) && !(GetAutoSwitch() & 2))
{
ReturnEx(1000.0);
Return;
}
if((selectMode == 2) && !(GetAutoPickup() & 2))
{
ReturnEx(1000.0);
Return;
}
ReturnEx(-2.0);
Return;
}
else
{
ReturnEx(-1.0);
}
}
else
{
ReturnEx(-1.0);
}
Return;
# ........................................................................................
timer:
StopKey(player, holsterTrack, 0.0);
Return;
end
Now, you're probebly wondering about the 6 commented out FireProjectiles... Well, I can't decide how many bullets I want from each vertex, so... And also, about searching for all vertices in all sectors, that is because when I fire from the ground in 06, I'm not in the same sector as the sky. Not until I'm up on the bridges and so on do I get in the same sector as the sky. I am using HasLos to make sure I don't blow something else up by misstake, but I guess that ain't good enough... What do I need so that the bombing comes from the sky.
/Edward