feat: add PatternSelector
This commit is contained in:
parent
2984c79a76
commit
a2e4b33742
7 changed files with 607 additions and 0 deletions
8
PatternSelector/@code-data.txt
Normal file
8
PatternSelector/@code-data.txt
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
077F0441 00000035
|
||||||
|
452020FF 213200FF
|
||||||
|
621CFF1D 32005025
|
||||||
|
25252630 01FF4520
|
||||||
|
20213001 FFFF621C
|
||||||
|
1D300151 0707FF08
|
||||||
|
3102FF36 01FF0231
|
||||||
|
021E6E20 FF000000
|
280
PatternSelector/@code.xml
Normal file
280
PatternSelector/@code.xml
Normal file
|
@ -0,0 +1,280 @@
|
||||||
|
<code>
|
||||||
|
<category>qol</category>
|
||||||
|
<id>PatternSelector</id>
|
||||||
|
<title lang="en-US">Pattern Selector</title>
|
||||||
|
<title lang="ja-JP">パターン選択</title>
|
||||||
|
<author>sup39(サポミク)</author>
|
||||||
|
<version>0.4</version>
|
||||||
|
<date>Jan 31, 2023</date>
|
||||||
|
<dependencies>drawText</dependencies>
|
||||||
|
<description lang="en-US">
|
||||||
|
Ⓑ is the cursor to select the pattern,
|
||||||
|
and the three digits are the numbers representing the pattern.
|
||||||
|
See below for more information.
|
||||||
|
|
||||||
|
| Combination | Result |
|
||||||
|
|---------------|-------------------------------------------------|
|
||||||
|
|L + D-Pad Left |Move cursor(Ⓑ) one digit to the left |
|
||||||
|
|L + D-Pad Right|Move cursor(Ⓑ) one digit to the right |
|
||||||
|
|L + D-Pad Up |Increase the number at the right of the cursor(Ⓑ)|
|
||||||
|
|L + D-Pad Down |Decrease the number at the right of the cursor(Ⓑ)|
|
||||||
|
|
||||||
|
When the cursor(Ⓑ) is not shown, you can press L+D-Pad Left/Right to make it appear.
|
||||||
|
|
||||||
|
You can change the position and color of the text [here](#PatternSelector-config).
|
||||||
|
|
||||||
|
### Chain Chomp (PV4)
|
||||||
|
|
||||||
|
Use the [1st digit]{.emph} to select the pattern. The 2nd and 3rd are ignored.
|
||||||
|
|
||||||
|
|1st digit|Direction at the beginning|
|
||||||
|
|:-------:|:------------------------:|
|
||||||
|
| 1 | ← |
|
||||||
|
| 2 | ↑ |
|
||||||
|
| 3 | → |
|
||||||
|
| o.w. | Random |
|
||||||
|
|
||||||
|
### Chain Chomplets (PV1)
|
||||||
|
Each digit represents the pattern of each Chain Chomplet.
|
||||||
|
Numbers not on the graph (e.g. 0) mean random.
|
||||||
|
|
||||||
|
#### 1st digit
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-1.svg"}
|
||||||
|
|
||||||
|
#### 2nd digit
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-2.svg"}
|
||||||
|
|
||||||
|
#### 3rd digit
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-3.svg"}
|
||||||
|
</description>
|
||||||
|
<description lang="ja-JP">
|
||||||
|
Ⓑはパターンを選択するためのカーソルであり、三つの数字はパターンの番号を表します。
|
||||||
|
各パターンの番号は下記を参照してください。
|
||||||
|
|
||||||
|
| ボタン | 動作 |
|
||||||
|
|--------------|------------------------------|
|
||||||
|
|L + 十字キー左|カーソル(Ⓑ)を左一桁に移動 |
|
||||||
|
|L + 十字キー右|カーソル(Ⓑ)を右一桁に移動 |
|
||||||
|
|L + 十字キー上|カーソル(Ⓑ)の右の数字を1増やす|
|
||||||
|
|L + 十字キー下|カーソル(Ⓑ)の右の数字を1減らす|
|
||||||
|
|
||||||
|
カーソル(Ⓑ)が表示されない時、L+十字キー左/右を押せば出てきます。
|
||||||
|
|
||||||
|
[ここ](#PatternSelector-config)で文字の位置や色を変えることができます。
|
||||||
|
|
||||||
|
### ワンワン(PV4)
|
||||||
|
|
||||||
|
[1桁目]{.emph}でパターンを選択します。2桁目と3桁目は無視されます。
|
||||||
|
|
||||||
|
| 1桁目 | 最初の向き |
|
||||||
|
|:-------:|:----------:|
|
||||||
|
| 1 | ← |
|
||||||
|
| 2 | ↑ |
|
||||||
|
| 3 | → |
|
||||||
|
| その他 | ランダム |
|
||||||
|
|
||||||
|
### キャンキャン(PV1)
|
||||||
|
各桁は各キャンキャンのパターンを表します。図上にない数字(例えば0)はランダムを表します。
|
||||||
|
|
||||||
|
#### 1桁目
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-1.svg"}
|
||||||
|
|
||||||
|
#### 2桁目
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-2.svg"}
|
||||||
|
|
||||||
|
#### 3桁目
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-3.svg"}
|
||||||
|
</description>
|
||||||
|
<source version="GMSJ01">
|
||||||
|
C224F32C 00000013
|
||||||
|
801F0000 3D80817F
|
||||||
|
61880440 618A0024
|
||||||
|
6C0C803D 280CA9C0
|
||||||
|
41820054 6C0C803D
|
||||||
|
280C87C0 40820034
|
||||||
|
819F0004 898C0013
|
||||||
|
508C442E 39280031
|
||||||
|
88080007 7CEA00AE
|
||||||
|
A0080005 7C006040
|
||||||
|
41820034 39080007
|
||||||
|
7C084840 4180FFE4
|
||||||
|
3D808026 618C0224
|
||||||
|
7D8803A6 4E800021
|
||||||
|
4800002C 2C05FFFF
|
||||||
|
4082FFE8 88EA0000
|
||||||
|
39080031 7CE73B79
|
||||||
|
4182FFD8 7C0838AE
|
||||||
|
280000FF 4182FFCC
|
||||||
|
7C030378 00000000
|
||||||
|
C22069DC 00000019
|
||||||
|
3C60817F 60630410
|
||||||
|
38830010 3D808020
|
||||||
|
618C1EA8 7D8803A6
|
||||||
|
4E800021 3C808040
|
||||||
|
A4040D82 3C60817F
|
||||||
|
85630024 70000040
|
||||||
|
41A20050 88840019
|
||||||
|
548007FE 7D605850
|
||||||
|
5480FFFE 7D6B0214
|
||||||
|
556B07BE 5480F7BF
|
||||||
|
41A20030 280B0003
|
||||||
|
41A00008 39600000
|
||||||
|
5480EFFE 5080077A
|
||||||
|
7D8358AE 7D8C0214
|
||||||
|
280C0005 41A00008
|
||||||
|
398CFFFB 7D8359AE
|
||||||
|
99630003 3C002020
|
||||||
|
60002023 556C183E
|
||||||
|
5C00603E 5405063E
|
||||||
|
5407C63E 5409863E
|
||||||
|
88C30000 89030001
|
||||||
|
89430002 3D80817F
|
||||||
|
61830424 61840434
|
||||||
|
618C0238 7D8803A6
|
||||||
|
4E800021 00000000
|
||||||
|
</source>
|
||||||
|
<source version="GMSE01">
|
||||||
|
C203B6FC 00000013
|
||||||
|
801F0000 3D80817F
|
||||||
|
61880440 618A0024
|
||||||
|
6C0C803B 280C6178
|
||||||
|
41820054 6C0C803B
|
||||||
|
280C3F88 40820034
|
||||||
|
819F0004 898C0013
|
||||||
|
508C442E 39280031
|
||||||
|
88080007 7CEA00AE
|
||||||
|
A0080005 7C006040
|
||||||
|
41820034 39080007
|
||||||
|
7C084840 4180FFE4
|
||||||
|
3D808004 618CD0D4
|
||||||
|
7D8803A6 4E800021
|
||||||
|
4800002C 2C05FFFF
|
||||||
|
4082FFE8 88EA0000
|
||||||
|
39080031 7CE73B79
|
||||||
|
4182FFD8 7C0838AE
|
||||||
|
280000FF 4182FFCC
|
||||||
|
7C030378 00000000
|
||||||
|
C21441BC 00000019
|
||||||
|
3C60817F 60630410
|
||||||
|
38830010 3D808014
|
||||||
|
618C0390 7D8803A6
|
||||||
|
4E800021 3C808040
|
||||||
|
A4044486 3C60817F
|
||||||
|
85630024 70000040
|
||||||
|
41A20050 88840019
|
||||||
|
548007FE 7D605850
|
||||||
|
5480FFFE 7D6B0214
|
||||||
|
556B07BE 5480F7BF
|
||||||
|
41A20030 280B0003
|
||||||
|
41A00008 39600000
|
||||||
|
5480EFFE 5080077A
|
||||||
|
7D8358AE 7D8C0214
|
||||||
|
280C0005 41A00008
|
||||||
|
398CFFFB 7D8359AE
|
||||||
|
99630003 3C002020
|
||||||
|
60002023 556C183E
|
||||||
|
5C00603E 5405063E
|
||||||
|
5407C63E 5409863E
|
||||||
|
88C30000 89030001
|
||||||
|
89430002 3D80817F
|
||||||
|
61830424 61840434
|
||||||
|
618C0238 7D8803A6
|
||||||
|
4E800021 00000000
|
||||||
|
</source>
|
||||||
|
<source version="GMSP01">
|
||||||
|
C203B54C 00000013
|
||||||
|
801F0000 3D80817F
|
||||||
|
61880440 618A0024
|
||||||
|
6C0C803A 280CDF98
|
||||||
|
41820054 6C0C803A
|
||||||
|
280CBDA8 40820034
|
||||||
|
819F0004 898C0013
|
||||||
|
508C442E 39280031
|
||||||
|
88080007 7CEA00AE
|
||||||
|
A0080005 7C006040
|
||||||
|
41820034 39080007
|
||||||
|
7C084840 4180FFE4
|
||||||
|
3D808004 618CC228
|
||||||
|
7D8803A6 4E800021
|
||||||
|
4800002C 2C05FFFF
|
||||||
|
4082FFE8 88EA0000
|
||||||
|
39080031 7CE73B79
|
||||||
|
4182FFD8 7C0838AE
|
||||||
|
280000FF 4182FFCC
|
||||||
|
7C030378 00000000
|
||||||
|
C2138DF8 00000019
|
||||||
|
3C60817F 60630410
|
||||||
|
38830010 3D808013
|
||||||
|
618C4F0C 7D8803A6
|
||||||
|
4E800021 3C808040
|
||||||
|
A404BC26 3C60817F
|
||||||
|
85630024 70000040
|
||||||
|
41A20050 88840019
|
||||||
|
548007FE 7D605850
|
||||||
|
5480FFFE 7D6B0214
|
||||||
|
556B07BE 5480F7BF
|
||||||
|
41A20030 280B0003
|
||||||
|
41A00008 39600000
|
||||||
|
5480EFFE 5080077A
|
||||||
|
7D8358AE 7D8C0214
|
||||||
|
280C0005 41A00008
|
||||||
|
398CFFFB 7D8359AE
|
||||||
|
99630003 3C002020
|
||||||
|
60002023 556C183E
|
||||||
|
5C00603E 5405063E
|
||||||
|
5407C63E 5409863E
|
||||||
|
88C30000 89030001
|
||||||
|
89430002 3D80817F
|
||||||
|
61830424 61840434
|
||||||
|
618C0238 7D8803A6
|
||||||
|
4E800021 00000000
|
||||||
|
</source>
|
||||||
|
<source version="GMSJ0A">
|
||||||
|
C2027900 00000013
|
||||||
|
801F0000 3D80817F
|
||||||
|
61880440 618A0024
|
||||||
|
6C0C803A 280C6D70
|
||||||
|
41820054 6C0C803A
|
||||||
|
280C4B80 40820034
|
||||||
|
819F0004 898C0013
|
||||||
|
508C442E 39280031
|
||||||
|
88080007 7CEA00AE
|
||||||
|
A0080005 7C006040
|
||||||
|
41820034 39080007
|
||||||
|
7C084840 4180FFE4
|
||||||
|
3D808003 618C8684
|
||||||
|
7D8803A6 4E800021
|
||||||
|
4800002C 2C05FFFF
|
||||||
|
4082FFE8 88EA0000
|
||||||
|
39080031 7CE73B79
|
||||||
|
4182FFD8 7C0838AE
|
||||||
|
280000FF 4182FFCC
|
||||||
|
7C030378 00000000
|
||||||
|
C2125548 00000019
|
||||||
|
3C60817F 60630410
|
||||||
|
38830010 3D808012
|
||||||
|
618C1660 7D8803A6
|
||||||
|
4E800021 3C80803F
|
||||||
|
A404545A 3C60817F
|
||||||
|
85630024 70000040
|
||||||
|
41A20050 88840019
|
||||||
|
548007FE 7D605850
|
||||||
|
5480FFFE 7D6B0214
|
||||||
|
556B07BE 5480F7BF
|
||||||
|
41A20030 280B0003
|
||||||
|
41A00008 39600000
|
||||||
|
5480EFFE 5080077A
|
||||||
|
7D8358AE 7D8C0214
|
||||||
|
280C0005 41A00008
|
||||||
|
398CFFFB 7D8359AE
|
||||||
|
99630003 3C002020
|
||||||
|
60002023 556C183E
|
||||||
|
5C00603E 5405063E
|
||||||
|
5407C63E 5409863E
|
||||||
|
88C30000 89030001
|
||||||
|
89430002 3D80817F
|
||||||
|
61830424 61840434
|
||||||
|
618C0238 7D8803A6
|
||||||
|
4E800021 00000000
|
||||||
|
</source>
|
||||||
|
</code>
|
88
PatternSelector/info.xml
Normal file
88
PatternSelector/info.xml
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
<code>
|
||||||
|
<category>qol</category>
|
||||||
|
<id>PatternSelector</id>
|
||||||
|
<title lang="en-US">Pattern Selector</title>
|
||||||
|
<title lang="ja-JP">パターン選択</title>
|
||||||
|
<author>sup39(サポミク)</author>
|
||||||
|
<version>0.4</version>
|
||||||
|
<date>Jan 31, 2023</date>
|
||||||
|
<dependencies>drawText</dependencies>
|
||||||
|
<description lang="en-US">
|
||||||
|
Ⓑ is the cursor to select the pattern,
|
||||||
|
and the three digits are the numbers representing the pattern.
|
||||||
|
See below for more information.
|
||||||
|
|
||||||
|
| Combination | Result |
|
||||||
|
|---------------|-------------------------------------------------|
|
||||||
|
|L + D-Pad Left |Move cursor(Ⓑ) one digit to the left |
|
||||||
|
|L + D-Pad Right|Move cursor(Ⓑ) one digit to the right |
|
||||||
|
|L + D-Pad Up |Increase the number at the right of the cursor(Ⓑ)|
|
||||||
|
|L + D-Pad Down |Decrease the number at the right of the cursor(Ⓑ)|
|
||||||
|
|
||||||
|
When the cursor(Ⓑ) is not shown, you can press L+D-Pad Left/Right to make it appear.
|
||||||
|
|
||||||
|
You can change the position and color of the text [here](#PatternSelector-config).
|
||||||
|
|
||||||
|
### Chain Chomp (PV4)
|
||||||
|
|
||||||
|
Use the [1st digit]{.emph} to select the pattern. The 2nd and 3rd are ignored.
|
||||||
|
|
||||||
|
|1st digit|Direction at the beginning|
|
||||||
|
|:-------:|:------------------------:|
|
||||||
|
| 1 | ← |
|
||||||
|
| 2 | ↑ |
|
||||||
|
| 3 | → |
|
||||||
|
| o.w. | Random |
|
||||||
|
|
||||||
|
### Chain Chomplets (PV1)
|
||||||
|
Each digit represents the pattern of each Chain Chomplet.
|
||||||
|
Numbers not on the graph (e.g. 0) mean random.
|
||||||
|
|
||||||
|
#### 1st digit
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-1.svg"}
|
||||||
|
|
||||||
|
#### 2nd digit
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-2.svg"}
|
||||||
|
|
||||||
|
#### 3rd digit
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-3.svg"}
|
||||||
|
</description>
|
||||||
|
<description lang="ja-JP">
|
||||||
|
Ⓑはパターンを選択するためのカーソルであり、三つの数字はパターンの番号を表します。
|
||||||
|
各パターンの番号は下記を参照してください。
|
||||||
|
|
||||||
|
| ボタン | 動作 |
|
||||||
|
|--------------|------------------------------|
|
||||||
|
|L + 十字キー左|カーソル(Ⓑ)を左一桁に移動 |
|
||||||
|
|L + 十字キー右|カーソル(Ⓑ)を右一桁に移動 |
|
||||||
|
|L + 十字キー上|カーソル(Ⓑ)の右の数字を1増やす|
|
||||||
|
|L + 十字キー下|カーソル(Ⓑ)の右の数字を1減らす|
|
||||||
|
|
||||||
|
カーソル(Ⓑ)が表示されない時、L+十字キー左/右を押せば出てきます。
|
||||||
|
|
||||||
|
[ここ](#PatternSelector-config)で文字の位置や色を変えることができます。
|
||||||
|
|
||||||
|
### ワンワン(PV4)
|
||||||
|
|
||||||
|
[1桁目]{.emph}でパターンを選択します。2桁目と3桁目は無視されます。
|
||||||
|
|
||||||
|
| 1桁目 | 最初の向き |
|
||||||
|
|:-------:|:----------:|
|
||||||
|
| 1 | ← |
|
||||||
|
| 2 | ↑ |
|
||||||
|
| 3 | → |
|
||||||
|
| その他 | ランダム |
|
||||||
|
|
||||||
|
### キャンキャン(PV1)
|
||||||
|
各桁は各キャンキャンのパターンを表します。図上にない数字(例えば0)はランダムを表します。
|
||||||
|
|
||||||
|
#### 1桁目
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-1.svg"}
|
||||||
|
|
||||||
|
#### 2桁目
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-2.svg"}
|
||||||
|
|
||||||
|
#### 3桁目
|
||||||
|
%object[]{data="/img/PatternSelector/PV1-3.svg"}
|
||||||
|
</description>
|
||||||
|
</code>
|
34
PatternSelector/make.py
Normal file
34
PatternSelector/make.py
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
from supSMSGecko import build, make_xml, symbols
|
||||||
|
|
||||||
|
extra_ld_input = '''
|
||||||
|
drawText = 0x817f0238;
|
||||||
|
|
||||||
|
/** struct {u8 patterns[3], u8 cursor} */
|
||||||
|
$patterns = 0x817f0024;
|
||||||
|
|
||||||
|
/* size = 0x14 */
|
||||||
|
$rectOpt = 0x817f0410;
|
||||||
|
|
||||||
|
/* size = 0x10 */
|
||||||
|
$textOpt = 0x817f0424;
|
||||||
|
|
||||||
|
/* size = 13 "%c%X%c%X%c%X" */
|
||||||
|
$fmt = 0x817f0434;
|
||||||
|
|
||||||
|
/* size = 53 */
|
||||||
|
$data = 0x817f0441;
|
||||||
|
'''
|
||||||
|
|
||||||
|
def main(g, ver):
|
||||||
|
S = symbols[ver]
|
||||||
|
g.C2(S['TSpineEnemy_goToRandomNextGraphNode'] + 0x50, 'src/selector.s', extra_ld_input=extra_ld_input)
|
||||||
|
g.C2(S['drawWater'] - 0x24, 'src/draw.s', extra_ld_input=extra_ld_input)
|
||||||
|
|
||||||
|
def main_data(g, ver):
|
||||||
|
g.c_kit(0x817f0441, 'src/pattern-data.s', entries=[])
|
||||||
|
|
||||||
|
# compile main code to @code.xml
|
||||||
|
make_xml(main)
|
||||||
|
# compile pattern-data.s to @code-data.txt
|
||||||
|
with open('@code-data.txt', 'w') as fw:
|
||||||
|
print(build(main_data, 'GMSJ01').dump_txt(''), file=fw)
|
95
PatternSelector/src/draw.s
Normal file
95
PatternSelector/src/draw.s
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
.set rPats, 3
|
||||||
|
.set rPad, 4
|
||||||
|
.set rCS, 11
|
||||||
|
.set btnMask, 0x40 # L
|
||||||
|
|
||||||
|
.draw2d:
|
||||||
|
|
||||||
|
### check stage
|
||||||
|
# lis r3, gpApplication+0xE@ha
|
||||||
|
# lhz r3, gpApplication+0xE@l(r3)
|
||||||
|
# cmplwi r3, 0x0800
|
||||||
|
# cmplwi cr1, r3, 0x0803
|
||||||
|
# cror 4*cr0+eq, 4*cr0+eq, 4*cr1+eq
|
||||||
|
# bne .draw2d.done
|
||||||
|
|
||||||
|
.draw.background:
|
||||||
|
lis r3, 0x817F
|
||||||
|
ori r3, r3, $rectOpt@l
|
||||||
|
addi r4, r3, 0x10
|
||||||
|
lis r12, fill_rect@h
|
||||||
|
ori r12, r12, fill_rect@l
|
||||||
|
mtlr r12
|
||||||
|
blrl
|
||||||
|
|
||||||
|
.update.state:
|
||||||
|
lis rPad, mPadButton+2@ha
|
||||||
|
lhzu r0, mPadButton+2@l(rPad)
|
||||||
|
lis rPats, $patterns@h
|
||||||
|
lwzu rCS, $patterns@l(rPats) # cs = [3]
|
||||||
|
### L is pressed
|
||||||
|
andi. r0, r0, btnMask
|
||||||
|
beq+ .update.state.end
|
||||||
|
## rPad = effective D-Pad
|
||||||
|
lbz rPad, -2+0x18+3(rPad)
|
||||||
|
.update.cursor:
|
||||||
|
rlwinm r0, rPad, 0, 0x1 # DL
|
||||||
|
sub rCS, rCS, r0 # -1
|
||||||
|
rlwinm r0, rPad, 32-1, 0x1 # DR
|
||||||
|
add rCS, rCS, r0 # +1
|
||||||
|
rlwinm rCS, rCS, 0, 0x3 # %4
|
||||||
|
.update.patterns:
|
||||||
|
rlwinm. r0, rPad, 32-2, 0x3 # DU,DD
|
||||||
|
beq+ .update.state.end
|
||||||
|
## cursor = 0 if < 3
|
||||||
|
cmplwi rCS, 3
|
||||||
|
blt+ .update.cs3.end
|
||||||
|
li rCS, 0
|
||||||
|
.update.cs3.end:
|
||||||
|
## r0 = diff
|
||||||
|
rlwinm r0, rPad, 32-3, 0x1 # DU>>3 +1
|
||||||
|
rlwimi r0, rPad, 0, 0x4 # DD>>2<<2 +4
|
||||||
|
## r12 = patterns[cs]
|
||||||
|
lbzx r12, rPats, rCS
|
||||||
|
add r12, r12, r0 # patterns[cs] += diff
|
||||||
|
## pattern %= 5
|
||||||
|
cmplwi r12, 5
|
||||||
|
blt+ .update.pat5.end
|
||||||
|
addi r12, r12, -5
|
||||||
|
.update.pat5.end:
|
||||||
|
## store
|
||||||
|
stbx r12, rPats, rCS
|
||||||
|
.update.state.end:
|
||||||
|
stb rCS, 3(rPats)
|
||||||
|
|
||||||
|
.draw:
|
||||||
|
## cursor
|
||||||
|
.set magic, 0x20202023
|
||||||
|
#.set magic, 0x4040409a ## star
|
||||||
|
#.set magic, 0x404040a8 ## right arrow
|
||||||
|
#.set magic, 0x2020207d ## right arrow (EU)
|
||||||
|
lis r0, magic@h
|
||||||
|
ori r0, r0, magic@l
|
||||||
|
### 1st digit
|
||||||
|
rlwinm r12, rCS, 3, 0, 31 # r12 = rCS*8
|
||||||
|
rlwnm r0, r0, r12, 0, 31 # r0 = cursor value (24 bit)
|
||||||
|
rlwinm r5, r0, 0, 0xFF # 1st cursor
|
||||||
|
### 2nd digit
|
||||||
|
rlwinm r7, r0, 32-8, 0xFF # 2nd cursor: rotate right 8
|
||||||
|
### 3rd digit
|
||||||
|
rlwinm r9, r0, 32-16, 0xFF # 3rd cursor: rotate right 16
|
||||||
|
## patterns
|
||||||
|
lbz r6, 0(rPats)
|
||||||
|
lbz r8, 1(rPats)
|
||||||
|
lbz r10, 2(rPats)
|
||||||
|
## params
|
||||||
|
lis r12, 0x817F
|
||||||
|
ori r3, r12, $textOpt@l
|
||||||
|
ori r4, r12, $fmt@l
|
||||||
|
ori r12, r12, drawText@l
|
||||||
|
mtlr r12
|
||||||
|
blrl
|
||||||
|
|
||||||
|
.draw2d.done:
|
||||||
|
|
||||||
|
# vi:se ft=asm:
|
25
PatternSelector/src/pattern-data.s
Normal file
25
PatternSelector/src/pattern-data.s
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
.set .sizeof.entry.PV1, 7
|
||||||
|
.data.patterns.PV1:
|
||||||
|
/** next[4], cur, name[19], pid */
|
||||||
|
/**** case '2' ****/
|
||||||
|
/* 33: up, right */
|
||||||
|
.byte 69, 32, 32, -1, 33, 0x32, 0
|
||||||
|
/* 29: up, right */
|
||||||
|
.byte -1, 98, 28, -1, 29, 0x32, 0
|
||||||
|
/**** case '0' ****/
|
||||||
|
/* 38: up, right */
|
||||||
|
.byte 80, 37, 37, 37, 38, 0x30, 1
|
||||||
|
/* 33: up, right */
|
||||||
|
.byte -1, 69, 32, 32, 33, 0x30, 1
|
||||||
|
/* 29: up, right */
|
||||||
|
.byte -1, -1, 98, 28, 29, 0x30, 1
|
||||||
|
/**** case '1' ****/
|
||||||
|
/* 8: down, left */
|
||||||
|
.byte 81, 7, 7, -1, 8, 0x31, 2
|
||||||
|
/* 2: down, left */
|
||||||
|
.byte -1, 54, 1, -1, 2, 0x31, 2
|
||||||
|
.data.patterns.PV1.end:
|
||||||
|
|
||||||
|
.data.patterns.PV4:
|
||||||
|
/* left, middle, right */
|
||||||
|
.byte 30, 110, 32, -1
|
77
PatternSelector/src/selector.s
Normal file
77
PatternSelector/src/selector.s
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
.set .data.PV1.entrySize, 7
|
||||||
|
.set .data.PV1.entryCount, 7
|
||||||
|
.set .data.PV1.size, .data.PV1.entrySize * .data.PV1.entryCount
|
||||||
|
.set .data.PV4.offset, .data.PV1.size
|
||||||
|
|
||||||
|
## Do not change r3~r6 for fallback function call
|
||||||
|
.set rCur, 4
|
||||||
|
.set rPrev, 5
|
||||||
|
.set rPid, 7
|
||||||
|
.set rEntry, 8 # offset of pattern entry
|
||||||
|
.set rEntryEnd, 9
|
||||||
|
.set rPats, 10
|
||||||
|
|
||||||
|
.getRandomNextIndex:
|
||||||
|
## r0 = vt
|
||||||
|
lwz r0, 0(r31)
|
||||||
|
lis r12, 0x817F
|
||||||
|
ori rEntry, r12, $data-1@l
|
||||||
|
ori rPats, r12, $patterns@l
|
||||||
|
### PV4
|
||||||
|
xoris r12, r0, TBossWanwan___vt@h
|
||||||
|
cmplwi r12, TBossWanwan___vt@l
|
||||||
|
beq .getRandomNextIndex.PV4
|
||||||
|
### PV1
|
||||||
|
xoris r12, r0, TFireWanwan___vt@h
|
||||||
|
cmplwi r12, TFireWanwan___vt@l
|
||||||
|
bne .fallback
|
||||||
|
.getRandomNextIndex.PV1:
|
||||||
|
## r12 = (curIdx, name[19])
|
||||||
|
lwz r12, 4(r31) # name
|
||||||
|
lbz r12, 19(r12) # name[19]
|
||||||
|
rlwimi r12, rCur, 8, 0x10, 0x17
|
||||||
|
## foreach entry
|
||||||
|
addi rEntryEnd, rEntry, .data.PV1.size
|
||||||
|
.getRandomNextIndex.PV1.loop:
|
||||||
|
### pid
|
||||||
|
lbz r0, 1+6(rEntry)
|
||||||
|
lbzx rPid, rPats, r0
|
||||||
|
### check id
|
||||||
|
lhz r0, 1+4(rEntry)
|
||||||
|
cmplw r0, r12
|
||||||
|
beq- .getRandomNextIndex.result
|
||||||
|
addi rEntry, rEntry, .data.PV1.entrySize
|
||||||
|
cmplw rEntry, rEntryEnd
|
||||||
|
blt+ .getRandomNextIndex.PV1.loop
|
||||||
|
|
||||||
|
.fallback:
|
||||||
|
lis r12, getRandomNextIndex@h
|
||||||
|
ori r12, r12, getRandomNextIndex@l
|
||||||
|
mtlr r12
|
||||||
|
blrl
|
||||||
|
b .getRandomNextIndex.done
|
||||||
|
|
||||||
|
.getRandomNextIndex.PV4:
|
||||||
|
## handle initial node only
|
||||||
|
cmpwi rPrev, -1
|
||||||
|
bne+ .fallback
|
||||||
|
## use patterns[0]
|
||||||
|
lbz rPid, 0(rPats)
|
||||||
|
addi rEntry, rEntry, .data.PV4.offset
|
||||||
|
## DONE
|
||||||
|
#b .getRandomNextIndex.result
|
||||||
|
|
||||||
|
.getRandomNextIndex.result:
|
||||||
|
## if pid == 0, goto fallback
|
||||||
|
mr. rPid, rPid # TODO pid>4
|
||||||
|
beq .fallback
|
||||||
|
## ans = patterns[idx][pid-1] = entry[pid]
|
||||||
|
lbzx r0, rEntry, rPid
|
||||||
|
cmplwi r0, 255 # invalid
|
||||||
|
beq .fallback
|
||||||
|
## valid result (r0) as return value (r3)
|
||||||
|
mr r3, r0
|
||||||
|
|
||||||
|
.getRandomNextIndex.done:
|
||||||
|
|
||||||
|
# vi:se ft=asm:
|
Loading…
Reference in a new issue