UGX-Mods Login

or login with an authentication provider below
Sign In with Google
Sign In with Twitter
Sign In with Discord
Sign In with Steam
Sign In with Facebook
Sign In with Twitch

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - jiggy22

Bumping again.

Plans have changed once again. Dogs for CotD are scrapped, just going with the Engineer for now. Looking through the gsc files for Kino, I found a couple strings that look something like this:

Code Snippet
Plaintext
	collision = spawn("script_model", (-763, 834, 96));

Would I do something similar to that to set a spawn point for the boss? Like, say something such as:

Code Snippet
Plaintext
	org = spawn("zomeng_spawn",(-146.91, -1390.64, 104.374));
7 years ago
I guess it's time to revive this thread now?

So now I'm working on modding Hellhounds into Call of the Dead in Black Ops (the Engineer boss will come later), and I guess I'm facing the same issue where they just never spawn. In my previous post on this thread, I found this string:

Code Snippet
Plaintext
org = spawn("script_origin",self getorigin());

Which I believe I would have to use in order to place a spawn point, am I right? I know the respective target names to use, I just don't know how I would go about setting it all up. Anyone understand what I'm trying to get at? Thanks for the help :)
7 years ago
Bumping
7 years ago
I'm a bit more unfamiliar with the BO mod tools than the ones for WaW, especially when it comes to setting up sounds and whatnot. I'm trying to get some sounds to work for a ported weapon, but whenever I build I mod, I get this error message:

Code Snippet
Plaintext
ERROR: Parse error row 1 column 74 of soundaliases/zones/new_weapons.english.csv
ERROR: aliases failed to load
ERROR: Parse error row 1 column 74 of soundaliases/zones/new_weapons.all.csv
ERROR: aliases failed to load

And of course, as a result, the sounds don't work in game. The thing I don't understand about this is that it mentions the 74th column in the first row. But looking at my csv file, there are only 73 columns. What's up with that? Anybody know how to fix this? Thanks for the help :)
7 years ago
Yeah, I was able to figure out what I was doing wrong. I was following rollon's tutorial on modding Black Ops, and it sounded like he said to not include any gsc files in the iwd checklist. So I decided to instead go against his word and included the edited script in the iwd, and that ended up fixing my problem ::) Thanks for the help though!
7 years ago
I'm facing two different issues that pertain to sounds, so I figured that I'd just make one topic to keep from cluttering the forum.

1). So the first problem I'm having is relating to editing the sounds that the Hellhounds make. I'm looking to replace the stock Hellhound sounds with the ones from BO3, but an important part of that involves editing the soundalias that these sounds are referenced in. However, I've searched through every single soundalias in my raw/soundalias folder, and I have not found any references to the Hellhound sounds at all, aside from the spawn/round beginning sounds. How would I go about doing this instead? I've searched through other folders, such as the clientscripts and zone source folders, but I didn't find any other leads on this.

2). The second problem I'm having is changing the flamethrower sounds. I'm trying to replace the regular Flamethrower sounds with my own new sounds, but in-game, the weapon still uses the original sounds. Now usually, if I forgot to include the soundalias in the csv file, or if I were using unformatted sounds, the weapon would just play no sounds at all. So why is it still using the original sounds? I've even tried replacing the original sounds in the sound folder with my new sounds, but that doesn't fix anything. So what's up? Are the sounds for the flamethrower set up a different way than the regular weapons? Using the UGX weapon editor, I know that the sounds are supposed to be changed by editing the "flameonloopsound" and whatever, but for some reason, it just doesn't work.

So yeah, thank you to whoever can help me with this!  :)
7 years ago
Bumping this again. I'd really like to know how to do this, because Black Ops is being a pain in my ass when it comes to modding!
7 years ago
1). If you're trying to use MW weapons with WaW viewhands, the ADS animations won't work, you have to port a pair of viewhands from MW and use those instead.
7 years ago
Yeah, I misunderstood one of the above comments, so thanks for pointing that out.

I'm getting really close with this one now. So the viewhands are invisible while holding the weapon as they should, but when I switch any other different weapon, the viewhands are now invisible for all weapons. It should be important to point out that I am using mrpeanut's randomize player/viewhands/voice script, so I had to change two lines at the bottom. Not sure if the randomized script will make this harder to fix, but hey, whatever happens, happens.

