Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "(7Q6E9)2D/3D Maze 1.02 by @nakamoooooo *ビームで進路を表示するよう変更 *2dは見れる範囲をユークリッド距離2までに拡大した"
  • Description: "(7Q6E9)Maze beta 0015 by @nakamoooooo *獲得するスコアは幅と等しくなった。*クリアするたびに幅を増やすことができるようになった。workshop設定から幅の増加を設定できる。*hudを一部非表示にした *VCを追加 *開始時ゴールのほうを向くように変更"
  • }
  • lobby
  • {
  • Allow Players Who Are In Queue: Yes
  • Match Voice Chat: Enabled
  • }
  • modes
  • {
  • Deathmatch
  • {
  • Game Length In Minutes: 5
  • Score To Win: 50
  • enabled maps
  • {
  • Workshop Expanse Night
  • }
  • }
  • General
  • {
  • Game Mode Start: Immediately
  • Limit Roles: 2 Of Each Role Per Team
  • Respawn As Random Hero: On
  • }
  • }
  • heroes
  • {
  • General
  • {
  • Soldier: 76
  • {
  • Biotic Field: Off
  • Helix Rockets: Off
  • Primary Fire: Off
  • Quick Melee: Off
  • Ultimate Ability Tactical Visor: Off
  • }
  • enabled heroes
  • {
  • Soldier: 76
  • }
  • }
  • }
  • workshop
  • {
  • dimension 次元2は平面 3は立体: 3
  • game length in minutes ゲームの長さ(分): 60
  • number of rooms per line 一行あたりの部屋数: 4
  • number of rooms per line 一行あたりの部屋数: 3
  • size Increasing amount幅の増加量: 1
  • }
  • }
  • variables
  • {
  • global:
  • 0: group_num_with_room_num
  • 1: create_var0
  • 2: room_nums_have_breakable_wall
  • 3: number_of_rooms_per_line
  • 4: number_of_total_rooms
  • 5: walls_bits_with_room_num
  • 6: dimension_of_maze
  • 5: walls_4bit_with_room_num
  • 7: const_binary_num_with_digit
  • 8: i_create_beam_of_local_player
  • 9: j_create_beam_direction_iterator
  • 10: current_first_chosen_room_num
  • 11: adjacent_room_num_list
  • 12: different_group_room_num_list
  • 13: current_second_chosen_room_num
  • 14: room_num_1_2_difference
  • 15: group_num_higher
  • 16: group_num_lower
  • 17: room_num_that_has_higher_g_num
  • 18: create_maze_while_count
  • 20: width_meter_per_a_room
  • 22: pillar_radius
  • 23: wall_effect_size
  • 24: wall_effect_height
  • 26: MazeHasBeenCreated
  • 27: sizeIncreaseEveryAfterClear
  • 28: game_length_in_minutes
  • 29: array_visible_room_ofset_vec
  • 30: array_all_dirs_at_now_dimension
  • player:
  • 0: room_num_of_current_pos
  • 1: bool_player_is_out_of_maze
  • 2: center_pos_of_the_room_you_are
  • 3: current_room_xindex
  • 4: current_room_zindex
  • 5: pl_adjacent_room_list
  • 6: pl_room_list_show_wall
  • 8: I_show_wall
  • 9: xIndex_show_wall
  • 10: zIndex_show_wall
  • 11: center_pos_of_room_show_wall
  • 12: yIndex_show_wall
  • 13: room_num_of_previous_pos
  • 14: did_hit_wall
  • 15: center_pos_of_the_previous_room
  • 16: room_num_gap
  • 17: move_direction_as_bit
  • 18: is_in_goal
  • 19: current_room_yindex
  • 20: is3dwallhigh_low
  • 21: num_current_rounded_fac_dir
  • 22: array_visible_room_ofset_vec_pl
  • 23: i_get_visibles
  • }
  • subroutines
  • {
  • 0: create_maze
  • 1: listup_adjucent_room_list
  • 2: equalize_groups_of_two_rooms
  • 3: set_wall_bits
  • 4: pl_listup_adjucent_room_list
  • 5: pl_wall_hit
  • 6: playwalleffects
  • 7: get_visibles
  • }
  • disabled rule("")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • disabled Play Effect(All Players(All Teams), Ring Explosion, Color(Green), Ray Cast Hit Position(Eye Position(Event Player), Eye Position(
  • disabled Play Effect(All Players(All Teams), Ring Explosion, Green, Ray Cast Hit Position(Eye Position(Event Player), Eye Position(
  • Event Player) + Direction From Angles(Random Real(-10, 10) + Horizontal Facing Angle Of(Event Player), Random Real(-10, 10)
  • + Vertical Facing Angle Of(Event Player)) * 20, All Players(All Teams), Event Player, True), 0.100);
  • Play Effect(All Players(All Teams), Ring Explosion, Color(Purple), Position Of(Event Player), 1);
  • Play Effect(All Players(All Teams), Ring Explosion, Purple, Position Of(Event Player), 1);
  • Wait(0.400, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("var init")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Disable Built-In Game Mode Scoring;
  • Global.wall_effect_height = 0.700;
  • Global.wall_effect_size = 1.500;
  • Global.pillar_radius = 0.500;
  • Global.const_binary_num_with_digit = Array(0, 1, 2, 4, 8);
  • Global.sizeIncreaseEveryAfterClear = Workshop Setting Integer(Custom String("maze settings"), Custom String(
  • "size Increasing amount(幅の増加量)"), 1, 0, 5, 0);
  • "size Increasing amount(幅の増加量)"), 1, 0, 5);
  • Global.number_of_rooms_per_line = Workshop Setting Integer(Custom String("maze settings"), Custom String(
  • "number of rooms per line 一行あたりの部屋数"), 3, 3, 31, 0);
  • Global.dimension_of_maze = Workshop Setting Integer(Custom String("maze settings"), Custom String("dimension (次元,2は平面 3は立体)"), 2,
  • 2, 3, 0);
  • "number of rooms per line 一行あたりの部屋数"), 3, 3, 30);
  • disabled Global.create_var0 = Empty Array;
  • disabled Global.create_var0[Global.number_of_total_rooms - 1] = 0;
  • disabled Global.group_num_with_room_num = Mapped Array(Global.create_var0, Current Array Index);
  • disabled Global.room_nums_have_breakable_wall = Mapped Array(Global.create_var0, Current Array Index);
  • disabled Global.walls_bits_with_room_num = Empty Array;
  • disabled Global.walls_bits_with_room_num[Global.number_of_total_rooms - 1] = 0;
  • disabled Global.walls_4bit_with_room_num = Empty Array;
  • disabled Global.walls_4bit_with_room_num[Global.number_of_total_rooms - 1] = 0;
  • Global.width_meter_per_a_room = 4;
  • If(Global.dimension_of_maze == 2);
  • Create Effect(All Players(All Teams), Sphere, Color(White), Vector(
  • 0.500 * Global.number_of_rooms_per_line * Global.width_meter_per_a_room, 1,
  • 0.500 * Global.number_of_rooms_per_line * Global.width_meter_per_a_room), 1 / Square Root(2)
  • * Global.number_of_rooms_per_line * Global.width_meter_per_a_room, Visible To Position and Radius);
  • Create Icon(All Players(All Teams), Vector((-0.500 + Global.number_of_rooms_per_line) * Global.width_meter_per_a_room, 0, (
  • -0.500 + Global.number_of_rooms_per_line) * Global.width_meter_per_a_room), Flag, Visible To and Position, Color(Team 2),
  • True);
  • Global.array_visible_room_ofset_vec = Array(Vector(0, 0, 0), Vector(1, 0, 0), Vector(0, 0, 1), Vector(-1, 0, 0), Vector(0, 0, -1),
  • Vector(2, 0, 0), Vector(1, 0, 1), Vector(0, 0, 2), Vector(-1, 0, 1), Vector(-2, 0, 0), Vector(-1, 0, -1), Vector(0, 0, -2),
  • Vector(1, 0, -1));
  • "順番を壁の通行可能可否を表すアレとそろえておきたい"
  • Global.array_all_dirs_at_now_dimension = Array(Vector(1, 0, 0), Vector(-1, 0, 0), Vector(0, 0, 1), Vector(0, 0, -1));
  • "3d"
  • Else;
  • Create Effect(All Players(All Teams), Sphere, Color(White), Vector(
  • 0.500 * Global.number_of_rooms_per_line * Global.width_meter_per_a_room,
  • 0.500 * Global.number_of_rooms_per_line * Global.width_meter_per_a_room,
  • 0.500 * Global.number_of_rooms_per_line * Global.width_meter_per_a_room), Distance Between(Vector(0, 0, 0), Vector(
  • 0.500 * Global.number_of_rooms_per_line * Global.width_meter_per_a_room,
  • 0.500 * Global.number_of_rooms_per_line * Global.width_meter_per_a_room,
  • 0.500 * Global.number_of_rooms_per_line * Global.width_meter_per_a_room)), Visible To Position and Radius);
  • Create Icon(All Players(All Teams), Vector((-0.500 + Global.number_of_rooms_per_line) * Global.width_meter_per_a_room, (
  • -0.500 + Global.number_of_rooms_per_line) * Global.width_meter_per_a_room, (-0.500 + Global.number_of_rooms_per_line)
  • * Global.width_meter_per_a_room), Flag, Visible To and Position, Color(Team 2), True);
  • Global.array_visible_room_ofset_vec = Array(Vector(0, 0, 0), Vector(1, 0, 0), Vector(0, 0, 1), Vector(-1, 0, 0), Vector(0, 0, -1),
  • Vector(0, 1, 0), Vector(0, -1, 0));
  • "順番を壁の通行可能可否を表すアレとそろえておきたい"
  • Global.array_all_dirs_at_now_dimension = Array(Vector(1, 0, 0), Vector(-1, 0, 0), Vector(0, 0, 1), Vector(0, 0, -1), Vector(0, 1,
  • 0), Vector(0, -1, 0));
  • End;
  • Create Effect(All Players(All Teams), Sphere, White, Vector(
  • 0.500 * Global.number_of_rooms_per_line * Global.width_meter_per_a_room, 1,
  • 0.500 * Global.number_of_rooms_per_line * Global.width_meter_per_a_room), 1 / Square Root(2)
  • * Global.number_of_rooms_per_line * Global.width_meter_per_a_room, Visible To Position and Radius);
  • Create Icon(All Players(All Teams), Vector((-0.500 + Global.number_of_rooms_per_line) * Global.width_meter_per_a_room, 0, (
  • -0.500 + Global.number_of_rooms_per_line) * Global.width_meter_per_a_room), Flag, Visible To and Position, Team 2, True);
  • disabled Wait(10, Ignore Condition);
  • Big Message(All Players(All Teams), Custom String("gp"));
  • Call Subroutine(create_maze);
  • For Global Variable(i_create_beam_of_local_player, 0, Count Of(Global.array_visible_room_ofset_vec), 1);
  • For Global Variable(j_create_beam_direction_iterator, 0, Count Of(Global.array_all_dirs_at_now_dimension), 1);
  • "通行可否がまだ"
  • disabled Create Beam Effect(Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(Global.i_create_beam_of_local_player)
  • ] != Null ? Local Player : Empty Array, Good Beam,
  • Local Player.center_pos_of_the_room_you_are + Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(
  • Global.i_create_beam_of_local_player)] * Global.width_meter_per_a_room,
  • 0.500 * Global.width_meter_per_a_room * Global.array_all_dirs_at_now_dimension[Evaluate Once(
  • Global.j_create_beam_direction_iterator)
  • ] + Local Player.center_pos_of_the_room_you_are + Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(
  • Global.i_create_beam_of_local_player)] * Global.width_meter_per_a_room, Round To Integer((
  • Local Player.room_num_of_current_pos + X Component Of(Vector(0, 0, 0)) + Global.number_of_rooms_per_line * Z Component Of(
  • Vector(0, 0, 0)) + Global.number_of_rooms_per_line * Global.number_of_rooms_per_line * Y Component Of(Vector(0, 0, 0)))
  • / 2 ^ Global.j_create_beam_direction_iterator, Down) % 2 == 1 ? Color(White) : Color(Black),
  • Visible To Position Radius and Color);
  • "通行可否ができた?"
  • disabled Create Beam Effect(Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(Global.i_create_beam_of_local_player)
  • ] != Null ? Local Player : Empty Array, Good Beam,
  • Local Player.center_pos_of_the_room_you_are + Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(
  • Global.i_create_beam_of_local_player)] * Global.width_meter_per_a_room,
  • 0.500 * Global.width_meter_per_a_room * Global.array_all_dirs_at_now_dimension[Evaluate Once(
  • Global.j_create_beam_direction_iterator)
  • ] + Local Player.center_pos_of_the_room_you_are + Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(
  • Global.i_create_beam_of_local_player)] * Global.width_meter_per_a_room, Round To Integer((
  • Local Player.room_num_of_current_pos + X Component Of(Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(
  • Global.i_create_beam_of_local_player)]) + Global.number_of_rooms_per_line * Z Component Of(
  • Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(Global.i_create_beam_of_local_player)])
  • + Global.number_of_rooms_per_line * Global.number_of_rooms_per_line * Y Component Of(
  • Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(Global.i_create_beam_of_local_player)]))
  • / 2 ^ Global.j_create_beam_direction_iterator, Down) % 2 == 1 ? Color(White) : Color(Black),
  • Visible To Position Radius and Color);
  • "通行可否ができた?"
  • Create Beam Effect(Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(Global.i_create_beam_of_local_player)
  • ] != Null ? Local Player : Empty Array, Good Beam,
  • Local Player.center_pos_of_the_room_you_are + Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(
  • Global.i_create_beam_of_local_player)] * Global.width_meter_per_a_room,
  • 0.500 * Global.width_meter_per_a_room * Global.array_all_dirs_at_now_dimension[Evaluate Once(
  • Global.j_create_beam_direction_iterator)
  • ] + Local Player.center_pos_of_the_room_you_are + Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(
  • Global.i_create_beam_of_local_player)] * Global.width_meter_per_a_room, Round To Integer(
  • Global.walls_bits_with_room_num[Local Player.room_num_of_current_pos + X Component Of(
  • Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(Global.i_create_beam_of_local_player)])
  • + Global.number_of_rooms_per_line * Z Component Of(Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(
  • Global.i_create_beam_of_local_player)]) + Global.number_of_rooms_per_line * Global.number_of_rooms_per_line * Y Component Of(
  • Local Player.array_visible_room_ofset_vec_pl[Evaluate Once(Global.i_create_beam_of_local_player)])] / 2 ^ Evaluate Once(
  • Global.j_create_beam_direction_iterator), Down) % 2 == 1 ? Color(Yellow) : Color(Black), Visible To Position Radius and Color);
  • End;
  • End;
  • }
  • }
  • rule("create maze")
  • {
  • event
  • {
  • Subroutine;
  • create_maze;
  • }
  • actions
  • {
  • Global.MazeHasBeenCreated = False;
  • If(Global.dimension_of_maze == 3);
  • Global.number_of_rooms_per_line = Min(10, Global.number_of_rooms_per_line);
  • End;
  • Global.create_maze_while_count = 0;
  • Global.number_of_total_rooms = Global.number_of_rooms_per_line ^ Global.dimension_of_maze;
  • Global.number_of_total_rooms = Global.number_of_rooms_per_line ^ 2;
  • Global.create_var0 = Empty Array;
  • Global.create_var0[Global.number_of_total_rooms - 1] = 0;
  • Global.group_num_with_room_num = Mapped Array(Global.create_var0, Current Array Index);
  • Global.room_nums_have_breakable_wall = Mapped Array(Global.create_var0, Current Array Index);
  • Global.walls_bits_with_room_num = Empty Array;
  • Global.walls_bits_with_room_num[Global.number_of_total_rooms - 1] = 0;
  • Global.walls_4bit_with_room_num = Empty Array;
  • Global.walls_4bit_with_room_num[Global.number_of_total_rooms - 1] = 0;
  • While(Is True For Any(Global.group_num_with_room_num, Current Array Element > 0));
  • disabled While(Count Of(Global.room_nums_have_breakable_wall) > 0);
  • Global.current_first_chosen_room_num = Random Value In Array(Global.room_nums_have_breakable_wall);
  • Call Subroutine(listup_adjucent_room_list);
  • Global.different_group_room_num_list = Filtered Array(Global.adjacent_room_num_list,
  • Global.group_num_with_room_num[Global.current_first_chosen_room_num] != Global.group_num_with_room_num[Current Array Element]);
  • If(Count Of(Global.different_group_room_num_list) > 0);
  • Global.current_second_chosen_room_num = Random Value In Array(Global.different_group_room_num_list);
  • Call Subroutine(equalize_groups_of_two_rooms);
  • Call Subroutine(set_wall_bits);
  • Else;
  • Modify Global Variable(room_nums_have_breakable_wall, Remove From Array By Value, Global.current_first_chosen_room_num);
  • End;
  • Global.create_maze_while_count += 1;
  • If(Global.create_maze_while_count % 2 == 1);
  • Wait(0.016, Ignore Condition);
  • End;
  • Wait(0.016, Ignore Condition);
  • End;
  • Small Message(All Players(All Teams), Custom String("complete"));
  • Global.MazeHasBeenCreated = True;
  • }
  • }
  • rule("listup adjucent_room_list")
  • {
  • event
  • {
  • Subroutine;
  • listup_adjucent_room_list;
  • }
  • actions
  • {
  • Global.adjacent_room_num_list = Empty Array;
  • If(Global.dimension_of_maze == 2);
  • "右端じゃない"
  • If(Global.current_first_chosen_room_num % Global.number_of_rooms_per_line != 0);
  • Modify Global Variable(adjacent_room_num_list, Append To Array, Global.current_first_chosen_room_num - 1);
  • End;
  • "左端じゃない"
  • If(Global.current_first_chosen_room_num % Global.number_of_rooms_per_line != Global.number_of_rooms_per_line - 1);
  • Modify Global Variable(adjacent_room_num_list, Append To Array, Global.current_first_chosen_room_num + 1);
  • End;
  • "下端じゃない"
  • If(Global.current_first_chosen_room_num >= Global.number_of_rooms_per_line);
  • Modify Global Variable(adjacent_room_num_list, Append To Array,
  • Global.current_first_chosen_room_num - Global.number_of_rooms_per_line);
  • End;
  • "上端じゃない"
  • If(Global.number_of_total_rooms - Global.number_of_rooms_per_line > Global.current_first_chosen_room_num);
  • Modify Global Variable(adjacent_room_num_list, Append To Array,
  • Global.current_first_chosen_room_num + Global.number_of_rooms_per_line);
  • End;
  • "3d"
  • Else;
  • "右端じゃない"
  • If(Global.current_first_chosen_room_num % Global.number_of_rooms_per_line != 0);
  • Modify Global Variable(adjacent_room_num_list, Append To Array, Global.current_first_chosen_room_num - 1);
  • End;
  • "左端じゃない"
  • If(Global.current_first_chosen_room_num % Global.number_of_rooms_per_line != Global.number_of_rooms_per_line - 1);
  • Modify Global Variable(adjacent_room_num_list, Append To Array, Global.current_first_chosen_room_num + 1);
  • End;
  • "手前端じゃない"
  • If(Global.current_first_chosen_room_num % Global.number_of_rooms_per_line ^ 2 >= Global.number_of_rooms_per_line);
  • Modify Global Variable(adjacent_room_num_list, Append To Array,
  • Global.current_first_chosen_room_num - Global.number_of_rooms_per_line);
  • End;
  • "奥端じゃない"
  • If((Global.number_of_rooms_per_line + Global.current_first_chosen_room_num)
  • % Global.number_of_rooms_per_line ^ 2 >= Global.number_of_rooms_per_line);
  • Modify Global Variable(adjacent_room_num_list, Append To Array,
  • Global.current_first_chosen_room_num + Global.number_of_rooms_per_line);
  • End;
  • "低端じゃない"
  • If(Global.current_first_chosen_room_num >= Global.number_of_rooms_per_line ^ 2);
  • Modify Global Variable(adjacent_room_num_list, Append To Array,
  • Global.current_first_chosen_room_num - Global.number_of_rooms_per_line ^ 2);
  • End;
  • "高端じゃない"
  • If(Global.current_first_chosen_room_num < (Global.number_of_rooms_per_line - 1) * Global.number_of_rooms_per_line ^ 2);
  • Modify Global Variable(adjacent_room_num_list, Append To Array,
  • Global.current_first_chosen_room_num + Global.number_of_rooms_per_line ^ 2);
  • End;
  • "右端じゃない"
  • If(Global.current_first_chosen_room_num % Global.number_of_rooms_per_line != 0);
  • Modify Global Variable(adjacent_room_num_list, Append To Array, Global.current_first_chosen_room_num - 1);
  • End;
  • "左端じゃない"
  • If(Global.current_first_chosen_room_num % Global.number_of_rooms_per_line != Global.number_of_rooms_per_line - 1);
  • Modify Global Variable(adjacent_room_num_list, Append To Array, Global.current_first_chosen_room_num + 1);
  • End;
  • "下端じゃない"
  • If(Global.current_first_chosen_room_num >= Global.number_of_rooms_per_line);
  • Modify Global Variable(adjacent_room_num_list, Append To Array,
  • Global.current_first_chosen_room_num - Global.number_of_rooms_per_line);
  • End;
  • "上端じゃない"
  • If(Global.number_of_total_rooms - Global.number_of_rooms_per_line > Global.current_first_chosen_room_num);
  • Modify Global Variable(adjacent_room_num_list, Append To Array,
  • Global.current_first_chosen_room_num + Global.number_of_rooms_per_line);
  • End;
  • }
  • }
  • rule("equalize group two rooms")
  • {
  • event
  • {
  • Subroutine;
  • equalize_groups_of_two_rooms;
  • }
  • actions
  • {
  • Global.group_num_higher = Max(Global.group_num_with_room_num[Global.current_first_chosen_room_num],
  • Global.group_num_with_room_num[Global.current_second_chosen_room_num]);
  • Global.group_num_lower = Min(Global.group_num_with_room_num[Global.current_first_chosen_room_num],
  • Global.group_num_with_room_num[Global.current_second_chosen_room_num]);
  • disabled If(
  • Global.group_num_with_room_num[Global.current_first_chosen_room_num] > Global.group_num_with_room_num[Global.current_second_chosen_room_num]);
  • disabled Global.group_num_with_room_num[Global.current_first_chosen_room_num] = Global.group_num_with_room_num[Global.current_second_chosen_room_num];
  • disabled Else;
  • disabled Global.group_num_with_room_num[Global.current_second_chosen_room_num] = Global.group_num_with_room_num[Global.current_first_chosen_room_num];
  • disabled End;
  • While(True);
  • Global.room_num_that_has_higher_g_num = Index Of Array Value(Global.group_num_with_room_num, Global.group_num_higher);
  • If(Global.room_num_that_has_higher_g_num > -1);
  • Global.group_num_with_room_num[Global.room_num_that_has_higher_g_num] = Global.group_num_lower;
  • Else;
  • Break;
  • End;
  • End;
  • }
  • }
  • rule("set wall bits")
  • {
  • event
  • {
  • Subroutine;
  • set_wall_bits;
  • }
  • actions
  • {
  • Global.room_num_1_2_difference = Global.current_first_chosen_room_num - Global.current_second_chosen_room_num;
  • "firstの左にsecond"
  • If(Global.room_num_1_2_difference == -1);
  • Global.walls_bits_with_room_num[Global.current_first_chosen_room_num] += 1;
  • Global.walls_bits_with_room_num[Global.current_second_chosen_room_num] += 2;
  • Global.walls_4bit_with_room_num[Global.current_first_chosen_room_num] += 1;
  • Global.walls_4bit_with_room_num[Global.current_second_chosen_room_num] += 2;
  • "firstの右にsecond"
  • Else If(Global.room_num_1_2_difference == 1);
  • Global.walls_bits_with_room_num[Global.current_first_chosen_room_num] += 2;
  • Global.walls_bits_with_room_num[Global.current_second_chosen_room_num] += 1;
  • "firstの奥にsecond"
  • Global.walls_4bit_with_room_num[Global.current_first_chosen_room_num] += 2;
  • Global.walls_4bit_with_room_num[Global.current_second_chosen_room_num] += 1;
  • "firstの上にsecond"
  • Else If(Global.room_num_1_2_difference == -1 * Global.number_of_rooms_per_line);
  • Global.walls_bits_with_room_num[Global.current_first_chosen_room_num] += 4;
  • Global.walls_bits_with_room_num[Global.current_second_chosen_room_num] += 8;
  • "firstの手前にsecond"
  • Global.walls_4bit_with_room_num[Global.current_first_chosen_room_num] += 4;
  • Global.walls_4bit_with_room_num[Global.current_second_chosen_room_num] += 8;
  • "firstの下にsecond"
  • Else If(Global.room_num_1_2_difference == 1 * Global.number_of_rooms_per_line);
  • Global.walls_bits_with_room_num[Global.current_first_chosen_room_num] += 8;
  • Global.walls_bits_with_room_num[Global.current_second_chosen_room_num] += 4;
  • End;
  • "only 3d"
  • If(Global.dimension_of_maze == 3);
  • "firstの上にsecond"
  • If(Global.room_num_1_2_difference == -1 * Global.number_of_rooms_per_line ^ 2);
  • Global.walls_bits_with_room_num[Global.current_first_chosen_room_num] += 16;
  • Global.walls_bits_with_room_num[Global.current_second_chosen_room_num] += 32;
  • "firstの下にsecond"
  • Else If(Global.room_num_1_2_difference == 1 * Global.number_of_rooms_per_line ^ 2);
  • Global.walls_bits_with_room_num[Global.current_first_chosen_room_num] += 32;
  • Global.walls_bits_with_room_num[Global.current_second_chosen_room_num] += 16;
  • End;
  • Global.walls_4bit_with_room_num[Global.current_first_chosen_room_num] += 8;
  • Global.walls_4bit_with_room_num[Global.current_second_chosen_room_num] += 4;
  • End;
  • }
  • }
  • rule("hud")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Create HUD Text(All Players(All Teams), String("{0} - {1} - {2}", Server Load, Server Load Average, Server Load Peak), Null, Null,
  • Right, 0, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Right, 0, White, White, White, Visible To and String, Default Visibility);
  • }
  • }
  • rule("player set")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Event Player.is3dwallhigh_low = True;
  • disabled Create HUD Text(Event Player, Position Of(Event Player), Null, Null, Top, 0, White, White, White, Visible To and String,
  • Default Visibility);
  • disabled Create HUD Text(Event Player, Event Player.room_num_of_current_pos, Null, Null, Top, 0, White, White, White, Visible To and String,
  • Default Visibility);
  • Create Effect(Event Player, Orb, Green, Event Player.center_pos_of_the_room_you_are + Vector(0.500 * Global.width_meter_per_a_room,
  • Global.wall_effect_height, 0.500 * Global.width_meter_per_a_room), Global.pillar_radius, Position and Radius);
  • Create Effect(Event Player, Orb, Green, Event Player.center_pos_of_the_room_you_are + Vector(0.500 * Global.width_meter_per_a_room,
  • Global.wall_effect_height, -0.500 * Global.width_meter_per_a_room), Global.pillar_radius, Position and Radius);
  • Create Effect(Event Player, Orb, Green, Event Player.center_pos_of_the_room_you_are + Vector(
  • -0.500 * Global.width_meter_per_a_room, Global.wall_effect_height, -0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • Create Effect(Event Player, Orb, Green, Event Player.center_pos_of_the_room_you_are + Vector(
  • -0.500 * Global.width_meter_per_a_room, Global.wall_effect_height, 0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • Disable Movement Collision With Players(Event Player);
  • Set Gravity(Event Player, Global.dimension_of_maze == 2 ? 100 : 0);
  • If(Global.dimension_of_maze == 2);
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • 0.500 * Global.width_meter_per_a_room, Global.wall_effect_height, 0.500 * Global.width_meter_per_a_room), Global.pillar_radius,
  • Position and Radius);
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • 0.500 * Global.width_meter_per_a_room, Global.wall_effect_height, -0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • -0.500 * Global.width_meter_per_a_room, Global.wall_effect_height, -0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • -0.500 * Global.width_meter_per_a_room, Global.wall_effect_height, 0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • Else;
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • 0.500 * Global.width_meter_per_a_room, -0.500 * Global.width_meter_per_a_room, 0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • 0.500 * Global.width_meter_per_a_room, -0.500 * Global.width_meter_per_a_room, -0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • -0.500 * Global.width_meter_per_a_room, -0.500 * Global.width_meter_per_a_room, -0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • -0.500 * Global.width_meter_per_a_room, -0.500 * Global.width_meter_per_a_room, 0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • 0.500 * Global.width_meter_per_a_room, 0.500 * Global.width_meter_per_a_room, 0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • 0.500 * Global.width_meter_per_a_room, 0.500 * Global.width_meter_per_a_room, -0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • -0.500 * Global.width_meter_per_a_room, 0.500 * Global.width_meter_per_a_room, -0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • disabled Create Effect(Event Player, Orb, Color(Green), Event Player.center_pos_of_the_room_you_are + Vector(
  • -0.500 * Global.width_meter_per_a_room, 0.500 * Global.width_meter_per_a_room, 0.500 * Global.width_meter_per_a_room),
  • Global.pillar_radius, Position and Radius);
  • disabled Create Beam Effect(Round To Integer(Global.walls_bits_with_room_num[Event Player.room_num_of_current_pos] / 1, Down)
  • % 2 == 1 ? Event Player : Null, Grapple Beam, Event Player.center_pos_of_the_room_you_are,
  • Event Player.center_pos_of_the_room_you_are + Global.width_meter_per_a_room * Left, Color(White),
  • Visible To Position and Radius);
  • disabled Create Beam Effect(Round To Integer(Global.walls_bits_with_room_num[Event Player.room_num_of_current_pos] / 2, Down)
  • % 2 == 1 ? Event Player : Null, Grapple Beam, Event Player.center_pos_of_the_room_you_are,
  • Event Player.center_pos_of_the_room_you_are + Global.width_meter_per_a_room * Right, Color(White),
  • Visible To Position and Radius);
  • disabled Create Beam Effect(Round To Integer(Global.walls_bits_with_room_num[Event Player.room_num_of_current_pos] / 4, Down)
  • % 2 == 1 ? Event Player : Null, Grapple Beam, Event Player.center_pos_of_the_room_you_are,
  • Event Player.center_pos_of_the_room_you_are + Global.width_meter_per_a_room * Forward, Color(White),
  • Visible To Position and Radius);
  • disabled Create Beam Effect(Round To Integer(Global.walls_bits_with_room_num[Event Player.room_num_of_current_pos] / 8, Down)
  • % 2 == 1 ? Event Player : Null, Grapple Beam, Event Player.center_pos_of_the_room_you_are,
  • Event Player.center_pos_of_the_room_you_are + Global.width_meter_per_a_room * Backward, Color(White),
  • Visible To Position and Radius);
  • disabled Create Beam Effect(Round To Integer(Global.walls_bits_with_room_num[Event Player.room_num_of_current_pos] / 16, Down)
  • % 2 == 1 ? Event Player : Null, Grapple Beam, Event Player.center_pos_of_the_room_you_are,
  • Event Player.center_pos_of_the_room_you_are + Global.width_meter_per_a_room * Vector(0.001, 1, 0), Color(White),
  • Visible To Position and Radius);
  • disabled Create Beam Effect(Round To Integer(Global.walls_bits_with_room_num[Event Player.room_num_of_current_pos] / 32, Down)
  • % 2 == 1 ? Event Player : Null, Grapple Beam, Event Player.center_pos_of_the_room_you_are,
  • Event Player.center_pos_of_the_room_you_are + Global.width_meter_per_a_room * Vector(-0.001, -1, 0), Color(White),
  • Visible To Position and Radius);
  • Start Scaling Player(Event Player, 0.100, False);
  • End;
  • }
  • }
  • rule("player ongoing")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MazeHasBeenCreated == True;
  • Event Player.is_in_goal == False;
  • }
  • actions
  • {
  • Event Player.bool_player_is_out_of_maze[0] = X Component Of(Position Of(Event Player))
  • > Global.width_meter_per_a_room * Global.number_of_rooms_per_line;
  • Event Player.bool_player_is_out_of_maze[1] = X Component Of(Position Of(Event Player)) < 0;
  • Event Player.bool_player_is_out_of_maze[2] = Z Component Of(Position Of(Event Player))
  • > Global.width_meter_per_a_room * Global.number_of_rooms_per_line;
  • Event Player.bool_player_is_out_of_maze[3] = Z Component Of(Position Of(Event Player)) < 0;
  • If(Global.dimension_of_maze == 3);
  • Event Player.bool_player_is_out_of_maze[4] = Y Component Of(Position Of(Event Player))
  • > Global.width_meter_per_a_room * Global.number_of_rooms_per_line;
  • Event Player.bool_player_is_out_of_maze[5] = Y Component Of(Position Of(Event Player)) < 0;
  • End;
  • If(Is True For Any(Event Player.bool_player_is_out_of_maze, Current Array Element == True));
  • Event Player.room_num_of_current_pos = -1;
  • Else;
  • Event Player.current_room_xindex = Round To Integer(X Component Of(Position Of(Event Player)) / Global.width_meter_per_a_room,
  • Down);
  • Event Player.current_room_zindex = 1 * Round To Integer(Z Component Of(Position Of(Event Player)) / Global.width_meter_per_a_room,
  • Down);
  • Event Player.current_room_yindex = Round To Integer(Y Component Of(Position Of(Event Player)) / Global.width_meter_per_a_room,
  • Down);
  • If(Global.dimension_of_maze == 2);
  • Event Player.room_num_of_current_pos = Event Player.current_room_xindex + Global.number_of_rooms_per_line * Event Player.current_room_zindex;
  • "3d"
  • Else;
  • Event Player.room_num_of_current_pos = Event Player.current_room_xindex + Event Player.current_room_zindex * Global.number_of_rooms_per_line + Event Player.current_room_yindex * Global.number_of_rooms_per_line ^ 2;
  • End;
  • Event Player.room_num_of_current_pos = Event Player.current_room_xindex + Global.number_of_rooms_per_line * Event Player.current_room_zindex;
  • Call Subroutine(pl_listup_adjucent_room_list);
  • Event Player.pl_room_list_show_wall = Append To Array(Event Player.pl_adjacent_room_list, Event Player.room_num_of_current_pos);
  • "3dで特定方向の壁だけが表示されづらくなるのを防ぐ"
  • Event Player.pl_room_list_show_wall = Randomized Array(Event Player.pl_room_list_show_wall);
  • Event Player.center_pos_of_the_room_you_are = Vector((0.500 + Event Player.current_room_xindex) * Global.width_meter_per_a_room,
  • Global.dimension_of_maze == 2 ? 0.200 : (0.500 + Event Player.current_room_yindex) * Global.width_meter_per_a_room, (
  • 0.500 + Event Player.current_room_zindex) * Global.width_meter_per_a_room);
  • disabled Start Rule(playwalleffects, Do Nothing);
  • Call Subroutine(get_visibles);
  • Event Player.center_pos_of_the_room_you_are = Vector((0.500 + Event Player.current_room_xindex) * Global.width_meter_per_a_room, 0,
  • (0.500 + Event Player.current_room_zindex) * Global.width_meter_per_a_room);
  • For Player Variable(Event Player, I_show_wall, 0, Count Of(Event Player.pl_room_list_show_wall), 1);
  • Event Player.xIndex_show_wall = Event Player.pl_room_list_show_wall[Event Player.I_show_wall] % Global.number_of_rooms_per_line;
  • Event Player.zIndex_show_wall = Round To Integer(
  • Event Player.pl_room_list_show_wall[Event Player.I_show_wall] / Global.number_of_rooms_per_line, Down);
  • Event Player.center_pos_of_room_show_wall = Vector((0.500 + Event Player.xIndex_show_wall) * Global.width_meter_per_a_room, 0, (
  • 0.500 + Event Player.zIndex_show_wall) * Global.width_meter_per_a_room);
  • "左に壁がある"
  • If(Round To Integer(Global.walls_4bit_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 1, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Green, Event Player.center_pos_of_room_show_wall + Vector(
  • 0.500 * Global.width_meter_per_a_room, Global.wall_effect_height, 0), Global.wall_effect_size);
  • End;
  • "右に壁がある"
  • If(Round To Integer(Global.walls_4bit_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 2, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Green, Event Player.center_pos_of_room_show_wall + Vector(
  • -0.500 * Global.width_meter_per_a_room, Global.wall_effect_height, 0), Global.wall_effect_size);
  • End;
  • "上に壁がある"
  • If(Round To Integer(Global.walls_4bit_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 4, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Green, Event Player.center_pos_of_room_show_wall + Vector(0, Global.wall_effect_height,
  • 0.500 * Global.width_meter_per_a_room), Global.wall_effect_size);
  • End;
  • "下に壁がある"
  • If(Round To Integer(Global.walls_4bit_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 8, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Green, Event Player.center_pos_of_room_show_wall + Vector(0, Global.wall_effect_height,
  • -0.500 * Global.width_meter_per_a_room), Global.wall_effect_size);
  • End;
  • End;
  • End;
  • Call Subroutine(pl_wall_hit);
  • Event Player.room_num_of_previous_pos = Event Player.room_num_of_current_pos;
  • If(Event Player.room_num_of_current_pos == Global.number_of_total_rooms - 1);
  • Modify Player Score(Event Player, Global.number_of_rooms_per_line);
  • Set Status(Event Player, Null, Rooted, 9999);
  • Event Player.is_in_goal = True;
  • Play Effect(All Players(All Teams), Good Explosion, Color(Yellow), Event Player, 3);
  • Apply Impulse(Event Player, Right, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Event Player, Left, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Event Player, Forward, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Event Player, Backward, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Event Player, Up, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Event Player, Down, 0.001, To World, Cancel Contrary Motion);
  • Play Effect(All Players(All Teams), Good Explosion, Yellow, Event Player, 3);
  • End;
  • Event Player.center_pos_of_the_previous_room = Event Player.center_pos_of_the_room_you_are;
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("pl_listup adjucent_room_list")
  • {
  • event
  • {
  • Subroutine;
  • pl_listup_adjucent_room_list;
  • }
  • actions
  • {
  • Event Player.pl_adjacent_room_list = Empty Array;
  • If(Global.dimension_of_maze == 2);
  • "右端じゃない"
  • If(Event Player.room_num_of_current_pos % Global.number_of_rooms_per_line != 0);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array, Event Player.room_num_of_current_pos - 1);
  • End;
  • "左端じゃない"
  • If(Event Player.room_num_of_current_pos % Global.number_of_rooms_per_line != Global.number_of_rooms_per_line - 1);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array, Event Player.room_num_of_current_pos + 1);
  • End;
  • "下端じゃない"
  • If(Event Player.room_num_of_current_pos >= Global.number_of_rooms_per_line);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array,
  • Event Player.room_num_of_current_pos - Global.number_of_rooms_per_line);
  • End;
  • "上端じゃない"
  • If(Global.number_of_total_rooms - Global.number_of_rooms_per_line > Event Player.room_num_of_current_pos);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array,
  • Event Player.room_num_of_current_pos + Global.number_of_rooms_per_line);
  • End;
  • "3d"
  • Else;
  • "右端じゃない"
  • If(Event Player.room_num_of_current_pos % Global.number_of_rooms_per_line != 0);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array, Event Player.room_num_of_current_pos + -1);
  • End;
  • "左端じゃない"
  • If(Event Player.room_num_of_current_pos % Global.number_of_rooms_per_line != Global.number_of_rooms_per_line - 1);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array, Event Player.room_num_of_current_pos + 1);
  • End;
  • "手前端じゃない"
  • If(Event Player.room_num_of_current_pos % Global.number_of_rooms_per_line ^ 2 >= Global.number_of_rooms_per_line);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array,
  • Event Player.room_num_of_current_pos - Global.number_of_rooms_per_line);
  • End;
  • "奥端じゃない"
  • If((Global.number_of_rooms_per_line + Event Player.room_num_of_current_pos)
  • % Global.number_of_rooms_per_line ^ 2 >= Global.number_of_rooms_per_line);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array,
  • Event Player.room_num_of_current_pos + Global.number_of_rooms_per_line);
  • End;
  • "低端じゃない"
  • If(Event Player.room_num_of_current_pos >= Global.number_of_rooms_per_line ^ 2);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array,
  • Event Player.room_num_of_current_pos - Global.number_of_rooms_per_line ^ 2);
  • End;
  • "高端じゃない"
  • If(Event Player.room_num_of_current_pos < (Global.number_of_rooms_per_line - 1) * Global.number_of_rooms_per_line ^ 2);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array,
  • Event Player.room_num_of_current_pos + Global.number_of_rooms_per_line ^ 2);
  • End;
  • "右端じゃない"
  • If(Event Player.room_num_of_current_pos % Global.number_of_rooms_per_line != 0);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array, Event Player.room_num_of_current_pos - 1);
  • End;
  • "左端じゃない"
  • If(Event Player.room_num_of_current_pos % Global.number_of_rooms_per_line != Global.number_of_rooms_per_line - 1);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array, Event Player.room_num_of_current_pos + 1);
  • End;
  • "下端じゃない"
  • If(Event Player.room_num_of_current_pos >= Global.number_of_rooms_per_line);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array,
  • Event Player.room_num_of_current_pos - Global.number_of_rooms_per_line);
  • End;
  • "上端じゃない"
  • If(Global.number_of_total_rooms - Global.number_of_rooms_per_line > Event Player.room_num_of_current_pos);
  • Modify Player Variable(Event Player, pl_adjacent_room_list, Append To Array,
  • Event Player.room_num_of_current_pos + Global.number_of_rooms_per_line);
  • End;
  • }
  • }
  • rule("player maze is not created")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MazeHasBeenCreated == False;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Rooted, 9999);
  • Teleport(Event Player, Vector(1, 0, 1));
  • Event Player.room_num_of_previous_pos = 0;
  • Event Player.is_in_goal = False;
  • Set Facing(Event Player, Global.dimension_of_maze == 2 ? Vector(1, 0, 1) : Vector(1, 1, 1), To World);
  • Set Facing(Event Player, Vector(1, 0, 1), To World);
  • }
  • }
  • rule("player maze is created")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MazeHasBeenCreated == True;
  • }
  • actions
  • {
  • Clear Status(Event Player, Rooted);
  • Teleport(Event Player, Vector(1, 0, 1));
  • Event Player.room_num_of_previous_pos = 0;
  • Event Player.is_in_goal = False;
  • }
  • }
  • rule("player wall hit")
  • {
  • event
  • {
  • Subroutine;
  • pl_wall_hit;
  • }
  • actions
  • {
  • Event Player.room_num_gap = Event Player.room_num_of_current_pos - Event Player.room_num_of_previous_pos;
  • If(Array Contains(Global.dimension_of_maze == 2 ? Array(1, Global.number_of_rooms_per_line) : Array(1,
  • Global.number_of_rooms_per_line, Global.number_of_rooms_per_line ^ 2), Absolute Value(Event Player.room_num_gap)));
  • If(Global.dimension_of_maze == 2);
  • Event Player.move_direction_as_bit = Array(1, 2, 4, 8)[Index Of Array Value(Array(1, -1, Global.number_of_rooms_per_line,
  • -1 * Global.number_of_rooms_per_line), Event Player.room_num_gap)];
  • "3d"
  • Else;
  • Event Player.move_direction_as_bit = Array(1, 2, 4, 8, 16, 32)[Index Of Array Value(Array(1, -1, Global.number_of_rooms_per_line,
  • -1 * Global.number_of_rooms_per_line, Global.number_of_rooms_per_line ^ 2, -1 * Global.number_of_rooms_per_line ^ 2),
  • Event Player.room_num_gap)];
  • End;
  • If(Array Contains(Array(1, Global.number_of_rooms_per_line), Absolute Value(Event Player.room_num_gap)));
  • Event Player.move_direction_as_bit = Array(1, 2, 4, 8)[Index Of Array Value(Array(1, -1, Global.number_of_rooms_per_line,
  • -1 * Global.number_of_rooms_per_line), Event Player.room_num_gap)];
  • "壁がある"
  • If(Round To Integer(Global.walls_bits_with_room_num[Event Player.room_num_of_previous_pos] / Event Player.move_direction_as_bit,
  • If(Round To Integer(Global.walls_4bit_with_room_num[Event Player.room_num_of_previous_pos] / Event Player.move_direction_as_bit,
  • Down) % 2 == 0);
  • Event Player.did_hit_wall = True;
  • Else;
  • Event Player.did_hit_wall = False;
  • End;
  • Else;
  • Event Player.did_hit_wall = Event Player.room_num_gap == 0 ? False : True;
  • End;
  • If(Event Player.did_hit_wall == True);
  • Set Status(Event Player, Null, Stunned, 0.400);
  • Teleport(Event Player, Event Player.center_pos_of_the_previous_room);
  • Event Player.room_num_of_current_pos = Event Player.room_num_of_previous_pos;
  • End;
  • }
  • }
  • rule("goaled player over 1")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Count Of(Filtered Array(All Players(All Teams), Current Array Element.is_in_goal == True)) >= 1;
  • }
  • actions
  • {
  • Big Message(All Players(All Teams), String("Goal"));
  • Wait(5, Ignore Condition);
  • Global.number_of_rooms_per_line += Global.sizeIncreaseEveryAfterClear;
  • Global.number_of_rooms_per_line = Min(31, Global.number_of_rooms_per_line);
  • Call Subroutine(create_maze);
  • }
  • }
  • rule("game start time set")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.game_length_in_minutes = Workshop Setting Integer(Custom String("time"), Custom String("game length in minutes ゲームの長さ(分)"),
  • 5, 1, 60, 0);
  • Set Match Time(60 * Global.game_length_in_minutes);
  • }
  • }
  • rule("playwalleffects")
  • {
  • event
  • {
  • Subroutine;
  • playwalleffects;
  • }
  • actions
  • {
  • Event Player.is3dwallhigh_low = !Event Player.is3dwallhigh_low;
  • For Player Variable(Event Player, I_show_wall, 0, Count Of(Event Player.pl_room_list_show_wall), 1);
  • "ok"
  • If(Global.dimension_of_maze == 2);
  • Event Player.xIndex_show_wall = Event Player.pl_room_list_show_wall[Event Player.I_show_wall] % Global.number_of_rooms_per_line;
  • Event Player.zIndex_show_wall = Round To Integer(
  • Event Player.pl_room_list_show_wall[Event Player.I_show_wall] / Global.number_of_rooms_per_line, Down);
  • Event Player.center_pos_of_room_show_wall = Vector((0.500 + Event Player.xIndex_show_wall) * Global.width_meter_per_a_room,
  • Global.wall_effect_height, (0.500 + Event Player.zIndex_show_wall) * Global.width_meter_per_a_room);
  • "3d"
  • Else;
  • Event Player.xIndex_show_wall = Event Player.pl_room_list_show_wall[Event Player.I_show_wall] % Global.number_of_rooms_per_line;
  • Event Player.yIndex_show_wall = Round To Integer(
  • Event Player.pl_room_list_show_wall[Event Player.I_show_wall] / Global.number_of_rooms_per_line ^ 2, Down);
  • Event Player.zIndex_show_wall = Round To Integer((
  • Event Player.pl_room_list_show_wall[Event Player.I_show_wall] - Event Player.yIndex_show_wall * Global.number_of_rooms_per_line * Global.number_of_rooms_per_line)
  • / Global.number_of_rooms_per_line, Down);
  • Event Player.center_pos_of_room_show_wall = Vector((0.500 + Event Player.xIndex_show_wall) * Global.width_meter_per_a_room, 0 + (
  • 0.500 + Event Player.yIndex_show_wall) * Global.width_meter_per_a_room, (0.500 + Event Player.zIndex_show_wall)
  • * Global.width_meter_per_a_room);
  • End;
  • If(Global.dimension_of_maze == 2);
  • "左に壁がある"
  • If(Round To Integer(Global.walls_bits_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 1, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Color(Green), Event Player.center_pos_of_room_show_wall + Vector(
  • 0.500 * Global.width_meter_per_a_room, 0, 0), Global.wall_effect_size);
  • End;
  • "右に壁がある"
  • If(Round To Integer(Global.walls_bits_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 2, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Color(Green), Event Player.center_pos_of_room_show_wall + Vector(
  • -0.500 * Global.width_meter_per_a_room, 0, 0), Global.wall_effect_size);
  • End;
  • "奥に壁がある"
  • If(Round To Integer(Global.walls_bits_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 4, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Color(Green), Event Player.center_pos_of_room_show_wall + Vector(0, 0,
  • 0.500 * Global.width_meter_per_a_room), Global.wall_effect_size);
  • End;
  • "手前に壁がある"
  • If(Round To Integer(Global.walls_bits_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 8, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Color(Green), Event Player.center_pos_of_room_show_wall + Vector(0, 0,
  • -0.500 * Global.width_meter_per_a_room), Global.wall_effect_size);
  • End;
  • "3d"
  • Else;
  • "左に壁がある"
  • If(Round To Integer(Global.walls_bits_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 1, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Color(Green), Event Player.center_pos_of_room_show_wall + Vector(
  • 0.500 * Global.width_meter_per_a_room, (Event Player.is3dwallhigh_low ? 0.250 : -0.250) * Global.width_meter_per_a_room, 0),
  • Global.wall_effect_size);
  • End;
  • "右に壁がある"
  • If(Round To Integer(Global.walls_bits_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 2, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Color(Green), Event Player.center_pos_of_room_show_wall + Vector(
  • -0.500 * Global.width_meter_per_a_room, (Event Player.is3dwallhigh_low ? 0.250 : -0.250) * Global.width_meter_per_a_room, 0),
  • Global.wall_effect_size);
  • End;
  • "奥に壁がある"
  • If(Round To Integer(Global.walls_bits_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 4, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Color(Green), Event Player.center_pos_of_room_show_wall + Vector(0, (
  • Event Player.is3dwallhigh_low ? 0.250 : -0.250) * Global.width_meter_per_a_room, 0.500 * Global.width_meter_per_a_room),
  • Global.wall_effect_size);
  • End;
  • "手前に壁がある"
  • If(Round To Integer(Global.walls_bits_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 8, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Color(Green), Event Player.center_pos_of_room_show_wall + Vector(0, (
  • Event Player.is3dwallhigh_low ? 0.250 : -0.250) * Global.width_meter_per_a_room, -0.500 * Global.width_meter_per_a_room),
  • Global.wall_effect_size);
  • End;
  • "上に壁がある"
  • If(Round To Integer(Global.walls_bits_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 16, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Color(Aqua), Event Player.center_pos_of_room_show_wall + Vector(0,
  • 0.500 * Global.width_meter_per_a_room, 0), 3);
  • End;
  • "下に壁がある"
  • If(Round To Integer(Global.walls_bits_with_room_num[Event Player.pl_room_list_show_wall[Event Player.I_show_wall]] / 32, Down)
  • % 2 == 0);
  • Play Effect(Event Player, Ring Explosion, Color(Aqua), Event Player.center_pos_of_room_show_wall + Vector(0,
  • -0.500 * Global.width_meter_per_a_room, 0), 3);
  • End;
  • Wait(0.016, Ignore Condition);
  • End;
  • End;
  • }
  • }
  • rule("player 3d jump key")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.dimension_of_maze == 3;
  • Is Button Held(Event Player, Button(Jump)) == True;
  • Has Status(Event Player, Rooted) == False;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Up, 8, To World, Cancel Contrary Motion);
  • }
  • }
  • rule("player 3d jump key release")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.dimension_of_maze == 3;
  • Is Button Held(Event Player, Button(Jump)) == False;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Down, 0.001, To World, Cancel Contrary Motion);
  • }
  • }
  • rule("player 3d crouch key")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.dimension_of_maze == 3;
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • Has Status(Event Player, Rooted) == False;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Down, 8, To World, Cancel Contrary Motion);
  • }
  • }
  • rule("player 3d crouch key release")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.dimension_of_maze == 3;
  • Is Button Held(Event Player, Button(Crouch)) == False;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Up, 0.001, To World, Cancel Contrary Motion);
  • }
  • }
  • rule("player 3d 0 throttle")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.dimension_of_maze == 3;
  • Throttle Of(Event Player) == Vector(0, 0, 0);
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Right, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Event Player, Left, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Event Player, Forward, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Event Player, Backward, 0.001, To World, Cancel Contrary Motion);
  • }
  • }
  • rule("player 3d view direction")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.dimension_of_maze == 3;
  • }
  • actions
  • {
  • "おk"
  • Event Player.num_current_rounded_fac_dir = Index Of Array Value(Array(Left, Right, Forward, Backward, Up, Down), First Of(
  • Sorted Array(Array(Left, Right, Forward, Backward, Up, Down), Angle Between Vectors(Current Array Element, Facing Direction Of(
  • Event Player)))));
  • Wait(0.510, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("get_visibles")
  • {
  • event
  • {
  • Subroutine;
  • get_visibles;
  • }
  • actions
  • {
  • Event Player.array_visible_room_ofset_vec_pl = Empty Array;
  • For Player Variable(Event Player, i_get_visibles, 0, Count Of(Global.array_visible_room_ofset_vec), 1);
  • Event Player.array_visible_room_ofset_vec_pl[Event Player.i_get_visibles] = Null;
  • "x範囲内"
  • If(Event Player.current_room_xindex + X Component Of(Global.array_visible_room_ofset_vec[Event Player.i_get_visibles])
  • >= 0 && Event Player.current_room_xindex + X Component Of(Global.array_visible_room_ofset_vec[Event Player.i_get_visibles])
  • < Global.number_of_rooms_per_line);
  • "z範囲内"
  • If(Event Player.current_room_zindex + Z Component Of(Global.array_visible_room_ofset_vec[Event Player.i_get_visibles])
  • >= 0 && Event Player.current_room_zindex + Z Component Of(Global.array_visible_room_ofset_vec[Event Player.i_get_visibles])
  • < Global.number_of_rooms_per_line);
  • "y範囲内"
  • If((Event Player.current_room_yindex + Y Component Of(Global.array_visible_room_ofset_vec[Event Player.i_get_visibles])
  • >= 0 && Event Player.current_room_yindex + Y Component Of(Global.array_visible_room_ofset_vec[Event Player.i_get_visibles])
  • < Global.number_of_rooms_per_line) || (Global.dimension_of_maze == 2));
  • Event Player.array_visible_room_ofset_vec_pl[Event Player.i_get_visibles] = Global.array_visible_room_ofset_vec[Event Player.i_get_visibles];
  • End;
  • End;
  • End;
  • End;
  • }
  • }
Join the Workshop.codes Discord