STUDIO HAZE · jeniapp
Topaz source
Open by house policy. Topaz is our own language.
Topaz 5.20.2 · 63 files
apps/slow-monster/core/story.tpz
Topaz · 3629 B · Original file
1
// 이야기 이정표를 한 번씩만 띄우는 내레이션 비트셋을 다룹니다.2
// 비트셋은 정수 하나이고 비트 번호는 첫 조우 0, 첫 포획 1, 첫 초점 2, 첫 심층 7, 정복 10 입니다. 파생비트는 상태에서 도달한 비트셋을, 비트내레이션은 비트의 두 줄 문구를 돌려줍니다.3
// 비트셋이 저장 상태에 들어가고 도달 여부가 상태의 순수 함수라 같은 상태는 늘 같은 비트입니다.4
// 비트 연산을 쓰지 않습니다. 게임 결과에 영향을 주지 않는 연출입니다.5
// Story beats: an arithmetic bitset of fire-once milestones and their narration.7
import data.entities8
import core.state10
export let 비트수 = 1511
export let 비트_첫조우 = 012
export let 비트_첫포획 = 113
export let 비트_첫초점 = 214
export let 비트_첫심층 = 715
export let 비트_정복 = 1017
// 비트 연산이 없어 2 의 거듭제곱으로 비트를 다룹니다. 토파즈 과제 '비트 연산' 의 우회입니다.18
// 조작된 큰 k 에서도 넘치지 않게 서른 번에서 멈춥니다.19
function 이의거듭제곱(k: int) -> int {20
let mut 결과 = 121
for _ in 0..<k.atMost(30) { 결과 = 결과 * 2 }22
결과23
}25
export function 켜진비트인가(n: int, k: int) -> bool {26
(n / 이의거듭제곱(k)) % 2 == 127
}29
export function 비트켜기(n: int, k: int) -> int {30
if 켜진비트인가(n, k) { n } else { n + 이의거듭제곱(k) }31
}33
export function 비트끄기(n: int, k: int) -> int {34
if 켜진비트인가(n, k) { n - 이의거듭제곱(k) } else { n }35
}37
// 대기열에서 다음에 보여 줄 비트입니다. 없으면 -1 입니다.38
export function 최하위비트(n: int) -> int {39
for k in 0..<비트수 {40
if 켜진비트인가(n, k) { return k }41
}42
-143
}45
// 호출자가 이미 본 비트를 빼서 새 비트만 추립니다. 맵에 야생이 늘 있어 첫 조우는 시작부터 켜지고 오프닝 카드가 됩니다.46
export function 파생비트(현재: state.상태) -> int {47
let mut 비트셋 = 048
if entities.엔티티목록(현재.맵아이디).filter(entities.야생인가).length > 0 { 비트셋 = 비트켜기(비트셋, 비트_첫조우) }49
if 현재.파티.length > 1 { 비트셋 = 비트켜기(비트셋, 비트_첫포획) }50
if 현재.초점 > 0 { 비트셋 = 비트켜기(비트셋, 비트_첫초점) }51
if 현재.맵아이디 == "deep" { 비트셋 = 비트켜기(비트셋, 비트_첫심층) }52
// 엔티티 14 는 심연군주입니다.53
if entities.처치된것인가(현재.처치된것들, 14) { 비트셋 = 비트켜기(비트셋, 비트_정복) }54
비트셋55
}57
// 두 줄 문구는 \n 으로 나눕니다. 문구가 없는 비트는 빈 문자열입니다.58
export function 비트내레이션(비트: int) -> string {59
if 비트 == 비트_첫조우 {60
"세계가 조금씩 얇아지고 있습니다.\n저 작은 표본은 아직 사라지지 않은 생명의 결입니다."61
} else if 비트 == 비트_첫포획 {62
"한 표본이 씨앗의 숲에 머물기로 했습니다.\n서두르지 마십시오. 오래 지켜본 생명만이 길을 냅니다."63
} else if 비트 == 비트_첫초점 {64
"이제 이 표본은 하나의 줄기가 됩니다.\n당신의 보살핌은 계보가 되어 남습니다."65
} else if 비트 == 비트_첫심층 {66
"깊은 곳이 열렸습니다.\n그곳은 적의 땅이 아니라, 오래전에 멈춘 생명의 뿌리입니다."67
} else if 비트 == 비트_정복 {68
"숲은 사라지지 않았습니다.\n느리게 자란 계보가, 다시 살아갈 수 있음을 증명했습니다."69
} else {70
""71
}72
}SHA256 225295ef1bc0173d5757de5aee1040360976eb12d0ada8799562b2661c4971e3