Here's my latest fix of this function:
Code Snippet
Plaintext
Flammenwerfer()
{
while(1)
{
self.weap_model = GetWeaponModel(self GetCurrentWeapon());
self waittill_any( "weapon_change", "weapon_change_complete" );

if(self GetCurrentWeapon() == "m2_flamethrower_zombie" )
self SetViewModel("viewmodel_blank_arms");
        else if(IsDefined(level.player_specific_viewmodels))
        self SetViewModel(level.player_specific_viewmodels);
}
}

7 years ago
I have this script as its own separate GSC file, called within _zombiemode.gsc like usual. I've gotten the viewmodels for the weapons fixed, but the viewarms for the flamethrower remain visible. I came up with a different solution to use a pair of invisible viewarms to switch to instead of tag_origin, but that didn't fix anything. Anyone wanna look at the full script that I'm using to see if I'm doing anything wrong?

Code Snippet
Plaintext
init()
{
level thread OnPlayerConnect();
}

OnPlayerConnect()
{
for( ;; )
{
level waittill( "connecting", player );
player thread OnPlayerSpawned();
}
}

OnPlayerSpawned()
{
for( ;; )
{
self waittill( "spawned_player" );
self thread Flammenwerfer();
}
}

Flammenwerfer()
{
while(1)
{
self.weap_model = GetWeaponModel(self GetCurrentWeapon());
self waittill_any( "weapon_change", "weapon_change_complete" );

if((self GetCurrentWeapon() == "m2_flamethrower_zombie" || "m2_flamethrower_zombie_upgraded"))
self setViewModel("viewmodel_blank_arms");
        else if(IsDefined(level.player_viewmodel))
        self SetViewModel(level.player_viewmodel);
}
}
7 years ago
I've been toying around with the idea of mods of other maps, including Ascension and Moon, but I'd probably move more towards using more 60s-era weapons. It kinda ticked me off how Black Ops was a game that took place in the '60s, but featured weapons that hadn't been invented until as late as the mid-90s. Of course, that doesn't rule out the possibility of WWII-era weapons appearing, since many of them were used in the Korean/Vietnam wars (the Thomspon, M1 Garand, Grease Gun, PPSh-41, and the Browning M1919 all come to mind).

I'm planning on creating a new WIP page for my mod project as a whole, since its certainly outgrown just Der Riese at this point!
7 years ago
Sorry to bump this month old topic, but I'm looking to actually solve this problem now, and I'm still kind of confused on what to do. I tried out something like this:

Code Snippet
Plaintext
while(1)
{
self.weap_model = GetWeaponModel(self GetCurrentWeapon());
self waittill_any( "weapon_change", "weapon_change_complete" );

if((self GetCurrentWeapon() == "m2_flamethrower_zombie" || "m2_flamethrower_zombie_upgraded"))
self setViewModel("tag_origin");
}

But that just messed up every single viewmodel lol. Anyone got any recommendations on fixing this?
7 years ago
Sorry, I'm still new with this. So looking at the script glossary, it says to spawn something, I think I have to use this:

Code Snippet
Plaintext
org = spawn("script_origin",self getorigin());

I just don't know where I'd have to put it in the script...
7 years ago
Here's the script that I'm using:
Code Snippet
Plaintext
#include maps\_anim; 
#include maps\_utility;
#include common_scripts\utility;
#include maps\_music;
#include maps\_zombiemode_utility;
#include maps\_busing;

#using_animtree( "generic_human" );

// Zombie Engineer script by redspace200, give credit if used!!
// Source Model, Animations

// Boss Layout by redspace200
// Give Credit if used...
// You do not have permission to use these scripts unless I say otherwise
// To set specific spawn locations --> script_origin --> "zomeng_spawn"

