FEZ_like_4D.txt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. sign.started(gamesignloc);
  2. event.load("block_click");
  3. event.load("entity_damage");
  4. event.load("player_move");
  5. event.load("player_quit");
  6. event.load("player_giveup");
  7. event.load("minigame_join");
  8. event.load("block_break");
  9. games = world.getGames();
  10. gamename = "§4D-FEZ";
  11. maxplayers = 1;
  12. air_material = material.get("AIR");
  13. x1 = loc.getX(Edge_1);
  14. x2 = loc.getX(Edge_2);
  15. x3 = loc.getX(Edge_3);
  16. x4 = x3 + x2 - x1;
  17. Spawn_X = loc.getX(Start_Pos)-0.5;
  18. y1 = loc.getY(Edge_1);
  19. y2 = loc.getY(Edge_2);
  20. y3 = loc.getY(Edge_3);
  21. y4 = y3 + y2 - y1;
  22. Spawn_Y = loc.getY(Start_Pos);
  23. z1 = loc.getZ(Edge_1);
  24. z2 = loc.getZ(Edge_2);
  25. z3 = loc.getZ(Edge_3);
  26. z4 = z3 + z2 - z1;
  27. Spawn_Z = loc.getZ(Start_Pos)-0.5;
  28. //XYZ -> WYZ -> XYW -> XYZ
  29. Dimension_Blocks = list.new();
  30. event.addMoveData(loc1, loc2, -1, -1);
  31. currently_active_dimensions = 0; //0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  32. difference_array = array.new(6);
  33. difference_array[0] = Layer_amount;
  34. difference_array[1] = x2-x1;
  35. difference_array[2] = z2-z2;
  36. difference_array[3] = Layer_amount;
  37. difference_array[4] = x2-x1;
  38. difference_array[5] = z2-z2;
  39. @wait
  40. wait();
  41. if(event == "entity_damage") {
  42. if(!isPlayer(entity)) {
  43. goto("wait");
  44. }
  45. player = entity;
  46. }
  47. if(!player.hasMinigameId(player, script_id)) {
  48. goto("wait");
  49. }
  50. if(event == "minigame_join"){
  51. msg.prefix(player, $gamename, "Game is Loading, please be patient.");
  52. entity.teleport(player, Start_Pos);
  53. player.clearInventory(player);
  54. player_inv = player.getInv(player);
  55. waitfor(10);
  56. remove_blocks();
  57. $currently_active_dimensions = 0;
  58. $current_layer[$currently_active_dimensions] = 0;
  59. inv.setItem(player_inv, 0, customitem.create("ARROW_LEFT",1,"Turn down","Interdimensionally"));
  60. inv.setItem(player_inv, 1, customitem.create("ARROW_RIGHT",1,"Turn up","Interdimensionally"));
  61. inv.setItem(player_inv, 2, customitem.create("ARROW_DOWN",1,"Move down","background axis"));
  62. inv.setItem(player_inv, 3, customitem.create("ARROW_UP",1,"Move up","background axis"));
  63. c = 0;
  64. for(layer_var = 0; layer_var < Layer_amount; layer_var++){
  65. x_d = layer_var * Layer_difference_X;
  66. y_d = layer_var * Layer_difference_Y;
  67. z_d = layer_var * Layer_difference_Z;
  68. for(x = x1 - x_d; x <= x2 - x_d; x++){
  69. for(y = y1 - y_d; y <= y2 - y_d; y++){
  70. for(z = z1 - z_d; z <= z2 - z_d; z++){
  71. c++;
  72. if(c > 500){
  73. c = 0;
  74. waitfor(2);
  75. }
  76. temp_block = block.get(loc.new(games, x, y, z));
  77. if(!block.isAir(temp_block)){
  78. D_Array = array.new(4);
  79. D_Array[0] = x - x1 + x_d;//X
  80. D_Array[1] = y - y1 + y_d;//Y
  81. D_Array[2] = z - z1 + z_d;//Z
  82. D_Array[3] = layer_var;//W
  83. temp_array = array.new(2);
  84. temp_array[0] = D_Array;
  85. temp_array[1] = block.getType(temp_block);
  86. list.add(Dimension_Blocks, temp_array);//Dimensional_Blocks -> Koords4D,Block
  87. }
  88. }
  89. }
  90. }
  91. }
  92. Active_blocks = place_blocks(Dimension_Blocks);
  93. msg.prefix(player, $gamename, "Game has loaded.");
  94. //snuvi.debug(list.getSize(Dimension_Blocks));
  95. goto("wait");
  96. }
  97. if(event == "block_break"){
  98. cancel = true;
  99. goto("wait");
  100. }
  101. if(event == "entity_damage") {
  102. cancel = true;
  103. goto("wait");
  104. }
  105. if(event == "block_click"){
  106. if(slot.isoffhand(hand)){
  107. goto("wait");
  108. }
  109. if(action == "PHYSICAL"){
  110. goto("wait");
  111. }
  112. player_hand = living.getHand(player);
  113. if(!item.hasName(player_hand)){
  114. goto("wait");
  115. }
  116. item_name = string.text(item.getName(player_hand));
  117. if(item_name == "Turn down"){
  118. goto("dimensional_turn_down");
  119. }
  120. if(item_name == "Turn up"){
  121. goto("dimensional_turn_up");
  122. }
  123. goto("wait");
  124. }
  125. if(event == "player_move"){
  126. //if(current_layer[1] == finish_layer){
  127. game_stop("You did it!");
  128. //}
  129. goto("wait");
  130. }
  131. if(event == "player_quit"){
  132. game_stop(null);
  133. }
  134. if(event == "player_giveup"){
  135. game_stop("You left :(");
  136. }
  137. goto("wait");
  138. @dimensional_turn_up
  139. remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  140. temp_layer = current_layer[currently_active_dimensions];
  141. temp_player_loc = entity.getLocation(player);
  142. stood_on_block_loc = loc.new(loc.getWorld(temp_player_loc), math.round(loc.getX(temp_player_loc)), math.round(loc.getY(temp_player_loc)-1), math.round(loc.getZ(temp_player_loc)));
  143. if(block.getType == air_material){
  144. goto("wait");
  145. }
  146. if(y3 >= loc.getX(stood_on_block_loc)){
  147. goto("wait");
  148. }
  149. if(map.contains(Active_blocks, stood_on_block_loc)){
  150. temp_layer = map.get(Active_blocks, stood_on_block_loc);
  151. }
  152. else{
  153. goto("wait");
  154. }
  155. if(currently_active_dimensions == 0){//XYZ to WYZ
  156. currently_active_dimensions++;//0 = W, 1 = X, 2 = Z
  157. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  158. }elseif(currently_active_dimensions == 1){//WYZ to WYX
  159. currently_active_dimensions++;
  160. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  161. }elseif(currently_active_dimensions == 2){//WYX to ZYX
  162. currently_active_dimensions++;
  163. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  164. }elseif(currently_active_dimensions == 3){//ZYX to ZYW
  165. currently_active_dimensions++;
  166. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  167. }elseif(currently_active_dimensions == 4){//ZYW to XYW
  168. currently_active_dimensions++;
  169. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  170. }elseif(currently_active_dimensions == 5){//XYW to XYZ
  171. currently_active_dimensions = 0;
  172. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  173. }
  174. Active_blocks = place_blocks(Dimension_Blocks);
  175. goto("wait");
  176. @dimensional_turn_down
  177. remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  178. temp_player_loc = entity.getLocation(player);
  179. stood_on_block_loc = loc.new(loc.getWorld(temp_player_loc), math.round(loc.getX(temp_player_loc)), math.round(loc.getY(temp_player_loc)-1), math.round(loc.getZ(temp_player_loc)));
  180. if(block.getType == air_material){
  181. goto("wait");
  182. }
  183. if(y3 >= loc.getX(stood_on_block_loc)){
  184. goto("wait");
  185. }
  186. if(map.contains(Active_blocks, stood_on_block_loc)){
  187. temp_layer = map.get(Active_blocks, stood_on_block_loc);
  188. }
  189. else{
  190. goto("wait");
  191. }
  192. if(currently_active_dimensions == 0){//XYZ to XYW
  193. currently_active_dimensions = 5;//0 = W, 1 = X, 2 = Z, 3 = W, 4 = X, 5 = Z
  194. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  195. }elseif(currently_active_dimensions == 1){//WYZ to XYZ
  196. currently_active_dimensions--;
  197. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  198. }elseif(currently_active_dimensions == 2){//WYX to WYZ
  199. currently_active_dimensions--;
  200. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  201. }elseif(currently_active_dimensions == 3){//ZYX to WYX
  202. currently_active_dimensions--;
  203. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  204. }elseif(currently_active_dimensions == 4){//ZYW to ZYX
  205. currently_active_dimensions--;
  206. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  207. }elseif(currently_active_dimensions == 5){//XYW to ZYW
  208. currently_active_dimensions--;
  209. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  210. }
  211. Active_blocks = place_blocks(Dimension_Blocks);
  212. goto("wait");
  213. function remove_blocks(){
  214. c = 0;
  215. for(x = $x3; x < $x3 + $x2 - $x1 + 1; x++){
  216. for(y = $y3; y < $y3 + $y2 - $y1 + 1; y++){
  217. for(z = $z3; z < $z3 + $z2 - $z1 + 1; z++){
  218. c++;
  219. if(c > 750){
  220. c = 0;
  221. waitfor(2);
  222. }
  223. block.setmaterial(block.get(loc.new($games, x, y, z)), $air_material);
  224. }
  225. }
  226. }
  227. }
  228. function place_blocks(Dimension_Blocks){
  229. c = 0;
  230. temp_a_d = $currently_active_dimensions;
  231. active_blocks = map.new();
  232. for(a = 0; a < list.getSize(Dimension_Blocks); a++){
  233. c++;
  234. if(c > 750){
  235. c = 0;
  236. waitfor(2);
  237. }
  238. temp_array = list.getIndex(Dimension_Blocks, a);
  239. D_Array = temp_array[0];//temp_array[1] ist der Block-Type, bei remove egal. D_Array[0] = x, D_Array[1] = y, D_Array[2] = z, D_Array[3] = w
  240. //0 = XYZ, 1 = WYZ, 2 = XYW
  241. //x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d
  242. X_place = 0;
  243. Y_place = -1;
  244. Z_place = 0;
  245. if(temp_a_d == 0){//0 = XYZ
  246. X_place = D_Array[0];
  247. Y_place = D_Array[1];
  248. Z_place = D_Array[2];
  249. background_coordinate = D_Array[3];
  250. }elseif(temp_a_d == 1){//1 = WYZ
  251. X_place = D_Array[3];
  252. Y_place = D_Array[1];
  253. Z_place = D_Array[2];
  254. background_coordinate = D_Array[0];
  255. }elseif(temp_a_d == 2){//2 = WYX
  256. X_place = D_Array[3];
  257. Y_place = D_Array[1];
  258. Z_place = D_Array[0];
  259. background_coordinate = D_Array[2];
  260. }elseif(temp_a_d == 3){//3 = ZYX
  261. X_place = D_Array[2];
  262. Y_place = D_Array[1];
  263. Z_place = D_Array[0];
  264. background_coordinate = D_Array[3];
  265. }elseif(temp_a_d == 4){//4 = ZYW
  266. X_place = D_Array[2];
  267. Y_place = D_Array[1];
  268. Z_place = D_Array[3];
  269. background_coordinate = D_Array[0];
  270. }elseif(temp_a_d == 5){//5 = XYW
  271. X_place = D_Array[0];
  272. Y_place = D_Array[1];
  273. Z_place = D_Array[3];
  274. background_coordinate = D_Array[2];
  275. }
  276. if(Y_place > -1){
  277. X_place = X_place + $x3;
  278. Y_place = Y_place + $y3;
  279. Z_place = Z_place + $z3;
  280. if(X_place < $x4+1 && Y_place < $y4+1 && Z_place < $z4+1){
  281. temp_loc = loc.new($games,X_place,Y_place,Z_place);
  282. block.setmaterial(block.get(temp_loc), temp_array[1]);
  283. map.add(active_blocks, temp_loc, background_coordinate)
  284. }
  285. }
  286. }
  287. return(active_blocks);
  288. }
  289. function game_stop(message){
  290. if(message != null){
  291. msg.prefix($player, $gamename, message);
  292. }
  293. script = script.getFromId($script_id);
  294. minigame.kickPlayer(script, $player);
  295. minigame.term(script, $gamesignloc);
  296. term();
  297. }