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.


Topics - Scobalula

Pages:
1
2 3 4
1
Modding / Enable Auto-aim for Controllers
« on: November 04, 2016, 04:16:48 am »
If you're like me and like to play zombies with a controller then you'll understand the absolute beauty of what we know as Target Assist/Auto-aim. I found this feature missing in a lot of custom weapons on ZM maps and even my own ports.

It's a simple setting in the weapon asset (credit to Hitman who found the settings in Kuda's weapon):



The Auto Aim Range seems to handle the Auto-aim when you ADS so I set that to the same as the assist range, though you might want to increase it. Simply type "auto aim range" into the search to find it. :)




2
Zombie Maps in Progress / [WIP] zm_alley (Name TBD)
« on: October 31, 2016, 11:35:31 am »
Return of the Gargage got lost in transit so today I present zm_alley. I won't provide much info and just show some screenshots and will show more as I progress. :)

NOTE: This is an early WIP. :)






3
Radiant Black Prefabs / [PREFAB] Detached Garage
« on: October 15, 2016, 11:42:24 pm »


A small detached Garage because I love Garages and I believe every map should have a Garage, so make sure to put this in your map and don't forget to like and subscribe.

Download:



Images:







4
Zombie Maps in Progress / [W.I.P] Return of the Garage
« on: October 01, 2016, 10:43:27 pm »
Garage Returns for a second round. \__________ :gusta: __/

This is not a remake, port, etc. of my original Garage, this is a complete different map and depicts a Garage in a small town, depending on how it goes it might be smaller than my Original but with more options in where you can go, etc.

Some screenshots with more to come as I work on the map:






5
Modding / [TUT] Link and build lights on Non-SSE 4.1 CPU
« on: October 01, 2016, 12:15:25 am »
NOTE: This is a very, very echy solution, your compile times will be increased by a hell of a lot since we're "emulating" SSE 4.1, however it's a good solution for people like myself who at the very least want to build lights to see how it looks in Radiant (you can just build sun from then on).

This tutorial is provided AS IS, with no implied warranty. You assume full responsibility, neither myself or Intel are responsible for any damages to your PC, map files, assets, etc.

