Skip to content
  • 0 Unread 0
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Donate
Collapse

Plutonium

  1. Home
  2. WAW Modding Releases & Resources
  3. [ZM][RELEASE] Shi no numa first box + timer + movement speed patch

[ZM][RELEASE] Shi no numa first box + timer + movement speed patch

Scheduled Pinned Locked Moved WAW Modding Releases & Resources
14 Posts 9 Posters 9.0k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • AlexInVr Offline
    AlexInVr Offline
    AlexInVr
    wrote on last edited by
    #3

    UPDATE: 2/3/2023 3:34PM

    • Implemented timer in a better way to make sure the game stays stable

    • Implemented round timer

    1 Reply Last reply
    0
    • A Former User? A Former User

      Hey can you maybe make one without the first box patch?

      And how do i add this code to the game?

      AlexInVr Offline
      AlexInVr Offline
      AlexInVr
      wrote on last edited by
      #4

      @frost_EU I will update the post with a no first box version

      1 Reply Last reply
      0
      • AlexInVr AlexInVr

        Again, another First box patch by your fav waw modder 😄

        This release adds a timer synchronized with the game without the need for external software

        it also fixes the movement speed to be the same as console

        #include maps\_utility;
        #include common_scripts\utility;
        #include maps\_zombiemode_utility;
        
        //First Box by twitch.tv/AlexInVR
        
        init()
        {
        	 replacefunc(maps\_zombiemode_weapons::treasure_chest_ChooseRandomWeapon, ::custom_treasure_chest_ChooseRandomWeapon);
        	 replacefunc(maps\_zombiemode_weapons::treasure_chest_weapon_spawn, ::custom_treasure_chest_weapon_spawn);
        	 replacefunc(maps\_zombiemode_weapons_sumpf::treasure_chest_ChooseRandomWeapon, ::custom_treasure_chest_ChooseRandomWeapon);
        	 replacefunc(maps\_zombiemode_weapons_sumpf::treasure_chest_weapon_spawn, ::custom_treasure_chest_weapon_spawn);
        	replacefunc(maps\_zombiemode::round_think, ::custom_round_think);
        	thread onConnect();
           
        }
        
        onConnect()
        {
        	for(;;)
        	{
        		level waittill( "connecting", player );
        		player thread onPlayerSpawned();
        	}
        }
        
        
        custom_round_think()
        {
        	for( ;; )
        	{
        		level.round_spawn_func = maps\_zombiemode::round_spawning;
        		//////////////////////////////////////////
        		//designed by prod DT#36173
        		maxreward = 50 * level.round_number;
        		if ( maxreward > 500 )
        			maxreward = 500;
        		level.zombie_vars["rebuild_barrier_cap_per_round"] = maxreward;
        		//////////////////////////////////////////
        
        		level.round_timer = level.zombie_vars["zombie_round_time"]; 
        		
        		add_later_round_spawners();
        
        		maps\_zombiemode::chalk_one_up();
        		//		round_text( &"ZOMBIE_ROUND_BEGIN" );
        
        		maps\_zombiemode_powerups::powerup_round_start();
        
        		players = get_players();
        		array_thread( players, maps\_zombiemode_blockers::rebuild_barrier_reward_reset );
        
        		level thread maps\_zombiemode::award_grenades_for_survivors();
        
        		level.round_start_time = getTime();
        		level thread [[level.round_spawn_func]]();
        		level notify("start_of_round");
        
        		maps\_zombiemode::round_wait(); 
        		level.first_round = false;
        		level notify("end_of_round");
        
        		level thread maps\_zombiemode::spectators_respawn();
        
        		//		round_text( &"ZOMBIE_ROUND_END" );
        		level thread maps\_zombiemode::chalk_round_hint();
        
        		wait( level.zombie_vars["zombie_between_round_time"] ); 
        
        		// here's the difficulty increase over time area
        		timer = level.zombie_vars["zombie_spawn_delay"];
        
        		if( timer < 0.08 )
        		{
        			timer = 0.08; 
        		}	
        
        		level.zombie_vars["zombie_spawn_delay"] = timer * 0.95;
        
        		// Increase the zombie move speed
        		level.zombie_move_speed = level.round_number * 8;
        
        		level.round_number++;
        
        		level notify( "between_round_over" );
        	}
        }
        
        custom_treasure_chest_ChooseRandomWeapon(player)
        {
            	if (level.round_number <= 15){
        			if (!(player HasWeapon("tesla_gun"))){
        				return "tesla_gun";
        			}
        
        			if (!(player HasWeapon("zombie_ppsh"))){
        				return "zombie_ppsh";
        			}
        		} else {
        			keys = GetArrayKeys( level.zombie_weapons );
        
        	// Filter out any weapons the player already has
        	filtered = [];
        	for( i = 0; i < keys.size; i++ )
        	{
        		if( player HasWeapon( keys[i] ) )
        		{
        			continue;
        		}
        				
        		//chrisP - make sure the chest doesn't give the player a bouncing betty
        		if(keys[i] == "mine_bouncing_betty")
        		{
        			continue;
        		}
        
        		// PI_CHANGE_BEGIN
        		if( isDefined(level.script) && level.script == "nazi_zombie_sumpf")
        		{
        			//make sure box moves once before allowing ray gun to be accessed.
        			if( level.box_moved == false )
        			{
        				if( keys[i] == "ray_gun" )
        				{
        					continue;
        				}
        			}
        		}
        		// PI_CHANGE_END
        		
        		if( !IsDefined( keys[i] ) )
        			continue;
        
        		filtered[filtered.size] = keys[i];
        	}
        	
        	// PI_CHANGE_BEGIN - adjusting the percentages of the ray gun and tesla gun showing up 
        	if( isDefined(level.script) && level.script == "nazi_zombie_sumpf" )
        	{	
        		if( level.box_moved == true )
        		{	
        			if( !(player HasWeapon( "ray_gun" )) )
        			{
        				// increase the percentage of ray gun
        				if( isDefined( level.pulls_since_last_ray_gun ) )
        				{
        					// after 12 pulls the ray gun percentage increases to 15%
        					
        					if( level.pulls_since_last_ray_gun > 11 )
        					{
        						// calculate the number of times we have to add it to the array to get the desired percent
        						number_to_add = .15 * filtered.size;
        						for(i=1; i<number_to_add; i++)
        						{
        							filtered[filtered.size] = "ray_gun";
        						}				
        					}			
        					// after 8 pulls the Ray Gun percentage increases to 10%
        					else if( level.pulls_since_last_ray_gun > 7 )
        					{
        						// calculate the number of times we have to add it to the array to get the desired percent
        						number_to_add = .1 * filtered.size;
        						for(i=1; i<number_to_add; i++)
        						{
        							filtered[filtered.size] = "ray_gun";
        						}				
        					}				
        				}
        			}
        		}
        			
        		// increase the percentage of tesla gun
        		if( isDefined( level.pulls_since_last_tesla_gun ) )
        		{
        			// player has dropped the tesla for another weapon, so we set all future polls to 20%
        			if( isDefined(level.player_drops_tesla_gun) && level.player_drops_tesla_gun == true )
        			{						
        				// calculate the number of times we have to add it to the array to get the desired percent
        				number_to_add = .2 * filtered.size;
        				for(i=1; i<number_to_add; i++)
        				{
        					filtered[filtered.size] = "tesla_gun";
        				}				
        			}
        			
        			// player has not seen tesla gun in late rounds
        			if( !isDefined(level.player_seen_tesla_gun) || level.player_seen_tesla_gun == false )
        			{
        
        				// after round 10 the Tesla gun percentage increases to 20%
        				if( level.round_number > 10 )
        				{
        					// calculate the number of times we have to add it to the array to get the desired percent
        					number_to_add = .2 * filtered.size;
        					for(i=1; i<number_to_add; i++)
        					{
        						filtered[filtered.size] = "tesla_gun";
        					}				
        				}		
        				// after round 5 the Tesla gun percentage increases to 15%
        				else if( level.round_number > 5 )
        				{
        					// calculate the number of times we have to add it to the array to get the desired percent
        					number_to_add = .15 * filtered.size;
        					for(i=1; i<number_to_add; i++)
        					{
        						filtered[filtered.size] = "tesla_gun";
        					}				
        				}						
        			}
        		}
        	}
        	// PI_CHANGE_END	
        
        	// Filter out the limited weapons
        	if( IsDefined( level.limited_weapons ) )
        	{
        		keys2 = GetArrayKeys( level.limited_weapons );
        		players = get_players();
        		for( q = 0; q < keys2.size; q++ )
        		{
        			count = 0;
        			for( i = 0; i < players.size; i++ )
        			{
        				if( players[i] HasWeapon( keys2[q] ) )
        				{
        					count++;
        				}
        
        				// check for last stand weapons that might not be on the player at the time
        				if (players[i] maps\_laststand::player_is_in_laststand())
        				{
        					for( m = 0; m < players[i].weaponInventory.size; m++ )
        					{
        						if (players[i].weaponInventory[m] == keys2[q])
        						{
        							count++;
        						}
        					}
        				}
        			}
        
        			if( count == level.limited_weapons[keys2[q]] )
        			{
        				filtered = array_remove( filtered, keys2[q] );
        			}
        		}
        	}
        
        	return filtered[RandomInt( filtered.size )];
        		}
        }
        
        custom_treasure_chest_weapon_spawn( chest, player )
        {
        	assert(IsDefined(player));
        	// spawn the model
        	model = spawn( "script_model", self.origin ); 
        	model.angles = self.angles +( 0, 90, 0 );
        
        	floatHeight = 40;
        
        	//move it up
        	model moveto( model.origin +( 0, 0, floatHeight ), 3, 2, 0.9 ); 
        
        	// rotation would go here
        
        	// make with the mario kart
        	modelname = undefined; 
        	rand = undefined; 
        	for( i = 0; i < 40; i++ )
        	{
        
        		if( i < 20 )
        		{
        			wait( 0.05 ); 
        		}
        		else if( i < 30 )
        		{
        			wait( 0.1 ); 
        		}
        		else if( i < 35 )
        		{
        			wait( 0.2 ); 
        		}
        		else if( i < 38 )
        		{
        			wait( 0.3 ); 
        		}
        
        		rand = custom_treasure_chest_ChooseRandomWeapon( player );
        		
        		/#
        			if( maps\_zombiemode_tesla::tesla_gun_exists() )	
        			{
        				if ( i == 39 && GetDvar( "scr_spawn_tesla" ) != "" )
        				{
        					SetDvar( "scr_spawn_tesla", "" );
        					rand = "tesla_gun";
        				}
        			}
        		#/
        		
        		modelname = GetWeaponModel( rand );
        		model setmodel( modelname ); 
        
        
        	}
        
        	self.weapon_string = rand; // here's where the org get it's weapon type for the give function
        
        	// random change of getting the joker that moves the box
        	random = Randomint(100);
        
        
        	//increase the chance of joker appearing from 0-100 based on amount of the time chest has been opened.
        	if(level.script != "nazi_zombie_prototype" && getdvar("magic_chest_movable") == "1")
        	{
        
        		if(level.chest_accessed < 4)
        		{		
        			// PI_CHANGE_BEGIN - JMA - RandomInt(100) can return a number between 0-99.  If it's zero and chance_of_joker is zero
        			//									we can possibly have a teddy bear one after another.
        			chance_of_joker = -1;
        			// PI_CHANGE_END
        		}
        		else
        		{
        			chance_of_joker = level.chest_accessed + 20;
        			
        			// PI_CHANGE_BEGIN - JMA 
        			if( isDefined(level.script) && level.script == "nazi_zombie_sumpf" )
        			{
        				// make sure teddy bear appears on the 8th pull if it hasn't moved from the attic
        				if( (!isDefined(level.magic_box_first_move) || level.magic_box_first_move == false ) && level.chest_accessed >= 8)
        				{
        					chance_of_joker = 100;
        				}
        				
        				// pulls 4 thru 8, there is a 15% chance of getting the teddy bear
        				// NOTE:  this happens in all cases
        				if( level.chest_accessed >= 4 && level.chest_accessed < 8 )
        				{
        					if( random < 15 )
        					{
        						chance_of_joker = 100;
        					}
        					else
        					{
        						chance_of_joker = -1;
        					}
        				}
        				
        				// after the first magic box move the teddy bear percentages changes
        				if( isDefined(level.magic_box_first_move) && level.magic_box_first_move == true )
        				{
        					// between pulls 8 thru 12, the teddy bear percent is 30%
        					if( level.chest_accessed >= 8 && level.chest_accessed < 13 )
        					{
        						if( random < 30 )
        						{
        							chance_of_joker = 100;
        						}
        						else
        						{
        							chance_of_joker = -1;
        						}
        					}
        					
        					// after 12th pull, the teddy bear percent is 50%
        					if( level.chest_accessed >= 13 )
        					{
        						if( random < 50 )
        						{
        							chance_of_joker = 100;
        						}
        						else
        						{
        							chance_of_joker = -1;
        						}
        					}
        				}
        			}					
        			// PI_CHANGE_END
        		}
        
        		if (random <= chance_of_joker)
        		{
        			model SetModel("zombie_teddybear");
        		//	model rotateto(level.chests[level.chest_index].angles, 0.01);
        			//wait(1);
        			model.angles = self.angles;		
        			wait 1;
        			flag_set("moving_chest_now");
        			level.chest_accessed = 0;
        
        			player maps\_zombiemode_score::add_to_player_score( 950 );
        
        			//allow power weapon to be accessed.
        			level.box_moved = true;
        
        
        		}
        
        	}
        
        	self notify( "randomization_done" );
        
        	if (flag("moving_chest_now"))
        	{
        		wait .5;	// we need a wait here before this notify
        		level notify("weapon_fly_away_start");
        		wait 2;
        		model MoveZ(500, 4, 3);
        		model waittill("movedone");
        		model delete();
        		self notify( "box_moving" );
        		level notify("weapon_fly_away_end");
        	}
        	else
        	{
        		
        		//turn off power weapon, since player just got one
        		if( rand == "tesla_gun" || rand == "ray_gun" )
        		{
        			// PI_CHANGE_BEGIN - JMA - reset the counters for tesla gun and ray gun pulls
        			if( isDefined( level.script ) && level.script == "nazi_zombie_sumpf" )
        			{
        				if( rand == "ray_gun" )
        				{
        					level.box_moved = false;
        					level.pulls_since_last_ray_gun = 0;
        				}
        				
        				if( rand == "tesla_gun" )
        				{
        					level.pulls_since_last_tesla_gun = 0;
        					level.player_seen_tesla_gun = true;
        				}			
        			}
        			else
        			{
        				level.box_moved = false;
        			}
        			// PI_CHANGE_END			
        		}
        
        		model thread timer_til_despawn(floatHeight);
        		self waittill( "weapon_grabbed" );
        
        		if( !chest.timedOut )
        		{
        			model Delete();
        		}
        
        
        	}
        }
        
        timer_til_despawn(floatHeight)
        {
        
        
        	// SRS 9/3/2008: if we timed out, move the weapon back into the box instead of deleting it
        	putBackTime = 12;
        	self MoveTo( self.origin - ( 0, 0, floatHeight ), putBackTime, ( putBackTime * 0.5 ) );
        	wait( putBackTime );
        
        	if(isdefined(self))
        	{	
        		self Delete();
        	}
        }
        
        game_timer()
        {	
        	hud = create_simple_hud( self );
        	hud.foreground = true; 
        	hud.sort = 1; 
        	hud.hidewheninmenu = true; 
        	hud.alignX = "left"; 
        	hud.alignY = "top";
        	hud.horzAlign = "user_left"; 
        	hud.vertAlign = "user_top";
        	hud.x = hud.x - -700; 
        	hud.y = hud.y + 35; 
        	hud.alpha = 1;
        	flag_wait("all_players_spawned");
        	hud setTimerUp(1);
        }
        
        round_timer()
        {	
        	timerHud = create_simple_hud( self );
        	timerHud.foreground = true; 
        	timerHud.sort = 1; 
        	timerHud.hidewheninmenu = true; 
        	timerHud.alignX = "left"; 
        	timerHud.alignY = "top";
        	timerHud.horzAlign = "user_left"; 
        	timerHud.vertAlign = "user_top";
        	timerHud.x = timerHud.x - -700; 
        	timerHud.y = timerHud.y + 45;
        	timerHud.color =  (1, 0, 0);
        	timerHud.alpha = 1;
        	flag_wait("all_players_spawned");
        	for (;;){
        		start_time = GetTime() / 1000;
        		timerHud setTimerUp(0);
        		level waittill("end_of_round");
        		end_time = GetTime() / 1000;
        		time = end_time - start_time;
        		set_time_frozen(timerHud, time); 
        	}
        	
        }
        
        set_time_frozen(hud, time)
        {
        	level endon("start_of_round");
        	time = time - 0.1;
        	while(1)
        	{
        		hud settimer(time);
        		wait(0.5);
        	}
        }
        
        onPlayerSpawned()
        {
        	self endon( "disconnect" ); 
        
        	for( ;; )
        	{
        		
        		level waittill( "connected", player ); 
        		self thread game_timer();
        		self thread round_timer();
        		self SetClientDvars( 
        			"player_backSpeedScale", "1", 
        			"player_strafeSpeedScale", "1");
        		
        		wait 3;
        
        		self IPrintLnBold("First box patch by ^1twitch.tv/^2AlexInVR");
        	}
        	level waittill( "connected", player ); 
        	
        }  
        

        pic of what it looks like upon spawning in the game.

        download (9).jpg
        download (3).jpg

        download (4).jpg

        download (5).jpg

        kamthescholar Offline
        kamthescholar Offline
        kamthescholar
        wrote on last edited by
        #5

        AlexInVr i know this is quite old but how do i add this to my game?

        1 Reply Last reply
        0
        • Cam Out2u Offline
          Cam Out2u Offline
          Cam Out2u
          wrote on last edited by
          #6

          how do i add the script to the game

          AlexInVr 1 Reply Last reply
          0
          • Cam Out2u Cam Out2u

            how do i add the script to the game

            AlexInVr Offline
            AlexInVr Offline
            AlexInVr
            wrote on last edited by
            #7

            Cam Out2u Open notepad, copy paste the text into Notepad, click "save as", name it patch.gsc

            press windows + r on your keyboard, a box will appear, type in %LOCALAPPDATA%, search for a folder named plutonium, then you wanna go to storage ---> t4 --> raw ---> scripts ----> sp ----> and then you want to create a folder named nazi_zombie_sumpf

            drop the patch.gsc file in the folder and launch your game

            C:\Users\thrif\AppData\Local\Plutonium\storage\t4\raw\scripts\sp

            meteora_ VisoredTuna4671 2 Replies Last reply
            0
            • Kingtonio Offline
              Kingtonio Offline
              Kingtonio
              wrote on last edited by
              #8

              how can i get the reset tracker like in the first pic?

              1 Reply Last reply
              0
              • addygobbler Offline
                addygobbler Offline
                addygobbler
                wrote on last edited by
                #9

                does first box patch no longer work? Isn't working for me but timer and backspeed is. Also where can i get the wonder waff skin and zombie skin you got in the pics?

                1 Reply Last reply
                0
                • lepoonchis Offline
                  lepoonchis Offline
                  lepoonchis
                  wrote on last edited by
                  #10
                  This post is deleted!
                  1 Reply Last reply
                  0
                  • Cu1tzZz Offline
                    Cu1tzZz Offline
                    Cu1tzZz
                    wrote on last edited by
                    #11

                    does timer still work

                    AlexInVr 1 Reply Last reply
                    0
                    • GoatedGameplay Offline
                      GoatedGameplay Offline
                      GoatedGameplay
                      wrote on last edited by
                      #12

                      How do I download it?

                      1 Reply Last reply
                      0
                      • Cu1tzZz Cu1tzZz

                        does timer still work

                        AlexInVr Offline
                        AlexInVr Offline
                        AlexInVr
                        wrote on last edited by
                        #13

                        Cu1tzZz Should be working still

                        1 Reply Last reply
                        0
                        • GoatedGameplay Offline
                          GoatedGameplay Offline
                          GoatedGameplay
                          wrote on last edited by
                          #14

                          Can you make a download option?

                          1 Reply Last reply
                          0

                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                          With your input, this post could be even better 💗

                          Register Login
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Unread 0
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Donate