Jump to content

Serenity937

Members
  • Posts

    123
  • Joined

  • Last visited

Everything posted by Serenity937

  1. Some hobby coding and messing with assets
  2. Happy to be of service
  3. I Tried to code this in sp some time ago. I did this through code so the head "Irrelevant of model/size" would not clip with the camera. Check out the Code from here http://www.moddb.com/mods/serenitysabersystems/addons/serenityjedienginesdk
  4. As for the Bot jumping problem !!!! The best solution is to have a alternate path "BotFallbackNavigation" you can do it all in ai_main.c or get the EoC Source as stoiss correctly pointed out // Fallback Navigation. int BotFallbackNavigation(bot_state_t *bs) { vec3_t b_angle, fwd, trto, mins, maxs; trace_t tr; vec3_t a, ang; if (gWPArray && gWPArray[0]) return 2; if (bs->currentEnemy && bs->frame_Enemy_Vis) { return 2; //we're busy } if (bs->cur_ps.weapon != WP_SABER && bs->currentEnemy && bs->frame_Enemy_Vis) {// If we are looking at enemy and have line of sight, don't move. Stand and shoot. return 2; //we're busy } mins[0] = -15; mins[1] = -15; mins[2] = 0; maxs[0] = 15; maxs[1] = 15; maxs[2] = 32; bs->goalAngles[PITCH] = 0; bs->goalAngles[ROLL] = 0; VectorCopy(bs->goalAngles, b_angle); AngleVectors(b_angle, fwd, NULL, NULL); if (bs->currentEnemy && bs->currentEnemy->health > 0 && bs->currentEnemy->client->ps.fallingToDeath == 0 && bs->frame_Enemy_Vis && bs->currentEnemy->health > 0 && !(bs->currentEnemy->client && bs->currentEnemy->client->ps.weapon == WP_SABER && bs->currentEnemy->client->ps.saberHolstered >= 1)) {// head toward any enimies. VectorCopy(bs->currentEnemy->r.currentOrigin, trto); } else {// No current enemy. Randomize. Fallback code. if (next_point[bs->entitynum] < level.time || VectorDistance(bs->goalPosition, bs->origin) < 64 || !( bs->velocity[0] < 32 && bs->velocity[1] < 32 && bs->velocity[2] < 32 && bs->velocity[0] > -32 && bs->velocity[1] > -32 && bs->velocity[2] > -32 )) {// Ready for a new point. int choice = rand()%4; qboolean found = qfalse; while (found == qfalse) { if (choice == 2) { trto[0] = bs->origin[0] - ((rand()%1000)); trto[1] = bs->origin[1] + ((rand()%1000)); } else if (choice == 3) { trto[0] = bs->origin[0] + ((rand()%1000)); trto[1] = bs->origin[1] - ((rand()%1000)); } else if (choice == 4) { trto[0] = bs->origin[0] - ((rand()%1000)); trto[1] = bs->origin[1] - ((rand()%1000)); } else { trto[0] = bs->origin[0] + ((rand()%1000)); trto[1] = bs->origin[1] + ((rand()%1000)); } trto[2] = bs->origin[2]; if (OrgVisible(bs->origin, trto, -1)) found = qtrue; } next_point[bs->entitynum] = level.time + 2000 + (rand()%5)*1000; } else {// Still moving to the last point. return 1; // All is ok.. Keep moving forward. } } // Set the angles forward for checks. VectorSubtract(trto, bs->origin, a); vectoangles(a, ang); VectorCopy(ang, bs->goalAngles); trap_Trace(&tr, bs->origin, mins, maxs, trto, -1, MASK_SOLID); if (tr.fraction == 1) {// Visible point. if (CheckFall_By_Vectors(bs->origin, ang, &g_entities[bs->entitynum]) == qtrue) {// We would fall. VectorCopy(bs->origin, bs->goalPosition); // Stay still. } else {// Try to walk to "trto" if we won't fall. VectorCopy(trto, bs->goalPosition); // Original. VectorSubtract(bs->goalPosition, bs->origin, a); vectoangles(a, ang); VectorCopy(ang, bs->goalAngles); BotChangeViewAngles(bs, bs->goalAngles[YAW]); } } else { int tries = 0; while (CheckFall_By_Vectors(bs->origin, ang, &g_entities[bs->entitynum]) == qtrue && tries <= bot_thinklevel.integer) {// Keep trying until we get something valid? Too much CPU maybe? bs->goalAngles[YAW] = rand()%360; // Original. BotChangeViewAngles(bs, bs->goalAngles[YAW]); tries++; bs->goalAngles[PITCH] = 0; bs->goalAngles[ROLL] = 0; VectorCopy(bs->goalAngles, b_angle); AngleVectors(b_angle, fwd, NULL, NULL); VectorCopy(b_angle, ang); trto[0] = bs->origin[0] + ((rand()%4)*64); trto[1] = bs->origin[1] + ((rand()%4)*64); trto[2] = bs->origin[2]; VectorCopy(trto, bs->goalPosition); // Move to new goal. } if (tries > bot_thinklevel.integer) {// Ran out of random attempts. We would fall. Stay still instead for now. VectorCopy(bs->origin, bs->goalPosition); // Stay still. } } return 1; // Success! } // End of fallback nav. and connect it in void StandardBotAI(bot_state_t *bs, float thinktime) { here like this //RACC - Touched a waypoint. Do touch stuff and move onto next waypoint. if (bs->frame_Waypoint_Len < wpTouchDist || (g_RMG.integer && bs->frame_Waypoint_Len < wpTouchDist*2)) { WPTouchRoutine(bs); if (!bs->wpDirection) { desiredIndex = bs->wpCurrent->index+1; } else { desiredIndex = bs->wpCurrent->index-1; } if (gWPArray[desiredIndex] && gWPArray[desiredIndex]->inuse && desiredIndex < gWPNum && desiredIndex >= 0 && PassWayCheck(bs, desiredIndex)) { bs->wpCurrent = gWPArray[desiredIndex]; } else { if (bs->wpDestination) { bs->wpDestination = NULL; bs->destinationGrabTime = level.time + 10000; } if (bs->wpDirection) { bs->wpDirection = 0; } else { bs->wpDirection = 1; } } } } else //We can't find a waypoint, going to need a fallback routine. { doingFallback = BotFallbackNavigation(bs); } It wont make them perform miracles on maps without way points but it does make them more bearable.
  5. Making Bots walk. A bot will normally run everywhere .However ,normally a bot with a blaster will select saber if you get close to him , to engage in saber combat. Add this code and a bot with a saber will walk when he gets close enough to you,but bots with guns only will keep running so the are harder to shoot at. /* ============== BotInputToUserCommand ============== */ void BotInputToUserCommand(bot_input_t *bi, usercmd_t *ucmd, int delta_angles[3], int time, int useTime) { vec3_t angles, forward, right; short temp; int j; float f, r, u, m; //clear the whole structure memset(ucmd, 0, sizeof(usercmd_t)); //the duration for the user command in milli seconds ucmd->serverTime = time; // if (bi->actionflags & ACTION_DELAYEDJUMP) { bi->actionflags |= ACTION_JUMP; bi->actionflags &= ~ACTION_DELAYEDJUMP; } //set the buttons if (bi->actionflags & ACTION_RESPAWN) ucmd->buttons = BUTTON_ATTACK; if (bi->actionflags & ACTION_ATTACK) ucmd->buttons |= BUTTON_ATTACK; if (bi->actionflags & ACTION_ALT_ATTACK) ucmd->buttons |= BUTTON_ALT_ATTACK; if (bi->actionflags & ACTION_SABERTHROW) ucmd->buttons |= BUTTON_SABERTHROW; if (bi->actionflags & ACTION_GESTURE) ucmd->buttons |= BUTTON_GESTURE; if (bi->actionflags & ACTION_USE) ucmd->buttons |= BUTTON_USE_HOLDABLE; if (bi->actionflags & ACTION_WALK) ucmd->buttons |= BUTTON_WALKING; if(bi->weapon == WP_SABER) { if (bi->actionflags & ACTION_FORCEPOWER) ucmd->buttons |= BUTTON_ATTACK; } else { if (bi->actionflags & ACTION_FORCEPOWER) ucmd->buttons |= BUTTON_FORCEPOWER; } //RAFIXME: This is a hack to fix the hack that Raven did if (bi->actionflags & ACTION_USE) ucmd->buttons |= BUTTON_USE; if (useTime < level.time && Q_irand(1, 10) < 5) { //for now just hit use randomly in case there's something useable around ucmd->buttons |= BUTTON_USE; } if (bi->weapon == WP_NONE) { bi->weapon = WP_BRYAR_PISTOL; } // ucmd->weapon = bi->weapon; //set the view angles //NOTE: the ucmd->angles are the angles WITHOUT the delta angles ucmd->angles[PITCH] = ANGLE2SHORT(bi->viewangles[PITCH]); ucmd->angles[YAW] = ANGLE2SHORT(bi->viewangles[YAW]); ucmd->angles[ROLL] = ANGLE2SHORT(bi->viewangles[ROLL]); //subtract the delta angles for (j = 0; j < 3; j++) { temp = ucmd->angles[j] - delta_angles[j]; ucmd->angles[j] = temp; } //NOTE: movement is relative to the REAL view angles //get the horizontal forward and right vector //get the pitch in the range [-180, 180] if (bi->dir[2]) angles[PITCH] = bi->viewangles[PITCH]; else angles[PITCH] = 0; angles[YAW] = bi->viewangles[YAW]; angles[ROLL] = 0; AngleVectors(angles, forward, right, NULL); //bot input speed is in the range [0, 400] bi->speed = bi->speed * 127 / 400; //set the view independent movement f = DotProduct(forward, bi->dir); r = DotProduct(right, bi->dir); u = abs(forward[2]) * bi->dir[2]; m = fabs(f); if (fabs(r) > m) { m = fabs(r); } if (fabs(u) > m) { m = fabs(u); } if (m > 0) { f *= bi->speed / m; r *= bi->speed / m; u *= bi->speed / m; } ucmd->forwardmove = f; ucmd->rightmove = r; ucmd->upmove = u; //normal keyboard movement if (bi->actionflags & ACTION_MOVEFORWARD) ucmd->forwardmove = 127; if (bi->actionflags & ACTION_MOVEBACK) ucmd->forwardmove = -127; if (bi->actionflags & ACTION_MOVELEFT) ucmd->rightmove = -127; if (bi->actionflags & ACTION_MOVERIGHT) ucmd->rightmove = 127; //jump/moveup if (bi->actionflags & ACTION_JUMP) ucmd->upmove = 127; //crouch/movedown if (bi->actionflags & ACTION_CROUCH) ucmd->upmove = -127; //Make walking work for bots. if (bi->actionflags & ACTION_WALK) { if (ucmd->forwardmove > 46) { ucmd->forwardmove = 46; } else if (ucmd->forwardmove < -46) { ucmd->forwardmove = -46; } if (ucmd->rightmove > 46) { ucmd->rightmove = 46; } else if ( ucmd->rightmove < -46) { ucmd->rightmove = -46; } } //fixed problem with a bot's force power select not being treating properly by the pm code. ucmd->forcesel = bi->forcesel; } /* ============== BotUpdateInput ============== */ int walktime[MAX_CLIENTS]; //timer for walking extern qboolean visible (gentity_t *self, gentity_t *other); void BotUpdateInput(bot_state_t *bs, int time, int elapsed_time) { bot_input_t bi; int j; //add the delta angles to the bot's current view angles for (j = 0; j < 3; j++) { bs->viewangles[j] = AngleMod(bs->viewangles[j] + SHORT2ANGLE(bs->cur_ps.delta_angles[j])); } // bot view angles BotChangeViewAngles(bs, (float) elapsed_time / 1000); //retrieve the bot input trap_EA_GetInput(bs->client, (float) time / 1000, &bi); //respawn hack if (bi.actionflags & ACTION_RESPAWN) { if (bs->lastucmd.buttons & BUTTON_ATTACK) bi.actionflags &= ~(ACTION_RESPAWN|ACTION_ATTACK); } if(bs->cur_ps.weapon == WP_SABER) { if ( bs->currentEnemy && bs->currentEnemy->client && bs->currentEnemy->health > 0 && bs->jumpTime <= level.time // Don't walk during jumping... && (VectorDistance(g_entities[bs->cur_ps.clientNum].r.currentOrigin, bs->currentEnemy->r.currentOrigin) < 150 || walktime[bs->cur_ps.clientNum] > level.time) ) { if ( visible(&g_entities[bs->cur_ps.clientNum], bs->currentEnemy) || walktime[bs->cur_ps.clientNum] > level.time ) {// Make bots with an enemy walk... bi.actionflags |= ACTION_WALK; walktime[bs->cur_ps.clientNum] = level.time + 2000; } else {// Reset. walktime[bs->cur_ps.clientNum] = 0; } } else {// Reset. walktime[bs->cur_ps.clientNum] = 0; } } if (bs->doSaberThrow) { bi.actionflags |= ACTION_SABERTHROW; } if(1) { int curmove = g_entities[bs->client].client->ps.saberMove; if( PM_SaberInStart( curmove ) || PM_SaberInTransition( curmove ) ) { bi.actionflags |= ACTION_ATTACK; } } if(bs->doWalk && bs->cur_ps.weapon == WP_SABER) { bi.actionflags |= ACTION_WALK; } //set up forcesel. Doesn't use cur_ps, since cur_ps is just a copy of the real ps. bi.forcesel = level.clients[bs->client].ps.fd.forcePowerSelected; //convert the bot input to a usercmd BotInputToUserCommand(&bi, &bs->lastucmd, bs->cur_ps.delta_angles, time, bs->noUseTime); //subtract the delta angles for (j = 0; j < 3; j++) { bs->viewangles[j] = AngleMod(bs->viewangles[j] - SHORT2ANGLE(bs->cur_ps.delta_angles[j])); } } hope this helps....................
  6. exactly my point.lol
  7. everything looks like its only set do from 1 hand ,left only ! handLPoint if ( cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_START || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_HOLD || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_RELEASE ) {//jackin' 'em up, Palpatine-style if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightningwide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightningwide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } else if ( cent->gent->client->NPC_class == CLASS_REBORN ) { if ( Q_irand( 0, 2 ) ) { theFxScheduler.PlayEffect( cgs.effects.redlightningwide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } } else { theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } } note the use of handRPoint i think because your overlapping code commands your causing the error there?
  8. Did you add the new effects in to your asset mod .pk3? show me a screenshot of 1 new effect working
  9. Simple way of changing lightning effects for classes.I will assume you already have a new lightning effect to use and you know how to implement it! so here is an example you can alter as you wish. cg_media.h in the } cgEffects_t; section to define the new lightning effects //FORCE fxHandle_t forceConfusion; fxHandle_t forceLightning; fxHandle_t forceLightningWide; //new effects fxHandle_t redlightningwide; fxHandle_t greenlightningwide; fxHandle_t redlightning; fxHandle_t greenlightning; fxHandle_t forceHeal; cg_players.cpp if ( cent->gent->client->ps.forcePowersActive&(1<<FP_LIGHTNING) ) {//doing the electrocuting //FIXME: if the target is absorbing or blocking lightning w/saber, draw a beam from my hand to his (hand?chest?saber?) vec3_t tAng, fxDir; VectorCopy( cent->lerpAngles, tAng ); if ( cent->gent->client->ps.forcePowerLevel[FP_LIGHTNING] > FORCE_LEVEL_2 ) {//arc vec3_t fxAxis[3]; AnglesToAxis( tAng, fxAxis ); if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightningwide, cent->gent->client->renderInfo.handLPoint, fxAxis ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightningwide, cent->gent->client->renderInfo.handLPoint, fxAxis ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handLPoint, fxAxis ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handLPoint, fxAxis ); if ( cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_START || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_HOLD || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_RELEASE ) {//jackin' 'em up, Palpatine-style if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightningwide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightningwide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } } else {//line AngleVectors( tAng, fxDir, NULL, NULL ); if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightning, cent->gent->client->renderInfo.handLPoint, fxDir ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightning, cent->gent->client->renderInfo.handLPoint, fxDir ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightning, cent->gent->client->renderInfo.handLPoint, fxDir ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightning, cent->gent->client->renderInfo.handLPoint, fxDir ); if ( cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_START || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_HOLD || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_RELEASE ) {//jackin' 'em up, Palpatine-style if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightning, cent->gent->client->renderInfo.handRPoint, fxDir ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightning, cent->gent->client->renderInfo.handRPoint, fxDir ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightning, cent->gent->client->renderInfo.handRPoint, fxDir ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightning, cent->gent->client->renderInfo.handRPoint, fxDir ); } } } cg_weapons.cpp for the person view if ( cent->gent && cent->gent->client && cent->gent->client->ps.forcePowersActive&(1<<FP_LIGHTNING) ) {//doing the electrocuting vec3_t temp; VectorCopy( cent->gent->client->renderInfo.handLPoint, temp ); VectorMA( temp, -5, cg.refdef.viewaxis[0], temp ); if ( cent->gent->client->ps.forcePowerLevel[FP_LIGHTNING] > FORCE_LEVEL_2 ) {//arc if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightningwide, temp, cg.refdef.viewaxis ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightningwide, temp, cg.refdef.viewaxis ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, temp, cg.refdef.viewaxis ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, temp, cg.refdef.viewaxis ); } else {//line if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightning, temp, cg.refdef.viewaxis ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightning, temp, cg.refdef.viewaxis ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightning, temp, cg.refdef.viewaxis ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightning, temp, cg.refdef.viewaxis[0] ); } } cg_weapons.cpp to register the effect cgs.effects.forceLightning = theFxScheduler.RegisterEffect( "force/lightning" ); cgs.effects.forceLightningWide = theFxScheduler.RegisterEffect( "force/lightningwide" ); cgs.effects.redlightningwide = theFxScheduler.RegisterEffect( "force/redlightningwide" ); cgs.effects.greenlightningwide = theFxScheduler.RegisterEffect( "force/greenlightningwide" ); cgs.effects.redlightning = theFxScheduler.RegisterEffect( "force/redlightning" ); cgs.effects.greenlightning = theFxScheduler.RegisterEffect( "force/greenlightning" ); obviously you need to change the names of the NEW effects to correspond with you MODS effect name or make the new effects ,but thats another subject that i think you can handle with your experience...... hope this helps serenity http://www.moddb.com/mods/serenitysabersystems/images/lighning-efx#imagebox http://www.moddb.com/mods/serenitysabersystems/images/lighning-efx2#imagebox http://www.moddb.com/mods/serenitysabersystems/images/lighning-efx1#imagebox
  10. Thats a strange one, Ive watched your video and i have to admit ive never seen that before and I dont have that error. So i will need to investigate this further ! Does anyone else have that error? "In the mod" when you move from a stance to a block position or another stance you may hear "A SABER MOVEMENT SOUND" this is set in the animationevents file. Have you by any chance changed any of the files in the _humanoid folder? Is it possible that a file from another mod/pk3 could be messing with the sound ? possible solutions ! 1. new clean install (most obvious) 2. remove any other mods from base folder 3. do you have the newest version http://www.mediafire.com/download/o94x2p8d63c7xqb/Serenity+Jedi+Engine+V0.9.rar with the latest update http://www.mediafire.com/download/gd0yxswka1sl06i/SerenitySaberSystems-EoC.dll ? 4. If all above point are ok then try removing the animationevents.cfg from the _humanoid to see if it still makes the sound ?
  11. The easy method,(but this may cause problems in the boba level on jka) in NPC_SPAWN.CPP search for this // Can't Kill Boba and you will find this else if ( ent->client->NPC_class == CLASS_BOBAFETT ) {//set some stuff, precache ent->client->ps.forcePowersKnown |= ( 1 << FP_LEVITATION ); ent->client->ps.forcePowerLevel[FP_LEVITATION] = FORCE_LEVEL_3; ent->client->ps.forcePower = 100; ent->NPC->scriptFlags |= (SCF_NAV_CAN_FLY|SCF_FLY_WITH_JET|SCF_NAV_CAN_JUMP); NPC->flags |= FL_UNDYING; // Can't Kill Boba } and change it to this else if ( ent->client->NPC_class == CLASS_BOBAFETT ) {//set some stuff, precache ent->client->ps.forcePowersKnown |= ( 1 << FP_LEVITATION ); ent->client->ps.forcePowerLevel[FP_LEVITATION] = FORCE_LEVEL_3; ent->client->ps.forcePower = 100; ent->NPC->scriptFlags |= (SCF_NAV_CAN_FLY|SCF_FLY_WITH_JET|SCF_NAV_CAN_JUMP); //NPC->flags |= FL_UNDYING; // Can't Kill Boba } basically remove the flag FL_UNDYING compile the code and boba is mortal mine looks like this else if ( ent->client->NPC_class == CLASS_BOBAFETT ) {//set some stuff, precache ent->client->ps.forcePowersKnown |= ( 1 << FP_LEVITATION ); ent->client->ps.forcePowerLevel[FP_LEVITATION] = FORCE_LEVEL_3; ent->client->ps.forcePower = 100; ent->NPC->scriptFlags |= (SCF_NAV_CAN_FLY|SCF_FLY_WITH_JET|SCF_NAV_CAN_JUMP); NPC->flags |= FL_UNDYING; // Can't Kill Boba } else if ( ent->client->NPC_class == CLASS_MANDO ) {//set some stuff, precache ent->client->ps.forcePowersKnown |= ( 1 << FP_LEVITATION ); ent->client->ps.forcePowerLevel[FP_LEVITATION] = FORCE_LEVEL_3; ent->client->ps.forcePower = 100; ent->NPC->scriptFlags |= (SCF_NAV_CAN_FLY|SCF_FLY_WITH_JET|SCF_NAV_CAN_JUMP); } with the new mando class but still keeping bobafett as intended,this allows me to add mando class in the game and he can die.Obviously adding a new class is a bit more complicated ,but non too difficult if your doing it for a mod
  12. Yes sorry about that error . here is the fix http://www.mediafire.com/download/gd0yxswka1sl06i/SerenitySaberSystems-EoC.dll Just replace the existing dll with this one
  13. Thanks mate. Some animation errors may occur when playing mods with "personal animations". Thats basically any mod that has an individual humanoid folder. If you want to know the NEW SECRET CHEAT CODE you have to play the jedi outcast part from the start to complete end on jedi master difficulty level without cheating and if you are successful you will be given the cheatcode....This will allow you to play mods in godmode if you want. If you want to keep up to date with your build .here is the latest build , now with multiplayer support also. http://www.mediafire.com/download/o94x2p8d63c7xqb/Serenity+Jedi+Engine+V0.9.rar
  14. Sorry, but i dont think thats my choice to make as its part of mb2 mod. however ,you can find it in MBAssets2 / models / weapons2 / z6_rotary the shader for it is in MBAssets / shaders/ weapons / z6_rotary
  15. Pulled it out of mb2 Just for testing. Dont worry Im not going to release it with SJE . I just needed a model with a spinning barrel for testing, Thats why im asking if anyone can make one or maybe someone knows where i could download a replacement ? I cant make models or maps,this is why my mod doesn't have any models or maps,I can get my head round pretty much everything else.
  16. I think JKA/JKO will last and be popular until "THEY" make something better ! Battlefront 1+2 = good story ,good graphics ,good gun play, good space missions....Terrible saber combat Force unleashed 1+2 = Interesting but not too good story , good graphics, stupid control system, very weak saber combat. totally over the top force powers making the game more like a wizard show and completely out of tune to what the force is. Republic commando = good story and strategy gameplay ,good graphics,good gun gameplay ..missing "The jedi eliment" to give it a more starwars feel. A jedi Knight 4 Game would need to give everything that JKO and JKA gave in terms of playability, saber control, and gun combat. with a believable starwars realistic story that is compelling and challenging. Until then "for me" the best combination is to play jedi outcast using the better Jedi academy engine.giving me the better story ,maps and feel of outcast with the far superior engine from jedi academy to give me a better sabersystem and more fluid gameplay.
  17. Is there a model available to replace repeater with a spinning barrel like this one? Can anybody make a model to replace the heavy repeater?
  18. Steam Version ============== you'll need to navigate to C:/Program Files/Steam/steamapps/common/Jedi Academy/GameData (in your Steam folder). To run mod, right click on Jedi Academy in your game library, and select "Set Launch Options" in the General tab Add +set fs_game "MOD FOLDER NAME" to it, and it will run MOD FOLDER NAME whenever you start Jedi Academy.Note: If you play other mods or base, you will need to remove +set fs_game "MOD FOLDER NAME" whenever you want to play that mod, then add +set fs_game "MOD FOLDER NAME" whenever you want to play MOD FOLDER NAME.
  19. This is an occurring problem caused by the way JKA code reads JKO scripts. JKA code reads scripts just a little differently than JKO . I also found this problem some time ago and fixed it in SJE . I f you want to play JKO fully without interruptions in the JKA engine then you need to use SJE . http://www.mediafire.com/download/u375ia2zp05plqb/Serenity+Jedi+Engine+V0.8.rar I don't know if openjk has also fixed this problem but i know i definitely have in SJE....
  20. I know KOTOR does not fit in the bracket of the JK series but i think KOTOR with the JKA engine would be a cool game. So use the newest engine from the JK series with a massive amount of work to add the extra Force powers, and NPC interaction .Using the sabersystem and combat system from JK with the in depth story telling of KOTOR and the progressive advancement system of KOTOR. And then mix it with the "Starwars " feel that Jedi Outcast gave . An old gritty universe still light years ahead of ours but old and battle scarred I think it does not matter about JKA the story is boring and superficial no matter how you tell it.Stick to the theme and feel that JKO gave. The space missions from "Battlefront II" where instead of watching a ROQ movie of you flying to a spaceship, you have to battle in space and infiltrate the spaceship. Maybe add in the graphic quality that "The Force Unleashed" had with the euthoria stuff. What a Bastard Frankenstein of a game it would be ,but it would be cool to mix the best of all the games in to one epic game
  21. yes it does. look for CG_DoSFXSaber however ,SFX sabers goes a little differently in sp, so you wont be able to copy/paste from a mp code . Redsaurus made an excellent example and posted it here https://github.com/redsaurus/OpenJK/commit/b8395731cce1672c5f69d20e065a541eaad59d2d and here https://github.com/redsaurus/OpenJK/commit/a626320275b6782269ae1b013da894586b77de8f hope this helps
  22. You welcome . I've found the OJP full SDK pack with all the tools, it contains OJP 1.2 Enhanced and OJP 2005 Basic .but its 350 mb. so I've taken out OJP 2005 Basic. its "RAW" meaning it is as originally released .I have taken out all the documentation and unnecessary stuff like screenshots and hoth model stuff.etc etc. Here is the read me i have added for people to see before they download this pack. So if you going to have any issues or problems about me releasing someone else s work then "don't download this pack" OJP BASIC SDK This is my own personal copy of ojp basic .It is totally unaltered and in the condition as downloaded. To keep file size down i have removed any doc,s and non required files. It will need some fixing before it will compile I suggest following this tutorial for first time users. Setting up the SDK for first-time use http://www.jacoders.org/forum/viewtopic.php?f=4&t=5 I also have ojp Enhanced full release sdk 1.2 .Contact me if you want a copy. DISCLAIMER ! I dont want any shit for making this sdk public, i didnt make it or alter it. I make no claim to it. Im just passing it on to other users as a favour to eezstreet. It comes "AS IS " THIS MEANS IF YOU FUCK SOMETHING UP when using it then DONT FUCKING BLAME ME. If you make a mod using this code then you must include the OJP read me. Get this by downloading OJP from moddb. all the read me files and instructions and advice to using this code for your mod can also be found in the OJP folder. So now you understand I dont want any come back for releasing someone elses work. http://www.mediafire.com/download/stmn3chhdd56c4c/OJP+BASIC+SDK.rar Please dont complain at me for doing this . I DID NOT MAKE THIS CODE.. hopefully this is the end of any legal or flaming complaints. Otherwise I hope this help people who need it
  23. I have OJP basic in my files somewhere, I will dig them out tomorrow and upload to a file store !
  24. Pm me when you start your code work and ill help where i can.
  25. {Quote} All that stuff Asgarth83 just said... Well that seems like a lot of stuff you want to do, and some of it is going to be difficult for a beginner. I'm sorry i don't really have time to get my head in to a "new" project . the only advice i can give you is "think small, start small." I really wish i had more time to help you but i just don't.I can offer small advice to get you started . like with FP_LIGHTNING but adding new force powers is a bigger task that would need a lot of code work , new effects to be made , new sounds and more. Maybe you could ask one of the other known coders who may have more time to help you than i do.But be careful who you ask, because some coders can be "touchy" and just flame your ass for asking! Or even open a new post to ask if anybody wants to join your mod team and stress you need a coder! 1: changing effects for some weapons SP like blaster pistol briar pistol and jawa,., they have the same efx >_> also many droid weapons use same efx of other, i wanna every weapon do dmg of a different element (i edit the efx after with effected) so i need to change some address for efx of the weapons. Changing the address of weapon effects This would mean adding a new weapon function starting in the weapons.dat muzzleEffect briar_pistol/muzzle_flashmissileFuncName briar_pistol_func then adding the new function in code g_weaponload.cpp // Table used to attach an extern missile function string to the actual cgame function func_t funcs[] = { {"bryar_func", FX_BryarProjectileThink}, {"bryar_alt_func", FX_BryarAltProjectileThink}, {"blaster_func", FX_BlasterProjectileThink}, {"blaster_alt_func", FX_BlasterAltFireThink}, {"bowcaster_func", FX_BowcasterProjectileThink}, {"repeater_func", FX_RepeaterProjectileThink}, {"repeater_alt_func", FX_RepeaterAltProjectileThink}, {"demp2_func", FX_DEMP2_ProjectileThink}, {"demp2_alt_func", FX_DEMP2_AltProjectileThink}, {"flechette_func", FX_FlechetteProjectileThink}, {"flechette_alt_func", FX_FlechetteAltProjectileThink}, {"rocket_func", FX_RocketProjectileThink}, {"rocket_alt_func", FX_RocketAltProjectileThink}, {"conc_func", FX_ConcProjectileThink}, {"emplaced_func", FX_EmplacedProjectileThink}, {"turret_func", FX_TurretProjectileThink}, {"atstmain_func", FX_ATSTMainProjectileThink}, {"atst_side_alt_func", FX_ATSTSideAltProjectileThink}, {"atst_side_main_func", FX_ATSTSideMainProjectileThink}, {"tusk_shot_func", FX_TuskenShotProjectileThink}, {"noghri_shot_func", FX_NoghriShotProjectileThink}, {"briar_pistol_func", FX_briar_pistolProjectileThink}, {"briar_pistol_alt_func", FX_briar_pistolAltProjectileThink}, {NULL, NULL} }; FX_brayar_pistol.cpp FX_BryarProjectileThink ------------------------- */ void FX_briar_pistolProjectileThink( centity_t *cent, const struct weaponInfo_s *weapon ) { vec3_t forward; if ( VectorNormalize2( cent->gent->s.pos.trDelta, forward ) == 0.0f ) { if ( VectorNormalize2( cent->currentState.pos.trDelta, forward ) == 0.0f ) { forward[2] = 1.0f; } } // hack the scale of the forward vector if we were just fired or bounced...this will shorten up the tail for a split second so tails don't clip so harshly int dif = cg.time - cent->gent->s.pos.trTime; if ( dif < 75 ) { if ( dif < 0 ) { dif = 0; } float scale = ( dif / 75.0f ) * 0.95f + 0.05f; VectorScale( forward, scale, forward ); } if ( cent->gent && cent->gent->owner && cent->gent->owner->s.number > 0 ) { theFxScheduler.PlayEffect( "briar_pistol/npcshot", cent->lerpOrigin, forward ); } else { theFxScheduler.PlayEffect( cgs.effects.briar_pistolShotEffect, cent->lerpOrigin, forward ); } } Basicly follow all the traces of the effect you want to change in the code . in this example briar_pistolShotEffect then make a "renamed" copy and change the effect in cg_weapons.cpp case WP_BRYAR_PISTOL: cgs.effects.briar_pistolShotEffect = theFxScheduler.RegisterEffect( "briar_pistol/shot" ); theFxScheduler.RegisterEffect( "briar_pistol/NPCshot" ); 2: cucstom class damage: like demp2 deadly for droid and unuseful against living enemies, i need to make the same thing for other weapisn, so a earth shoot weapon can be deadly for a enemy of element fire, the "light" weapons can be deadly for the vampires. the darks weapons are strongs against humans, the fire weapons against ice and water monster etc etc. custom class damge. there are already examples of this in the code you can use as guidelines start here weapons.h // Concussion Rifle //--------- //primary #define CONC_VELOCITY 3000 #define CONC_DAMAGE 150 #define CONC_NPC_SPREAD 0.7f #define CONC_NPC_DAMAGE_EASY 15 #define CONC_NPC_DAMAGE_NORMAL 30 #define CONC_NPC_DAMAGE_HARD 50 #define CONC_SPLASH_DAMAGE 50 #define CONC_SPLASH_RADIUS 256 //alt #define CONC_ALT_DAMAGE 225//100 #define CONC_ALT_NPC_DAMAGE_EASY 10 #define CONC_ALT_NPC_DAMAGE_MEDIUM 20 #define CONC_ALT_NPC_DAMAGE_HARD 30 Follow the examples of how the code increases the damage and add a class definition for it. level 3: enemy get paralyse (a spell called incapacitate, that require an aura efx like protect for statis duration, like in KOTOR game) enemy cannot atk, move, or do any animation and be freeze for some lot of second. using force absorb or force push can nullify the statis state. this is a biggie look in to bg_public.h MOVE MODULE The pmove code takes a player_state_t and a usercmd_t and generates a new player_state_t and some other output data. Used for local prediction on the client game and true movement on the server game. =================================================================================== */ typedef enum { PM_NORMAL, // can accelerate and turn PM_NOCLIP, // noclip movement PM_SPECTATOR, // still run into walls PM_DEAD, // no acceleration or turning, but free falling PM_FREEZE, // stuck in place with no control PM_INTERMISSION // no movement or status bar } pmtype_t; I think you will be able to use PM_FREEZE by adding an activator and effect etc. bg_pmove.cpp in void Pmove( pmove_t *pmove ) { look for this to get you started if (pm->ps->pm_type == PM_FREEZE) { return; // no movement at all } add the effect in cg_player.cpp somewhere in void CG_AddRefEntityWithPowerups( refEntity_t *ent, int powerups, centity_t *cent ) { Cant think of anything better at the moment to help you get started, without getting out my code and actually writing the stuff! I did a similar thing to this in Evolution of combat by making a freeze grenade . http://www.moddb.com/mods/serenitysabersystems/images/eociii-pro#imagebox Good luck and remember "Think small, start small". Ill keep my eye on this topic and help where i can
×
×
  • Create New...