Okay, here's the deal. I was just fooling around and thought of making a small mod called "Jawa Tag" - which is basically "Smeer the Queer" for JK. It's similar to KFY in gameplay, (and NO I didn't steal any code) but I'm having one bug. I'm going to replace the power boost with the jawa 'icon' so that this mod can be played in any level. I'm having trouble capturing the icon though. Any ideas? Here is the powerup cog:
----------------------------
And also the main game cog:
Things happen in JK, but it just doesn't happen directly when I touch the power boost.
(BTW, I found a way for multiple .pup setups in multiplayer. It's a hack, but it seems to work. --And it's not ParseArg()!!!)
Thanks ahead of time.
-Tazz
Code:
# Jedi Knight Cog Script # # POW_POWERBOOST.COG # # POWERUP Script - Powerboost # # * Modified for Jawa Tag purposes # # # # [YB] # # (C) 1997 LucasArts Entertainment Co. All Rights Reserved symbols thing powerup local int powerup_pos=-1 local message touched end # ======================================================================================== code touched: powerup = GetSenderRef(); powerup_pos = GetThingPos(GetSenderRef()); SendTrigger(-1, 5641, powerup, powerup_pos, -1, -1); Return; end
----------------------------
And also the main game cog:
Code:
# Jedi Knight Cog Script
#
# JT_MAIN.COG
#
# * This script is losely based on CTF_MAIN.COG and KFY_MAIN.COG.
# No code was directly taken from KFY_MAIN.COG, it was merely
# used as a reference. Extensive code was taken from CTF_MAIN.COG.
#
#
# Copyright 2001 - Tazz - tazztazz@hotmail.com
symbols
int captured=0 local
int jawa=-1 local
int verbose=3 local # FOR DEBUG
int time_limit=0 local
int score_limit=0 local
int level_started=0 local
int level_ended=0 local
int game_started=0 local
int hi_score=-1 local
int hi_player=-1 local
int player local
int killer local
int leaveplayer=0 local
int senderRef=0 local
int sourceRef=0 local
int lock_touch=0 local
int play_sounds=1 local
int dummy local
int count=0 local
# Scoring Section
int became_the_jawa=7 local
flex pulse_score=1.0 local
int suicide=-2 local
int kill_jawa=3 local
flex return_time=60.0 local
# Sounds Section
sound pickupsnd=ForceThrow01.WAV local
sound scoresnd=ForceThrow01.WAV local
sound alarmsnd=00AlarmLoop01.WAV local
sound successsnd=Accomplish1.WAV local
# New Symbols Secton
model jawa_mdl=jawa.3do local
model jawa_icon_mdl=boost.3do local
thing jawa_icon local
template jawa_icon_ghost=ghost local
template jawa_icon_tpl=powerboost local
int jawa_icon_pos local
message startup
message touched
message timer
message killed
message leave
message join
message pulse
# Triggers
#
# 1001 - ICONS#
#
# Misc.
#
# Captured 2=yes, 1=no
end
# ========================================================================================
code
startup:
player = GetLocalPlayerThing();
CaptureThing(player);
SetMasterCOG(GetSelfCOG());
if(verbose > 2) Print("Jawa Tag: Startup Evt");
// SERVER ONLY startup:
if(IsServer() || !IsMulti())
{
// Initialize Time limit
if(GetMultiModeFlags() & 0x8)
{
time_limit = GetTimeLimit();
if(time_limit > 0) SetTimerEx(time_limit * 60, 9998, 0, 0);
ClearMultiModeFlags(0x8);
}
// Initialize Score limit
if(GetMultiModeFlags() & 0x10)
{
score_limit = GetScoreLimit();
ClearMultiModeFlags(0x10);
}
// Nobody can become the jawa for 30 seconds
SetTimerEx(30, 9997, 0, 0);
}
//Inventory
SetInv(player, 63, 0.0);
SetInvActivated(player, 63, 0);
//Create ghost at position of jawa icon (to teleport back to later)
CreateThingAtPos(jawa_icon_ghost, GetThingSector(jawa_icon),GetThingPos(jawa_icon), -1);
// Send the Welcome information, but delay it by 2 seconds
SetTimerEx(2, 9996, player, 0);
Return;
# ........................................................................................
pulse:
// Add score if captured, and display score occasionally
if(captured == 2)
{
SetPlayerScore(jawa, GetPlayerScore(jawa) + pulse_score);
if(GetPlayerScore(jawa) > hi_score)
{
hi_score = GetPlayerScore(jawa);
hi_player = jawa;
call check_score_limit;
}
//Score display
count = count + 1;
if(count > 4)
{
count = 0;
jkStringClear();
jkStringConcatPlayerName(jawa);
jkStringConcatSpace();
jkStringConcatASCIIString(", (the current Jawa) has a score of: ");
jkStringConcatInt(GetPlayerScore(jawa));
jkStringOutput(-3, -1);
}
}
Return;
# ........................................................................................
join:
player = GetSenderRef();
// Send the Welcome information, but delay it by 2 seconds
SetTimerEx(2, 9996, player, 0);
Return;
# ........................................................................................
leave:
leaveplayer = GetSenderRef();
if(GetInv(leaveplayer, 63) > 0.0)
{
// Remove the icon
// Send a TRIGGER_ICON with its parameters
SendTrigger(leaveplayer, 1001, 63, 0, 0, 0);
// Remove the jawa power from the player's inventory
SetInv(leaveplayer, 63, 0.0);
captured = 1;
//Return icon to original positon
SetTimerEx(2, 1, 0, 0);
}
Return;
# ........................................................................................
//might have to do touched: message in powerup cog, then send a trigger for the FX
touched:
if(!game_started) Return;
// Exit if one of the limits has been reached
if(level_ended != 0) Return;
player = GetSourceRef();
// sometimes a dead/dying player can score
// Health is not synched, so use SITH_TF_DYING instead
if(GetThingFlags(player) & 0x200) Return;
senderRef = GetSenderRef();
// If(GetThingModel(senderRef) != jawa_icon_mdl) Return;
if(senderRef == jawa_icon)
if(verbose > 2) Print("Jawa Tag: Touched Evt");
{
if(level_ended != 0) Return;
if(play_sounds)
{
PlaySoundGlobal(pickupsnd, 1, 0, 4);
// Play an alarm sound
KillTimerEx(9995);
SetTimerEx(1, 9995, 0, 0);
}
if(verbose > 0)
{
//Broadcast text notification -someone became the jawa
jkStringClear();
jkStringConcatPlayerName(player);
jkStringConcatSpace();
jkStringConcatASCIIString("is the Jawa!");
jkStringOutput(-3, -1);
}
// Set the player's model to fully lit
SetThingLightMode(player, 0);
// Set an icon
// Send a TRIGGER_ICON with its parameters
SendTrigger(player, 1001, 63, 1, 0, 0);
//Destroy original jawa icon
DestroyThing(jawa_icon);
jawa = player;
//Change model and puppet mode
SetThingModel(jawa, jawa_mdl);
SetArmedMode(jawa, 6);
// Increment player score
SetPlayerScore(jawa, GetPlayerScore(jawa) + became_the_jawa);
if(GetPlayerScore(jawa) > hi_score)
{
hi_score = GetPlayerScore(jawa);
hi_player = jawa;
call check_score_limit;
}
captured = 2;
}
Return;
# ........................................................................................
timer:
// Send the icon back
if(GetSenderId() == 1)
{
if(captured == 1)
{
if(play_sounds) dummy = PlaySoundThing(returnsnd, jawa_icon, 1.0, -1, -1, 0);
CreateThingAtPos(jawa_icon_tpl, GetThingSector(jawa_icon_ghost),GetThingPos(jawa_icon_ghost), -1);
if(verbose > 0)
{
jkStringClear();
jkConcatASCIIString("The Jawa Icon is up for grabs!");
jkStringOutput(-3, -1);
}
captured = 0;
Return;
}
}
else
// unlock touched: messages
if(GetSenderId() == 9990)
{
lock_touch = 0;
}
else
// play success sound
if(GetSenderId() == 9994)
{
PlaySoundGlobal(successsnd, 1, 0, 4);
}
else
// play alarm sound
if(GetSenderId() == 9995)
{
PlaySoundGlobal(alarmsnd, 1, 0, 4);
}
else
// Time to display the welcome info for a new player
if(GetSenderId() == 9996)
{
if(verbose > 1)
{
player = GetParam(0);
jkStringClear();
jkStringConcatASCIIString("Welcome to Jawa Tag, ");
jkStringConcatSpace();
jkStringConcatPlayerName(player);
jkStringConcatASCIIString("!");
jkStringClear();
if(time_limit != 0)
{
jkStringConcatASCIIString("Time Limit: ");
jkStringConcatInt(time_limit);
jkStringConcatSpace();
jkStringConcatSpace();
}
if(score_limit != 0)
{
jkStringConcatASCIIString("Score Limit: ");
jkStringConcatInt(score_limit);
}
jkStringOutput(player, -1);
}
}
else
// Start the game
if(GetSenderId() == 9997)
{
game_started = 1;
}
else
// The event comes from the level's timelimit being reached
// Just check that a limit has not been reached before...
if(GetSenderId() == 9998)
{
if(level_ended != 0) Return;
if(verbose > 2) Print("Time limit reached");
level_ended = 2;
call end_level;
}
else
// End the level
if(GetSenderId() == 9999)
{
SyncScores();
jkEndLevel(1);
}
Return;
# ........................................................................................
killed:
if(verbose > 2) Print("Jawa Tag: Killed Evt");
senderRef = GetSenderRef();
sourceRef = GetSourceRef();
// Exit if killed: was sent by anything else than a thing
if(GetSenderType() != 3) Return;
// Exit if killed: was sent by one of the flags
// (powerups send killed: event when taken too...)
if(senderRef == jawa_icon) Return;
player = senderRef;
//Return the icon to its home
if(GetInv(player, 63) > 0.0)
{
// Remove the icon
// Send a TRIGGER_ICON with its parameters
SendTrigger(leaveplayer, 1001, 63, 0, 0, 0);
// Remove the jawa power from the player's inventory
SetInv(leaveplayer, 63, 0.0);
captured = 1;
//Return icon to original positon
SetTimerEx(2, 1, 0, 0);
// Set the player's model to Gouraud lit
SetThingLightMode(player, 3);
jawa = -1;
if(killer != player)
{
// Increment player score
SetPlayerScore(killer, GetPlayerScore(killer) + kill_jawa);
}
//return the icon immediately
SetTimerEx(0.5, 1, 0, 0);
if(verbose > 0)
{
jkStringClear();
jkStringConcatPlayerName(jawa);
jkStringConcatSpace();
jkStringConcatASCIIString("died.");
jkStringOutput(-3, -1);
}
}
else
{
//Add 1 to the killer score
killer = GetThingParent(sourceRef);
if(killer != player)
{
// Increment player score
SetPlayerScore(killer, GetPlayerScore(killer) + 1);
}
}
Return;
# ........................................................................................
trigger:
// Handle only TRIGGER_JAWA_ICON_POS
if(GetSourceRef() != 5641) Return;
jawa_icon = GetParam(0);
jawa_icon_pos = GetParam(1);
Return;
# ========================================================================================
show_end:
if(verbose > 0)
{
// Space
jkStringConcatSpace();
if(level_ended == 1)
{
jkStringConcatASCIIString("Score Limit Reached! Ending Game");
}
if(level_ended == 2)
{
jkStringConcatASCIIString("Time Limit Reached! Ending Game");
}
// Space
jkStringConcatSpace();
jkStringOutput(-3,-1);
}
Return;
# ........................................................................................
end_level:
SyncScores();
call show_end;
// display final scores
KillTimerEx(9997);
SetTimerEx(3, 9997, 0, 0);
// until it is time to quit the level
SetTimerEx(4, 9999, 0, 0);
Return;
# ........................................................................................
check_score_limit:
// there must be a score limit
if(score_limit <= 0) Return;
if(hi_score >= score_limit)
{
level_ended = 1;
call end_level;
}
Return;
endThings happen in JK, but it just doesn't happen directly when I touch the power boost.
(BTW, I found a way for multiple .pup setups in multiplayer. It's a hack, but it seems to work. --And it's not ParseArg()!!!)
Thanks ahead of time.
-Tazz
-There are easier things in life than finding a good woman, like nailing Jello to a tree, for instance
Tazz
Tazz