Return to post
- settings
- {
- main
- {
Description: "(JS6GW)棒の先の玉テスト011 by @nakamoooooo *ボールを打つとクールタイムが発生し棒の色が薄くなるよう変更 *棒とボールの反発係数を0.7に変更 *相手のゴールのほうへボールに力を加えるとultがたまる *ult中は反発係数が1になり、移動速度とジャンプ力が50%ポイントプラス"
- Description: "(JS6GW)棒の先の玉テスト012 by @nakamoooooo *ジャンプ力が90%~180%だったのを160%~300%に変更 *ULTのジャンプ力ボーナスを+100%ポイントに変更 *空中でしゃがみキーで急降下するよう変更 *チームの最大人数を6人に変更 *ゴールした時のエフェクトを変更"
- }
- lobby
- {
- Allow Players Who Are In Queue: Yes
- Max Spectators: 12
Max Team 1 Players: 5
Max Team 2 Players: 5
- }
- modes
- {
- Team Deathmatch
- {
- Game Length In Minutes: 5
- Imbalanced Team Score To Win: On
- Score To Win: 7
- Self Initiated Respawn: Off
- enabled maps
- {
- Workshop Expanse Night
- }
- }
- General
- {
- Hero Limit: Off
- Respawn As Random Hero: On
- }
- }
- heroes
- {
- General
- {
- McCree
- {
- Flashbang Cooldown Time: 75%
- Primary Fire: Off
- Quick Melee: Off
- Secondary Fire: Off
- }
- Wrecking Ball
- {
- Roll Always Active: On
- }
- enabled heroes
- {
- McCree
- }
- }
- }
- extensions
- {
- Energy Explosion Effects
- Explosion Sounds
- Spawn More Dummy Bots
- }
- }
- variables
- {
- global:
- 0: theball
- 1: anotherball
- 2: dome_center
- 3: dome_radius
- 4: t2goal_pos
- 5: goal_radius
- 6: team_get_score
- 7: balljumppad_pos
- 8: balljumppad_radius
- 9: max_length_gap_fac_direction
- 10: max_reach
- 11: min_reach
- 12: ball_radius
- 13: vec_ball_center_offset
- 14: friction_spd_change_gnd_mpf2
- 15: max_index_of_tips
- 16: kaigyou_code
- 17: frameduration_movespeedchange
- 18: hanpatu_keisuu_normal
- 19: hanpatu_keisuu_ult
- player:
- 0: theballs_rotate_axis_ang_vel
- 1: theballs_previous_pos
- 2: theballs_delta_pos
- 3: theballs_dpos_magnitude
- 4: theballs_dpos_direction
- 5: theballs_magnus_vector
- 7: theballs_right_dir
- 8: theballs_up_dir
- 9: theballs_roll_dome_vector
- 10: tips_index
- 11: player_dmg_target
- 12: player_ray_player
- 13: player_ray_normal
- 14: player_entry_angle
- 15: player_torque_vec
- 16: player_move_vec
- 17: player_rotate_axis_ang_vel
- 18: player_ability_damage_dealt
- 19: pl_previous_fac_direction
- 20: pl_raw_gap_fac_direction
- 21: pl_maxLimited_gap_fac_direction
- 22: pl_length_of_raw_gap_fac_dir
- 23: pl_current_reach
- 24: pl_pos_of_current_tama
- 25: pl_reach_change_0kaplmi1
- 26: theballs_rod_theta_degree
- 27: theballs_rod_axis_vec_normalized
- 28: pl_delta_pos
- 29: pl_prev_pos
- 30: pl_tama_delta_pos_total
- 31: pl_tama_delta_pos_swing_onHitpos
- 32: pl_tama_delta_pos_pushpull
- 33: pl_tama_radius
- 34: LOA_pl_dir_tama_to_ball
- 35: pl_tama_is_touching_ball
- 36: theball_center_pos
- 37: pl_tama_delta_pos_total_in_LOA
- 38: pl_ball_delta_pos_in_LOA
- 39: pl_tama_and_ball_getting_close
- 40: pl_current_tama_ball_distance
- 41: pl_prev_tama_ball_distance
- 42: pl_impulse_spd_boop_ball
- 43: pl_reach_change_spd
- 44: pl_pos_tama_hit_ball
- 45: pl_distance_tamahitpos_eye
- 46: pl_reach_percent
- 47: pl_angle_radianMaxLimit_fac_dir
- 48: pl_axis_vector_fac_dir_change
- 49: pl_vec_from_eye_to_currentHitpos
- 50: pl_vec_from_eye_to_prevHitpos
- 51: is_calc_new
- 52: theballs_vec_pos_delta_gnd_roll
- 53: theballs_dir_pos_delta_gnd_roll
- 54: theballs_total_vec_deltaGndRoll
- 55: theballs_vec_fricforce_gnd
- 56: theballs_isActive
- 57: pl_tama_delta_pos_total_on_CS
- 58: bool_show_tips
- 59: pl_ball_delta_pos_total_on_CS
- 60: pl_total_vec_tama_frict_to_ball
- 61: pl_vec_fricforce_to_ball
- 62: masatuyaru
- 63: movespeedchangecount
- 64: cooltime_frames
- 65: current_hanpatsu_keisuu_bou_ball
- 66: ult_plus_percent
- 67: isUlting
- }
- subroutines
- {
- 0: stoptheball
- 2: reach_change
- 3: getSwingDeltaOnHitpos
- }
- rule("global hud and ball bot summon")
- {
- event
- {
- Ongoing - Global;
- }
- actions
- {
Create Dummy Bot(Hero(Wrecking Ball), Team 2, 5, Vector(0, 0, 0), Vector(0, 0, 0));
- Create Dummy Bot(Hero(Wrecking Ball), Team 2, 6, Vector(0, 0, 0), Vector(0, 0, 0));
- Global.theball = Last Created Entity;
Create Dummy Bot(Hero(Wrecking Ball), Team 1, 5, Vector(0, 0, 0), Vector(0, 0, 0));
- Create Dummy Bot(Hero(Wrecking Ball), Team 1, 6, Vector(0, 0, 0), Vector(0, 0, 0));
- Global.anotherball = Last Created Entity;
- Attach Players(Global.anotherball, Global.theball, Vector(0, 0, 0));
- Create HUD Text(All Players(All Teams), String("{0}:{1}", Custom String("peak"), Server Load Peak), String("{0}:{1}",
- Custom String("average"), Server Load Average), Null, Left, 0, Color(White), Color(White), Color(White), Visible To and String,
- Default Visibility);
- Global.dome_center = Vector(0, 0, 0);
- Global.dome_radius = 45;
- Create Effect(All Players(All Teams), Sphere, Color(Orange), Global.dome_center, Global.dome_radius, Visible To);
- Global.t2goal_pos = Vector(Global.dome_radius, 0, 0);
- Global.goal_radius = 7.250;
- Create Effect(All Players(All Teams), Sphere, Color(Team 2), Global.t2goal_pos, Global.goal_radius, Visible To);
- Create Effect(All Players(All Teams), Sphere, Color(Team 1), -1 * Global.t2goal_pos, Global.goal_radius, Visible To);
- Create Effect(All Players(All Teams), Sphere, Color(Team 2), Global.t2goal_pos, -0.050 + Global.goal_radius, Visible To);
- Create Effect(All Players(All Teams), Sphere, Color(Team 1), -1 * Global.t2goal_pos, -0.050 + Global.goal_radius, Visible To);
- Global.balljumppad_pos = Vector(0, 0, Global.dome_radius);
- Global.balljumppad_radius = 6;
- Create Effect(All Players(All Teams), Good Aura, Color(White), Global.balljumppad_pos, Global.balljumppad_radius, Visible To);
- Create Effect(All Players(All Teams), Good Aura, Color(White), -1 * Global.balljumppad_pos, Global.balljumppad_radius, Visible To);
- Global.max_length_gap_fac_direction = 0.100;
- Global.min_reach = 2;
- Global.max_reach = 5;
- Global.ball_radius = 0.800;
- Global.vec_ball_center_offset = Vector(0, Global.ball_radius, 0);
- Disable Built-In Game Mode Completion;
- Global.friction_spd_change_gnd_mpf2 = 0.150;
- Disable Inspector Recording;
- Global.max_index_of_tips = 4;
- Global.kaigyou_code = Custom String("\r\n");
- Global.frameduration_movespeedchange = 6;
- Global.hanpatu_keisuu_normal = 0.700;
- Global.hanpatu_keisuu_ult = 1;
- }
- }
- rule("ball bot settings")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- (Event Player == Global.theball || Event Player == Global.anotherball) == True;
- }
- actions
- {
- Set Status(Event Player, Null, Unkillable, 9999);
- }
- }
- rule("ball bot auto heal")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- (Event Player == Global.theball || Event Player == Global.anotherball) == True;
- Health(Event Player) <= 300;
- }
- actions
- {
- Heal(Event Player, Null, 400 - Health(Event Player));
- Wait(0.250, Ignore Condition);
- Loop If Condition Is True;
- }
- }
- rule("player is phased out")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Is Dummy Bot(Event Player) == False;
- Has Status(Event Player, Phased Out) == False;
- }
- actions
- {
- Set Status(Event Player, Null, Phased Out, 9999);
- }
- }
- rule("theball settings")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Global.theball == Event Player;
- Has Spawned(Event Player) == True;
- }
- actions
- {
- Event Player.theballs_rotate_axis_ang_vel = Vector(0, 0.050, 0);
- Event Player.theballs_previous_pos = Vector(0, 0, 0);
- Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 4, 0) + Position Of(Event Player), Vector(0, 4, 0) + Position Of(
- Event Player) + 5 * Event Player.theballs_rotate_axis_ang_vel, Color(White), Visible To Position and Radius);
- Create Effect(All Players(All Teams), Sphere, Color(White), Position Of(Event Player), 0.050, Visible To Position and Radius);
- Create Effect(All Players(All Teams), Light Shaft, Color(White), Vector(X Component Of(Position Of(Event Player)), 0,
- Z Component Of(Position Of(Event Player))), 0.030, Visible To Position and Radius);
- Event Player.theballs_up_dir = Up;
- Event Player.theballs_right_dir = Right;
- Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 0.800, 0) + Position Of(Event Player)
- + 2 * Event Player.theballs_right_dir, Vector(0, 0.800, 0) + Position Of(Event Player) + -2 * Event Player.theballs_right_dir,
- Color(Green), Visible To Position and Radius);
- Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 0.800, 0) + Position Of(Event Player)
- + 2 * Event Player.theballs_up_dir, Vector(0, 0.800, 0) + Position Of(Event Player) + -2 * Event Player.theballs_up_dir, Color(
- Aqua), Visible To Position and Radius);
- Event Player.theballs_delta_pos = Vector(0, 0, 0);
- Event Player.theballs_isActive = True;
- }
- }
- rule("theball motion")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Global.theball == Event Player;
- Event Player.theballs_isActive == True;
- }
- actions
- {
- Event Player.theball_center_pos = Position Of(Event Player) + Global.vec_ball_center_offset;
- Event Player.theballs_delta_pos = Position Of(Event Player) - Event Player.theballs_previous_pos;
- disabled If(True);
- If(Event Player.theballs_previous_pos != Vector(0, 0, 0));
- Event Player.theballs_dpos_magnitude = Distance Between(Vector(0, 0, 0), Event Player.theballs_delta_pos);
- Event Player.theballs_dpos_direction = Normalize(Event Player.theballs_delta_pos);
- If(Is In Air(Event Player));
- Event Player.theballs_magnus_vector = 0.250 * Cross Product(Event Player.theballs_rotate_axis_ang_vel,
- Event Player.theballs_delta_pos);
- Apply Impulse(Event Player, Event Player.theballs_magnus_vector, Absolute Value(Distance Between(Vector(0, 0, 0),
- Event Player.theballs_magnus_vector)), To World, Incorporate Contrary Motion);
- End;
- End;
- Event Player.theballs_previous_pos = Position Of(Event Player);
- If((Is On Ground(Event Player) || Y Component Of(Position Of(Event Player)) < 0) && Event Player.theballs_isActive);
- "atterutoomou"
- Event Player.theballs_dir_pos_delta_gnd_roll = Normalize(Cross Product(Event Player.theballs_rotate_axis_ang_vel, Down));
- Event Player.theballs_vec_pos_delta_gnd_roll = Event Player.theballs_dir_pos_delta_gnd_roll * Global.ball_radius * Distance Between(
- Vector(0, 0, 0), Event Player.theballs_rotate_axis_ang_vel);
- Event Player.theballs_total_vec_deltaGndRoll = Event Player.theballs_vec_pos_delta_gnd_roll + Vector(X Component Of(
- Event Player.theballs_delta_pos), 0, Z Component Of(Event Player.theballs_delta_pos));
- If(Distance Between(Vector(0, 0, 0), Event Player.theballs_total_vec_deltaGndRoll) > Global.friction_spd_change_gnd_mpf2);
- Event Player.theballs_vec_fricforce_gnd = -1 * Global.friction_spd_change_gnd_mpf2 * Normalize(
- Event Player.theballs_total_vec_deltaGndRoll);
- Else;
- Event Player.theballs_vec_fricforce_gnd = -0.500 * Distance Between(Vector(0, 0, 0), Event Player.theballs_total_vec_deltaGndRoll)
- * Normalize(Event Player.theballs_total_vec_deltaGndRoll);
- End;
- Apply Impulse(Event Player, Direction From Angles(Horizontal Angle From Direction(Event Player.theballs_vec_fricforce_gnd), 0),
- 62 * Global.friction_spd_change_gnd_mpf2, To World, Incorporate Contrary Motion);
- Event Player.theballs_rotate_axis_ang_vel = Event Player.theballs_rotate_axis_ang_vel + Distance Between(Vector(0, 0, 0),
- Event Player.theballs_vec_fricforce_gnd) / Global.ball_radius * Normalize(Cross Product(Down,
- Event Player.theballs_vec_fricforce_gnd));
- "high load"
- disabled Play Effect(All Players(All Teams), Bad Explosion, Color(Blue), Position Of(Event Player), 0.010);
- End;
- If(Distance Between(Global.dome_center, Position Of(Event Player)) > Global.dome_radius);
- Event Player.theballs_roll_dome_vector = Cross Product(Direction Towards(Global.dome_center, Position Of(Event Player)),
- Event Player.theballs_rotate_axis_ang_vel);
- Apply Impulse(Event Player, Event Player.theballs_roll_dome_vector, 1.200 * Distance Between(Vector(0, 0, 0),
- Event Player.theballs_roll_dome_vector), To World, Incorporate Contrary Motion);
- Event Player.theballs_rotate_axis_ang_vel *= 0.999 - 0.200 * Sine From Degrees(Angle Between Vectors(Direction Towards(
- Global.dome_center, Position Of(Event Player)), Event Player.theballs_rotate_axis_ang_vel));
- Play Effect(All Players(All Teams), Bad Explosion, Color(Green), 0.800 * Direction Towards(Global.dome_center, Position Of(
- Event Player)) + Vector(0, 0.800, 0) + Position Of(Event Player), 0.010);
- End;
- "axis effect rotate"
- Event Player.theballs_rod_theta_degree = 180 / 3.142 * Distance Between(Vector(0, 0, 0),
- Event Player.theballs_rotate_axis_ang_vel);
- Event Player.theballs_rod_axis_vec_normalized = Normalize(Event Player.theballs_rotate_axis_ang_vel);
- Event Player.theballs_right_dir = Event Player.theballs_right_dir * Cosine From Degrees(Event Player.theballs_rod_theta_degree) + (
- 1 - Cosine From Degrees(Event Player.theballs_rod_theta_degree)) * Dot Product(Event Player.theballs_right_dir,
- Event Player.theballs_rod_axis_vec_normalized) * Event Player.theballs_rod_axis_vec_normalized + Cross Product(
- Event Player.theballs_rod_axis_vec_normalized, Event Player.theballs_right_dir) * Sine From Degrees(
- Event Player.theballs_rod_theta_degree);
- Event Player.theballs_up_dir = Event Player.theballs_up_dir * Cosine From Degrees(Event Player.theballs_rod_theta_degree) + (
- 1 - Cosine From Degrees(Event Player.theballs_rod_theta_degree)) * Dot Product(Event Player.theballs_up_dir,
- Event Player.theballs_rod_axis_vec_normalized) * Event Player.theballs_rod_axis_vec_normalized + Cross Product(
- Event Player.theballs_rod_axis_vec_normalized, Event Player.theballs_up_dir) * Sine From Degrees(
- Event Player.theballs_rod_theta_degree);
- Wait(0.016, Ignore Condition);
- Loop;
- }
- }
- rule("player shoot ball")
- {
- event
- {
- Player Dealt Damage;
- All;
- All;
- }
- actions
- {
- Event Player.player_ability_damage_dealt = Event Ability;
- If(Event Player.player_ability_damage_dealt == Button(Ability 2));
- Call Subroutine(stoptheball);
- Apply Impulse(Global.theball, Up, 9.800, To World, Cancel Contrary Motion);
- Else If(Event Player.player_ability_damage_dealt == Button(Melee));
- Apply Impulse(Global.theball, Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Event Player)), Max(-89,
- -10 + Vertical Angle From Direction(Facing Direction Of(Event Player)))), 8, To World, Cancel Contrary Motion);
- Else;
- Event Player.player_dmg_target = Team Of(Event Player) == Team 1 ? Global.theball : Global.anotherball;
- Event Player.player_ray_player = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player)
- + 100 * Event Direction, Event Player.player_dmg_target, Null, False);
- Event Player.player_ray_normal = Ray Cast Hit Normal(Eye Position(Event Player), Eye Position(Event Player)
- + 100 * Event Direction, Event Player.player_dmg_target, Null, False);
- If(Event Player.player_ray_player == Event Player.player_dmg_target);
- Event Player.player_entry_angle = Absolute Value(Angle Between Vectors(Event Player.player_ray_normal, -1 * Event Direction));
- Event Player.player_torque_vec = Event Direction + Cosine From Degrees(Event Player.player_entry_angle)
- * Event Player.player_ray_normal;
- Event Player.player_rotate_axis_ang_vel = Event Damage * 0.020 * Cross Product(Event Player.player_ray_normal,
- Event Player.player_torque_vec);
- Event Player.player_move_vec = -1 * Cosine From Degrees(Event Player.player_entry_angle) * Event Player.player_ray_normal;
- Global.theball.theballs_rotate_axis_ang_vel += Event Player.player_rotate_axis_ang_vel;
- Apply Impulse(Global.theball, Direction From Angles(Horizontal Angle From Direction(Event Player.player_move_vec), Max(-89,
- -10 + Vertical Angle From Direction(Event Player.player_move_vec))), 0.150 * Distance Between(Vector(0, 0, 0),
- Event Player.player_move_vec) * Event Damage, To World, Incorporate Contrary Motion);
- End;
- End;
- Play Effect(Event Player, Buff Explosion Sound, Color(White), Event Player, 60);
- }
- }
- rule("player and bot")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- actions
- {
- Start Accelerating(Event Player, Direction Towards(Position Of(Event Player), Vector(0, 1, 0) + Global.dome_center),
- Distance Between(Global.dome_center, Position Of(Event Player)) > Global.dome_radius ? 100 : 0, 20, To World,
- Direction Rate and Max Speed);
- }
- }
- rule("stoptheball")
- {
- event
- {
- Subroutine;
- stoptheball;
- }
- actions
- {
- Apply Impulse(Global.theball, Up, 0.001, To World, Cancel Contrary Motion);
- Apply Impulse(Global.theball, Down, 0.001, To World, Cancel Contrary Motion);
- Apply Impulse(Global.theball, Right, 0.001, To World, Cancel Contrary Motion);
- Apply Impulse(Global.theball, Left, 0.001, To World, Cancel Contrary Motion);
- Apply Impulse(Global.theball, Backward, 0.001, To World, Cancel Contrary Motion);
- Apply Impulse(Global.theball, Forward, 0.001, To World, Cancel Contrary Motion);
- }
- }
- rule("theball goal in")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Global.theball == Event Player;
- Distance Between(Global.t2goal_pos, Vector(Absolute Value(X Component Of(Position Of(Event Player))), Y Component Of(Position Of(
- Event Player)), Z Component Of(Position Of(Event Player)))) < Global.goal_radius;
- }
- actions
- {
- Global.team_get_score = X Component Of(Position Of(Event Player)) > 0 ? Team 1 : Team 2;
- If(Is Game In Progress);
- Modify Team Score(Global.team_get_score, 1);
- End;
- Communicate(All Players(Global.team_get_score), Thanks);
- Communicate(All Players(Opposite Team Of(Global.team_get_score)), Sorry);
- Play Effect(All Players(All Teams), Good Explosion, Color(White), Event Player, 10);
- Play Effect(All Players(All Teams), DVa Self Destruct Explosion Effect, Color(White), Event Player, 15);
- Play Effect(All Players(All Teams), DVa Self Destruct Explosion Sound, Color(White), Event Player, 60);
- Wait(2, Ignore Condition);
- Call Subroutine(Sub1);
- }
- }
- rule("the ball or player step jumppad")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- (!Is Dummy Bot(Event Player) || Global.theball == Event Player) == True;
- Distance Between(Global.balljumppad_pos, Vector(X Component Of(Position Of(Event Player)), Y Component Of(Position Of(
- Event Player)), Absolute Value(Z Component Of(Position Of(Event Player))))) < Global.balljumppad_radius;
- }
- actions
- {
- Play Effect(All Players(All Teams), Ring Explosion, Color(White), Event Player, 15);
- Apply Impulse(Event Player, Vector(0, 1, Z Component Of(Position Of(Event Player)) > 0 ? -1 : 1), 17, To World,
- Cancel Contrary Motion);
- Play Effect(All Players(All Teams), Explosion Sound, Color(White), Event Player, 40);
- }
- }
- rule("reset")
- {
- event
- {
- Subroutine;
- Sub1;
- }
- actions
- {
- Global.theball.theballs_isActive = False;
- Teleport(Global.theball, Vector(0, 0, Random Real(-15, 15)));
- Call Subroutine(stoptheball);
- Global.theball.theballs_rotate_axis_ang_vel = Vector(0, 1 / 100000, 0);
- Wait(0.016, Ignore Condition);
- Teleport(Filtered Array(All Players(Team 1), !Is Dummy Bot(Current Array Element)), Vector(-0.600 * Global.dome_radius, 0, 0));
- Teleport(Filtered Array(All Players(Team 2), !Is Dummy Bot(Current Array Element)), Vector(0.600 * Global.dome_radius, 0, 0));
- Set Facing(All Players(Team 1), Direction Towards(Vector(-1 * Global.dome_radius, 0, 0), Position Of(Global.theball)), To World);
- Set Facing(All Players(Team 2), Direction Towards(Vector(Global.dome_radius, 0, 0), Position Of(Global.theball)), To World);
- }
- }
- rule("game start reset")
- {
- event
- {
- Ongoing - Global;
- }
- conditions
- {
- Is Game In Progress == True;
- }
- actions
- {
- Call Subroutine(Sub1);
- }
- }
- rule("nodummy setting")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Is Dummy Bot(Event Player) == False;
- }
- actions
- {
- disabled Create HUD Text(Event Player, Event Player.pl_raw_gap_fac_direction, Null, Null, Left, 0, Color(White), Color(White), Color(White),
- Visible To and String, Default Visibility);
- disabled Create HUD Text(Event Player, Distance Between(Vector(0, 0, 0), Event Player.pl_raw_gap_fac_direction), Null, Null, Left, 0, Color(
- White), Color(White), Color(White), Visible To and String, Default Visibility);
- disabled Create Effect(Event Player, Sphere, Color(White), Update Every Frame(Eye Position(Event Player) + 5 * (Facing Direction Of(
- Event Player) + Event Player.pl_maxLimited_gap_fac_direction)), 1, Visible To Position and Radius);
- disabled Create Effect(Event Player, Sphere, Color(Orange), Update Every Frame(Eye Position(Event Player) + 5 * (Facing Direction Of(
- Event Player) + Event Player.pl_raw_gap_fac_direction)), 1, Visible To Position and Radius);
- Event Player.pl_current_reach = 3;
- Create Effect(All Players(All Teams), Sphere, Event Player.cooltime_frames == 0 ? (Event Player.isUlting ? Color(Orange) : Color(
- Lime Green)) : Color(Gray), Update Every Frame(Eye Position(Event Player)
- + Event Player.pl_current_reach * Facing Direction Of(Event Player)), Event Player.pl_tama_radius,
- Visible To Position Radius and Color);
- Event Player.pl_tama_radius = 1;
- disabled Create HUD Text(Event Player, Event Player.pl_angle_radianMaxLimit_fac_dir, Null, Null, Left, 0, Color(Orange), Color(White),
- Color(White), Visible To and String, Default Visibility);
- Create Beam Effect(All Players(All Teams), Grapple Beam, Update Every Frame(Eye Position(Event Player) + Vector(0, -0.100, 0)
- + 0.700 * Facing Direction Of(Event Player) + 0.200 * Direction From Angles(-90 + Horizontal Angle From Direction(
- Facing Direction Of(Event Player)), 0)), Update Every Frame(Eye Position(Event Player)
- + Event Player.pl_current_reach * Facing Direction Of(Event Player)), Color(White), Visible To Position and Radius);
- Create Progress Bar HUD Text(Event Player, 100 * ((Event Player.pl_current_reach - Global.min_reach) / (
- Global.max_reach - Global.min_reach)), Custom String("ハンマーの長さ {0}m", Event Player.pl_current_reach), Top, 2, Color(Rose),
- Color(White), Values, Default Visibility);
- Create HUD Text(Event Player, Custom String("{0}:ハンマー伸ばす {1}:縮める ", Input Binding String(Button(Primary Fire)),
- Input Binding String(Button(Secondary Fire))), Null, Null, Top, 1, Color(White), Color(White), Color(White), String,
- Default Visibility);
- Create HUD Text(Event Player.bool_show_tips ? Event Player : Null, Array(Custom String("{0}でハンマーを短くすると、{2}速く移動でき、ジャンプ力も上がる。",
- Input Binding String(Button(Secondary Fire)), Null, Global.kaigyou_code), Custom String(
- "{0}でハンマーを長くすると、{2}振ったときにより強い力をボールに与える。", Input Binding String(Button(Primary Fire)), Null, Global.kaigyou_code),
- Custom String("ハンマーをゆっくり振るだけでも、{2}十分速くボールは飛ぶ。{2}振りが速すぎると当たらない仕組みなので注意。", Null, Null, Global.kaigyou_code), Custom String(
- "{0}は、ボールの動きを完全に止めたあと、{2}真上に軽く浮かせる。{2}ハンマーと組み合わせる等、{2}使い方は豊富。", Ability Icon String(Hero(McCree), Button(Ability 2)), Null,
- Global.kaigyou_code), Custom String("ジャンプや{0}での自分の移動も、{2}ボールの飛びに影響を及ぼす。{2}例えば、{1}で突きながら前へ{0}すると、{2}より強く前方への力をボールに与える。",
- Ability Icon String(Hero(McCree), Button(Ability 1)), Input Binding String(Button(Primary Fire)), Global.kaigyou_code))
- [Event Player.tips_index], Null, Custom String("{1}{1}{0}で次へ{1}{1}{2}と{1}{0}で隠す", Input Binding String(Button(Interact)),
- Global.kaigyou_code, Input Binding String(Button(Crouch))), Right, 1, Color(White), Color(White), Color(White),
- Visible To and String, Default Visibility);
- Event Player.bool_show_tips = True;
- Event Player.cooltime_frames = 0;
- Event Player.current_hanpatsu_keisuu_bou_ball = Global.hanpatu_keisuu_normal;
- Clear Status(Event Player, Burning);
- Event Player.isUlting = False;
- }
- }
- rule("notdummy loop")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Is Dummy Bot(Event Player) == False;
- }
- actions
- {
- Event Player.pl_delta_pos = Position Of(Event Player) - Event Player.pl_prev_pos;
- Event Player.pl_raw_gap_fac_direction = Facing Direction Of(Event Player) - Event Player.pl_previous_fac_direction;
- Event Player.pl_length_of_raw_gap_fac_dir = Distance Between(Vector(0, 0, 0), Event Player.pl_raw_gap_fac_direction);
- Event Player.pl_maxLimited_gap_fac_direction = Event Player.pl_length_of_raw_gap_fac_dir > Global.max_length_gap_fac_direction ? Global.max_length_gap_fac_direction / Event Player.pl_length_of_raw_gap_fac_dir * Event Player.pl_raw_gap_fac_direction : Event Player.pl_raw_gap_fac_direction;
- Call Subroutine(reach_change);
- "syoutotu junbi"
- Event Player.pl_tama_is_touching_ball = Distance Between(Event Player.pl_pos_of_current_tama, Global.theball.theball_center_pos)
- < Global.ball_radius + Event Player.pl_tama_radius;
- Event Player.pl_current_tama_ball_distance = Distance Between(Event Player.pl_pos_of_current_tama,
- Global.theball.theball_center_pos);
- Event Player.pl_tama_and_ball_getting_close = Event Player.pl_current_tama_ball_distance < Event Player.pl_prev_tama_ball_distance;
- If(Event Player.pl_tama_and_ball_getting_close && Event Player.pl_tama_is_touching_ball && Event Player.cooltime_frames == 0);
- Event Player.LOA_pl_dir_tama_to_ball = Direction Towards(Event Player.pl_pos_of_current_tama, Global.theball.theball_center_pos);
- Event Player.pl_pos_tama_hit_ball = Event Player.pl_pos_of_current_tama + Event Player.pl_tama_radius * Event Player.LOA_pl_dir_tama_to_ball;
- Event Player.pl_distance_tamahitpos_eye = Distance Between(Eye Position(Event Player), Event Player.pl_pos_tama_hit_ball);
- Call Subroutine(getSwingDeltaOnHitpos);
- Event Player.pl_tama_delta_pos_pushpull = Facing Direction Of(Event Player) * Event Player.pl_reach_change_spd;
- Event Player.pl_tama_delta_pos_total = Event Player.pl_delta_pos + Event Player.pl_tama_delta_pos_swing_onHitpos + Event Player.pl_tama_delta_pos_pushpull;
- "old sottenai"
- disabled Event Player.pl_tama_delta_pos_total_in_LOA = Cosine From Degrees(Angle Between Vectors(Event Player.pl_tama_delta_pos_total,
- Event Player.LOA_pl_dir_tama_to_ball)) * Event Player.pl_tama_delta_pos_total;
- "old sottenai"
- disabled Event Player.pl_ball_delta_pos_in_LOA = Cosine From Degrees(Angle Between Vectors(Global.theball.theballs_delta_pos,
- Event Player.LOA_pl_dir_tama_to_ball)) * Global.theball.theballs_delta_pos;
- "new sou"
- Event Player.pl_tama_delta_pos_total_in_LOA = Cosine From Degrees(Angle Between Vectors(Event Player.pl_tama_delta_pos_total,
- Event Player.LOA_pl_dir_tama_to_ball)) * Distance Between(Vector(0, 0, 0), Event Player.pl_tama_delta_pos_total)
- * Event Player.LOA_pl_dir_tama_to_ball;
- "new sou"
- Event Player.pl_ball_delta_pos_in_LOA = Cosine From Degrees(Angle Between Vectors(Global.theball.theballs_delta_pos,
- Event Player.LOA_pl_dir_tama_to_ball)) * Distance Between(Vector(0, 0, 0), Global.theball.theballs_delta_pos)
- * Event Player.LOA_pl_dir_tama_to_ball;
- Event Player.pl_impulse_spd_boop_ball = (1 + Event Player.current_hanpatsu_keisuu_bou_ball) * 62 * Distance Between(Vector(0, 0,
- 0), Event Player.pl_tama_delta_pos_total_in_LOA - Event Player.pl_ball_delta_pos_in_LOA);
- Apply Impulse(Global.theball, Direction From Angles(Horizontal Angle From Direction(Event Player.LOA_pl_dir_tama_to_ball), Max(
- -89.900, -5 + Vertical Angle From Direction(Event Player.LOA_pl_dir_tama_to_ball))), Event Player.pl_impulse_spd_boop_ball,
- To World, Incorporate Contrary Motion);
- If(Event Player.isUlting == False);
- Event Player.ult_plus_percent = 0.600 * Max(0, Event Player.pl_impulse_spd_boop_ball * Cosine From Degrees(Angle Between Vectors(
- Event Player.LOA_pl_dir_tama_to_ball, Direction Towards(Position Of(Global.theball), Vector((Team Of(Event Player)
- == Team 1 ? 1 : -1) * Global.dome_radius, 0, 0)))));
- Set Ultimate Charge(Event Player, Event Player.ult_plus_percent + Ultimate Charge Percent(Event Player));
- End;
- If(4 * Event Player.pl_impulse_spd_boop_ball > 10);
- Play Effect(All Players(All Teams), Buff Explosion Sound, Color(White), Global.theball, 4 * Event Player.pl_impulse_spd_boop_ball);
- End;
- disabled If(Event Player.masatuyaru);
- "masatu"
- Event Player.pl_tama_delta_pos_total_on_CS = Event Player.pl_tama_delta_pos_total - Event Player.pl_tama_delta_pos_total_in_LOA;
- Event Player.pl_ball_delta_pos_total_on_CS = Global.theball.theballs_delta_pos - Event Player.pl_ball_delta_pos_in_LOA + Global.ball_radius * Cross Product(
- Event Player.LOA_pl_dir_tama_to_ball * 1, Global.theball.theballs_rotate_axis_ang_vel);
- Event Player.pl_total_vec_tama_frict_to_ball = Event Player.pl_tama_delta_pos_total_on_CS - Event Player.pl_ball_delta_pos_total_on_CS;
- "old"
- disabled Event Player.pl_vec_fricforce_to_ball = 0.200 * Event Player.pl_total_vec_tama_frict_to_ball;
- "new"
- Event Player.pl_vec_fricforce_to_ball = 0.350 * Distance Between(Vector(0, 0, 0),
- Event Player.pl_tama_delta_pos_total_in_LOA - Event Player.pl_ball_delta_pos_in_LOA) * Normalize(
- Event Player.pl_total_vec_tama_frict_to_ball);
- Apply Impulse(Global.theball, Event Player.pl_vec_fricforce_to_ball, Distance Between(Vector(0, 0, 0),
- 62 * Event Player.pl_vec_fricforce_to_ball), To World, Incorporate Contrary Motion);
- Global.theball.theballs_rotate_axis_ang_vel += Distance Between(Vector(0, 0, 0), Event Player.pl_vec_fricforce_to_ball)
- / Global.ball_radius * Normalize(Cross Product(Normalize(Event Player.pl_vec_fricforce_to_ball),
- Event Player.LOA_pl_dir_tama_to_ball));
- disabled End;
- Global.theball.theballs_isActive = True;
- Event Player.cooltime_frames = 13;
- End;
- "step out"
- Event Player.pl_previous_fac_direction = Facing Direction Of(Event Player);
- Event Player.pl_prev_pos = Position Of(Event Player);
- Event Player.pl_prev_tama_ball_distance = Event Player.pl_current_tama_ball_distance;
- Event Player.cooltime_frames += Event Player.cooltime_frames == 0 ? 0 : -1;
- Wait(0.016, Ignore Condition);
- Loop;
- }
- }
- rule("reach_change")
- {
- event
- {
- Subroutine;
- reach_change;
- }
- actions
- {
- "reach change"
- Event Player.pl_reach_change_0kaplmi1 = 0;
- Event Player.pl_reach_change_0kaplmi1 += Is Button Held(Event Player, Button(Primary Fire)) ? 1 : 0;
- Event Player.pl_reach_change_0kaplmi1 += Is Button Held(Event Player, Button(Secondary Fire)) ? -1 : 0;
- If(Event Player.pl_reach_change_0kaplmi1 == 0 || False);
- Event Player.pl_reach_change_spd = 0;
- Else;
- Event Player.pl_reach_change_spd += 0.010 * Event Player.pl_reach_change_0kaplmi1;
- End;
- Event Player.pl_current_reach += Event Player.pl_reach_change_spd;
- disabled Event Player.pl_current_reach = Event Player.pl_current_reach > Global.max_reach ? Global.max_reach : Event Player.pl_current_reach;
- disabled Event Player.pl_current_reach = Event Player.pl_current_reach < Global.min_reach ? Global.min_reach : Event Player.pl_current_reach;
- If(Event Player.pl_current_reach > Global.max_reach);
- Event Player.pl_current_reach = Global.max_reach;
- Event Player.pl_reach_change_spd = 0;
- Else If(Event Player.pl_current_reach < Global.min_reach);
- Event Player.pl_current_reach = Global.min_reach;
- Event Player.pl_reach_change_spd = 0;
- End;
- Event Player.pl_pos_of_current_tama = Eye Position(Event Player) + Event Player.pl_current_reach * Facing Direction Of(
- Event Player);
- "move speed calc"
- Event Player.pl_reach_percent = 100 * ((Event Player.pl_current_reach - Global.min_reach) / (Global.max_reach - Global.min_reach));
- Event Player.movespeedchangecount += 1;
- If(Event Player.movespeedchangecount % Global.frameduration_movespeedchange == 0);
- Set Move Speed(Event Player, 130 + (Event Player.isUlting ? 50 : 0) + -0.500 * Event Player.pl_reach_percent);
Set Jump Vertical Speed(Event Player, 180 + (Event Player.isUlting ? 50 : 0) + -0.900 * Event Player.pl_reach_percent);
- Set Jump Vertical Speed(Event Player, 300 + (Event Player.isUlting ? 100 : 0) + -1.400 * Event Player.pl_reach_percent);
- End;
- }
- }
- rule("getswingdelta")
- {
- event
- {
- Subroutine;
- getSwingDeltaOnHitpos;
- }
- actions
- {
- Event Player.pl_angle_radianMaxLimit_fac_dir = Distance Between(Vector(0, 0, 0), Event Player.pl_maxLimited_gap_fac_direction);
- Event Player.pl_axis_vector_fac_dir_change = Normalize(Cross Product(Event Player.pl_previous_fac_direction, Facing Direction Of(
- Event Player)));
- Event Player.pl_vec_from_eye_to_currentHitpos = Event Player.pl_pos_tama_hit_ball - Eye Position(Event Player);
- Event Player.pl_vec_from_eye_to_prevHitpos = Event Player.pl_vec_from_eye_to_currentHitpos * Cosine From Radians(
- Event Player.pl_angle_radianMaxLimit_fac_dir) + Cross Product(Event Player.pl_axis_vector_fac_dir_change,
- Event Player.pl_vec_from_eye_to_currentHitpos) * Sine From Radians(Event Player.pl_angle_radianMaxLimit_fac_dir) + (
- 1 - Cosine From Radians(Event Player.pl_angle_radianMaxLimit_fac_dir)) * Dot Product(
- Event Player.pl_vec_from_eye_to_currentHitpos, Event Player.pl_axis_vector_fac_dir_change)
- * Event Player.pl_axis_vector_fac_dir_change;
- disabled If(Event Player.is_calc_new);
- Event Player.pl_tama_delta_pos_swing_onHitpos = Event Player.pl_vec_from_eye_to_currentHitpos - Event Player.pl_vec_from_eye_to_prevHitpos;
- disabled Else;
- "tama delta pos swing on hitpos"
- disabled Event Player.pl_tama_delta_pos_swing_onHitpos = Event Player.pl_distance_tamahitpos_eye * Event Player.pl_maxLimited_gap_fac_direction;
- disabled End;
- }
- }
- rule("interact change tips")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Is Button Held(Event Player, Button(Interact)) == True;
- }
- actions
- {
- If(Is Button Held(Event Player, Button(Crouch)) == True);
- Event Player.bool_show_tips = !Event Player.bool_show_tips;
- Abort;
- End;
- Event Player.tips_index += 1;
- If(Event Player.tips_index > Global.max_index_of_tips);
- Event Player.tips_index = 0;
- End;
- }
- }
- rule("game set")
- {
- event
- {
- Ongoing - Global;
- }
- conditions
- {
- Match Time == 0;
- Team Score(Team 1) != Team Score(Team 2);
- }
- actions
- {
- Declare Team Victory(Team Score(Team 1) > Team Score(Team 2) ? Team 1 : Team 2);
- }
- }
- disabled rule("debug crouch")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Is Crouching(Event Player) == True;
- }
- actions
- {
- Global.theball.theballs_rotate_axis_ang_vel = Facing Direction Of(Event Player);
- }
- }
- disabled rule("debug ult")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Is Button Held(Event Player, Button(Ultimate)) == True;
- }
- actions
- {
- Event Player.masatuyaru = !Event Player.masatuyaru;
- Small Message(Event Player, Event Player.masatuyaru ? Custom String("masatu ari") : Custom String("masatu nasi"));
- }
- }
- rule("player ult")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Is Using Ultimate(Event Player) == True;
- }
- actions
- {
- Cancel Primary Action(Event Player);
- Set Status(Event Player, Null, Burning, 10);
- Event Player.isUlting = True;
- Event Player.current_hanpatsu_keisuu_bou_ball = Global.hanpatu_keisuu_ult;
- Wait(10, Ignore Condition);
- Clear Status(Event Player, Burning);
- Event Player.isUlting = False;
- Event Player.current_hanpatsu_keisuu_bou_ball = Global.hanpatu_keisuu_normal;
- }
- }
- rule("player crouch button")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Is Button Held(Event Player, Button(Crouch)) == True;
- }
- actions
- {
- If(Is In Air(Event Player) && Speed Of In Direction(Event Player, Up) < 8);
- Apply Impulse(Event Player, Down, 20 - Speed Of In Direction(Event Player, Down), To World, Incorporate Contrary Motion);
- Play Effect(Event Player, Explosion Sound, Color(White), Event Player, 50);
- End;
- }
- }