Repository navigation
Expand file tree
/
Copy pathpubClass.lua
More file actions
236 lines (214 loc) · 8.58 KB
/
Copy pathpubClass.lua
File metadata and controls
236 lines (214 loc) · 8.58 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
---@alias Techmino.Player.Type 'brik' | 'gela' | 'acry'
---@alias Techmino.EndReason
---|'win' Win (AC, Accepted)
---|'suffocate' Suffocate (WA, Wrong Answer)
---|'lockout' Lock out (CE, Compile Error)
---|'topout' Top out (MLE, Memory Limit Exceeded)
---|'timeout' Time out (TLE, Time Limit Exceeded)
---|'rule' Rule violation (OLE, Output Limit Exceeded)
---|'exhaust' Ran out pieces (ILE, Idleness Limit Exceeded)
---|'taskfail' Task failed (PE, Presentation Error)
---|'other' Other reason (UKE, Unknown Error)
---@alias Techmino.EventName -- All event function will be called with format `Event(P[,see below])`
---| 'beforePress' -- General(act)
---| 'onPress' -- General(act)
---| 'afterPress' -- General(act)
---| 'beforeRelease' -- General(act)
---| 'onRelease' -- General(act)
---| 'afterRelease' -- General(act)
---| 'playerInit' -- General
---| 'gameStart' -- General
---| 'receive' -- General(data)
---| 'gameOver' -- General(reason)
---| 'always' -- General
---|
---| 'afterResetPos' -- Brik, Gela
---| 'afterSpawn' -- Brik, Gela
---| 'beforeMove' -- Brik(act,A,B,C,D), Gela(act,A,B,C)
---| 'afterMove' -- Brik(act,A,B,C,D), Gela(act,A,B,C)
---| 'onMoveFail' -- Brik(act,dir)
---| 'afterDrop' -- Brik, Gela
---| 'afterLock' -- Brik, Gela
---| 'beforeClear' -- Brik(lines)
---| 'afterClear' -- Brik(clear), Gela(clear)
---| 'onAttack' -- Brik, Gela
---| 'beforeDiscard' -- Brik, Gela
---| 'afterDiscard' -- Brik
---| 'garbageRelease' -- Gela
---| 'drawBelowField' -- Brik, Gela, Acry
---| 'drawBelowBlock' -- Brik, Gela, Acry
---| 'drawBelowMarks' -- Brik, Acry
---| 'drawInField' -- Brik, Gela, Acry
---| 'drawOnPlayer' -- Brik, Gela, Acry
---|
---| 'whenSuffocate' -- Brik, Gela
---| 'beforeResetPos' -- Brik
---| 'extraSolidCheck' -- Brik
---|
---| 'legalMove' -- Acry(mode)
---| 'illegalMove' -- Acry(mode)
---@class Techmino.ParticleSystems
---@field rectShade love.ParticleSystem
---@field rectTilt love.ParticleSystem
---@field rectScale love.ParticleSystem
---@field spinArrow table
---@field star love.ParticleSystem
---@field boardSmoke love.ParticleSystem
---@field line love.ParticleSystem
---@field hitSparkle love.ParticleSystem
---@field cornerCheck love.ParticleSystem
---@field trail love.ParticleSystem
---@field exMapBack love.ParticleSystem
---@alias Techmino.Event string | {[1]:number, [2]:fun(P:Techmino.Player, ...): boolean?} | fun(P:Techmino.Player, ...): boolean?
---@alias Techmino.Event.Brik string | {[1]:number, [2]:fun(P:Techmino.Player.Brik, ...): boolean?} | fun(P:Techmino.Player.Brik, ...): boolean?
---@alias Techmino.Event.Gela string | {[1]:number, [2]:fun(P:Techmino.Player.Gela, ...): boolean?} | fun(P:Techmino.Player.Gela, ...): boolean?
---@alias Techmino.Event.Acry string | {[1]:number, [2]:fun(P:Techmino.Player.Acry, ...): boolean?} | fun(P:Techmino.Player.Acry, ...): boolean?
---@class Techmino.Brik.Cell
---@field id number piece id
---@field did number drop id (exist when hand piece locks)
---@field cid string cell id (unique) (already exist when piece display in next queue)
---@field color number 000~999
---@field alpha? number 0~1
---@field conn table<string, any>
---@field bias {expBack?:number, lineBack?:number, teleBack?:number, x:number, y:number}
---@field visTimer? number
---@field fadeTime? number
---@field visStep? number
---@field visMax? number
---
---@field garbage? true Brik only
---
---@field diggable boolean Gela only
---@field connClear boolean Gela only
---@alias Techmino.RectPiece Mat<Techmino.Brik.Cell | false>
---@class Techmino.Piece
---@field id Techmino.Brik.ID
---@field shape number
---@field direction 0 | 1 | 2 | 3 | number
---@field name Techmino.Brik.Name
---@field matrix Techmino.RectPiece
---@field _origin Techmino.Piece
---@field path table[]
---
---@field size number Gela only
---@class Techmino.BrikDropHis
---@field id number
---@field x number
---@field y number
---@field direction number
---@field time number
---@field gameTime number
---@class Techmino.BrikClearHis
---@field combo number
---@field line number
---@field linePos number[]
---@field time number
---@field gameTime number
---@class Techmino.BrikMovement
---@field action string
---@field brik Techmino.Piece
---@field x number
---@field y number
---@field immobile? boolean
---@field corners? boolean
---@field clear? number[]
---@field combo? number
---@alias Techmino.Acry.Prop 'fire' | 'elec' | 'hyper' | 'lock' | 'stepbomb' | 'timebomb' | 'butterfly' | 'multiplier' | string
---@alias Techmino.Acry.State
---|'idle'
---|'fall'
---|'moveAhead'
---|'moveBack'
---|'moveWait'
---|'clear'
---
---|'_discard'
---@class Techmino.Acry.Cell
---@field id string cell id (unique)
---@field color number 1~7
---@field prop Techmino.Acry.Prop[]
---@field propData table
---
---@field gridX integer
---@field gridY integer
---@field biasX number
---@field biasY number
---
---@field state Techmino.Acry.State
--- 'idle':
--- @field stableTime integer
--- 'moveAhead':
--- @field active boolean
--- @field wallHit boolean
--- @field moveDirection integer[]
--- @field moveTimer integer
--- @field moveDelay integer
--- @field moveReadyDelay integer
--- 'moveWait':
--- @field waitTimer integer
--- @field waitDelay integer
--- 'moveBack':
--- moveTimer integer (same as in moveAhead)
--- moveDelay integer (same as in moveAhead)
--- 'fall':
--- @field fallSpeed integer
--- 'clear':
--- @field clearTimer integer
--- @field clearDelay integer
--- @field craftTargetBias integer[]
--- '_discard':
---
---@field _newState Techmino.Acry.State | false
---@class Techmino.Skin
---@field base? string
---@field time number ms
---@field drawFieldBackground fun(fieldW:number)
---@field drawFieldCell fun(C:Techmino.Brik.Cell, F:Techmino.RectField, x:number, y:number)
---@field drawGhostCell fun(C:Techmino.Brik.Cell, B:Techmino.RectPiece, x:number, y:number)
---@field drawHandCellStroke fun(C:Techmino.Brik.Cell, B:Techmino.RectPiece, x:number, y:number)
---@field drawHandCell fun(C:Techmino.Brik.Cell, B:Techmino.RectPiece, x:number, y:number)
---@field drawFloatHoldCell fun(C:Techmino.Brik.Cell, disabled:boolean, B:Techmino.RectPiece, x:number, y:number)
---@field drawFloatHoldMark fun(n:number, disabled:boolean)
---@field drawHeightLines fun(fieldW:number, maxSpawnH:number, spawnH:number, lockoutH:number, deathH:number, voidH:number)
---@field drawFieldBorder fun()
---@field drawAsdIndicator fun(dir:number , charge:number, asdMax:number, aspMax:number, ash:number)
---@field drawDelayIndicator fun(mode:'spawn'|'death'|'lock', value:number)
---@field drawLockDelayIndicator fun(freshCondition:string, freshChance:number, maxFreshTime:number, freshTime:number)
---
---@field drawNext boolean
---@field drawNextBorder fun(slot:number)
---@field drawNextCell fun(C:Techmino.Brik.Cell, disabled:boolean, B:Techmino.RectPiece, x:number, y:number)
---
---@field drawHold boolean
---@field drawHoldBorder fun(mode:string, slot:number)
---@field drawHoldCell fun(C:Techmino.Brik.Cell, disabled:boolean, B:Techmino.RectPiece, x:number, y:number)
---
---@field drawTime fun(time:number)
---@field drawStartingCounter fun(readyDelay:number)
---@field drawInfoPanel fun(x:number, y:number, w:number, h:number) Only called by mode
---@class Techmino.Mode
---@field initialize function Called when initializing the mode
---@field settings {brik:Techmino.Mode.Setting.Brik?, gela:Techmino.Mode.Setting.Gela?, acry:Techmino.Mode.Setting.Acry?}
---@field layout 'default' Layout mode
---@field checkFinish function Return if the game should end when a player finishes
---@field result function Called when the game ends
---@field resultPage fun(time:number) Drawing the result page
---@field name string Mode name, for debug use
---@class Techmino.ModeInput
---@field initialize? function
---@field settings? {brik:Techmino.Mode.Setting.Brik?, gela:Techmino.Mode.Setting.Gela?, acry:Techmino.Mode.Setting.Acry?}
---@field layout? 'default'
---@field checkFinish? function
---@field result? function
---@field resultPage? fun(time:number)
---@field name? string
---@class Techmino.PlayerModeData
---@field subMode string
---@field music Techmino.PlayerModeData.MusicTable
---@field target {[any]:any}
---@field [any] any
---@class Techmino.PlayerModeData.MusicTable
---@field id? string FMOD parameter name, default to 'intensity'
---@field path string Lerping value path, like 'modeData.xxx.yyy' or '.xxx.yyy' in short
---@field s? number Lerping start point, leave this empty to use direct value instead of 0~1 lerping
---@field e? number Lerping end point