extends Spatial var orientation = "" # north, south, east, west var move = false var move_to_x var move_to_z var target = null var key func _ready(): var _connected = get_tree().get_root().get_node("Spatial/player").connect( "looked_at", self, "_looked_at" ) if move: key.get_node("Viewport/GUI/Panel/TextEdit").connect( "answer_correct", self, "_answer_correct" ) func _answer_correct(): var apclient = global.get_node("Archipelago") if not apclient._door_shuffle or apclient.paintingIsVanilla(self.get_parent().name): movePainting() func movePainting(): self.get_parent().translation.x = move_to_x self.get_parent().translation.z = move_to_z func _looked_at(body, painting): if ( target != null and body.is_in_group("player") and (painting.get_name() == self.get_parent().get_name()) ): var target_dir = _dir_to_int(target.orientation) var source_dir = _dir_to_int(orientation) var rotate = target_dir - source_dir if rotate < 0: rotate += 4 rotate *= 90 var target_painting = target.get_parent() # this is ACW if rotate == 0: body.translation.x = ( target_painting.translation.x + (body.translation.x - painting.translation.x) ) body.translation.y = ( target_painting.translation.y + (body.translation.y - painting.translation.y) ) body.translation.z = ( target_painting.translation.z + (body.translation.z - painting.translation.z) ) elif rotate == 180: body.translation.x = ( target_painting.translation.x - (body.translation.x - painting.translation.x) ) body.translation.y = ( target_painting.translation.y + (body.translation.y - painting.translation.y) ) body.translation.z = ( target_painting.translation.z - (body.translation.z - painting.translation.z) ) body.rotate_y(PI) body.velocity = body.velocity.rotated(Vector3(0, 1, 0), PI) elif rotate == 90: var diff_x = body.translation.x - painting.translation.x var diff_y = body.translation.y - painting.translation.y var diff_z = body.translation.z - painting.translation.z body.translation.x = target_painting.translation.x + diff_z body.translation.y = target_painting.translation.y + diff_y body.translation.z = target_painting.translation.z - diff_x body.rotate_y(PI / 2) body.velocity = body.velocity.rotated(Vector3(0, 1, 0), PI / 2) elif rotate == 270: var diff_x = body.translation.x - painting.translation.x var diff_y = body.translation.y - painting.translation.y var diff_z = body.translation.z - painting.translation.z body.translation.x = target_painting.translation.x - diff_z body.translation.y = target_painting.translation.y + diff_y body.translation.z = target_painting.translation.z + diff_x body.rotate_y(3 * PI / 2) body.velocity = body.velocity.rotated(Vector3(0, 1, 0), 3 * PI / 2) var apclient = global.get_node("Archipelago") if !apclient._pilgrimage_allows_paintings: global.sunwarp = 1 body.get_node("pivot/camera/sunwarp_background").visible = false func _dir_to_int(dir): if dir == "north": return 0 elif dir == "west": return 1 elif dir == "south": return 2 elif dir == "east": return 3 return 4 /data/maps/the_partial?h=loc-refactor&id=ec92b1e2c5da16be25585a85b3918e2cad915580'>the_partial/doors.txtpb
blob: e37d077d71978cd2e699904d078442c0277430b2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
doors {
  name: "Main Room Puzzles"
  type: LOCATION_ONLY
  panels { room: "Obverse Side" name: "PUN" }
  panels { room: "Obverse Side" name: "UP" }
  panels { room: "Obverse Side" name: "PUT" }
  panels { room: "Obverse Side" name: "PUNT" }
  panels { room: "Obverse Side" name: "FIGHT" }
  location_room: "Obverse Side"
}
doors {
  name: "P Door"
  type: STANDARD
  receivers: "Components/Doors/p_enterer"
  panels { room: "Obverse Side" name: "LINT" }
  panels { room: "Obverse Side" name: "TURN" }
  panels { room: "Obverse Side" name: "HOT" }
  panels { room: "Obverse Side" name: "OUT" }
  panels { room: "Obverse Side" name: "TON" }
  panels { room: "Obverse Side" name: "HUT" }
  panels { room: "Obverse Side" name: "ION" }
  panels { room: "Obverse Side" name: "CUT" }
  panels { room: "Obverse Side" name: "FUN" }
  location_room: "Obverse Side"
  location_name: "Obverse Side Room"
}
doors {
  name: "Giant P"
  type: EVENT
  doors { name: "P Door" }
  keyholders { room: "Obverse Side" name: "L" key: "r" }
}
doors {
  name: "R Entered"
  type: EVENT
  keyholders { room: "Obverse Side" name: "L" key: "r" }
}
doors {
  name: "P Entered"
  type: EVENT
  keyholders { room: "Obverse Side" name: "L" key: "p" }
}
doors {
  name: "L Entered"
  type: EVENT
  latch: true
  receivers: "Components/Doors/controlDoor"
  keyholders { room: "Obverse Side" name: "L" key: "l" }
}
doors {
  name: "Control Center Entrance"
  type: EVENT
  legacy_location: true
  #receivers: "Components/Doors/controlDoor"
  panels { room: "Control Center Entrance" name: "RETURN" }
  location_room: "Control Center Entrance"
}
doors {
  name: "F Door"
  type: STANDARD
  receivers: "Components/Doors/f_enterer"
  panels { room: "Reverse Side" name: "BRO" }
  panels { room: "Reverse Side" name: "FOUR" }
  panels { room: "Reverse Side" name: "FINCH" }
  panels { room: "Reverse Side" name: "CLOD" }
  location_room: "Reverse Side"
}
doors {
  name: "Giant F"
  type: EVENT
  doors { name: "F Door" }
  keyholders { room: "Obverse Side" name: "L" key: "p" }
}