So you have an older Phenom or whatever AMD CPU (or even an older Intel CPU (u wot Pentium 4 m8?) and you don't have SSE 4.1, well read on.

For AMD users from my research only Bulldozer+ CPUs support, Intel CPUs all the way back to Penryn should support it from 2008.

If you're unsure check in CPU-Z if it supports 4.1.

To start download this from Intel:

https://software.intel.com/en-us/articles/intel-software-development-emulator/

Make sure to grab the win version, other is Linux I believe. And get something like 7zip to extract it.

1. Extract the files to BO3ROOT\bin (where the exe's are for Radiant, Launcher, etc.).

2. Right click on "sde.exe" and send to Desktop to create a shortcut there.

3. Right Click on it and open its Properties and enter this to run the Launcher under it:


Code: [Select]
 -- modlauncher.exe



4. Now you can run it (might take a minute to load Launcher) and select your map to compile lights/link. DO NOT run APE/Radiant under this, they are very glitchy which is why I recommend doing it under Launcher, once you do that, you should have Lighting in Radiant. And again this can take a while, especially linking.

Some screenshots for pr00f: (more once it compiles incoming)






6
YouTube / John's House
« on: September 20, 2016, 08:53:58 am »

yo John, fix yo shit!


7
YouTube / Decagonal Demise
« on: September 18, 2016, 06:49:39 am »
when the kellog's factory in Gulag closed down we come to here to become fast af boi.


8
YouTube / Gulag Kellog's zombies map.
« on: September 16, 2016, 10:46:13 pm »
Embrace the Kellog's Production Plant z__ :gusta: __z



9
Scripting / [TUT] Updated Power Ups HUD
« on: August 25, 2016, 10:08:10 am »
shaders are not included. :gusta:


Updated HUD for danke display effect. Looks similar to BO2/3, gussssttttaaaaaaa.

Copy _zombiemode_powerups.gsc to your mods folder (or edit it from raw, don't really care, that's your call).

Find this and remove it:

Code: [Select]
level thread powerup_hud_overlay();

Find the function called "init_powerups()" and replace it with this:

Code: [Select]
init_powerups()
{
if( !IsDefined( level.zombie_powerup_array ) )
{
level.zombie_powerup_array = [];
}
if ( !IsDefined( level.zombie_special_drop_array ) )
{
level.zombie_special_drop_array = [];
}

// Random Drops
add_zombie_powerup( "nuke", "zombie_bomb", &"ZOMBIE_POWERUP_NUKE", "misc/fx_zombie_mini_nuke" );
add_zombie_powerup( "insta_kill", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL", undefined, "specialty_instakill_zombies", "zombie_powerup_insta_kill_time");
add_zombie_powerup( "double_points","zombie_x2_icon", &"ZOMBIE_POWERUP_DOUBLE_POINTS" , undefined, "specialty_doublepoints_zombies", "zombie_powerup_point_doubler_time" );
add_zombie_powerup( "full_ammo",  "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO");
add_zombie_powerup( "carpenter",  "zombie_carpenter", &"ZOMBIE_POWERUP_MAX_AMMO");

// add_zombie_special_powerup( "monkey" );

// additional special "drops"
// add_zombie_special_drop( "nothing" );
add_zombie_special_drop( "dog" );

// Randomize the order
randomize_powerups();

level.zombie_powerup_index = 0;
randomize_powerups();



We have 2 new psh at the end:

Code: [Select]
add_zombie_powerup( powerup_name, model_name, hint, fx, shader, timer_var )

We shall define our shader and timer variable here for danka obtaining effect.

Now find the function "add_zombie_powerup()" and replace it with this:

Code: [Select]
add_zombie_powerup( powerup_name, model_name, hint, fx, shader, timer_var )
{
if( IsDefined( level.zombie_include_powerups ) && !IsDefined( level.zombie_include_powerups[powerup_name] ) )
{
return;
}

PrecacheModel( model_name );
PrecacheString( hint );

struct = SpawnStruct();

if( !IsDefined( level.zombie_powerups ) )
{
level.zombie_powerups = [];
}

struct.powerup_name = powerup_name;
struct.model_name = model_name;
struct.weapon_classname = "script_model";
struct.hint = hint;
if(IsDefined(shader))
struct.shader = shader;
if(IsDefined(timer_var))
struct.timer = timer_var;

if( IsDefined( fx ) )
{
struct.fx = LoadFx( fx );
}

level.zombie_powerups[powerup_name] = struct;
level.zombie_powerup_array[level.zombie_powerup_array.size] = powerup_name;
add_zombie_special_drop( powerup_name );
}

Now find the function "powerup_hud_overlay()" and replace the entire function with this set of functions:


Code: [Select]
RemovePowerUpHud( powerup_name )
{
for(i = 0; i < self.powerup_hud.size ; i++)
{
if(IsDefined(self.powerup_hud[i].powerup_name) && self.powerup_hud[i].powerup_name == powerup_name)
{
self.hud_is_being_deleted = true;
self.powerup_hud[i] notify("hud_gone");
// IPrintLnBold(self.powerup_hud[i].powerup_name ); // Debug Purposes
self.powerup_hud[i].alpha = 1;
wait 0.1;
self.powerup_hud[i] FadeOverTime(0.5);
self.powerup_hud[i].alpha = 0;
wait 0.6;
self.powerup_hud[i] destroy_hud();
self.powerup_hud[i] Delete();
self.powerup_hud = array_remove(self.powerup_hud, self.powerup_hud[i]);
self.current_powerups = array_remove(self.current_powerups, self.current_powerups[powerup_name]);
self.hud_is_being_deleted = false;
}
}

for(i = 0; i < self.powerup_hud.size ; i++)
self.powerup_hud[i] thread MoveThyHUD(i, self.powerup_hud.size);
}

CreatePowerUpHud( powerup )
{
if(IsDefined(self.current_powerups))
self.current_powerups = [];
if(!IsDefined( self.powerup_hud))
self.powerup_hud = [];

while(IsDefined(self.current_powerups[powerup])) // Check because from testing if the player is fast enough (Though very rare for it to happen), 2 elements can spawn for same HUD.
wait 0.05;

self.current_powerups[powerup] = create_simple_hud( self ); // Made Client HUD so we modify per player for things like Minigun, etc.
self.current_powerups[powerup].powerup_name = powerup;
self.current_powerups[powerup].foreground = true;
self.current_powerups[powerup].sort = 2;
self.current_powerups[powerup].hidewheninmenu = false;
self.current_powerups[powerup].alignX = "center";
self.current_powerups[powerup].alignY = "bottom";
self.current_powerups[powerup].horzAlign = "center";
self.current_powerups[powerup].vertAlign = "bottom";
self.current_powerups[powerup].x = self.current_powerups[powerup].x;
self.current_powerups[powerup].y = self.current_powerups[powerup].y - 35;
self.current_powerups[powerup].alpha = 0;
self.current_powerups[powerup] setshader(level.zombie_powerups[powerup].shader, 48, 48);
self.current_powerups[powerup] scaleOverTime( .3, 32, 32 );
self.current_powerups[powerup] FadeOverTime(0.3);
self.current_powerups[powerup].alpha = 1;
self.current_powerups[powerup] thread LowTimeFade();

self.powerup_hud[self.powerup_hud.size] = self.current_powerups[powerup];

for(i = 0; i < self.powerup_hud.size ; i++)
self.powerup_hud[i] thread MoveThyHUD(i, self.powerup_hud.size);
}

LowTimeFade()
{
self endon("hud_gone");
while(IsDefined(self))
{
self.timer = level.zombie_vars[level.zombie_powerups[self.powerup_name].timer];
if(self.timer < 5)
{
fade_time = 0.2;
}
else if(self.timer < 10)
{
fade_time = 0.6;
}
else
{
wait 0.1;
continue;
}

self FadeOverTime(fade_time);
self.alpha = 0.1;
wait fade_time;
self FadeOverTime(fade_time);
self.alpha = 1;
wait fade_time;

}
}

MoveThyHUD(i, array_size) // Mjáá
{
self MoveOverTime(0.5);
self.x = (24 + (-24 * array_size + (i * 48))); // Jáám
self.y = self.y;
}


The 2 functions "CreatePowerUpHud()" and "RemovePowerUpHud()" will allow us to create and remove our shaders, more info below.

F

Now we need to edit the Double Points and Insta Kill to use this so find the function called "insta_kill_powerup()" and replace it with this:

Code: [Select]
insta_kill_powerup( drop_item )
{

power_up_name = drop_item.powerup_name;
level notify( "powerup instakill" );
level endon( "powerup instakill" );

// array_thread (players, ::insta_kill_on_hud, drop_item);
level thread insta_kill_on_hud( drop_item, power_up_name );

level.zombie_vars["zombie_insta_kill"] = 1;
wait( 30 );
level.zombie_vars["zombie_insta_kill"] = 0;
players = get_players();
for(i = 0; i < players.size; i++)
{
players[i] notify("insta_kill_over");
}

}

Now find "insta_kill_on_hud()" and replace with this:

Code: [Select]
insta_kill_on_hud( drop_item, power_up_name )
{
self endon ("disconnect");

// check to see if this is on or not
if ( level.zombie_vars["zombie_powerup_insta_kill_on"] )
{
// reset the time and keep going
level.zombie_vars["zombie_powerup_insta_kill_time"] = 30;
return;
}

for( i = 0; i < GetPlayers().size; i ++ )
GetPlayers()[i] thread CreatePowerUpHud( power_up_name );

level.zombie_vars["zombie_powerup_insta_kill_on"] = true;

// set up the hudelem
//hudelem = maps\_hud_util::createFontString( "objective", 2 );
//hudelem maps\_hud_util::setPoint( "TOP", undefined, 0, level.zombie_vars["zombie_timer_offset"] + level.zombie_vars["zombie_timer_offset_interval"]);
//hudelem.sort = 0.5;
//hudelem.alpha = 0;
//hudelem fadeovertime(0.5);
//hudelem.alpha = 1;
//hudelem.label = drop_item.hint;

// set time remaining for insta kill
level thread time_remaning_on_insta_kill_powerup( drop_item, power_up_name );

// offset in case we get another powerup
//level.zombie_timer_offset -= level.zombie_timer_offset_interval;
}

You can see here were are calling it on ALL players, as you may have guessed the 2 functions above and all the stuff is player specific allowing use to have different shaders like Death Machine, etc. while other players don't, and allowing it to scale depending on what player has what for example a player has Insta, Death, and x2 but other will only have the 2 global ones it will show up fine specific to player and move specific to player, this has been tested in co-op and works. :)

Now find the function "time_remaning_on_insta_kill_powerup()" and replace with this:

Code: [Select]
time_remaning_on_insta_kill_powerup( drop_item, power_up_name ) // Must pass on power_up_name from above for some reason or it won't work.
{
//self setvalue( level.zombie_vars["zombie_powerup_insta_kill_time"] );
level thread play_devil_dialog("insta_vox");
temp_enta = spawn("script_origin", (0,0,0));
temp_enta playloopsound("insta_kill_loop");

/*
players = get_players();
for (i = 0; i < players.size; i++)
{
players[i] playloopsound ("insta_kill_loop");
}
*/


// time it down!
while ( level.zombie_vars["zombie_powerup_insta_kill_time"] >= 0)
{
wait 0.1;
level.zombie_vars["zombie_powerup_insta_kill_time"] = level.zombie_vars["zombie_powerup_insta_kill_time"] - 0.1;
// self setvalue( level.zombie_vars["zombie_powerup_insta_kill_time"] );
}

players = get_players();
for (i = 0; i < players.size; i++)
{
//players[i] stoploopsound (2);

players[i] playsound("insta_kill");

}

temp_enta stoploopsound(2);
for( i = 0; i < GetPlayers().size; i ++ )
GetPlayers()[i] thread RemovePowerUpHud( power_up_name );
// turn off the timer
level.zombie_vars["zombie_powerup_insta_kill_on"] = false;

// remove the offset to make room for new powerups, reset timer for next time
level.zombie_vars["zombie_powerup_insta_kill_time"] = 30;

//level.zombie_timer_offset += level.zombie_timer_offset_interval;
//self destroy();
temp_enta delete();
}

As you see from some reason we must pass on the power up name from the main function for the power up so make sure to do that.

Now for the Double Points replace the "point_double_on_hud()" and 2 functions under it with this:

Code: [Select]
point_doubler_on_hud( drop_item, power_up_name )
{
self endon ("disconnect");

// check to see if this is on or not
if ( level.zombie_vars["zombie_powerup_point_doubler_on"] )
{
// reset the time and keep going
level.zombie_vars["zombie_powerup_point_doubler_time"] = 30;
return;
}

for( i = 0; i < GetPlayers().size; i ++ )
GetPlayers()[i] thread CreatePowerUpHud( power_up_name );

level.zombie_vars["zombie_powerup_point_doubler_on"] = true;
//power_hud_array[0] = true;
// set up the hudelem
//hudelem = maps\_hud_util::createFontString( "objective", 2 );
//hudelem maps\_hud_util::setPoint( "TOP", undefined, 0, level.zombie_vars["zombie_timer_offset"] );
//hudelem.sort = 0.5;
//hudelem.alpha = 0;
//hudelem fadeovertime( 0.5 );
//hudelem.alpha = 1;
//hudelem.label = drop_item.hint;

// set time remaining for point doubler
level thread time_remaining_on_point_doubler_powerup( drop_item, power_up_name );

// offset in case we get another powerup
//level.zombie_timer_offset -= level.zombie_timer_offset_interval;
}
play_devil_dialog(sound_to_play)
{
if(!IsDefined(level.devil_is_speaking))
{
level.devil_is_speaking = 0;
}
if(level.devil_is_speaking == 0)
{
level.devil_is_speaking = 1;
play_sound_2D( sound_to_play );
wait 2.0;
level.devil_is_speaking =0;
}

}
time_remaining_on_point_doubler_powerup(drop_item, power_up_name)
{
//self setvalue( level.zombie_vars["zombie_powerup_point_doubler_time"] );

temp_ent = spawn("script_origin", (0,0,0));
temp_ent playloopsound ("double_point_loop");

level thread play_devil_dialog("dp_vox");


// time it down!
while ( level.zombie_vars["zombie_powerup_point_doubler_time"] >= 0)
{
wait 0.1;
level.zombie_vars["zombie_powerup_point_doubler_time"] = level.zombie_vars["zombie_powerup_point_doubler_time"] - 0.1;
//self setvalue( level.zombie_vars["zombie_powerup_point_doubler_time"] );
}

for( i = 0; i < GetPlayers().size; i ++ )
GetPlayers()[i] thread RemovePowerUpHud( power_up_name );

// turn off the timer
level.zombie_vars["zombie_powerup_point_doubler_on"] = false;
players = get_players();
for (i = 0; i < players.size; i++)
{
//players[i] stoploopsound("double_point_loop", 2);
players[i] playsound("points_loop_off");
}
temp_ent stoploopsound(2);



// remove the offset to make room for new powerups, reset timer for next time
level.zombie_vars["zombie_powerup_point_doubler_time"] = 30;
//level.zombie_timer_offset += level.zombie_timer_offset_interval;
//self destroy();
temp_ent delete();
}

And replace the main function for it called

Code: [Select]
double_points_powerup( drop_item )
{

power_up_name = drop_item.powerup_name;
level notify ("powerup points scaled");
level endon ("powerup points scaled");

// players = get_players();
// array_thread(level,::point_doubler_on_hud, drop_item);
level thread point_doubler_on_hud( drop_item, power_up_name );

level.zombie_vars["zombie_point_scalar"] = 2;
wait 30;

level.zombie_vars["zombie_point_scalar"] = 1;
}

And that should be it, now for some explaining of the 2 functions.

Like I said these are player spefic, for general power ups like Double Points we simply call it like this on all players:

   for( i = 0; i < GetPlayers().size; i ++ )
      GetPlayers() thread CreatePowerUpHud( power_up_name );

And remove it like so:

Code: [Select]
	for( i = 0; i < GetPlayers().size; i ++ )
GetPlayers()[i] thread RemovePowerUpHud( power_up_name );

You can also pass on the player from the switch statement and call it on them specifically and it will add and move only their HUD:

Code: [Select]
player thread CreatePowerUpHud( power_up_name );


With the nature of pulling stuff out of GSCs there might be something I missed, let me know if there are any errors or bugs.

FAQ:

You must have an account to view the spoiler contents. Please log in or create an account.

Enjoy!

10
Modding / [TUT] Reduce degenerate tris on Black Ops 2 Weapons
« on: August 17, 2016, 06:23:04 am »
Now you no longer need to worry about your gun missing half its body.



11
Modding / [TUT] How to port Black Ops 3 Weapons to BO1 and lower.
« on: August 16, 2016, 06:39:16 am »
In this tutorial I will go over porting a Black Ops 3 Gun to WaW with old viewhands. Many people were having issues so I made this, it took a while to make :P Hope it works for you.

Note: This is not intended for beginners in the slightest, it is intended for those who have an idea of porting. However you should be able to comprehend what's going on hopefully. :P



12
Modding / [MAYA] Update to Aidan's tool.
« on: August 13, 2016, 03:20:09 pm »
For those who use Wraith to grab stuff from BO3 it now exports notetracks (Tom's did too, but nobody used it didn't work if you dragged them on lol). This little tweak will grab the notetracks and add them to Aidan's list of notetracks so you don't need to add them manually.

This will also work with Tom's notetracks if you do import them to grab them.

If you haven't already go to here and download his tool:

http://ugx-mods.com/forum/index.php/topic,1295.0.html

After doing that, go to %USERPROFILE%\Documents\maya\2012-x64\scripts and open CoDMayaTools.py in something like Notepad++, etc.

Replace its contents with this:

http://pastebin.com/VWWVpe7t

Once that's done you'll notice a new button called "Grab Notes" in the xanim export window.

All credit goes to Aidan, don't even consider crediting me for something so minute. :D

Demonstration with PPSH from GK's anims:



You must have an account to view the spoiler contents. Please log in or create an account.

13
Zombie Maps / [W.I.P] Industrial Compound
« on: August 11, 2016, 03:27:54 pm »

That's right bitches I'm making one last map for CoD WaW! \___________ :gusta: __/

I love broken, down, industrial buildings, etc. decaying away. So I am going to be working on this, I have it heavily planned out and have been planning it for the past few weeks. :gusta:

All previous projects are cancelled and/or considered finished. This is now my baby. \_ :gusta: _/

Here are some screenshots of my progress with more ofc. to come as I progress on working on the map: :gusta:











Planned Features:

Harry's Perks, BO3 PaP Effects, etc.

Guns from various IW and 3arc CoD Games from BO3 to MW2.

Bosses such as Panzer, etc.

And more info to come!

Current credits (More will be added ofc. and all will be credited at release):

DTZxPorter - Wraith BO3 Exporter
Tom_BMX - Lemon and Lime exporters
LilRobot - T7 anims to older rig.
Rollonmath42 - Porting Tutorials
Harry Bo21 - Perks, scripts, etc.
natesmithzombies - Scripts, AI, etc.
Redspace200 - Panzer

You must have an account to view the spoiler contents. Please log in or create an account.


14
Mapping / Black Patches in shadows?
« on: July 26, 2016, 09:02:24 am »
This is annoying me, I'll let the pictures show it:







I tried editing light maps, etc. but nothing worked, on Garage you can see it wasn't as sever so I left it but now this is out of control!

Setting light to extra makes it a bit better but still very noticeable, it seems to be on brushes, etc., since the shadows that are casted on Player's viewhands/weapons and models are fine, any insight appreciated.


You must have an account to view the spoiler contents. Please log in or create an account.

15
Scripts / [SCRIPT] Fire Sale [HarryBo21's box + Stock box soon]
« on: July 25, 2016, 06:52:32 am »




Some screenshots:

You must have an account to view the spoiler contents. Please log in or create an account.


This was done for sir Psh but since it's nice to have stuff people can add to their maps I decided to release.


Not many people know but Harry's box is actually set up for Fire Sale, it's as simple as calling a function to make it work, however I have taken to time to help out my non-scripting bois with this.

PLEASE NOTE: This is only for Harry Bo21's box and perks, please read below regarding stock version.
Adding the Scripts


Download the stuff and place them accordingly (puts stuff in mods\modname into your mods folder).

NOTE:
If you have not edited your _zombiemode_powerups.gsc, you can simple use the pre-edited version and skip all this. Just make sure to edit the drop increment and max per round since I forgot to edit these before upload (I set them for testing).



Copy _zombiemode_powerups.gsc to your mod's folder for danka editing effect and open it.

Add this:

Code: [Select]
PrecacheShader( "specialty_firesale_zombies");

Under:

Code: [Select]
PrecacheShader( "specialty_doublepoints_zombies" );
PrecacheShader( "specialty_instakill_zombies" );

So it should look like this:

Code: [Select]
PrecacheShader( "specialty_doublepoints_zombies" );
PrecacheShader( "specialty_instakill_zombies" );
PrecacheShader( "specialty_firesale_zombies");


Now add this:

Code: [Select]
set_zombie_var( "zombie_powerup_fire_sale_on", 		0 ); // Make sure its disabled at start of game, this won't turn it off, if you want it off, don't follow the tutorial!
set_zombie_var( "zombie_powerup_firesale_time", 30 ); // Firesale Length
set_zombie_var( "use_alt_firesale_sounds", "0" ); // Play alt sounds? (Listen to them in sounds folder) "1" = Yes, "0" = No.
set_zombie_var( "zombie_powerup_fire_sale_difficult", 1 ); // Enable extra difficulty, wait for the box to move first and only drop when there are more than x zombies (set this below)
set_zombie_var( "zombie_powerup_fire_sale_zombies_before_firesale", 15 ); // If the setting above is enabled, it will only drop when this amount of zombies are present, so it drops mid-round to make it harder on the player.

Under:

Code: [Select]
set_zombie_var( "zombie_powerup_drop_max_per_round", 4 );	// lower this to make drop happen more often

So it should look like this:

Code: [Select]
set_zombie_var( "zombie_insta_kill", 				0 );
set_zombie_var( "zombie_point_scalar", 1 );
set_zombie_var( "zombie_drop_item", 0 );
set_zombie_var( "zombie_timer_offset", 350 ); // hud offsets
set_zombie_var( "zombie_timer_offset_interval", 30 );
set_zombie_var( "zombie_powerup_insta_kill_on", false );
set_zombie_var( "zombie_powerup_point_doubler_on", false );
set_zombie_var( "zombie_powerup_point_doubler_time", 30 ); // length of point doubler
set_zombie_var( "zombie_powerup_insta_kill_time", 30 ); // length of insta kill
set_zombie_var( "zombie_powerup_drop_increment", 2000 ); // lower this to make drop happen more often
set_zombie_var( "zombie_powerup_drop_max_per_round", 4 ); // lower this to make drop happen more often
set_zombie_var( "zombie_powerup_fire_sale_on", 0 ); // Make sure its disabled at start of game, this won't turn it off, if you want it off, don't follow the tutorial!
set_zombie_var( "zombie_powerup_firesale_time", 30 ); // Firesale Length
set_zombie_var( "use_alt_firesale_sounds", "0" ); // Play alt sounds? (Listen to them in sounds folder) "1" = Yes, "0" = No.
set_zombie_var( "zombie_powerup_fire_sale_difficult", 1 ); // Enable extra difficulty, wait for the box to move first and only drop when there are more than x zombies (set this below)
set_zombie_var( "zombie_powerup_fire_sale_zombies_before_firesale", 10 ); // If the setting above is enabled, it will only drop when this amount of zombies are present, so it drops mid-round to make it harder on the player.

You can edit the 4 settings to your liking especially the difficulty one, using alt sounds (The announcer if set to one will do the "Attention Zombies shoppers!" and the sound that isn't from Kino), etc.

In the function "init_powerups" add this:

Code: [Select]
add_zombie_powerup( "firesale",  	"zombie_firesale",	"Firesale!");

Below:

Code: [Select]
add_zombie_powerup( "carpenter",  	"zombie_carpenter",	&"ZOMBIE_POWERUP_MAX_AMMO");

So it should look like this:

Code: [Select]
add_zombie_powerup( "nuke", 		"zombie_bomb",		&"ZOMBIE_POWERUP_NUKE", 			"misc/fx_zombie_mini_nuke" );
add_zombie_powerup( "insta_kill", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL" );
add_zombie_powerup( "double_points","zombie_x2_icon", &"ZOMBIE_POWERUP_DOUBLE_POINTS" );
add_zombie_powerup( "full_ammo",  "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO");
add_zombie_powerup( "carpenter",  "zombie_carpenter", &"ZOMBIE_POWERUP_MAX_AMMO");
add_zombie_powerup( "firesale",  "zombie_firesale", "Firesale!");

Find the function called "powerup_hud_overlay" and replace it with this:

Code: [Select]
powerup_hud_overlay()
{

level.powerup_hud_array = [];
level.powerup_hud_array[0] = true;
level.powerup_hud_array[1] = true;

level.powerup_hud = [];
level.powerup_hud_cover = [];
level endon ("disconnect");


for(i = 0; i < 3; i++)
{
level.powerup_hud[i] = create_simple_hud();
level.powerup_hud[i].foreground = true;
level.powerup_hud[i].sort = 2;
level.powerup_hud[i].hidewheninmenu = false;
level.powerup_hud[i].alignX = "center";
level.powerup_hud[i].alignY = "bottom";
level.powerup_hud[i].horzAlign = "center";
level.powerup_hud[i].vertAlign = "bottom";
level.powerup_hud[i].x = -32 + (i * 15);
level.powerup_hud[i].y = level.powerup_hud[i].y - 35;
level.powerup_hud[i].alpha = 0.8;
}

shader_2x = "specialty_doublepoints_zombies";
shader_insta = "specialty_instakill_zombies";

while(true)
{
if(level.zombie_vars["zombie_powerup_insta_kill_time"] < 5)
{
wait(0.1);
level.powerup_hud[1].alpha = 0;
wait(0.1);


}
else if(level.zombie_vars["zombie_powerup_insta_kill_time"] < 10)
{
wait(0.2);
level.powerup_hud[1].alpha = 0;
wait(0.18);

}

if(level.zombie_vars["zombie_powerup_point_doubler_time"] < 5)
{
wait(0.1);
level.powerup_hud[0].alpha = 0;
wait(0.1);


}
else if(level.zombie_vars["zombie_powerup_point_doubler_time"] < 10)
{
wait(0.2);
level.powerup_hud[0].alpha = 0;
wait(0.18);
}

if(level.fire_sale_time  < 5)
{
wait(0.1);
level.powerup_hud[2].alpha = 0;
wait(0.1);
}
else if(level.fire_sale_time  < 10)
{
wait(0.2);
level.powerup_hud[2].alpha = 0;
wait(0.18);
}

if(level.zombie_vars["zombie_powerup_point_doubler_on"] == true && level.zombie_vars["zombie_powerup_insta_kill_on"] == true && level.zombie_vars["zombie_powerup_fire_sale_on"] == false) // X2 & INSTA
{
level.powerup_hud[0].x = -24;
level.powerup_hud[1].x = 24;
level.powerup_hud[0].alpha = 1;
level.powerup_hud[1].alpha = 1;
level.powerup_hud[0] setshader(shader_2x, 32, 32);
level.powerup_hud[1] setshader(shader_insta, 32, 32);

}
else if(level.zombie_vars["zombie_powerup_point_doubler_on"] == true && level.zombie_vars["zombie_powerup_insta_kill_on"] == false && level.zombie_vars["zombie_powerup_fire_sale_on"] == false) // X2
{
level.powerup_hud[0].x = 0;
level.powerup_hud[0] setshader(shader_2x, 32, 32);
level.powerup_hud[1].alpha = 0;
level.powerup_hud[0].alpha = 1;
level.powerup_hud[2].alpha = 0;

}
else if(level.zombie_vars["zombie_powerup_point_doubler_on"] == false && level.zombie_vars["zombie_powerup_insta_kill_on"] == false && level.zombie_vars["zombie_powerup_fire_sale_on"] == true) // FIRE SALE
{
level.powerup_hud[2].x = 0;
level.powerup_hud[2] setshader("specialty_firesale_zombies", 32, 32);
level.powerup_hud[1].alpha = 0;
level.powerup_hud[2].alpha = 1;
level.powerup_hud[0].alpha = 0;

}
else if(level.zombie_vars["zombie_powerup_insta_kill_on"] == true && level.zombie_vars["zombie_powerup_point_doubler_on"] == false && level.zombie_vars["zombie_powerup_fire_sale_on"] == false) // INSTA
{
level.powerup_hud[1].x = 0;
level.powerup_hud[1] setshader(shader_insta, 32, 32);
level.powerup_hud[0].alpha = 0;
level.powerup_hud[1].alpha = 1;
level.powerup_hud[2].alpha = 0;

}
else if(level.zombie_vars["zombie_powerup_insta_kill_on"] == true && level.zombie_vars["zombie_powerup_point_doubler_on"] == true && level.zombie_vars["zombie_powerup_fire_sale_on"] == true) // INSTA & X2 & FIRE SALE
{
level.powerup_hud[0].x = -48;
level.powerup_hud[1].x = 0;
level.powerup_hud[2].x = 48;
level.powerup_hud[0].alpha = 1;
level.powerup_hud[1].alpha = 1;
level.powerup_hud[2].alpha = 1;
level.powerup_hud[0] setshader(shader_2x, 32, 32);
level.powerup_hud[1] setshader(shader_insta, 32, 32);
level.powerup_hud[2] setshader("specialty_firesale_zombies", 32, 32);
}
else if(level.zombie_vars["zombie_powerup_insta_kill_on"] == false && level.zombie_vars["zombie_powerup_point_doubler_on"] == true && level.zombie_vars["zombie_powerup_fire_sale_on"] == true) // X2 & FIRESALE
{
level.powerup_hud[0].x = -24;
level.powerup_hud[2].x = 24;
level.powerup_hud[0].alpha = 1;
level.powerup_hud[1].alpha = 0;
level.powerup_hud[2].alpha = 1;
level.powerup_hud[0] setshader(shader_2x, 32, 32);
level.powerup_hud[2] setshader("specialty_firesale_zombies", 32, 32);
}
else if(level.zombie_vars["zombie_powerup_insta_kill_on"] == true && level.zombie_vars["zombie_powerup_point_doubler_on"] == false && level.zombie_vars["zombie_powerup_fire_sale_on"] == true) // INSTA & FIRE SALE
{
level.powerup_hud[1].x = -24;
level.powerup_hud[2].x = 24;
level.powerup_hud[0].alpha = 0;
level.powerup_hud[1].alpha = 1;
level.powerup_hud[2].alpha = 1;
level.powerup_hud[1] setshader(shader_insta, 32, 32);
level.powerup_hud[2] setshader("specialty_firesale_zombies", 32, 32);
}
else
{
level.powerup_hud[2].alpha = 0;
level.powerup_hud[1].alpha = 0;
level.powerup_hud[0].alpha = 0;
}

wait(0.01);

}

}

Next find the function called "get_next_powerup()", replace it with this:

Code: [Select]
get_next_powerup()
{


/#
if( isdefined( level.zombie_devgui_power ) && level.zombie_devgui_power == 1 )
return level.zombie_powerup_array[ level.zombie_powerup_index ];

#/


powerup = getNextPowerUp();

while(1)
{
if( powerup == "firesale" && (IsDefined(level.zombie_vars["zombie_powerup_fire_sale_difficult"]) && level.zombie_vars["zombie_powerup_fire_sale_difficult"]))
{
if( powerup == "firesale" && ((IsDefined(level.box_moved) && !level.box_moved)) &&(IsDefined(getaiarray( "axis" ) && getaiarray( "axis" ).size < level.zombie_vars["zombie_powerup_fire_sale_zombies_before_firesale"]) && (IsDefined(level.power_on) && level.power_on))
powerup = getNextPowerUp();
else
return powerup;
}
else if( powerup == "carpenter" && get_num_window_destroyed() < 5 )
{
powerup = getNextPowerUp();
}
else
{
return powerup;
}
wait(0.05);
}
}

And add below it:

Code: [Select]
getNextPowerUp()
{
powerup = level.zombie_powerup_array[ level.zombie_powerup_index ];

level.zombie_powerup_index++;
if( level.zombie_powerup_index >= level.zombie_powerup_array.size )
{
level.zombie_powerup_index = 0;
randomize_powerups();
}

return powerup;
}

Find function called "powerup_grab()", in the switch statement, find this:

Code: [Select]
case "carpenter":
level thread start_carpenter( self.origin );
players[i] thread powerup_vo("carpenter");
break;

Under it add this:

Code: [Select]
case "firesale":
level thread firesale_harrybo21box( self );
break;

So it should look like this:

Code: [Select]

switch (self.powerup_name)
{
case "nuke":
level thread nuke_powerup( self );

//chrisp - adding powerup VO sounds
players[i] thread powerup_vo("nuke");
zombies = getaiarray("axis");
players[i].zombie_nuked = get_array_of_closest( self.origin, zombies );
players[i] notify("nuke_triggered");

break;
case "full_ammo":
level thread full_ammo_powerup( self );
players[i] thread powerup_vo("full_ammo");
break;
case "double_points":
level thread double_points_powerup( self );
players[i] thread powerup_vo("double_points");
break;
case "insta_kill":
level thread insta_kill_powerup( self );
players[i] thread powerup_vo("insta_kill");
break;
case "carpenter":
level thread start_carpenter( self.origin );
players[i] thread powerup_vo("carpenter");
break;
case "firesale":
level thread firesale_harrybo21box( self );
break;

default:
println ("Unrecognized poweup.");
break;
}


Under this same function, add:

Code: [Select]
firesale_harrybo21box()
{
if(IsDefined(level.zombie_vars[ "zombie_powerup_fire_sale_on" ]) && level.zombie_vars[ "zombie_powerup_fire_sale_on" ])
{
level.fire_sale_time = level.zombie_vars[ "zombie_powerup_firesale_time" ];
return;
}

level.zombie_vars[ "zombie_powerup_fire_sale_on" ] = 1;

if(IsDefined(level.zombie_vars[ "zombie_powerup_firesale_time" ]))
level.fire_sale_time = level.zombie_vars[ "zombie_powerup_firesale_time" ];
else
level.fire_sale_time = 30;

thread firesale_sound_thread();

level thread maps\_zombiemode_mysterybox::harrybo21_mysterybox_start_fire_sale();

while(level.fire_sale_time > 0)
{
level.fire_sale_time -= 0.1;
wait 0.1;
}

level.zombie_vars[ "zombie_powerup_fire_sale_on" ] = 0;
if(IsDefined(level.zombie_vars[ "zombie_powerup_firesale_time" ]))
level.fire_sale_time = level.zombie_vars[ "zombie_powerup_firesale_time" ];
else
level.fire_sale_time = 30;
}

firesale_sound_thread()
{
if(!IsDefined(level.zombie_vars["use_alt_firesale_sounds"]))
level.zombie_vars["use_alt_firesale_sounds"] = "0";

sound_firesale = "fs_vox" + level.zombie_vars["use_alt_firesale_sounds"];
sound_firesale_loop = "fs_loop" + level.zombie_vars["use_alt_firesale_sounds"];

level thread play_devil_dialog(sound_firesale);

fs_ent = spawn("script_origin", (0,0,0));
fs_ent playloopsound (sound_firesale_loop);

while ( level.fire_sale_time >= 0)
{
wait 0.1;
}

players = get_players();
for (i = 0; i < players.size; i++)
{
players[i] playsound("points_loop_off");
}

fs_ent stoploopsound(2);
fs_ent delete();
}

Adding the Assets


I've given a bit of choice regarding the ffs, if you want to include the alt and kino sounds, you can use the main ff, if you want only one set, you can use the extra folder.

It's just a case of pulling them into your mods folder. I won't be providing 500 ffs, if you want, it's easy to get the assets for it, the sounds are even in the IWD in the main folder, so all you need to export is the model from BO2/BO1.


And that should be it, credit if used (and Harry ofc. since you're using his box).

Please let me know of any issues. :)

Credits:

Harry Bo21 - Box Script.

Regarding stock version:

You must have an account to view the spoiler contents. Please log in or create an account.

Pages:
1
2 3 4