STUDIO HAZE · jeniapp
Topaz source
Open by house policy. Topaz is our own language.
Topaz 5.20.2 · 63 files
apps/slow-monster/core/creature.tpz
Topaz · 6362 B · Original file
1
// 전투원 레코드와 스탯 유도, 레벨과 경험 곡선을 둡니다. 파티와 야생이 같은 타입을 씁니다.2
// 스탯은 정수 공식으로 유도합니다. 최대체력 = 기본체력 + 레벨 * 2 + 부스트 * 2, 공격 방어 속도 = 기본치 + 레벨 + 부스트. 다음 레벨까지 레벨 * 8, 처치 경험은 적 레벨 * 14 입니다.3
// 실수를 쓰지 않는 순수 함수라 같은 종, 레벨, 저장값은 늘 같은 전투원입니다.4
// 저장 문자열을 읽거나 쓰지 않습니다. 복원할 때 모든 저장값을 가둬 손상된 상태가 정수 넘침을 일으키지 않게 합니다.5
// Combatant record, integer stat derivation, level and experience curve, and clamped restore.7
import data.species8
import core.genome9
import core.util { 범위가두기 }11
// 저장하는 값은 레벨, 경험, 현재체력, 계통시드, 드리프트와 진화 상태이고 나머지 스탯은 그때마다 유도합니다.12
// 진화하면 게놈이 더는 계통시드의 함수가 아니므로 돌연변이 게놈을 저장합니다. 형태이름 "" 은 미진화입니다.13
export type 전투원 = {14
종아이디: int,15
레벨: int,16
경험: int,17
현재체력: int,18
최대체력: int,19
공격: int,20
방어: int,21
속도: int,22
속성: int,23
스프라이트: int,24
기술1: int,25
기술2: int,26
기술3: int,27
기술4: int,28
계통시드: string,29
드리프트: int,30
게놈: genome.게놈,31
세대: int,32
진화카운터: int,33
형태이름: string,34
스탯부스트: int,35
}37
export function 최대체력(종정보: species.종, 레벨: int) -> int {38
종정보.기본체력 + 레벨 * 239
}41
export function 다음레벨필요경험(레벨: int) -> int {42
레벨 * 843
}45
export function 획득경험(적레벨: int) -> int {46
적레벨 * 1447
}49
// 조작된 저장의 거대한 레벨이 피해 계산의 정수를 넘기지 않게 가둡니다.50
export function 레벨가두기(레벨: int) -> int {51
범위가두기(레벨, 1, 99)52
}54
// 시작종과 갓 잡은 야생이 쓰는 생성자입니다. 체력은 가득, 드리프트 0, 미진화로 태어납니다.55
export function 종에서전투원(아이디: int, 레벨: int, 계통시드: string) -> 전투원 {56
let 종정보 = species.종찾기(아이디)57
let 가둔레벨 = 레벨가두기(레벨)58
let 체력상한 = 최대체력(종정보, 가둔레벨)59
{60
종아이디: 종정보.아이디,61
레벨: 가둔레벨,62
경험: 0,63
현재체력: 체력상한,64
최대체력: 체력상한,65
공격: 종정보.기본공격 + 가둔레벨,66
방어: 종정보.기본방어 + 가둔레벨,67
속도: 종정보.기본속도 + 가둔레벨,68
속성: 종정보.속성,69
스프라이트: 종정보.스프라이트,70
기술1: 종정보.기술1,71
기술2: 종정보.기술2,72
기술3: 종정보.기술3,73
기술4: 종정보.기술4,74
계통시드: 계통시드,75
드리프트: 0,76
게놈: genome.게놈유도(계통시드),77
세대: 0,78
진화카운터: 0,79
형태이름: "",80
스탯부스트: 0,81
}82
}84
export function 세대가두기(세대: int) -> int {85
범위가두기(세대, 0, 99)86
}88
export function 진화카운터가두기(카운터: int) -> int {89
범위가두기(카운터, 0, 1000000)90
}92
// 진화 한 번에 2~5 씩 올라 99 세대면 495 까지 갈 수 있지만 400 으로 가둬 공격이 500 근처를 넘지 않게 합니다.93
export function 스탯부스트가두기(부스트: int) -> int {94
범위가두기(부스트, 0, 400)95
}97
// 저장값에서 되살리거나 체력과 드리프트를 바꾼 전투원이 모두 거치는 가두기입니다. 종, 레벨, 부스트에서 스탯을 다시 유도하므로 원의 스탯 칸은 읽지 않습니다.98
// 미진화면 게놈을 계통시드에서 다시 유도하고 진화했으면 들고 있는 게놈을 씁니다.99
export function 전투원가두기(원: 전투원) -> 전투원 {100
let 종정보 = species.종찾기(원.종아이디)101
let 가둔레벨 = 레벨가두기(원.레벨)102
let 가둔세대 = 세대가두기(원.세대)103
let 부스트 = 스탯부스트가두기(원.스탯부스트)104
let 체력상한 = 최대체력(종정보, 가둔레벨) + 부스트 * 2105
let 기준게놈 = if 가둔세대 <= 0 { genome.게놈유도(원.계통시드) } else { 원.게놈 }106
{107
종아이디: 종정보.아이디,108
레벨: 가둔레벨,109
경험: 원.경험,110
현재체력: 범위가두기(원.현재체력, 0, 체력상한),111
최대체력: 체력상한,112
공격: 종정보.기본공격 + 가둔레벨 + 부스트,113
방어: 종정보.기본방어 + 가둔레벨 + 부스트,114
속도: 종정보.기본속도 + 가둔레벨 + 부스트,115
속성: 종정보.속성,116
스프라이트: 종정보.스프라이트,117
기술1: 종정보.기술1,118
기술2: 종정보.기술2,119
기술3: 종정보.기술3,120
기술4: 종정보.기술4,121
계통시드: 원.계통시드,122
드리프트: genome.드리프트가두기(원.드리프트),123
게놈: 기준게놈,124
세대: 가둔세대,125
진화카운터: 진화카운터가두기(원.진화카운터),126
형태이름: 원.형태이름,127
스탯부스트: 부스트,128
}129
}131
// 휴식은 체력만 채우고 레벨, 경험, 드리프트, 진화 형태는 그대로 둡니다.132
export function 회복(원: 전투원) -> 전투원 {133
전투원가두기(원{ 현재체력: 원.최대체력 })134
}136
export function 체력설정(원: 전투원, 새체력: int) -> 전투원 {137
전투원가두기(원{ 현재체력: 새체력 })138
}140
// 패배에서 배운 드리프트를 얹고 체력을 채웁니다.141
export function 드리프트설정(원: 전투원, 새드리프트: int) -> 전투원 {142
전투원가두기(원{ 현재체력: 원.최대체력, 드리프트: genome.드리프트가두기(새드리프트) })143
}145
// 종아이디 0 은 빈 파티 자리입니다.146
export function 빈전투원() -> 전투원 {147
{148
종아이디: 0,149
레벨: 0,150
경험: 0,151
현재체력: 0,152
최대체력: 0,153
공격: 0,154
방어: 0,155
속도: 0,156
속성: 0,157
스프라이트: 0,158
기술1: 0,159
기술2: 0,160
기술3: 0,161
기술4: 0,162
계통시드: "",163
드리프트: 0,164
게놈: genome.게놈유도(""),165
세대: 0,166
진화카운터: 0,167
형태이름: "",168
스탯부스트: 0,169
}170
}SHA256 163407ce8181038b3e4c937fb9cf0a719e20fab020f77411c2946521e50a9e07