----------------------------------------------------------------------------- -- settings -- ----------------------------------------------------------------------------- Print('CANDY_SCRIPT LOADED') bullet_speed = 1000 -- from code... sleep_until = 0 -- blink_mode = 0 -- last_blink = 0 last_played_sound = 0 time_between_sounds = 3 death_wait = 0 -- enhanced vision mode spawn_delay = 35 time_to_spawn = 0 shoot_num = 0 max_camo_time = 20 num_of_shoots= 3 fire_delay = 1 -- distance from player player_distance = 1000 last_hero_update = 0 next_hero_update = 0 x_aim_shoot = 0 z_aim_shoot = 0 time_between_shoots = 2 -- the current target candy walks to relays_activated = 0 target_x = 0 target_z = 0 closest_relay = 1 relay_mode = 0 last_shoot = 0 update_time = 0.3 chasing_relays = 0 modifier = 1 player_health = PlayerHealth() next_shot_delay = 25 next_shoot = 0 shoot_speed = 1 -- 3 el_dmg_amount = 0 x_shoot = 0 z_shoot = 0 -- Animation speeds walk_speed = 1.0 el_speed = 1.0 walk_fast_speed = 1.3 last_el_dmg = 0 shaky_delay = 0 shaky_memory = 2 max_shake_time = 10 shoot_time_up = 1.0 shoot_time_down = 0.6 kneel_time = 1.5 stumble_speed = 1 relay_turn_speed = 1 relay_time = 2.0 relay_dist = 150 real_dmg = 0 rx = 0 rz = 0 last_hero_pos_x,last_hero_pos_y,last_hero_pos_z = PlayerPos() relay1_target_x = 19916 relay1_target_z = 27915 relay2_target_x = 18167 relay2_target_z = 27901 relay3_target_x = 19900 relay3_target_z = 26146 relay4_target_x = 18156 relay4_target_z = 26162 relay1_position_x = 19785 -- 19701 -- 19823 relay1_position_z = 27751 -- 27684 -- 27788 relay2_position_x = 18283 -- 18358 -- 18287 relay2_position_z = 27779 -- 27702 -- 27822 relay3_position_x = 19692 -- 19697 -- 19774 relay3_position_z = 26238 -- 26354 -- 26213 relay4_position_x = 18271 -- 18370 -- 18241 relay4_position_z = 26257 -- 26357 -- 26258 current_relay_x = relay1_target_x current_relay_z = relay1_target_z -- Times for candy's actions die_time = 4 walk_time = 2 stumble_time = 2 -- Time betweeen shield does damage dmg_time = 2 -- distance to points candy shouldnt walk rotation_speed = 200 candy_start_health = 600 -- The maximum damage Candy can take before he enters normal mode again max_damage = 101 shield_range =145 -- shield_dmg_range = 290 last_health = GetHealth() -- Counters acc_damage = 0 -- Bool that keeps track if player been damaged by shield recently last_dmg = 0 -- Unactivate all relays in RWS SendMsg('HR02:StartState') SendMsg('HR03:StartState') SendMsg('HR04:StartState') SendMsg('HR05:StartState') relay_status_1 = 0 relay_status_2 = 0 relay_status_3 = 0 relay_status_4 = 0 -- ENEMIES MACHINES ETC biomechs_active = 0 bio_one_active = 0 periodic_active = 0 -- ----------------------------------- -- SOUND STUFFZ -- ----------------------------------- function ShuffleArray(soundarray,size) local a = {} for i = 1, size do a[i] = '' end for i = 1, size do random_number = mod(rand(),size)+1 while a[random_number] ~= '' do random_number = mod(rand(),size)+1 end a[random_number] = soundarray[i] end return a end candy_needle_sounds = { 'CANDYFLOSS_ANGERED_01', 'CANDYFLOSS_GENERAL_01', 'CANDYFLOSS_GENERAL_02' } candy_needle_counter = 1 function play_needle() if(candy_needle_counter == 1) then candy_needle_sounds = ShuffleArray(candy_needle_sounds,3) end PlaySound(candy_needle_sounds[candy_needle_counter]) candy_needle_counter = candy_needle_counter + 1 if(candy_needle_counter > 3) then candy_needle_counter = 1 end end candy_scream_sounds = { 'CANDYFLOSS_SCREAM_01', 'CANDYFLOSS_SCREAM_02', 'CANDYFLOSS_SCREAM_03', 'CANDYFLOSS_SCREAM_04' } candy_scream_counter = 1 function play_scream() Print('PLAY SCREAMING SOUND') if(candy_scream_counter == 1) then candy_scream_sounds = ShuffleArray(candy_scream_sounds,4) end PlaySound(candy_scream_sounds[candy_scream_counter]) candy_scream_counter = candy_scream_counter + 1 if(candy_scream_counter > 4) then candy_scream_counter = 1 end end candy_pant_sounds = { 'CANDYFLOSS_PANT_01', 'CANDYFLOSS_PANT_02', 'CANDYFLOSS_PANT_03', 'CANDYFLOSS_PANT_04' } candy_pant_counter = 1 function play_pant() if(candy_pant_counter == 1) then candy_pant_sounds = ShuffleArray(candy_pant_sounds,4) end PlaySound(candy_pant_sounds[candy_pant_counter]) candy_pant_counter = candy_pant_counter + 1 if(candy_pant_counter > 4) then candy_pant_counter = 1 end end -- candy_gasp_sounds = { 'CANDYFLOSS_GASP_01', 'CANDYFLOSS_GASP_02', 'CANDYFLOSS_GASP_03', 'CANDYFLOSS_GASP_04', 'CANDYFLOSS_GASP_05', 'CANDYFLOSS_GASP_06' } candy_gasp_counter = 1 function play_gasp() if(candy_gasp_counter == 1) then candy_gasp_sounds = ShuffleArray(candy_gasp_sounds,6) end PlaySound(candy_gasp_sounds[candy_gasp_counter]) candy_gasp_counter = candy_gasp_counter + 1 if(candy_gasp_counter > 6) then candy_gasp_counter = 1 end end candy_grunt_sounds = { 'CANDYFLOSS_GRUNT_01', 'CANDYFLOSS_GRUNT_02', 'CANDYFLOSS_GRUNT_03', 'CANDYFLOSS_GRUNT_04', 'CANDYFLOSS_GRUNT_05', 'CANDYFLOSS_GRUNT_06', 'CANDYFLOSS_GRUNT_07' } candy_grunt_counter = 1 function play_grunt() if(candy_grunt_counter == 1) then candy_grunt_sounds = ShuffleArray(candy_grunt_sounds,7) end PlaySound(candy_grunt_sounds[candy_grunt_counter]) candy_grunt_counter = candycandy_grunt_counter + 1 if(candy_grunt_counter > 7) then candy_grunt_counter = 1 end end candy_shield_back_sounds = { 'CANDYFLOSS_TAKING_DAMAGE_01', 'CANDYFLOSS_TAKING_DAMAGE_02', 'CANDYFLOSS_TAKING_DAMAGE_03', 'CANDYFLOSS_GENERAL_03', 'CANDYFLOSS_GENERAL_04', 'CANDYFLOSS_ANGERED_02' } candy_shield_back_counter = 1 function play_candy_shield_back() if(candy_shield_back_counter == 1) then candy_shield_back_sounds = ShuffleArray(candy_shield_back_sounds,6) end PlaySound(candy_shield_back_sounds[candy_shield_back_counter]) candy_shield_back_counter = candy_shield_back_counter + 1 if(candy_shield_back_counter > 6) then candy_shield_back_counter = 1 end end candy_inflicting_damage_sounds = { 'CANDYFLOSS_INFLICTING_DAMAGE_01', 'CANDYFLOSS_INFLICTING_DAMAGE_02', 'CANDYFLOSS_INFLICTING_DAMAGE_03' } inflicting_damage_sound_counter = 1 function play_inflicting_dmg() if(inflicting_damage_sound_counter == 1) then candy_inflicting_damage_sounds = ShuffleArray(candy_inflicting_damage_sounds,3) end PlaySound(candy_inflicting_damage_sounds[inflicting_damage_sound_counter]) inflicting_damage_sound_counter = inflicting_damage_sound_counter + 1 if(inflicting_damage_sound_counter > 3) then inflicting_damage_sound_counter = 1 end end ----------------------------------------------------------------------------- -- callbacks from electronic relays and EVM -- ----------------------------------------------------------------------------- function callback0() relay_status_1 = 0 end function callback1() relay_status_2 = 0 end function callback2() relay_status_3 = 0 end function callback3() relay_status_4 = 0 end function callback4() Print('Enter wait for anims\n') SetInvulnerable(1) think0 = wait_for_anims end function callback5() biomechs_active = 0 end function callback6() bio_one_active = 0 end function callback7() SetCamoMode(1) end function callback8() periodic_active = 0 end function do_wait() Print('DO WAIT\n') PlayAnimNow(0, ANM_FLOSS_SHOOT, APT_PLAY_ONCE_BACKWARDS) Print('Anim started\n') mx, my, mz = Position() think0 = state_wait think_state = think_wait SetCamoMode(2) end ----------------------------------------------------------------------------- -- states -- ----------------------------------------------------------------------------- function state_main() if(player_health > PlayerHealth() and GetTime() > last_played_sound) then play_inflicting_dmg() player_health = PlayerHealth() last_played_sound = GetTime() + time_between_sounds end px, py, pz = PlayerPos() mx, my, mz = Position() x = mx - px z = mz - pz player_distance = sqrt(x*x + z*z) check_damage() current_mode() think_state() check_relays() if(current_mode == normal_mode) then check_shield_collision() check_shake() if(GetTime() > next_hero_update) then take_hero_position() end else if(GetTime() > camo_sleep) then activate_normalmode() end end end function state_wait() Pause() end function state_idle() if (GetTime() > sleep_until) then -- Print('Sending death message, goto dead\n') SetCamoMode(2) DisableBossHealth() think0 = state_dead think_state = think_wait death_wait = GetTime() + 20 SendMsg('TR:Team24_Unload:TEAM') end Pause() end function state_in_event() if(player_health > PlayerHealth() and GetTime() > last_played_sound) then play_inflicting_dmg() player_health = PlayerHealth() last_played_sound = GetTime() + time_between_sounds end px, py, pz = PlayerPos() mx, my, mz = Position() x = mx - px z = mz - pz player_distance = sqrt(x*x + z*z) check_damage() think_state() check_relays() if(current_mode == normal_mode) then check_shield_collision() check_shake() check_crawler_spawn() if(GetTime() > next_hero_update) then take_hero_position() end else if(GetTime() > camo_sleep and think_state ~= think_kneel) then Print('ACITVATE NORMAL IN STATE_IN_EVENT\n') activate_normalmode() end end end function state_dead() -- Print('Candy dead:' .. 'biomechs_active etc =' .. biomechs_active .. '-crawler' .. bio_one_active ..'-periodic' .. periodic_active .. '\n') -- if((biomechs_active == 0 and bio_one_active == 0 and periodic_active == 0) or GetTime() > death_wait) then SendMsg(script_argument2) -- SetCamoMode(2) biomechs_active = 2 bio_one_active = 2 periodic_active = 2 -- end Pause() end ----------------------------------------------------------------------------- -- Mode functions -- ----------------------------------------------------------------------------- function normal_mode() SetCamoMode(0) if(relays_up() == 1) then -- Print('ALL RELAYS UP') -- Calc distance px, py, pz = PlayerPos() mx, my, mz = Position() dx = mx - px dz = mz - pz player_distance = sqrt(dx*dx + dz*dz) -- new attack if(think_state ~= think_shoot_seq and think_state ~= think_shoot_delay and GetTime() > next_shoot) then activate_shoot_seq() else activate_walk() end else -- Print('At least one relay down \n') find_closest_relay() activate_walktorelay() end end function camo_mode() if(acc_damage > max_damage and think_state ~= think_kneel) then Print('In camo_mode()' .. acc_damage .. '\n') activate_kneel() elseif(GetTime() > camo_sleep) then activate_normalmode() end end function state_between() think_state() check_damage() end ----------------------------------------------------------------------------- -- helper functions -- ----------------------------------------------------------------------------- function check_relays() if(current_mode == normal_mode and (relays_down() == 1)) then -- Print('check relays and activate CAMO_MODE\n') activate_camomode() end end function check_crawler_spawn() if(GetTime() > time_to_spawn) then call_on_periodic() time_to_spawn = GetTime() + spawn_delay end end function check_shield_collision() -- Print('PLAYER DIST / shield_range:' .. player_distance .. ':' .. shield_range .. '\n') if(player_distance < (shield_range + 100) and GetTime() > last_dmg) then -- Print('<<<<<<<<<<<<>>>>>>>>>>>') GivePlayerDamage(DMG_FIXED_AMOUNT, 5) last_dmg = GetTime() + dmg_time if(mod(rand(),2) == 0) then PlayLoadedSound(1) -- 1 else PlayLoadedSound(2) -- 2 end activate_back_off() end end function take_hero_position() last_hero_pos_x,last_hero_pos_y,last_hero_pos_z = PlayerPos() next_hero_update = GetTime() + update_time last_hero_update = GetTime() end function activate_back_off() think_state = think_walk_back think0 = state_in_event PlayAnimNow(0, ANM_FLOSS_WALK, APT_BLEND_THEN_PLAY_BACKWARDS, walk_speed) sleep_until = GetTime() + 2 end function relays_down() if(relay_mode == 1 and relay_status_1 == 0) then return 1 -- all down elseif(relay_mode == 2 and relay_status_1 == 0 and relay_status_2 == 0) then return 1 -- all down elseif(relay_mode == 3 and relay_status_1 == 0 and relay_status_2 == 0 and relay_status_3 == 0) then return 1 -- all down elseif(relay_mode == 4 and relay_status_1 == 0 and relay_status_2 == 0 and relay_status_3 == 0 and relay_status_4 == 0) then return 1 -- all down else return 0 -- Not all down end end function relays_up() if(relay_mode == 1 and relay_status_1 == 1) then return 1 -- all up elseif(relay_mode == 2 and relay_status_1 == 1 and relay_status_2 == 1) then return 1 -- all up elseif(relay_mode == 3 and relay_status_1 == 1 and relay_status_2 == 1 and relay_status_3 == 1) then return 1 -- all up elseif(relay_mode == 4 and relay_status_1 == 1 and relay_status_2 == 1 and relay_status_3 == 1 and relay_status_4 == 1) then return 1 -- all up else return 0 -- Not all up end end function check_damage() ----- react to damage ----- damage = GetBossDamage() real_dmg = last_health - GetHealth() last_health = GetHealth() -- Print('Damage : ' .. damage .. ' shield on' .. shield_on .. '\n') if (damage > 0 and shield_on == 1) then -- Print('hit forcefield\n') hx, hy, hz = GetHitPoint() -- particle system slot, position, at-vector and up-vector PlayParticleSystem(0, hx, hy, hz, px-mx, py-my, pz-mz, 0, 1, 0) Print('Script Position (' .. hx .. ',' .. hy .. ',' .. hz .. ')\n') if(mod(rand(),2) == 0) then PlayLoadedSound(3) -- 3 else PlayLoadedSound(4) -- 4 end elseif (real_dmg > 0) then acc_damage = acc_damage + real_dmg -- Print('ACC DMG INCREASED TO: ' .. acc_damage .. 'REAL_dmg:' .. real_dmg .. ' \n') if(acc_damage > max_damage) then Print('KNEEL ACC DMG REACHED MAX\n') activate_kneel() -- Print('check_dmg()' .. acc_damage .. ';' .. max_damage .. '\n') -- activate_normalmode() else activate_stumble() end end ----- react to death ----- if (GetHealth() <= 0) then PlayAnimNow(0, ANM_FLOSS_DIE, APT_PLAY_ONCE) DetatchParticleSystem(1) PlaySound('CANDYFLOSS_LOSING_03') sleep_until = GetTime() + die_time -- Print('health <= 0, goto idle\n') think0 = state_idle DisableBossHealth() return end end function find_closest_relay() mx, my, mz = Position() local closest_relay_dist = 5000000 if(relay_status_1 == 0) then x = mx - relay1_position_x z = mz - relay1_position_z local current_relay_dist = sqrt(x*x + z*z) local closest_relay_dist = current_relay_dist closest_relay = 1 end if(relay_status_2 == 0) then x = mx - relay2_position_x z = mz - relay2_position_z current_relay_dist = sqrt(x*x + z*z) if(closest_relay_dist > current_relay_dist) then closest_relay_dist = current_relay_dist closest_relay = 2 end end if(relay_status_3 == 0 and relay_mode > 2) then x = mx - relay3_position_x z = mz - relay3_position_z current_relay_dist = sqrt(x*x + z*z) if(closest_relay_dist > current_relay_dist) then closest_relay_dist = current_relay_dist closest_relay = 3 end end if(relay_status_4 == 0 and relay_mode > 3) then x = mx - relay4_position_x z = mz - relay4_position_z current_relay_dist = sqrt(x*x + z*z) if(closest_relay_dist > current_relay_dist) then closest_relay_dist = current_relay_dist closest_relay = 4 end end -- Print('Closest relay is:' .. closest_relay .. '\n') end function call_on_biomechs() if(biomechs_active == 0) then -- SendMsg('TR:Team24_Enable:TEAM') SendMsg('Candy:Open:LCH01') SendMsg('Candy:Open:LCH02') biomechs_active = 1 end end function call_on_one_bio() if(bio_one_active == 0) then -- SendMsg('TR:Team25_Enable:TEAM') SendMsg('Candy:Open:LCH03') bio_one_active = 1 end end function call_on_periodic() if(periodic_active == 0) then --SendMsg('TR:Team27_Enable:TEAM') SendMsg('Candy:Open:LCH04') periodic_active = 1 end end function check_shake() el_dmg_amount = GetElectricDmg() if(el_dmg_amount > 0 and think_state ~= think_shake) then -- Print('ACTIVATE_SHAKE' .. el_dmg_amount .. '\n') activate_shake() end end ----------------------------------------------------------------------------- -- ACTIVATE FUNCTIONS -- ----------------------------------------------------------------------------- function activate_walk() think_state = think_walk think0 = state_in_event PlayAnimNow(0, ANM_FLOSS_WALK, APT_BLEND_THEN_PLAY, walk_speed) sleep_until = GetTime() +walk_time end function activate_shake() -- Print('Activate shake\n') FireUtilWeapon(UTILSLOT1,UTILITYFIRE_FLOSSMACHINEGUN,0,-1) PlayAnimNow(0, ANM_FLOSS_ELECTRIFIED, APT_BLEND_THEN_PLAY,el_speed) shaky_delay = GetTime() + el_dmg_amount -- play_gasp() -- max_shaky = GetTime() + max_shake_time think_state = think_shake think0 = state_in_event end function activate_kneel() Print('ACTIVATE_KNEEL bbl \n') PlayAnimNow(0, ANM_FLOSS_ELECTRIFIED_KNEE, APT_PLAY_ONCE,el_speed) sleep_until = GetTime() + kneel_time SetInvulnerable(1) think_state = think_kneel end function think_shake() -- Should shake longer than max_shake_time --if(GetTime() > max_shaky) then -- el_dmg_amount = 0 -- activate_shoot_seq() -- GetElectricDmg() --end el_dmg_amount = GetElectricDmg() -- Print('SHAKE IT IN: ' .. el_dmg_amount .. '\n') shaky_delay = shaky_delay + (el_dmg_amount/7) if(GetTime() > shaky_delay) then el_dmg_amount = 0 shaky_delay = 0 activate_shoot_seq() end -- Print('shaking\n') end function activate_turntorelay() -- PrintState('Activate relay walk') think0 = state_in_event think_state = think_turntorelay end function activate_walktorelay() -- PrintState('Walk to relay \n') think_state = think_face_relay chasing_relays = 1 think0 = state_in_event PlayAnimNow(0, ANM_FLOSS_IDLE, APT_BLEND_THEN_PLAY, 1) end function activate_stumble() SetInvulnerable(1) PlayAnimNow(0, ANM_FLOSS_STUMBLE, APT_BLEND_THEN_PLAY_ONCE,stumble_speed) sleep_until = GetTime() + stumble_time think_state = think_stumble think0 = state_in_event end function activate_shoot_seq() start_shoot_delay = GetTime() +3 play_needle() think0 = state_in_event think_state = think_start_delay end function think_start_delay() if(GetTime() > start_shoot_delay) then activate_shooting() end end function activate_shooting() next_shoot = GetTime() + next_shot_delay think0 = state_in_event think_state = think_shoot_seq shoot_num = 0 AimAt(px,pz) end function activate_shoot() -- Print('Activate_shoot \n') PlayAnimNow(0, ANM_FLOSS_SHOOT, APT_BLEND_THEN_PLAY_ONCE,shoot_speed) -- PlaySound('CANDYFLOSS_AIM') think_state = think_shoot_delay xh,yh,zh = PlayerPos() local time_elapsed = GetTime() - last_hero_update x_shoot = ((xh - last_hero_pos_x)/(time_elapsed)*(player_distance/bullet_speed)*modifier + xh) -- Print('Last_Hero_x: ' .. last_hero_pos_x .. '\n') -- Print('Last_Hero_z: ' .. last_hero_pos_z .. '\n') z_shoot = ((zh - last_hero_pos_z)/(time_elapsed)*(player_distance/bullet_speed)*modifier + zh) -- Print('XPOS_HERO : ' .. xh .. ' ZPOS_HERO: ' .. zh .. '\n') -- Print('XPOS: ' .. x_shoot .. ' ZPOS: ' .. z_shoot .. '\n') sleep_shoot = GetTime() + shoot_time_up end function think_shoot_delay() AimAt(x_shoot,z_shoot) if(GetTime() > sleep_shoot) then PlaySound('BLOWOUT_HANDGUN_SHOT') FireUtilWeaponAt(UTILSLOT1,UTILITYFIRE_FLOSSMACHINEGUN,0,0,x_shoot,-9260,z_shoot) --, fire_delay -9269 -- Print('FIRE UTIL \n') -- Print('XPOS_HERO : ' .. xh .. ' ZPOS_HERO: ' .. zh .. '\n') -- Print('XPOS: ' .. x_shoot .. ' ZPOS: ' .. z_shoot .. '\n') last_shoot = GetTime() -- Print('Last_Shoot: ' .. last_shoot .. '\n') shoot_num = shoot_num + 1 -- think_state = think_shoot_seq think_state = think_wait_to_lower_arm sleep_paus = GetTime() + 0.4 end Pause() end function think_wait_to_lower_arm() if( GetTime() > sleep_paus) then -- Print('LOWER arm \n') PlayAnimNow(0, ANM_FLOSS_SHOOT, APT_BLEND_THEN_PLAY_ONCE_BACKWARDS,shoot_speed) think_state = think_lower sleep_shoot = GetTime() + shoot_time_down end Pause() end function think_lower() if(GetTime() > sleep_shoot) then -- Print('LOWERED ARM \n') think_state = think_shoot_seq end Pause() end function activate_normalmode() DetatchParticleSystem(1) SetHitRadius(shield_range - 1) SetCollRadius(shield_range - 1) SetInvulnerable(1) acc_damage = 0 chasing_relays = 0 activate_relays() think0 = state_between think_state = think_activate_relays delay_turn_on = GetTime() + 0.5 time_to_spawn = GetTime() + spawn_delay PlayAnimNow(0, ANM_FLOSS_IDLE, APT_BLEND_THEN_PLAY, 1) SetVisibleBlink(1) -- PrintState('activate normal done\n') end function think_activate_relays() -- if(GetTime() > last_blink) then -- if(blink_mode == 0) then -- SetCamoMode(2) -- blink_mode = 1 -- else -- SetCamoMode(0) -- blink_mode = 0 -- end -- last_blink = GetTime() + 0.1 -- end if(GetTime() > delay_turn_on) then if(relays_activated == relay_mode) then --a all relays that need to be activated is activated current_mode = normal_mode think0 = state_main relays_activated = 0 SetCamoMode(0) think_state = think_idle elseif(relays_activated == 0) then SendMsg('HR02:EnergyOn') relay_status_1 = 1 relays_activated = 1 delay_turn_on = GetTime() + 0.5 activate_shield() play_candy_shield_back() elseif(relays_activated == 1) then SendMsg('HR03:EnergyOn') relay_status_2 = 1 relays_activated = 2 delay_turn_on = GetTime() + 0.5 elseif (relays_activated == 2) then SendMsg('HR04:EnergyOn') relay_status_3 = 1 relays_activated = 3 delay_turn_on = GetTime() + 0.5 else SendMsg('HR05:EnergyOn') relay_status_4 = 1 relays_activated = 4 end end Pause() end function activate_camomode() FireUtilWeapon(UTILSLOT1,UTILITYFIRE_FLOSSMACHINEGUN,0,-1) -- PrintState('activate camo \n') PlaySound('CANDYFLOSS_ANGERED_02') -- PlaySound('CANDYFLOSS_SHIELD_OFF') SetHitRadius(110) camo_delay_start = GetTime() + 1 think_state = think_begin_camo think0 = state_between SetInVisibleBlink(1) end function think_begin_camo() -- if(GetTime() > last_blink) then -- if(blink_mode == 0) then -- SetCamoMode(2) -- blink_mode = 1 -- else -- SetCamoMode(0) -- blink_mode = 0 -- end -- last_blink = GetTime() + 0.1 -- end if(GetTime() > camo_delay_start) then shield_on = 0 SetCamoMode(2) SendMsg('ShieldDown:INFO14') SetInvulnerable(0) SetCollRadius(120) camo_sleep = GetTime() + max_camo_time PlayAnimNow(0, ANM_FLOSS_ELECTRIFIED, APT_BLEND_THEN_PLAY,el_speed) -- Put in screaming in agony sound AttachParticleSystem(1, 1, 0, 0, 0, 0, 0, 0, 1, 0) machine_delay = GetTime() + 4 think_state = think_activate_machines think0 = state_between play_scream() end Pause() end function think_activate_machines() if(GetTime() > machine_delay) then if(GetHealth() > 450) then -- Print('BEWARE CRAWLER \n') call_on_one_bio() elseif(GetHealth() > 300) then -- Print('BEWARE BIOMECHS \n') call_on_biomechs() else call_on_one_bio() call_on_biomechs() end -- play_pant() current_mode = camo_mode think_state = think_idle think0 = state_in_event play_scream() end Pause() end function activate_shield() shield_on = 1 -- PlaySound('CANDYFLOSS_SHIELD_ON') SetCamoMode(0) SetInvulnerable(1) SendMsg('ShieldUp:INFO15') end function activate_relays() if(GetHealth() > 450) then relay_mode = 1 -- Print('::::::::::::::1 ACTIVATED\n') elseif(GetHealth() > 300) then spawn_delay = 30 relay_mode = 2 -- Print(':::::::::::::::2 ACTIVATED\n') elseif(GetHealth() > 150) then spawn_delay = 25 relay_mode = 3 -- Print(':::::::::::::::3 ACTIVATED\n') else spawn_delay = 20 relay_mode = 4 -- Print(':::::::::::::::ALL 4 ACTIVATED\n') end end ----------------------------------------------------------------------------- -- think states -- ----------------------------------------------------------------------------- function think_wait() -- PlayAnimNow(0,ANM_FLOSS_SHOOT,APT_PLAY_ONCE_BACKWARDS,1) Pause() end function think_idle() x, y, z = PlayerPos() AimAt(x, z) Pause() end function think_walk() AimAt(px, pz) if (GetTime() > sleep_until) then think_state = think_idle think0 = state_main end Pause() end function think_walk_back() AimAt(px, pz) if (GetTime() > sleep_until) then think_state = think_idle think0 = state_main end Pause() end function think_face_relay() x,y,z = Position() if(closest_relay == 1) then AimAt(relay1_position_x, relay1_position_z) rx = relay1_position_x -- x rz = relay1_position_z -- z current_relay_x = relay1_target_x current_relay_z = relay1_target_z elseif(closest_relay == 2) then AimAt(relay2_position_x, relay2_position_z) rx = relay2_position_x -- x rz = relay2_position_z -- z current_relay_x = relay2_target_x current_relay_z = relay2_target_z elseif(closest_relay == 3) then AimAt(relay3_position_x, relay3_position_z) rx = relay3_position_x -- x rz = relay3_position_z -- z current_relay_x = relay3_target_x current_relay_z = relay3_target_z elseif (closest_relay == 4) then AimAt(relay4_position_x,relay4_position_z) rx = relay4_position_x -- x rz = relay4_position_z -- z current_relay_x = relay4_target_x current_relay_z = relay4_target_z end if (abs(AimAt(current_relay_x,current_relay_z)) < 0.01) then think_state = think_walk_to_relay PlayAnimNow(0, ANM_FLOSS_WALK, APT_BLEND_THEN_PLAY, walk_speed) Print('\n Walk to RELAY ' .. current_relay_x .. ' IIIIII ' .. current_relay_z .. '\n') end end function think_walk_to_relay() x,y,z = Position() distx = rx - x distz = rz - z distance = sqrt(distx*distx + distz*distz) Print('\n DISTANCE: ' .. distance .. '!') if (distance < relay_dist) then activate_turntorelay() Print('\n Turn to relay!!!') end end function think_stumble() if (GetTime() > sleep_until) then SetInvulnerable(0) PlayAnimNow(0, ANM_FLOSS_ELECTRIFIED, APT_BLEND_THEN_PLAY,el_speed) think_state = think_idle end Pause() end function think_turntorelay() if (abs(AimAt(current_relay_x,current_relay_z)) < 0.01) then PlayAnimNow(0, ANM_FLOSS_RELAY, APT_PLAY_ONCE, relay_turn_speed) think_state = think_activate_relay sleep_until = GetTime() + relay_time end Pause() end function think_activate_relay() if(GetTime() > sleep_until) then -- play_grunt() if(closest_relay == 1)then -- Print('Activate relay 1 pwns \n') SendMsg('HR02:EnergyOn') relay_status_1 = 1 elseif(closest_relay == 2) then SendMsg('HR03:EnergyOn') -- Print('Activate relay 2 \n') relay_status_2 = 1 elseif(closest_relay == 3) then SendMsg('HR04:EnergyOn') -- Print('Activate relay 3 \n') relay_status_3 = 1 else SendMsg('HR05:EnergyOn') -- Print('Activate relay 4 \n') relay_status_4 = 1 end SetCamoMode(2) think0 = state_main think_state = think_idle end Pause() end function think_shoot_seq() if(GetTime() > time_between_shoots + last_shoot) then -- Print('Numshots:' .. shoot_num .. '\n') if(shoot_num < num_of_shoots) then activate_shoot() else shoot_num = 0 if(chasing_relays == 1 and (relays_up() == 0)) then activate_walktorelay() else activate_walk() end end end AimAt(px,pz) Pause() end function think_kneel() Print('Think_kneel\n') if(GetTime() > sleep_until) then Print('Plz make me uber in normal mode\n') activate_normalmode() end Pause() end function wait_for_anims() Print('Waiting for animations') AimAt(last_hero_pos_x,last_hero_pos_z) if(AssignDynamicAnimations() == 1) then mx, my, mz = Position() SetCamoMode(0) think0 = state_main think_state = think_idle activate_normalmode() last_shoot = GetTime() EnableBossHealth() end Pause() end ------------------------------------------------------------------------- -- ------------------------------------------------------------------------- SetRotationSpeed(rotation_speed) SetHealth(candy_start_health) LoadParticleSystem(0,'Particles/Candy_Forcefield_Impact.pcf') LoadParticleSystem(1,'Particles/Shock.pcf') CreateUtilWeapon(UTILSLOT1,UTILITYWEAPON_FLOSS) -- Initialize mode think0 = state_main think_state = think_idle ShowObject(1) do_wait() LoadSound(1,'CANDYFLOSS_SHIELD_TOUCH_1') LoadSound(2,'CANDYFLOSS_SHIELD_TOUCH_2') LoadSound(3,'CANDYFLOSS_SHIELD_SHOOT_1') LoadSound(4,'CANDYFLOSS_SHIELD_SHOOT_2')