eng_init()
{
// Set FX here
level._effect["fx_eng_impact"] = loadFX("custom/fx_ai_eng_impact");

// Set Animations here
level.scr_anim["zombie"]["eng_walk_00"] = %ai_zombie_eng_walk_00;
level.scr_anim["zombie"]["eng_walk_01"] = %ai_zombie_eng_walk_01;
level.scr_anim["zombie"]["eng_attack_walk"] = %ai_zombie_eng_attack_walk;
level.scr_anim["zombie"]["eng_sprint_00"] = %ai_zombie_eng_sprint;
level.scr_anim["zombie"]["eng_attack_sprint"] = %ai_zombie_eng_attack_sprint;
level.scr_anim["zombie"]["eng_angry"] = %ai_zombie_eng_angry;
level.scr_anim["zombie"]["eng_spawn"] = %ai_zombie_eng_falldown;

// Set Variables here
level.eng_boss_model = "bo1_char_ger_zombeng_body1_1"; // The Model this boss will use. Defaults (bo1_char_ger_zombeng_body1_1)
level.debug_eng = false; // Enable/Disable debug here. Defaults (false)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
level.eng_use_fx = true; // Enable/Disable use of fx on this ai. Defaults (true)
level.next_eng = 8; // First round ai will spawn on. Defaults (8)
level.eng_round_add = 4; // After 1st spawn, every _ amount of rounds he will return. Defaults (4)
level.eng_health_multiplier = 20; // Amount to * health by. Will be overrided by eng_min_health. Defaults (20)
level.eng_health_multiplier_by_player = true; // Multiply ai health based on the # of players in the game. Will be overrided by eng_min_health. Defaults (true)
level.eng_min_health = 12000; // Min health this ai can have. Defaults (12000)
level.eng_attack_radius = 80; // Radius before ai can begin a Melee Attack. Defaults (80)
level.eng_attack_radius_add = 20; // Radius added to normal Melee Attack Radius for dealing player damage. Defaults (20);
level.eng_attack_damage = 100; // Player Damage Amount. Defaults (100)
level.start_eng_ai = 1; // Start # of ai to spawn on each spawn session. Defaults (1)
level.max_eng_ai = 3; // Max # of ai. Defaults (3)

// Advanced Variables
level.eng_max_roof_distance = 650; // # of units to tallest roof. Defaults (650)
level.eng_total_walk_anims = 2; // Number of possible animations this ai can use for walking. Defaults (2)
level.eng_total_sprint_anims = 1; // Number of possible animations this ai can use for sprinting. Defaults (1)
level.eng_boss_attackanim_delay = .685; // Time before the zombies Melee Attack will actually damage the player (based on anim). Defaults (.685)
level.eng_boss_rageanim_delay = .8; // Time before the Angry Anim will actually stun the player (based on anim). Defaults (.8)
level.eng_attacks_before_sprint = 8; // Number of times ai attack while walking before being forced to sprint. Defaults (8)
level.eng_health_divider = 1.2; // Divides the start health by this number. If the ai health goes below the result, sprint mode will activate. Defaults(1.2)
level.eng_boss_player_stun_radius = 200; // Radius the shake effect is when ai switches from walk to sprint state. Defaults (80)
level.eng_boss_player_stun_type = "electrocution"; // Type of stun effect on the player when ai switches from walk to sprint state. Defaults ("electrocution")
level.eng_boss_player_stun_time = 2.5; // Time the player gets stunned when ai switches from walk to sprint state. Defaults (2.5)
level.eng_ai_increasement = 1; // # of more ai to spawn after each spawn session. Defaults (1)

// Dont modify anything below
PrecacheModel(level.eng_boss_model);
flag_wait("all_players_connected");
level thread eng_spawn_logic();
}
eng_spawn_logic()
{
if (isdefined(level.debug_eng) && level.debug_eng == true)
level thread level_eng_spawn();
spawn_am = level.start_eng_ai;
while(true)
{
level waittill("between_round_over");
if (level.round_number >= level.next_eng)
{
for(i=0;i<spawn_am;i++)
{
wait randomFloatRange(5,15);
level thread level_eng_spawn();
}
spawn_am += level.eng_ai_increasement;
if (spawn_am > level.max_eng_ai) spawn_am = level.max_eng_ai;
level.next_eng = level.round_number + level.eng_round_add;
engPrint("Next Spawn Round: " + level.next_eng);
}
}
}
level_eng_spawn()
{
wait 1;
spawn_point = undefined; use_spawn_point = undefined;
teh_spawns = undefined;
for(am=0;am<50;am++)
{
wait .05;
teh_spawns = level.enemy_spawns;
for(t=0;t<teh_spawns.size;t++)
{
wait .05;
use_spawn_point = teh_spawns[t];
if (use_spawn_point.script_noteworthy == "find_flesh") break;
}
sp = GetStructArray("find_flesh","script_noteworthy");
spawn_points = get_array_of_closest( getPlayers()[randomIntRange(0,getPlayers().size)].origin, sp );
spawn_point = spawn_points[0];
if (spawn_point inMap() && spawn_point in_active_zone() && 0 != spawn_point damageConeTrace(spawn_point.origin + (0,0,level.eng_max_roof_distance) ,self) && isdefined(spawn_point) ) { break; }
}
new_spawns = getEntArray("zomeng_spawn","targetname");
if (new_spawns.size != 0)
{
new_spawns = get_array_of_closest(getPlayers()[randomIntRange(0,getPlayers().size)].origin,new_spawns);
spawn_point = new_spawns[0];
}
ai = spawn_zombie( use_spawn_point ); wait .05;
if (isdefined(ai) )
{
getPlayers()[0] playSound("ai_eng_spawn");
ai forceTeleport(spawn_point.origin + (0,0,-5) );
ai hide();
engPrint("Spawned Eng Zombie at: " + spawn_point.origin);
anime = level.scr_anim["zombie"]["eng_spawn"];
engPrint("Spawn Anim: " + anime);
wait .05;
ai.health = level.zombie_health * level.eng_health_multiplier;
if (isdefined(level.eng_health_multiplier_by_player) && level.eng_health_multiplier_by_player == true && getPlayers().size > 1)
ai.health = ai.health * getPlayers().size;
if (ai.health < level.eng_min_health) ai.health = level.eng_min_health;
ai.is_on_fire = true;
ai.attack_am = 0;
ai.script_string = "riser";
ai.eng_movetype = "walk";
ai.boss_enemy = true; wait .05; ai notify("no_rise");
wait .05;
ai thread zombie_boss_set_move_anim("eng_walk_0" + randomIntRange(0,level.eng_total_walk_anims) );
ai.gibbed = true;
ai StopAnimScripted();
wait .05;
zombie_poi = ai get_zombie_point_of_interest( ai.origin );
ai.enemyoverride = zombie_poi;
ai thread eng_get_favoriteenemy();
ai thread maps\_zombiemode_spawner::zombie_setup_attack_properties();
ai forceteleport(ai.origin+(0,0,38));
wait .05;
ai.ignoreall = true;
ai DetachAll();
ai setModel(level.eng_boss_model);
wait .05;
ai show();
ai animScripted("", ai.origin + (0,0,932) , ai.angles, anime);
ai thread eng_attack_logic();
ai thread eng_walk2sprint_think();
wait getAnimLength(anime);
ai playSound("ai_eng_land");
ai thread eng_amb_sounds();
for(i=0;i<getPlayers().size;i++)
if (Distance(getPlayers()[i].origin,ai.origin) < level.eng_attack_radius + level.eng_attack_radius_add)
{
getPlayers()[i] shellshock( "electrocution", 4 );
radiusdamage(getPlayers()[i].origin,10,level.eng_attack_damage,level.eng_attack_damage,ai,"MOD_PISTOL_BULLET");
}
while(ai.health > 0)
{
ai.deathanim = undefined;
wait .05;
}
ai startRagDoll();
ai launchRagDoll(50);
ai playSound("ai_eng_death_0" + randomIntRange(0,2) );
}
}
eng_amb_sounds()
{
self endon("death");
while(isdefined(self) )
{
self playSound("ai_eng_amb_0" + randomIntRange(0,4) );
wait randomFloatRange(4,8);
}
}
eng_get_favoriteenemy()
{
self endon("death");
while(isdefined(self) )
{
self.goalRadius = 32;
self.ignoreall = true;
self.is_on_fire = true;
self.gibbed = true;
self.ignore_player = undefined;
self.favoriteenemy = get_closest_valid_player( self.origin, self.ignore_player );
self setGoalPos(self.favoriteenemy.origin);
wait .05;
}
}
eng_attack_logic()
{
self endon("death");
while(isdefined(self) )
{
if (isdefined(self.favoriteenemy) && !isdefined(self.traversing) && !isdefined(self.attacking)
&& self aiIsOnGround() && 0 != self.favoriteenemy DamageConeTrace(self.origin + (0,0,30), self) && abs( GetYawToOrigin( self.favoriteenemy.origin ) ) < 45
&& Distance(self.favoriteenemy.origin,self.origin) < level.eng_attack_radius && self.favoriteenemy.sessionstate != "spectator" && !isdefined(self.favoriteenemy.revivetrigger) )
self eng_closeattack();
wait .05;
}
}
eng_closeattack()
{
self endon("death");
self.attacking = true;
engPrint("eng_closeattack");
old_anim = self.current_moveanim;
self thread zombie_boss_set_move_anim( "eng_attack_" + self.eng_movetype );
self playSound("ai_eng_attack_0" + randomIntRange(0,4) );
duration = level.eng_boss_attackanim_delay;
wait duration;
self playSound("attack_whoosh");
self.attack_am ++;
for(i=0;i<getPlayers().size;i++)
{
if (Distance(getPlayers()[i].origin,self.origin) < level.eng_attack_radius + level.eng_attack_radius_add)
{
self.attack_am ++;
self playSound("ai_eng_hit_0" + randomIntRange(0,2) );
getPlayers()[i] shellshock( "electrocution", 4 );
radiusdamage(getPlayers()[i].origin,10,level.eng_attack_damage,level.eng_attack_damage,ai,"MOD_PISTOL_BULLET");
zombie_boss_playFx(level._effect["fx_eng_impact"], self.origin );
}
}
Earthquake(1, 1, self.origin, level.eng_attack_radius + (level.eng_attack_radius_add / 2) );
wait (getAnimLength( level.scr_anim["zombie"]["eng_attack_" + self.eng_movetype] ) ) - duration;
self thread zombie_boss_set_move_anim(old_anim);
wait .2;
self.attacking = undefined;
engPrint("eng_closeattack: over");
}
eng_walk2sprint_think()
{
self endon("death");
hp = self.health;
while(isdefined(self) )
{
wait .05;
if (self.attack_am >= level.eng_attacks_before_sprint || self.health < (hp / level.eng_health_divider) )
{
self thread eng_walk2sprint_rage();
break;
}
}
}
eng_walk2sprint_rage()
{
self endon("death");
if (isdefined(self.attacking) )
while(isdefined(self.attacking) )
wait .4;
engPrint("eng_walk2sprint_rage");
getPlayers()[0] playSound("ai_eng_anger");
anime = level.scr_anim["zombie"]["eng_angry"];
wait .48;
self animScripted("", self getOrigin(), self.angles, anime);
self.attacking = true;
wait level.eng_boss_rageanim_delay;
array_thread( getPlayers(), ::player_boss_stun );
wait (getAnimLength(anime) - level.eng_boss_rageanim_delay);
self thread zombie_boss_set_move_anim("eng_sprint_0" + randomIntRange(0,level.eng_total_sprint_anims) );
self.eng_movetype = "sprint";
self.attacking = undefined;
}
engPrint(msg)
{
if (isdefined(level.debug_eng) && level.debug_eng == true && isdefined(msg) )
iprintlnbold("^3 ZOMBENG: ^7" + msg);
}
zombie_boss_set_move_anim(anime)
{
if (!isdefined(anime) || self.health < 0)
return;
engPrint("^3 New Move Anim: " + anime);
self.current_moveanim = anime;
self.run_combatanim = level.scr_anim["zombie"][anime];
self set_run_anim(anime);
}
player_boss_stun()
{
Earthquake(.1 * level.eng_boss_player_stun_time, level.eng_boss_player_stun_time , self.origin, level.eng_boss_player_stun_radius);
self shellshock( level.eng_boss_player_stun_type , level.eng_boss_player_stun_time , false );
}
zombie_boss_playFx(fx,org)
{
if (isdefined(fx) && isdefined(level._effect[fx]) && isdefined(org) && isdefined(level.eng_use_fx) && level.eng_use_fx == true)
playFx(fx,org);
}
isCloseToAnyPlayer(dist,NOTsame_z_location)
{
if (!isdefined(dist) ) return;
players = getPlayers();
for(i=0;i<players.size;i++)
{
if (Distance(players[i].origin,self.origin) < dist && players[i].sessionstate != "spectator" && !isdefined(players[i].revivetrigger)
&& (isdefined(NOTsame_z_location) || players[i].origin[2] >= self.origin[2] - 32) )
return true;
}
return false;
}
GetYawToOrigin(org)
{
yaw = self.angles[1] - GetYaw(org);
yaw = AngleClamp180( yaw );
return yaw;
}
GetYaw(org)
{
angles = VectorToAngles(org-self.origin);
return angles[1];
}
inMap()
{
playableArea = getEntArray("playable_area", "targetname");
for(m = 0; m < playableArea.size; m++)
if(self isTouching(playableArea[m]))
return true;
return false;
}
aiIsOnGround()
{
org = self.origin[2];
wait .05;
if (self.origin[2] == org)
return true;
return false;
}
in_active_zone()
{
for(z=0;z<level.zones.size;z++)
{
zone = level.zones[ z ];
for (i = 0; i < zone.volumes.size; i++)
{
if ( self IsTouching(zone.volumes[i]) )
return true;
}
}
return false;
}

At the top, it says:
Code Snippet
Plaintext
// To set specific spawn locations --> script_origin --> "zomeng_spawn"

Would I be able to do that via script?
7 years ago
Bumping again lol
7 years ago
Loading ...