Jump to content

Code Confirms We have NOT CORRECTLY finished Puzzle


wonderboy_3856

Recommended Posts

An earlier post gave all the coding for what we’ve accessed thus far (PLEASE READ VERY IMPORTANT~ I guess this is the end ): ?). I’ve been reading and re-reading this with great detail and found some great stuff. I will outline the obvious indicators we have not seen the end of this, as well as my interpretation of where we have been going wrong.

First we’ll look at the beginning and end of the code to show that our results have not produced the correct outcome (For space conservation I will not repost the entire code, see the afore mentioned post for full code).

teleport_target_event();

reroute_power_event();

sync_switch_event();

pressure_plate_event();

lander_passkey_event();

weapon_combo_event();

level notify( "help_found" ); **Note it says Help Found**

These are the list of events, and the final outcome that we should encounter if all is done correctly. However, we are all familiar with this ending.

samantha_is_angry()

{

playsoundatposition( "zmb_samantha_earthquake", (0,0,0) );

playsoundatposition( "zmb_samantha_whispers", (0,0,0) );

wait(6);

level clientnotify( "sia" ); **Note Level notify “Sam is angry” not “hp” or “help_found”**playsoundatposition( "zmb_samantha_scream", (0,0,0) ):

It becomes obvious that we have been performing the weapon combo event incorrectly. Further evidence is as follows:

kill_trig_on_death( trig )

{

self waittill( "death" );

trig delete();

if( flag( "thundergun_hit" ) && !flag( "weapons_combined" ) )

{

level thread play_egg_vox( "vox_ann_egg6p1_success", "vox_gersh_egg6_fail2", 7 );

}

else if( !flag( "weapons_combined" ) )

{

level thread play_egg_vox( undefined, "vox_gersh_egg6_fail1", 6 );

}

flag_clear( "thundergun_hit" );

}

soul_release( model, origin )

{

soul = Spawn( "script_model", origin );

soul SetModel( "tag_origin" );

soul PlayLoopSound( "zmb_egg_soul" );

fx = PlayFXOnTag( level._effect["gersh_spark"], soul, "tag_origin" );

time = 20;

model waittill( "death" );

level thread play_egg_vox( "vox_ann_egg6_success", "vox_gersh_egg6_success", 9 );

level thread wait_for_gersh_vox();

soul MoveZ( 2500, time, time - 1 );

wait( time );

soul Delete();

wait(2);

level thread samantha_is_angry();

}

wait_for_gersh_vox()

{

wait(12.5);

players = GetPlayers();

for ( i=0; i

{

players thread reward_wait();

}

}

reward_wait()

{

while ( !is_player_valid( self ) ||

( self UseButtonPressed() && self in_revive_trigger() ) )

{

wait( 1.0 );

}

level thread maps\_zombiemode_powerups::minigun_weapon_powerup( self, 90 );

}

play_egg_vox( ann_alias, gersh_alias, plr_num )

{

if( IsDefined( ann_alias ) )

{

level maps\zombie_cosmodrome_amb::play_cosmo_announcer_vox( ann_alias );

}

if( IsDefined( gersh_alias ) )

{

level maps\zombie_cosmodrome_amb::play_gersh_vox( gersh_alias );

}

if( IsDefined( plr_num ) )

{

players = get_players();

rand = RandomIntRange( 0, players.size );

players[rand] maps\_zombiemode_audio::create_and_play_dialog( "eggs", "gersh_response", undefined, plr_num );

The successful completion of this event hinges on which flags are set and how; I’m not claiming to know exactly how it is done, but these flags are crucial. Above you can see correlation between the “weapons combined” and “thundergun hit” flags and their earned responses by either Gersh or Ann. I am guessing that if certain actions were done differently the order of the code and the code itself would differ. Another significant line is the last one in that section. It says create and play dialog “eggs, gersh response, undefined, and plr_num” I believe the undefined should instead be “Ann_response”.

One more blatantly obvious code that assures us this isn’t the end is the section mentioning the player rewards. I will paste it one more time below so that I can type notes directly next to the code.

players = GetPlayers();

for ( i=0; i

{

players thread reward_wait(); **If done properly, rewards would be given soon**}

}

reward_wait()

{

while ( !is_player_valid( self ) || **Possibly “!” meaning player isn’t valid or “rewardable” **( self UseButtonPressed() && self in_revive_trigger() ) )

{

wait( 1.0 );

}

level thread maps\_zombiemode_powerups::minigun_weapon_powerup( self, 90 );

Then when the “minigun powerup” aka death machines are given, it does not mention the reward. As a matter of fact it doesn’t mention reward again at all. This also may be the “undefined” in the previous paragraph rather than “Ann_response”. It almost looks like a downed player must be holding X or use, while another player revives him.

Now I’d like to make a few suggestions based on what we’ve seen in the event code. One the player with the upgraded thundergun may have to walk directly into the black hole and then fire, or be at point blank/aiming down sights to fire. Or my favorite theory of all, walk through the black hole without ever firing the gun at all. Sounds crazy I know, but here is my logic on this:

wait_for_combo( trig )

{

self endon( "death" );

self thread kill_trig_on_death( trig );

weapon_combo_spot = GetStruct( "weapon_combo_spot", "targetname" );

ray_gun_hit = false;

doll_hit = false;

crossbow_hit = false;

players = get_players();

array_thread( players, ::thundergun_check, self, trig, weapon_combo_spot );

while ( 1 )

The array thread defines what the players need to accomplish to set/clear the correct flags. Thundergun_check sounds a lot like “withholding the power”, or keeping the gun in check. The rest of my support for the thundergun suggestions are from this part of the coding.

if ( self GetCurrentWeapon() == "thundergun_upgraded_zm" )

{

if ( DistanceSquared( self.origin, weapon_combo_spot.origin )

{

vector_to_spot = VectorNormalize( weapon_combo_spot.origin - self GetWeaponMuzzlePoint() );

vector_player_facing = self GetWeaponForwardDir();

angle_diff = acos( VectorDot( vector_to_spot, vector_player_facing ) );

if ( angle_diff

{

flag_set( "thundergun_hit" );

RadiusDamage( trig.origin, 5, 1, 1, self );

Key items are distance from origin spot must be less than 90000 (vectors?), weapon muzzle point (aiming down sights?), player/weapon facing direction with 10 degree tolerance. Perhaps the player needs to go right up next to the gersh and ADS and then walk away. Or maybe if he shots it standing this close he will be the player that goes down and will be revived making players “valid” for reward. Notice the radius damage, seems to be significant.

I’m done making suggestions as to how, I for one hate getting my hopes up with every new theory. My main goal here was to bring some attention to what the code has laid out right in front of us.

I rarely get to play with 4 people as I have a brutal work schedule, usually play solo or split screen, so please please let me know if this stuff gets tested/disproven. Clearly I have a vested interest in seeing this puzzle through.

Link to comment
  • Replies 49
  • Created
  • Last Reply

Top Posters In This Topic

its an amazing read of code...though I still question the origin of this code as parts don't make sense.

The flags you mention are requesting certain items...such as "Thundergun" but only once remark to each weapon upgraded. While we recognize the Awful Lawton as the upgraded Crossbow, the game would recognize (in coding) two separate weapons. One goes in the PaP, the other comes out...so why Thundergun and not Thundergun_upgraded, like the code previously states?

Still, an amazing analysis of this code, whether legit or not.

Link to comment

I don't see anything in this code that suggests an extra step to the easter egg. The only thing I spotted is a different sound file that you can get if you shoot the gersh with the thundergun and then kill yourself before shooting the gersh with the other weapons. See code snippet below.

kill_trig_on_death( trig ) Code run when killed

{

self waittill( "death" ); This may mean you need to wait until you've actually died, i.e. not been revived.

trig delete();

If the thundergun_hit flag has been done (presumably the thundergun blast at the gersh) and all the weapons have not yet been combined (presumably the rest of the weapons hitting the gersh.)

if( flag( "thundergun_hit" ) && !flag( "weapons_combined" ) )

{

level thread play_egg_vox( "vox_ann_egg6p1_success", "vox_gersh_egg6_fail2", 7 ); Play "egg 6 part 1 success" voice file and "gersh egg 6 fail 2" voice file.}

The second code segment, with the while loop, simply delays receiving the death machines while someone is being revived or is "not valid" (whatever that means - maybe when buying a perk or something?)

while ( !is_player_valid( self ) ||

( self UseButtonPressed() && self in_revive_trigger() ) )

{

wait( 1.0 );

}

Once the while loop finishes - no one is being revived - it just executes the regular Death Machines reward.

If there is anything new to the Easter egg, it's not in this code. Well, apart from some sound files that we may not have heard.

Link to comment

I'm a software engineering student (close to graduating) and i decided to take a look at one part of this and give my two cents

I don't have access to the code so I'm assuming the above posted is correct. I added indenting to make it easier to read. As i don't know this language, I'm going to make some assumptions. See my comments in code as "//"


wait_for_combo( trig ) { // variable 'trig' is used as some kind of reference to store information in
// 'self' could be a way of storing information in 'trig' or to change behavior of this method/function/block of code
// 'self' could be a way of accessing other scripts like 'this' in object orientated languages
self thread kill_trig_on_death( trig ); //This looks as if it could spawn a new thread and run the 'kill_trig_on_death' block of code that can make changes to the 'trig' container
self endon( "death" ); //some function 'endon' is being called. It is unclear on what it modifies
//weapon_combo_spot is getting set, don't know what GetStruct does but I'm assuming its the gurse device location
weapon_combo_spot = GetStruct( "weapon_combo_spot", "targetname" );

/** This looks to be initialization of variables that will be set inside of a loop **/
ray_gun_hit = false;
doll_hit = false;
crossbow_hit = false;
players = get_players();
/** End of initialization of variables **/

array_thread( players, ::thundergun_check, self, trig, weapon_combo_spot ); //This can be some kind of thread sync for the trigger to run for all players.

while ( 1 ) //A never ending loop, rather interesting as there must be some way to end the loop. I'm assuming that this tread is terminated some how or the loop is broken out of.

//Does the current player have the upgraded thundergun?
if ( self GetCurrentWeapon() == "thundergun_upgraded_zm" ) {
/** Note self.origin pry is where your standing and weapon_combo_spot.origin is pry where the gurse device is. This means that you need to stand within 90000 units of the gurse device when your firing at it for the Easter egg to work. **/
if ( DistanceSquared( self.origin, weapon_combo_spot.origin )
/** This section just determines if your weapons , in this case being the thunder gun, hit the target that is the gurse deivice with a 10 degree tolerance to the point where you need to aim **/

vector_to_spot = VectorNormalize( weapon_combo_spot.origin - self GetWeaponMuzzlePoint() );
vector_player_facing = self GetWeaponForwardDir();
angle_diff = acos( VectorDot( vector_to_spot, vector_player_facing ) );
if ( angle_diff flag_set( "thundergun_hit" ); //The thunder gun has hit the gurse device. This implies that you only need to hit the gurse device once with the thunder gun.

RadiusDamage( trig.origin, 5, 1, 1, self ); //Add damage to gurse device total

//The rest of the code isn't available so I can't do more analysis.

Interesting to notes;

This is implying that you only need to hit the gurse device once with the thunder gun, but each hit of the thunder gun does add damage to the gurse device. I suspect that ray_gun_hit , doll_hit, crossbow_hit are set true later down in the loop.

The 10 degree tolerance and 90000 distance just determines if your close enough to hit the gurse device in this Easter egg (doesn't count weapon range) and that your aiming at it with the a tolerance of 10 degrees.

As the loop of code here isn't fully given, I can't conclude that the Easter egg is over.

Link to comment

include animscripts\zombie_utility;
#include common_scripts\utility;
#include maps\_utility;
#include maps\_zombiemode_utility;
#include maps\_ambientpackage;
#include maps\_music;
#include maps\_busing;
#include maps\_zombiemode_audio;
init()
{
PreCacheModel( "p_glo_electrical_transformer" );
PreCacheModel( "p_zom_monitor_csm_screen_on" );
PreCacheModel( "p_zom_monitor_csm_screen_logo" );
PreCacheModel( "p_rus_electric_switch_stop" );
PreCacheModel( "p_rus_clock_lrg" );
flag_init( "target_teleported" );
flag_init( "rerouted_power" );
flag_init( "switches_synced" );
flag_init( "pressure_sustained" );
flag_init( "passkey_confirmed" );
flag_init( "weapons_combined" );
level.casimir_lights = [];
level.lander_letters[ "a" ] = GetEnt( "letter_a", "targetname" );
level.lander_letters[ "e" ] = GetEnt( "letter_e", "targetname" );
level.lander_letters[ "h" ] = GetEnt( "letter_h", "targetname" );
level.lander_letters[ "i" ] = GetEnt( "letter_i", "targetname" );
level.lander_letters[ "l" ] = GetEnt( "letter_l", "targetname" );
level.lander_letters[ "m" ] = GetEnt( "letter_m", "targetname" );
level.lander_letters[ "n" ] = GetEnt( "letter_n", "targetname" );
level.lander_letters[ "r" ] = GetEnt( "letter_r", "targetname" );
level.lander_letters[ "s" ] = GetEnt( "letter_s", "targetname" );
level.lander_letters[ "t" ] = GetEnt( "letter_t", "targetname" );
level.lander_letters[ "u" ] = GetEnt( "letter_u", "targetname" );
level.lander_letters[ "y" ] = GetEnt( "letter_y", "targetname" );
keys = GetArrayKeys( level.lander_letters );
for ( i=0; i {
level.lander_letters[ keys[i] ] Hide();
}
teleport_target_event();
reroute_power_event();
sync_switch_event();
pressure_plate_event();
lander_passkey_event();
weapon_combo_event();
level notify( "help_found" );
monitor = GetEnt( "casimir_monitor", "targetname" );
monitor SetModel( "p_zom_monitor_csm_screen_off" );
}
play_easter_egg_audio( alias, sound_ent, text )
{
if( alias == undefined )
{
return;
}
sound_ent PlaySound( alias, "sounddone" );
sound_ent waittill( "sounddone" );
}
activate_casimir_light( num )
{
spot = GetStruct( "casimir_light_"+num, "targetname" );
if ( IsDefined( spot ) )
{
light = Spawn( "script_model", spot.origin );
light SetModel( "tag_origin" );
light.angles = spot.angles;
fx = PlayFXOnTag( level._effect["fx_zmb_light_floodlight_bright"], light, "tag_origin" );
level.casimir_lights[ level.casimir_lights.size ] = light;
}
}
teleport_target_event()
{
teleport_target_start = getstruct( "teleport_target_start", "targetname" );
teleport_target_spark = getstruct( "teleport_target_spark", "targetname" );
level.teleport_target = Spawn( "script_model", teleport_target_start.origin );
level.teleport_target SetModel( "p_glo_electrical_transformer" );
level.teleport_target.angles = teleport_target_start.angles;
level.teleport_target PlayLoopSound( "zmb_egg_notifier", 1 );
teleport_target_spark = Spawn( "script_model", teleport_target_spark.origin );
teleport_target_spark SetModel( "tag_origin" );
PlayFXOnTag( level._effect["switch_sparks"], teleport_target_spark, "tag_origin" );
level.teleport_target_trigger = Spawn( "trigger_radius", teleport_target_start.origin + (0,0,-70), 0, 125, 100 );
level.black_hole_bomb_loc_check_func = ::bhb_teleport_loc_check;
flag_wait( "target_teleported" );
teleport_target_spark Delete();
level.black_hole_bomb_loc_check_func = undefined;
level thread play_egg_vox( "vox_ann_egg1_success", "vox_gersh_egg1", 1 );
}
bhb_teleport_loc_check( grenade, model, info )
{
if( IsDefined( level.teleport_target_trigger ) && grenade IsTouching( level.teleport_target_trigger ) )
{
model SetClientFlag( level._SCRIPTMOVER_CLIENT_FLAG_BLACKHOLE );
grenade thread maps\_zombiemode_weap_black_hole_bomb::do_black_hole_bomb_sound( model, info );
level thread teleport_target( grenade, model );
return true;
}
return false;
}
teleport_target( grenade, model )
{
level.teleport_target_trigger Delete();
level.teleport_target_trigger = undefined;
wait( 1.0 );
time = 3.0;
level.teleport_target MoveTo( grenade.origin + (0,0,50), time, time - 0.05 );
wait( time );
teleport_target_end = getstruct( "teleport_target_end", "targetname" );
level.teleport_target Hide();
playsoundatposition( "zmb_gersh_teleporter_out", grenade.origin + (0,0,50) );
wait( 0.5 );
level.teleport_target.angles = teleport_target_end.angles;
level.teleport_target MoveTo( teleport_target_end.origin, 0.05 );
level.teleport_target StopLoopSound( 1 );
wait( 0.5 );
level.teleport_target Show();
PlayFXOnTag( level._effect[ "black_hole_bomb_event_horizon" ], level.teleport_target, "tag_origin" );
level.teleport_target PlaySound( "zmb_gersh_teleporter_go" );
wait( 2.0 );
model Delete();
flag_set( "target_teleported" );
}
reroute_power_event()
{
monitor = GetEnt( "casimir_monitor", "targetname" );
location = GetStruct( "casimir_monitor_struct", "targetname" );
monitor PlayLoopSound( "zmb_egg_notifier", 1 );
monitor SetModel( "p_zom_monitor_csm_screen_on" );
trig = Spawn( "trigger_radius", location.origin, 0, 32, 60 );
trig wait_for_use( monitor );
trig delete();
flag_set( "rerouted_power" );
monitor SetModel( "p_zom_monitor_csm_screen_logo" );
monitor StopLoopSound( 1 );
level thread play_egg_vox( "vox_ann_egg2_success", "vox_gersh_egg2", 2 );
level thread activate_casimir_light( 1 );
}
wait_for_use( monitor )
{
while(1)
{
self waittill( "trigger", who );
while( IsPlayer(who) && who IsTouching( self ) )
{
if( who UseButtonPressed() )
{
flag_set( "rerouted_power" );
monitor PlaySound( "zmb_comp_activate" );
return;
}
wait(.05);
}
}
}
sync_switch_event()
{
switches = GetStructArray( "sync_switch_start", "targetname" );
success = false;
while ( !flag( "switches_synced" ) )
{
flag_wait( "monkey_round" );
array_thread( switches, ::reveal_switch );
self thread switch_watcher();
level waittill_either( "between_round_over", "switches_synced" );
}
level thread play_egg_vox( "vox_ann_egg3_success", "vox_gersh_egg3", 3 );
level thread activate_casimir_light( 2 );
}
reveal_switch()
{
button = Spawn( "script_model", self.origin );
button SetModel( "p_rus_electric_switch_stop" );
button.angles = self.angles + (0,90,0);
button PlayLoopSound( "zmb_egg_notifier", 1 );
offset = AnglesToForward(self.angles) * 8;
time = 1;
button MoveTo( button.origin + offset, 1 );
wait( 1 );
if ( flag( "monkey_round" ) )
{
trig = Spawn( "trigger_radius", button.origin, 0, 32, 72 );
trig thread wait_for_sync_use( self );
level waittill_either( "between_round_over", "switches_synced" );
trig delete();
}
button StopLoopSound( 1 );
button MoveTo( self.origin, time );
wait( time );
button delete();
}
wait_for_sync_use( ss )
{
level endon( "between_round_over" );
level endon( "switches_synced" );
ss.pressed = 0;
while(1)
{
self waittill( "trigger", who );
while( IsPlayer(who) && who IsTouching( self ) )
{
if( who UseButtonPressed() )
{
level notify( "sync_button_pressed" );
playsoundatposition( "zmb_push_button", ss.origin );
ss.pressed = 1;
}
wait(.05);
}
}
}
switch_watcher()
{
level endon( "between_round_over" );
pressed = 0;
switches = GetStructArray( "sync_switch_start", "targetname" );
while (1)
{
level waittill( "sync_button_pressed" );
timeout = GetTime() + 500;
while ( GetTime() {
pressed = 0;
for ( i=0; i {
if ( IsDefined( switches[i].pressed ) && switches[i].pressed )
{
pressed++;
}
}
if ( pressed == 4 )
{
flag_set( "switches_synced" );
for ( i=0; i {
playsoundatposition( "zmb_misc_activate", switches[i].origin );
}
return;
}
wait( 0.05 );
}
switch( pressed )
{
case 1:
case 2:
case 3:
for ( i=0; i {
playsoundatposition( "zmb_deny", switches[i].origin );
}
break;
}
for ( i=0; i {
switches[i].pressed = 0;
}
}
}
pressure_plate_event()
{
area = GetStruct( "pressure_pad", "targetname" );
trig = Spawn( "trigger_radius", area.origin, 0, 300, 100 );
trig area_timer( 120 );
trig Delete();
level thread play_egg_vox( "vox_ann_egg4_success", "vox_gersh_egg4", 4 );
level thread activate_casimir_light( 3 );
}
area_timer( time )
{
clock_loc = GetStruct( "pressure_timer", "targetname" );
clock = Spawn( "script_model", clock_loc.origin );
clock SetModel( "p_rus_clock_lrg" );
clock.angles = clock_loc.angles;
clock PlayLoopSound( "zmb_egg_notifier", 1 );
timer_hand_angles_init = ( 270, 90, 0 );
timer_hand = Spawn( "script_model", clock_loc.origin + ( -1, 0, 12 ) );
timer_hand SetModel( "t5_weapon_ballistic_knife_blade" );
timer_hand.angles = timer_hand_angles_init;
step = 1.0;
while ( !flag( "pressure_sustained" ) )
{
self waittill( "trigger" );
stop_timer = false;
players = get_players();
for ( i=0; i {
if ( !players[i] IsTouching( self ) )
{
wait( step );
stop_timer = true;
}
}
if ( stop_timer )
{
continue;
}
self PlaySound( "zmb_pressure_plate_trigger" );
time_remaining = time;
timer_hand RotatePitch( 360, time );
while ( time_remaining )
{
players = get_players();
for ( i=0; i {
if ( !players[i] IsTouching( self ) )
{
wait( step );
time_remaining = time;
stop_timer = true;
timer_hand RotateTo( timer_hand_angles_init, 0.5 );
timer_hand PlaySound( "zmb_deny" );
wait( 0.5 );
break;
}
}
if ( stop_timer )
{
break;
}
wait( step );
time_remaining -= step;
timer_hand PlaySound( "zmb_egg_timer_oneshot" );
}
if ( time_remaining {
flag_set( "pressure_sustained" );
players = get_players();
temp_fx = undefined;
if ( IsDefined( players[0].fx ) )
{
temp_fx = players[0].fx;
}
timer_hand playsound( "zmb_perks_packa_ready" );
players[0].fx = level.zombie_powerups[ "nuke" ].fx;
level thread maps\_zombiemode_powerups::nuke_powerup( players[0] );
clock StopLoopSound( 1 );
wait( 1.0 );
if ( IsDefined( temp_fx ) )
{
players[0].fx = temp_fx;
}
else
{
players[0].fx = undefined;
}
clock Delete();
timer_hand Delete();
return;
}
}
}
lander_passkey_event()
{
flag_init( "letter_acquired" );
level.lander_key = [];
level.lander_key[ "lander_station1" ][ "lander_station3" ] = "s";
level.lander_key[ "lander_station1" ][ "lander_station4" ] = "r";
level.lander_key[ "lander_station1" ][ "lander_station5" ] = "e";
level.lander_key[ "lander_station3" ][ "lander_station1" ] = "y";
level.lander_key[ "lander_station3" ][ "lander_station4" ] = "a";
level.lander_key[ "lander_station3" ][ "lander_station5" ] = "i";
level.lander_key[ "lander_station4" ][ "lander_station1" ] = "m";
level.lander_key[ "lander_station4" ][ "lander_station3" ] = "h";
level.lander_key[ "lander_station4" ][ "lander_station5" ] = "u";
level.lander_key[ "lander_station5" ][ "lander_station1" ] = "t";
level.lander_key[ "lander_station5" ][ "lander_station3" ] = "n";
level.lander_key[ "lander_station5" ][ "lander_station4" ] = "l";
level.passkey = array( "l", "u", "n", "a" );
level.passkey_progress = 0;
level.secret1 = array( "h", "i", "t", "s", "a", "m" );
level.secret1_progress = 0;
level.secret2 = array( "h", "y", "e", "n", "a" );
level.secret2_progress = 0;
thread lander_monitor();
flag_wait( "passkey_confirmed" );
level.lander_audio_ent StopLoopSound( 1 );
level thread play_egg_vox( "vox_ann_egg5_success", "vox_gersh_egg5", 5 );
level thread activate_casimir_light( 4 );
wait(1);
level.lander_audio_ent Delete();
}
lander_monitor()
{
lander = getent( "lander", "targetname" );
level.lander_audio_ent = Spawn( "script_origin", lander.origin );
level.lander_audio_ent LinkTo( lander );
level.lander_audio_ent PlayLoopSound( "zmb_egg_notifier", 1 );
while ( !flag( "passkey_confirmed" ) )
{
level waittill("lander_launched");
if ( lander.called )
{
start = lander.depart_station;
dest = lander.station;
letter = level.lander_key[ start ][ dest ];
model = level.lander_letters[ letter ];
model Show();
model PlaySound( "zmb_spawn_powerup" );
model thread spin_letter();
model PlayLoopSound( "zmb_spawn_powerup_loop", .5 );
trig = Spawn( "trigger_radius", model.origin, 0, 200, 150 );
trig thread letter_grab( letter, model );
flag_wait("lander_grounded");
if ( !flag( "letter_acquired" ) )
{
level.passkey_progress = 0;
level.secret1_progress = 0;
level.secret2_progress = 0;
}
else
{
flag_clear( "letter_acquired" );
}
trig delete();
model Hide();
model StopLoopSound( .5 );
}
else
{
level.passkey_progress = 0;
level.secret1_progress = 0;
level.secret2_progress = 0;
}
}
}
spin_letter()
{
level endon( "lander_grounded" );
level endon( "letter_acquired" );
while (1)
{
self RotateYaw( 90, 5 );
wait( 5 );
}
}
letter_grab( letter, model )
{
level endon("lander_grounded");
self waittill( "trigger" );
flag_set( "letter_acquired" );
playsoundatposition("zmb_powerup_grabbed", model.origin);
model Hide();
if ( letter == level.passkey[ level.passkey_progress ] )
{
level.passkey_progress++;
if ( level.passkey_progress == level.passkey.size )
{
flag_set( "passkey_confirmed" );
}
}
else
{
level.passkey_progress = 0;
}
if ( letter == level.secret1[ level.secret1_progress ] )
{
level.secret1_progress++;
if ( level.secret1_progress == level.secret1.size )
{
}
}
else
{
level.secret1_progress = 0;
}
if ( letter == level.secret2[ level.secret2_progress ] )
{
level.secret2_progress++;
if ( level.secret2_progress == level.secret2.size )
{
}
}
else
{
level.secret2_progress = 0;
}
}
weapon_combo_event()
{
flag_init( "thundergun_hit" );
weapon_combo_spot = GetStruct( "weapon_combo_spot", "targetname" );
focal_point = Spawn( "script_model", weapon_combo_spot.origin );
focal_point SetModel( "tag_origin" );
focal_point PlayLoopSound( "zmb_egg_notifier", 1 );
fx = PlayFXOnTag( level._effect["gersh_spark"], focal_point, "tag_origin" );
level.black_hold_bomb_target_trig = Spawn( "trigger_radius", weapon_combo_spot.origin, 0, 50, 72 );
level.black_hole_bomb_loc_check_func = ::bhb_combo_loc_check;
flag_wait( "weapons_combined" );
level.black_hold_bomb_target_trig Delete();
level.black_hole_bomb_loc_check_func = undefined;
focal_point Delete();
for ( i=0; i {
level.casimir_lights[i] Delete();
}
}
bhb_combo_loc_check( grenade, model, info )
{
if ( IsDefined( level.black_hold_bomb_target_trig ) &&
grenade IsTouching( level.black_hold_bomb_target_trig ) )
{
trig = Spawn( "trigger_damage", grenade.origin, 0, 15, 72 );
grenade thread wait_for_combo( trig );
}
return false;
}
wait_for_combo( trig )
{
self endon( "death" );
self thread kill_trig_on_death( trig );
weapon_combo_spot = GetStruct( "weapon_combo_spot", "targetname" );
ray_gun_hit = false;
doll_hit = false;
crossbow_hit = false;
players = get_players();
array_thread( players, ::thundergun_check, self, trig, weapon_combo_spot );
while ( 1 )
{
trig waittill( "damage", amount, attacker, dir, org, mod );
if ( isDefined( attacker ) )
{
if ( mod == "MOD_PROJECTILE_SPLASH" && (attacker GetCurrentWeapon() == "ray_gun_upgraded_zm" ) )
{
ray_gun_hit = true;
}
else if ( mod == "MOD_GRENADE_SPLASH" )
{
if ( amount >= 90000 )
{
doll_hit = true;
}
else if ( attacker GetCurrentWeapon() == "crossbow_explosive_upgraded_zm" )
{
crossbow_hit = true;
}
}
if ( ray_gun_hit && doll_hit && flag( "thundergun_hit" ) )
{
flag_set( "weapons_combined" );
level thread soul_release( self, trig.origin );
return;
}
}
}
}
thundergun_check( model, trig, weapon_combo_spot )
{
model endon( "death" );
while (1)
{
self waittill( "weapon_fired" );
if ( self GetCurrentWeapon() == "thundergun_upgraded_zm" )
{
if ( DistanceSquared( self.origin, weapon_combo_spot.origin ) {
vector_to_spot = VectorNormalize( weapon_combo_spot.origin - self GetWeaponMuzzlePoint() );
vector_player_facing = self GetWeaponForwardDir();
angle_diff = acos( VectorDot( vector_to_spot, vector_player_facing ) );
if ( angle_diff {
flag_set( "thundergun_hit" );
RadiusDamage( trig.origin, 5, 1, 1, self );
}
}
}
}
}
kill_trig_on_death( trig )
{
self waittill( "death" );
trig delete();
if( flag( "thundergun_hit" ) && !flag( "weapons_combined" ) )
{
level thread play_egg_vox( "vox_ann_egg6p1_success", "vox_gersh_egg6_fail2", 7 );
}
else if( !flag( "weapons_combined" ) )
{
level thread play_egg_vox( undefined, "vox_gersh_egg6_fail1", 6 );
}
flag_clear( "thundergun_hit" );
}
soul_release( model, origin )
{
soul = Spawn( "script_model", origin );
soul SetModel( "tag_origin" );
soul PlayLoopSound( "zmb_egg_soul" );
fx = PlayFXOnTag( level._effect["gersh_spark"], soul, "tag_origin" );
time = 20;
model waittill( "death" );
level thread play_egg_vox( "vox_ann_egg6_success", "vox_gersh_egg6_success", 9 );
level thread wait_for_gersh_vox();
soul MoveZ( 2500, time, time - 1 );
wait( time );
soul Delete();
wait(2);
level thread samantha_is_angry();
}
wait_for_gersh_vox()
{
wait(12.5);
players = GetPlayers();
for ( i=0; i {
players[i] thread reward_wait();
}
}
reward_wait()
{
while ( !is_player_valid( self ) ||
( self UseButtonPressed() && self in_revive_trigger() ) )
{
wait( 1.0 );
}
level thread maps\_zombiemode_powerups::minigun_weapon_powerup( self, 90 );
}
play_egg_vox( ann_alias, gersh_alias, plr_num )
{
if( IsDefined( ann_alias ) )
{
level maps\zombie_cosmodrome_amb::play_cosmo_announcer_vox( ann_alias );
}
if( IsDefined( gersh_alias ) )
{
level maps\zombie_cosmodrome_amb::play_gersh_vox( gersh_alias );
}
if( IsDefined( plr_num ) )
{
players = get_players();
rand = RandomIntRange( 0, players.size );
players[rand] maps\_zombiemode_audio::create_and_play_dialog( "eggs", "gersh_response", undefined, plr_num );
}
}
samantha_is_angry()
{
playsoundatposition( "zmb_samantha_earthquake", (0,0,0) );
playsoundatposition( "zmb_samantha_whispers", (0,0,0) );
wait(6);
level clientnotify( "sia" );
playsoundatposition( "zmb_samantha_scream", (0,0,0) );
}

Have all of the code then... ;)

Link to comment

Already i want to point out a few things in the init:

teleport_target_event(); // This is the event for sucking the generator into the gurse device

reroute_power_event(); // The terminal you click on for power node activation

sync_switch_event(); // Monkey round switch event

pressure_plate_event(); // This is where you stand for the clock

lander_passkey_event(); // Sets up the passkey for the lander, such as luna

weapon_combo_event(); // The weapons hitting the gurse device by the four nodes

All the events that are being monitored have been found for the Easter egg, so i have to say it is completed. I didn't see any number that would explain how nextgentactics got stuck with only one set of weapons and reduced DM time.

Notes:

the wait_for_combo function seems to only requires each weapon to hit once: ray_gun_upgraded_zm, MOD_GRENADE_SPLASH >= 90000 for the dolls, crossbow_explosive_upgraded_zm. A flag "weapons_combined" is then set causing weapon_combo_event() to delete the casimir lights. The flag is only there to clean up the map objects such as the lights.

The flag "weapons_combined" isn't important, the fact that "level thread soul_release( self, trig.origin );" is called after the flag is set is.

So, Here is the ending of the Easter egg then:

soul_release( model, origin )

{

soul = Spawn( "script_model", origin );

soul SetModel( "tag_origin" );

soul PlayLoopSound( "zmb_egg_soul" );

fx = PlayFXOnTag( level._effect["gersh_spark"], soul, "tag_origin" );

time = 20;

model waittill( "death" );

level thread play_egg_vox( "vox_ann_egg6_success", "vox_gersh_egg6_success", 9 );

level thread wait_for_gersh_vox();

soul MoveZ( 2500, time, time - 1 );

wait( time );

soul Delete();

wait(2);

level thread samantha_is_angry();

}

soul_release -> wait_for_gersh_vox() -> reward_wait() -> DMs

In the lander_passkey_event():

No evidence that HITSAM & HYENA does anything at this time

The lander must be called, if the lander itself is activated, all progress is lost:

if ( lander.called ) {

....

}else{

level.passkey_progress = 0;

level.secret1_progress = 0;

level.secret2_progress = 0;

}

I confirm that there doesn't seem to be any use of the secret1_progress or secret2_progress at this time. (in the letter_grab function)

Functions:

init

play_easter_egg_audio( , )

activate_casimir_light(int number)

teleport_target_event() //Transformer teleport into gursh device

bhb_teleport_loc_check()

teleport_target(, )

reroute_power_event()

wait_for_use( monitor )

sync_switch_event()

reveal_switch();

wait_for_sync_use( ss )

switch_watcher()

pressure_plate_event

area_timer( time )

lander_passkey_event()

lander_monitor()

spin_letter()

letter_grab( letter, model )

weapon_combo_event()

bhb_combo_loc_check( grenade, model, info )

wait_for_combo( trig )

thundergun_check( model, trig, weapon_combo_spot )

kill_trig_on_death( trig )

soul_release( model, origin )

wait_for_gersh_vox()

reward_wait() // 90 seconds DMs

play_egg_vox( ann_alias, gersh_alias, plr_num )

samantha_is_angry()

Link to comment

As i previously stated, I believe from what I am seeing that the Easter Egg is done. However this may not be the case as I don't see any scripting referencing the radios and how they spawn. This could mean that there is more code or that the radios are apart of the map file itself and not visible to us. To follow with good practice of code organization, it would be reasonable to believe that this is all the code regarding the Easter egg and that the Easter egg is complete.

I can't verify that this is the only section of code in the game as I didn't obtain it. This means that there are most likely more Easter eggs that haven't been discovered so I hold hope that more exist, however the DMs seems to be the end of the main Easter egg.

Link to comment

Excellent dude! [brains]

I hope you don't mind, but I posted a link to your thread on my thread as a reference point for our cause. I started the thread Operation Ω, and the very first theory I posted with the thread was based around the idea of Sacrifice, or what I called Step Ω. If you have not checked it out, here is a link:

viewtopic.php?f=60&t=6464&p=66277#p66277

With the information that you have brought to us (the community and the people who are following Operation Ω), it somewhat confirms the Ω theory that was brought about in my thread. Now the only thing to do is to try it out and see how we go! I'll keep you up to date with what we have found and I thankyou kindly for your breakthrough. And don't worry, I did quote and reference you in my own thread! :)

Mallen (Ω)

Link to comment

mallen23, I see that you referenced wonderboy's theroy on your Operation Ω thread. I too another look at the code. The number 90000 only appears twice in the code. Once in the wait_for_combo function to determine if grenade splash damage is above 90000 to indicate that the dolls have been used.

The other use of 90000 is in the thundergun_check function to determine if your using the thunder gun and aiming toward the gurse device with a 10 degree angle tolerance. There are three origin values being used for this check:

self.origin: Where you are standing

weapon_combo_spot.origin: where the weapon combo spot is.

trig.origin: Value that is created in bhb_combo_loc_check and trig = Spawn( "trigger_damage", grenade.origin, 0, 15, 72 ); It is passed to wait_for_combo and wait_for_combo passes it to the thundergun_check function.

The only thing that is not known is what function RadiusDamage( trig.origin, 5, 1, 1, self ); does.

Link to comment

Woo, I love how everyone just reads the first post to enforce their idea that there's more to the easter egg with "sacrifice" and stuff, but then ignored the replies from those of us that actually understand coding and completely debunked the idea that the code holds anything new in it.

Like I stated in my previous post: The only possible new thing in that code is two sound files that may not have been heard yet, but there is no extra reward or additional step indicated.

The posters after me looked at the other parts of the code and showed how they don't add anything new either.

All this code demonstrates is what we already (should) know: The easter egg is over.

Link to comment

Woo, I love how everyone just reads the first post to enforce their idea that there's more to the easter egg with "sacrifice" and stuff, but then ignored the replies from those of us that actually understand coding and completely debunked the idea that the code holds anything new in it.

Like I stated in my previous post: The only possible new thing in that code is two sound files that may not have been heard yet, but there is no extra reward or additional step indicated.

The posters after me looked at the other parts of the code and showed how they don't add anything new either.

All this code demonstrates is what we already (should) know: The easter egg is over.

BRAVO!! WOOOO!!! *CLAPS*

I agree but, I still hold true to that there MAY be a patch to complete hitsam and hyena... and there also might not be.. Heck it could be what WAS to be there pre-release and was removed.

Anyways, lol Im glad you pointed out that some striking points were made by other people analyzing the code, that it seems relatively dead end at this present time.. and those posts were ignored completly while continuing to expound upon the hopes of what it COULD mean...

The fact is, people need to understand what has occured thus far in the easter egg and see it for what it is. Done... if there were alternative ways to continue this, then they would have already been discovered. Especially at the rate the easter egg was initially discovered and the stripping apart of the code.

Hell for all we know it's something really retarded, like.. upon finishing the rate the death machine spawns is increased.. but unfortunetly. A majority of players who play for the egg, become less entertained by the game when they find nothing post-egg and typically die / end the game shortly after to learn if any minor changes to such a possibility has occured.

Anyways... yea.. lol

Link to comment
  • 1 month later...

Just a somewhat random questions since I follow all of this stuff, but not as thoroughly as everyone else. Any who, so I know a lot of us have made our fair share of crawlers and gone to do the Easter Egg with the extended time of said crawlers life time, but are we only looking for things that we could have possibly missed during Zombie rounds? Have people tried searching for what could be missing/do what could be missing during a Monkey Round?

Aside from pressing the buttons that come out during a Monkey Round, have there been other searches for things during a lasting MR?

It sucks for someone to be the guinea pig and make the monkey chase them for the whole time while everyone, and maybe him, look for things and what not and all, but yea. It was just a random question that I personally don't know the answer to. :]:]

Link to comment

An earlier post gave all the coding for what we’ve accessed thus far (PLEASE READ VERY IMPORTANT~ I guess this is the end ): ?). I’ve been reading and re-reading this with great detail and found some great stuff. I will outline the obvious indicators we have not seen the end of this, as well as my interpretation of where we have been going wrong.

First we’ll look at the beginning and end of the code to show that our results have not produced the correct outcome (For space conservation I will not repost the entire code, see the afore mentioned post for full code).

teleport_target_event();

reroute_power_event();

sync_switch_event();

pressure_plate_event();

lander_passkey_event();

weapon_combo_event();

level notify( "help_found" ); **Note it says Help Found**

These are the list of events, and the final outcome that we should encounter if all is done correctly. However, we are all familiar with this ending.

samantha_is_angry()

{

playsoundatposition( "zmb_samantha_earthquake", (0,0,0) );

playsoundatposition( "zmb_samantha_whispers", (0,0,0) );

wait(6);

level clientnotify( "sia" ); **Note Level notify “Sam is angry” not “hp” or “help_found”**playsoundatposition( "zmb_samantha_scream", (0,0,0) ):

It becomes obvious that we have been performing the weapon combo event incorrectly. Further evidence is as follows:

kill_trig_on_death( trig )

{

self waittill( "death" );

trig delete();

if( flag( "thundergun_hit" ) && !flag( "weapons_combined" ) )

{

level thread play_egg_vox( "vox_ann_egg6p1_success", "vox_gersh_egg6_fail2", 7 );

}

else if( !flag( "weapons_combined" ) )

{

level thread play_egg_vox( undefined, "vox_gersh_egg6_fail1", 6 );

}

flag_clear( "thundergun_hit" );

}

soul_release( model, origin )

{

soul = Spawn( "script_model", origin );

soul SetModel( "tag_origin" );

soul PlayLoopSound( "zmb_egg_soul" );

fx = PlayFXOnTag( level._effect["gersh_spark"], soul, "tag_origin" );

time = 20;

model waittill( "death" );

level thread play_egg_vox( "vox_ann_egg6_success", "vox_gersh_egg6_success", 9 );

level thread wait_for_gersh_vox();

soul MoveZ( 2500, time, time - 1 );

wait( time );

soul Delete();

wait(2);

level thread samantha_is_angry();

}

wait_for_gersh_vox()

{

wait(12.5);

players = GetPlayers();

for ( i=0; i

{

players thread reward_wait();

}

}

reward_wait()

{

while ( !is_player_valid( self ) ||

( self UseButtonPressed() && self in_revive_trigger() ) )

{

wait( 1.0 );

}

level thread maps\_zombiemode_powerups::minigun_weapon_powerup( self, 90 );

}

play_egg_vox( ann_alias, gersh_alias, plr_num )

{

if( IsDefined( ann_alias ) )

{

level maps\zombie_cosmodrome_amb::play_cosmo_announcer_vox( ann_alias );

}

if( IsDefined( gersh_alias ) )

{

level maps\zombie_cosmodrome_amb::play_gersh_vox( gersh_alias );

}

if( IsDefined( plr_num ) )

{

players = get_players();

rand = RandomIntRange( 0, players.size );

players[rand] maps\_zombiemode_audio::create_and_play_dialog( "eggs", "gersh_response", undefined, plr_num );

The successful completion of this event hinges on which flags are set and how; I’m not claiming to know exactly how it is done, but these flags are crucial. Above you can see correlation between the “weapons combined” and “thundergun hit” flags and their earned responses by either Gersh or Ann. I am guessing that if certain actions were done differently the order of the code and the code itself would differ. Another significant line is the last one in that section. It says create and play dialog “eggs, gersh response, undefined, and plr_num” I believe the undefined should instead be “Ann_response”.

One more blatantly obvious code that assures us this isn’t the end is the section mentioning the player rewards. I will paste it one more time below so that I can type notes directly next to the code.

players = GetPlayers();

for ( i=0; i

{

players thread reward_wait(); **If done properly, rewards would be given soon**}

}

reward_wait()

{

while ( !is_player_valid( self ) || **Possibly “!” meaning player isn’t valid or “rewardable” **( self UseButtonPressed() && self in_revive_trigger() ) )

{

wait( 1.0 );

}

level thread maps\_zombiemode_powerups::minigun_weapon_powerup( self, 90 );

Then when the “minigun powerup” aka death machines are given, it does not mention the reward. As a matter of fact it doesn’t mention reward again at all. This also may be the “undefined” in the previous paragraph rather than “Ann_response”. It almost looks like a downed player must be holding X or use, while another player revives him.

Now I’d like to make a few suggestions based on what we’ve seen in the event code. One the player with the upgraded thundergun may have to walk directly into the black hole and then fire, or be at point blank/aiming down sights to fire. Or my favorite theory of all, walk through the black hole without ever firing the gun at all. Sounds crazy I know, but here is my logic on this:

wait_for_combo( trig )

{

self endon( "death" );

self thread kill_trig_on_death( trig );

weapon_combo_spot = GetStruct( "weapon_combo_spot", "targetname" );

ray_gun_hit = false;

doll_hit = false;

crossbow_hit = false;

players = get_players();

array_thread( players, ::thundergun_check, self, trig, weapon_combo_spot );

while ( 1 )

The array thread defines what the players need to accomplish to set/clear the correct flags. Thundergun_check sounds a lot like “withholding the power”, or keeping the gun in check. The rest of my support for the thundergun suggestions are from this part of the coding.

if ( self GetCurrentWeapon() == "thundergun_upgraded_zm" )

{

if ( DistanceSquared( self.origin, weapon_combo_spot.origin )

{

vector_to_spot = VectorNormalize( weapon_combo_spot.origin - self GetWeaponMuzzlePoint() );

vector_player_facing = self GetWeaponForwardDir();

angle_diff = acos( VectorDot( vector_to_spot, vector_player_facing ) );

if ( angle_diff

{

flag_set( "thundergun_hit" );

RadiusDamage( trig.origin, 5, 1, 1, self );

Key items are distance from origin spot must be less than 90000 (vectors?), weapon muzzle point (aiming down sights?), player/weapon facing direction with 10 degree tolerance. Perhaps the player needs to go right up next to the gersh and ADS and then walk away. Or maybe if he shots it standing this close he will be the player that goes down and will be revived making players “valid” for reward. Notice the radius damage, seems to be significant.

I’m done making suggestions as to how, I for one hate getting my hopes up with every new theory. My main goal here was to bring some attention to what the code has laid out right in front of us.

I rarely get to play with 4 people as I have a brutal work schedule, usually play solo or split screen, so please please let me know if this stuff gets tested/disproven. Clearly I have a vested interest in seeing this puzzle through.

First misleading title, the egg is finished properly the code you're looking at just trigger's the audio file for gersh.

Second good job actually going threw that massive pile of text!

Finally the reason you can't find the spawn code for the radio's is cause they code doesn't require them till they actually spawn and treyarch has a way better IT department then CoDz.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use, Privacy Policy, Code of Conduct, We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. .