aboutsummaryrefslogtreecommitdiff
path: root/project/src
diff options
context:
space:
mode:
authorWiimm <wiimm@wiimm.de>2022-05-13 19:22:13 +0200
committerWiimm <wiimm@wiimm.de>2022-05-13 19:22:13 +0200
commit568365f5bdd4dc71a156ca963d89ac002f405a34 (patch)
tree730d0311536d8fd46a56b74e2c8cac028e778243 /project/src
parent9ae8841ec4720e74173e2f72fac33f0848bbf435 (diff)
SZS v2.27a
Diffstat (limited to '')
-rw-r--r--project/src/addr_port.inc509
-rw-r--r--project/src/analyze.c2
-rw-r--r--project/src/crypt.h2
-rw-r--r--project/src/crypto/ssl-asm.S2
-rw-r--r--project/src/crypto/ssl-asm.h2
-rw-r--r--project/src/db-ctcode.c2
-rw-r--r--project/src/db-ctcode.h2
-rw-r--r--project/src/db-object.c277
-rw-r--r--project/src/db-object.h4
-rw-r--r--project/src/lib-breff.c2
-rw-r--r--project/src/lib-breff.h2
-rw-r--r--project/src/lib-brres.c3
-rw-r--r--project/src/lib-brres.h2
-rw-r--r--project/src/lib-bzip2.c2
-rw-r--r--project/src/lib-bzip2.h2
-rw-r--r--project/src/lib-checksum.c4
-rw-r--r--project/src/lib-checksum.h2
-rw-r--r--project/src/lib-common.c2
-rw-r--r--project/src/lib-common.h2
-rw-r--r--project/src/lib-ctcode.c283
-rw-r--r--project/src/lib-ctcode.h43
-rw-r--r--project/src/lib-ctdata.c2
-rw-r--r--project/src/lib-file.c24
-rw-r--r--project/src/lib-geohit.c2
-rw-r--r--project/src/lib-image.h2
-rw-r--r--project/src/lib-image1.c2
-rw-r--r--project/src/lib-image2.c2
-rw-r--r--project/src/lib-image3.c2
-rw-r--r--project/src/lib-itemslot.c2
-rw-r--r--project/src/lib-kcl-image.c2
-rw-r--r--project/src/lib-kcl.c104
-rw-r--r--project/src/lib-kcl.h23
-rw-r--r--project/src/lib-kmp-diff.c18
-rw-r--r--project/src/lib-kmp-draw.c4
-rw-r--r--project/src/lib-kmp-pflags.c10
-rw-r--r--project/src/lib-kmp-text.c83
-rw-r--r--project/src/lib-kmp.c66
-rw-r--r--project/src/lib-kmp.h66
-rw-r--r--project/src/lib-lecode.c124
-rw-r--r--project/src/lib-lecode.h31
-rw-r--r--project/src/lib-lex.c152
-rw-r--r--project/src/lib-lex.h64
-rw-r--r--project/src/lib-mdl.c3
-rw-r--r--project/src/lib-mdl.h2
-rw-r--r--project/src/lib-minigame.c6
-rw-r--r--project/src/lib-numeric.c2
-rw-r--r--project/src/lib-numeric.h21
-rw-r--r--project/src/lib-object.c2
-rw-r--r--project/src/lib-object.h3
-rw-r--r--project/src/lib-objflow.c2
-rw-r--r--project/src/lib-pack.c2
-rw-r--r--project/src/lib-pack.h2
-rw-r--r--project/src/lib-parser-func.c2
-rw-r--r--project/src/lib-parser.c44
-rw-r--r--project/src/lib-pat.c2
-rw-r--r--project/src/lib-pat.h2
-rw-r--r--project/src/lib-rarc.c2
-rw-r--r--project/src/lib-rarc.h2
-rw-r--r--project/src/lib-rkc.c2
-rw-r--r--project/src/lib-rkc.h2
-rw-r--r--project/src/lib-rkg.c2
-rw-r--r--project/src/lib-rkg.h2
-rw-r--r--project/src/lib-staticr.c32
-rw-r--r--project/src/lib-staticr.h10
-rw-r--r--project/src/lib-std.c223
-rw-r--r--project/src/lib-std.h110
-rw-r--r--project/src/lib-szs-create.c649
-rw-r--r--project/src/lib-szs.c163
-rw-r--r--project/src/lib-szs.h89
-rw-r--r--project/src/lib-transform.c2
-rw-r--r--project/src/lib-xbmg.c2
-rw-r--r--project/src/lib-xbmg.h2
-rw-r--r--project/src/types.h2
-rw-r--r--project/src/ui/gen-ui.c2
-rw-r--r--project/src/ui/tab-wbmgt.inc5
-rw-r--r--project/src/ui/tab-wctct.inc5
-rw-r--r--project/src/ui/tab-wimgt.inc5
-rw-r--r--project/src/ui/tab-wkclt.inc53
-rw-r--r--project/src/ui/tab-wkmpt.inc5
-rw-r--r--project/src/ui/tab-wlect.inc12
-rw-r--r--project/src/ui/tab-wmdlt.inc5
-rw-r--r--project/src/ui/tab-wpatt.inc5
-rw-r--r--project/src/ui/tab-wstrt.inc25
-rw-r--r--project/src/ui/tab-wszst.inc73
-rw-r--r--project/src/ui/ui-wbmgt.c26
-rw-r--r--project/src/ui/ui-wbmgt.h6
-rw-r--r--project/src/ui/ui-wctct.c26
-rw-r--r--project/src/ui/ui-wctct.h6
-rw-r--r--project/src/ui/ui-wimgt.c27
-rw-r--r--project/src/ui/ui-wimgt.h6
-rw-r--r--project/src/ui/ui-wkclt.c366
-rw-r--r--project/src/ui/ui-wkclt.h35
-rw-r--r--project/src/ui/ui-wkmpt.c28
-rw-r--r--project/src/ui/ui-wkmpt.h6
-rw-r--r--project/src/ui/ui-wlect.c202
-rw-r--r--project/src/ui/ui-wlect.h12
-rw-r--r--project/src/ui/ui-wmdlt.c27
-rw-r--r--project/src/ui/ui-wmdlt.h6
-rw-r--r--project/src/ui/ui-wpatt.c27
-rw-r--r--project/src/ui/ui-wpatt.h6
-rw-r--r--project/src/ui/ui-wstrt.c161
-rw-r--r--project/src/ui/ui-wstrt.h13
-rw-r--r--project/src/ui/ui-wszst.c708
-rw-r--r--project/src/ui/ui-wszst.h23
-rw-r--r--project/src/ui/ui.def377
-rw-r--r--project/src/ui/ui.h2
-rw-r--r--project/src/wbmgt.c8
-rw-r--r--project/src/wctct.c8
-rw-r--r--project/src/wimgt.c8
-rw-r--r--project/src/wkclt.c185
-rw-r--r--project/src/wkmpt.c10
-rw-r--r--project/src/wlect.c22
-rw-r--r--project/src/wmdlt.c8
-rw-r--r--project/src/wpatt.c8
-rw-r--r--project/src/wstrt.c70
-rw-r--r--project/src/wszst.c516
-rw-r--r--project/src/wtest.c125
117 files changed, 4925 insertions, 1661 deletions
diff --git a/project/src/addr_port.inc b/project/src/addr_port.inc
index a6b78b3..d949d79 100644
--- a/project/src/addr_port.inc
+++ b/project/src/addr_port.inc
@@ -3,130 +3,77 @@ static addr_port_version_t addr_port_version =
{
.magic = "PORT-DB",
.db_version = 1,
- .revision = 8458,
- .timestamp = 1620190598,
- .n_records = 2050
+ .revision = 8516,
+ .timestamp = 1647001915,
+ .n_records = 1685
};
-static const addr_port_t addr_port_0[2050] =
+static const addr_port_t addr_port_0[1685] =
{
{{ 0x80000000, 0x80000000, 0x80000000, 0x80000000 }, 0x8040|0, 0x8040|0 }, // HEAD
- {{ 0x80008040, 0x800d2ce8, 0x800d2ca8, 0x800d2de8 }, 0xc|2, 0xc|2 }, // T1
- {{ 0x80008054, 0x8001f964, 0x800203e8, 0x8002052c }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80008090, 0x80008050, 0x80008024, 0x8000812c }, 0x10|2, 0x10|2 }, // T1
- {{ 0x800080ac, 0x8000806c, 0x80008024, 0x8000812c }, 0x10|2, 0x10|2 }, // T1
- {{ 0x800080c8, 0x80008088, 0x80008024, 0x8000812c }, 0x10|2, 0x10|2 }, // T1
{{ 0x80008114, 0x800080d4, 0x80008070, 0x80008188 }, 0xbc|2, 0xbc|2 }, // T1
{{ 0x800081e0, 0x800081a0, 0x8000813c, 0x80008250 }, 0x8|3, 0x8|3 }, // T1
- {{ 0x80008218, 0x800081d8, 0x80008174, 0x80060894 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80008220, 0x800081e0, 0x8000817c, 0x800082a4 }, 0x68|2, 0x68|2 }, // T1
{{ 0x8000829c, 0x8000825c, 0x800081f8, 0x8000841c }, 0x8f8|2, 0x8f8|2 }, // T1
- {{ 0x80008ba0, 0x80008b60, 0x80008afc, 0x800498a8 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80008bfc, 0x80008bbc, 0x80008b58, 0x80008d4c }, 0x7f4|2, 0x7f4|2 }, // T1
- {{ 0x800093f8, 0x800093b8, 0x80009354, 0x800d6970 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80009404, 0x800093c4, 0x80009360, 0x80020dac }, 0x4|3, 0x4|3 }, // T1
{{ 0x80009408, 0x800093c8, 0x80009364, 0x8000954c }, 0x24|2, 0x24|2 }, // T1
- {{ 0x8000942c, 0x800093ec, 0x80009388, 0x800d07c0 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80009440, 0x80009400, 0x8000939c, 0x800d4228 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80009458, 0x80009418, 0x800093b4, 0x80009560 }, 0x18b4|0, 0x18ec|1 }, // T1
{{ 0x8000ad44, 0x8000ad04, 0x8000aca0, 0x8000ae4c }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8000ad48, 0x8000ad08, 0x8000aca4, 0x8000ae40 }, 0x4|3, 0x4|3 }, // T1
{{ 0x8000ad4c, 0x8000ad0c, 0x8000aca8, 0x8000ae64 }, 0x8|3, 0x8|3 }, // T1
{{ 0x8000ad58, 0x8000ad18, 0x8000acb4, 0x8000ae50 }, 0x4|3, 0x4|3 }, // T1
{{ 0x8000ad5c, 0x8000ad1c, 0x8000acb8, 0x8000ae74 }, 0x8|3, 0x8|3 }, // T1
{{ 0x8000ad64, 0x8000ad24, 0x8000acc0, 0x8000ae5c }, 0x8|3, 0x8|3 }, // T1
{{ 0x8000ad6c, 0x8000ad2c, 0x8000acc8, 0x8000ae84 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8000ad70, 0x8000ad30, 0x8000accc, 0x8000ae68 }, 0x24|2, 0x24|2 }, // T1
- {{ 0x8000ad94, 0x8000ad54, 0x8000acf0, 0x800d2f2c }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8000ad98, 0x8000ad58, 0x8000acf4, 0x8000ae90 }, 0xc|2, 0xc|2 }, // T1
+ {{ 0x8000ad70, 0x8000ad30, 0x8000accc, 0x8000ae68 }, 0x34|2, 0x34|2 }, // T1
{{ 0x8000ada4, 0x8000ad64, 0x8000ad00, 0x8000aebc }, 0x14|2, 0x14|2 }, // T1
{{ 0x8000adc0, 0x8000ad8c, 0x8000ad1c, 0x8000aed8 }, 0x14|2, 0x14|2 }, // T1
- {{ 0x8000ade0, 0x800519d8, 0x80051998, 0x80051ad8 }, 0x4|3, 0x4|3 }, // T1
{{ 0x8000adf8, 0x8000adbc, 0x8000ad4c, 0x8000af08 }, 0xa0|2, 0xa0|2 }, // T1
- {{ 0x8000aeb4, 0x80023810, 0x800237d0, 0x80023910 }, 0x8|3, 0x8|3 }, // T1
- {{ 0x8000aedc, 0x8002380c, 0x800237cc, 0x8002390c }, 0xc|2, 0xc|2 }, // T1
{{ 0x8000af20, 0x8000ae80, 0x8000ae44, 0x8000afcc }, 0x6e4|2, 0x6e4|2 }, // T1
{{ 0x8000b654, 0x8000b5b4, 0x8000b578, 0x8000b6bc }, 0x4c|2, 0x4c|2 }, // T1
- {{ 0x8000b6b0, 0x80098048, 0x8000b5d4, 0x8000b718 }, 0x4|3, 0x4|3 }, // T1
{{ 0x8000b6b4, 0x80021048, 0x8000b5d8, 0x8000b71c }, 0xac0|0, 0xac0|0 }, // T1
{{ 0x8000c174, 0x8000b614, 0x8000c098, 0x8000c1dc }, 0x1021c|0, 0x10248|1 }, // T1
- {{ 0x8001c3bc, 0x8001b85c, 0x8001c2e0, 0x8001c424 }, 0x68|2, 0x94|3 }, // T1
+ {{ 0x8001c3bc, 0x8001b85c, 0x8001c2e0, 0x8001c424 }, 0x68|2, 0x68|2 }, // T1
{{ 0x8001c450, 0x8001b8f0, 0x8001c374, 0x8001c4b8 }, 0x5750|0, 0x5750|0 }, // T1
- {{ 0x80021ba8, 0x80021b08, 0x800b2638, 0x800b2778 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80021bac, 0x80021b0c, 0x80021acc, 0x800b277c }, 0x4|3, 0x4|3 }, // T1
{{ 0x80021bb0, 0x80021b10, 0x80021ad0, 0x80021c10 }, 0x1e508|0, 0x1e530|1 }, // T1
- {{ 0x800400e0, 0x80040040, 0x80040000, 0x80040140 }, 0x2a10|2, 0x2a38|3 }, // T1
- {{ 0x80042b18, 0x80042a78, 0x80042a38, 0x80042b78 }, 0x75400|2, 0x75400|2 }, // T1
- {{ 0x800b7f18, 0x800b42d8, 0x800b4298, 0x800b43d8 }, 0x1318|2, 0x1318|2 }, // T1
- {{ 0x800b9230, 0x800b9190, 0x800b9150, 0x800b9290 }, 0x6d0c|2, 0x6d0c|2 }, // T1
- {{ 0x800bff3c, 0x800bfe9c, 0x800bfe5c, 0x8012e598 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x800bff40, 0x800bfea0, 0x800bfe60, 0x800bffa0 }, 0x2a4f0|0, 0x2a4f0|0 }, // T1
- {{ 0x800ea474, 0x800ea3d4, 0x800ea394, 0x800ea4ec }, 0xa74|2, 0xa74|2 }, // T1
- {{ 0x800eaee8, 0x800eae48, 0x800eae08, 0x800ed580 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x800eaeec, 0x800eae4c, 0x800eae0c, 0x800eaf64 }, 0x4f5a4|0, 0x4f634|1 }, // T1
- {{ 0x8013a520, 0x8013a480, 0x8013a440, 0x8013a598 }, 0x228|2, 0x2b8|3 }, // T1
+ {{ 0x800400e0, 0x80040040, 0x80040000, 0x80040140 }, 0x2a10|2, 0x2a10|2 }, // T1
+ {{ 0x80042b18, 0x80042a78, 0x80042a38, 0x80042b78 }, 0x75400|0, 0x76718|1 }, // T1
+ {{ 0x800b9230, 0x800b9190, 0x800b9150, 0x800b9290 }, 0x31200|0, 0x31200|0 }, // T1
+ {{ 0x800ea474, 0x800ea3d4, 0x800ea394, 0x800ea4ec }, 0x5001c|0, 0x500ac|1 }, // T1
+ {{ 0x8013a520, 0x8013a480, 0x8013a440, 0x8013a598 }, 0x228|2, 0x228|2 }, // T1
{{ 0x8013a7d8, 0x8013a738, 0x8013a6f8, 0x8013a850 }, 0x29b10|0, 0x29b10|0 }, // T1
- {{ 0x80164300, 0x80164260, 0x80164220, 0x801646a4 }, 0xc|2, 0xc|2 }, // T1
{{ 0x8016430c, 0x8016426c, 0x8016422c, 0x801643a8 }, 0x103dc|0, 0x103dc|0 }, // T1
{{ 0x801746f8, 0x80174658, 0x80174618, 0x80174834 }, 0x54c|2, 0x54c|2 }, // T1
- {{ 0x80174c44, 0x80174ba4, 0x80174b64, 0x80186884 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80174c4c, 0x80174bac, 0x80174b6c, 0x80174da0 }, 0x29c|2, 0x29c|2 }, // T1
{{ 0x80174ef0, 0x80174e50, 0x80174e10, 0x80175178 }, 0xa74|2, 0xa74|2 }, // T1
- {{ 0x80175970, 0x801758d0, 0x80175890, 0x800e4bd4 }, 0x8|3, 0x8|3 }, // T1
- {{ 0x80175978, 0x801758d8, 0x80175898, 0x80175bf0 }, 0x11c0|2, 0x11c0|2 }, // T1
- {{ 0x80176b38, 0x80176a98, 0x80176a58, 0x800fc840 }, 0x1c|2, 0x1c|2 }, // T1
- {{ 0x80176b54, 0x80176ab4, 0x80176a74, 0x80176dcc }, 0x64|2, 0x64|2 }, // T1
- {{ 0x80176bc8, 0x80176b28, 0x80176ae8, 0x80176e4c }, 0xb0|2, 0xb0|2 }, // T1
- {{ 0x80176c78, 0x80176bd8, 0x80176b98, 0x802435f0 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80176c7c, 0x80176bdc, 0x80176b9c, 0x80176f00 }, 0x18|2, 0x18|2 }, // T1
- {{ 0x80176ca8, 0x80176c08, 0x80176bc8, 0x80176f38 }, 0xb0|2, 0xb0|2 }, // T1
- {{ 0x80176d58, 0x80176cb8, 0x80176c78, 0x802435f0 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80176d5c, 0x80176cbc, 0x80176c7c, 0x80176fec }, 0x764|2, 0x764|2 }, // T1
+ {{ 0x80175978, 0x801758d8, 0x80175898, 0x80175bf0 }, 0x1240|2, 0x1240|2 }, // T1
+ {{ 0x80176bc8, 0x80176b28, 0x80176ae8, 0x80176e4c }, 0xcc|2, 0xcc|2 }, // T1
+ {{ 0x80176ca8, 0x80176c08, 0x80176bc8, 0x80176f38 }, 0x818|2, 0x818|2 }, // T1
{{ 0x801774dc, 0x8017743c, 0x801773fc, 0x80177c54 }, 0xc|2, 0xc|2 }, // T1
{{ 0x80177504, 0x80177464, 0x80177424, 0x8017776c }, 0x10|2, 0x10|2 }, // T1
- {{ 0x80177570, 0x801774d0, 0x80177490, 0x80113380 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80177578, 0x801774d8, 0x80177498, 0x8017f594 }, 0x8|3, 0x8|3 }, // T1
{{ 0x801775a0, 0x80177500, 0x801774c0, 0x8017b1a8 }, 0xc|2, 0xc|2 }, // T1
- {{ 0x801775c4, 0x80177524, 0x801774e4, 0x8017af68 }, 0x2c|2, 0x2c|2 }, // T1
- {{ 0x80177614, 0x80177574, 0x80177534, 0x80112700 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80177618, 0x80177578, 0x80177538, 0x8017afbc }, 0x38|2, 0x38|2 }, // T1
- {{ 0x80177650, 0x801775b0, 0x80177570, 0x8021d674 }, 0x8|3, 0x8|3 }, // T1
- {{ 0x80177658, 0x801775b8, 0x80177578, 0x8017affc }, 0x74|2, 0x74|2 }, // T1
+ {{ 0x801775c4, 0x80177524, 0x801774e4, 0x8017af68 }, 0x2c|2, 0x54|3 }, // T1
+ {{ 0x80177618, 0x80177578, 0x80177538, 0x8017afbc }, 0xb4|2, 0xb4|2 }, // T1
{{ 0x80177708, 0x80177668, 0x80177628, 0x8017f594 }, 0x8|3, 0x8|3 }, // T1
- {{ 0x80177750, 0x801776b0, 0x80177670, 0x801bafac }, 0x8|3, 0x8|3 }, // T1
{{ 0x80177760, 0x801776c0, 0x80177680, 0x8017f9a4 }, 0x18|2, 0x18|2 }, // T1
{{ 0x80177788, 0x801776e8, 0x801776a8, 0x80177ab4 }, 0x28|2, 0x28|2 }, // T1
- {{ 0x801777bc, 0x8017771c, 0x801776dc, 0x80177aec }, 0x8|3, 0x8|3 }, // T1
- {{ 0x801777c4, 0x80177724, 0x801776e4, 0x800fcaec }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801777cc, 0x8017772c, 0x801776ec, 0x80177afc }, 0x54|2, 0x54|2 }, // T1
+ {{ 0x801777bc, 0x8017771c, 0x801776dc, 0x80177aec }, 0x64|2, 0x64|2 }, // T1
{{ 0x80177828, 0x80177788, 0x80177748, 0x80177b54 }, 0xc|2, 0xc|2 }, // T1
{{ 0x80177834, 0x80177794, 0x80177754, 0x80177b68 }, 0x90|2, 0x90|2 }, // T1
{{ 0x80177904, 0x80177864, 0x80177824, 0x80177c90 }, 0x3c|2, 0x3c|2 }, // T1
- {{ 0x80177954, 0x801778b4, 0x80177874, 0x801ad274 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80177958, 0x801778b8, 0x80177878, 0x80177ce0 }, 0x3c|2, 0x3c|2 }, // T1
- {{ 0x801779a0, 0x80177900, 0x801778c0, 0x801ad270 }, 0x8|3, 0x8|3 }, // T1
{{ 0x801779a8, 0x80177908, 0x801778c8, 0x80177d2c }, 0x64|2, 0x64|2 }, // T1
- {{ 0x80177a14, 0x80177974, 0x80177934, 0x801ad274 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80177a18, 0x80177978, 0x80177938, 0x80177d98 }, 0xe0|2, 0xe0|2 }, // T1
- {{ 0x80177b20, 0x80177a80, 0x80177a40, 0x801ad274 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80177b24, 0x80177a84, 0x80177a44, 0x80177ea0 }, 0xf8|2, 0xf8|2 }, // T1
- {{ 0x80177c1c, 0x80177b7c, 0x80177b3c, 0x800a0ec4 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80177c20, 0x80177b80, 0x80177b40, 0x80177f9c }, 0x2c|2, 0x2c|2 }, // T1
- {{ 0x80177c74, 0x80177bd4, 0x80177b94, 0x801ad274 }, 0x4|3, 0x4|3 }, // T1
+ {{ 0x80177b24, 0x80177a84, 0x80177a44, 0x80177ea0 }, 0x128|2, 0x128|2 }, // T1
{{ 0x80177c78, 0x80177bd8, 0x80177b98, 0x80177ff0 }, 0x134|2, 0x134|2 }, // T1
- {{ 0x80177db8, 0x80177d18, 0x80177cd8, 0x801ad274 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80177dbc, 0x80177d1c, 0x80177cdc, 0x80178130 }, 0xe0|2, 0xe0|2 }, // T1
{{ 0x80177ea8, 0x80177e08, 0x80177dc8, 0x80178218 }, 0x1c|2, 0x1c|2 }, // T1
{{ 0x80177ed4, 0x80177e34, 0x80177df4, 0x80178240 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80177eec, 0x80177e4c, 0x80177e0c, 0x8017825c }, 0x64|2, 0x64|2 }, // T1
{{ 0x80177f60, 0x80177ec0, 0x80177e80, 0x80178810 }, 0x60|2, 0x60|2 }, // T1
- {{ 0x80177fe0, 0x80177f40, 0x80177f00, 0x800f5b88 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80177ff8, 0x80177f58, 0x80177f18, 0x801782e0 }, 0x28|2, 0x28|2 }, // T1
- {{ 0x80178020, 0x80177f80, 0x80177f40, 0x801ad270 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80178028, 0x80177f88, 0x80177f48, 0x8017830c }, 0x22c|2, 0x22c|2 }, // T1
- {{ 0x80178260, 0x801781c0, 0x80178180, 0x801ad138 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80178274, 0x801781d4, 0x80178194, 0x80178550 }, 0x40|2, 0x40|2 }, // T1
- {{ 0x801782c0, 0x80178220, 0x801781e0, 0x801ad138 }, 0x4|3, 0x4|3 }, // T1
{{ 0x801782d0, 0x80178230, 0x801781f0, 0x8017854c }, 0x8|3, 0x8|3 }, // T1
{{ 0x801782d8, 0x80178238, 0x801781f8, 0x801785ac }, 0x158|2, 0x158|2 }, // T1
{{ 0x80178454, 0x801783b4, 0x80178374, 0x8017a304 }, 0x4|3, 0x4|3 }, // T1
@@ -134,47 +81,21 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x801784b4, 0x80178414, 0x801783d4, 0x801787c0 }, 0x8|3, 0x8|3 }, // T1
{{ 0x801784c0, 0x80178420, 0x801783e0, 0x801787c8 }, 0x30|2, 0x30|2 }, // T1
{{ 0x801784f0, 0x80178450, 0x80178410, 0x801787fc }, 0x8|3, 0x8|3 }, // T1
- {{ 0x80178514, 0x80178474, 0x80178434, 0x801788a4 }, 0x2b0|2, 0x2b0|2 }, // T1
- {{ 0x801787c4, 0x80178724, 0x801786e4, 0x800f3954 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801787c8, 0x80178728, 0x801786e8, 0x80178b58 }, 0x14|2, 0x14|2 }, // T1
- {{ 0x801787dc, 0x8017873c, 0x801786fc, 0x80186414 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801787e0, 0x80178740, 0x80178700, 0x80178b70 }, 0x48|2, 0x48|2 }, // T1
- {{ 0x80178828, 0x80178788, 0x80178748, 0x80186414 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017882c, 0x8017878c, 0x8017874c, 0x80178bbc }, 0x360|2, 0x360|2 }, // T1
- {{ 0x80178b8c, 0x80178aec, 0x80178aac, 0x8009b0bc }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80178b90, 0x80178af0, 0x80178ab0, 0x80178f20 }, 0x730|2, 0x730|2 }, // T1
- {{ 0x8017931c, 0x8017927c, 0x8017923c, 0x80238b80 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80179320, 0x80179280, 0x80179240, 0x80238b9c }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80179328, 0x80179288, 0x80179248, 0x801e6a08 }, 0x4|3, 0x4|3 }, // T1
+ {{ 0x80178514, 0x80178474, 0x80178434, 0x801788a4 }, 0xdac|2, 0xdac|2 }, // T1
{{ 0x8017932c, 0x8017928c, 0x8017924c, 0x801796ec }, 0x4|3, 0x4|3 }, // T1
{{ 0x80179330, 0x80179290, 0x80179250, 0x80179518 }, 0x10|2, 0x10|2 }, // T1
- {{ 0x80179340, 0x801792a0, 0x80179260, 0x8016d520 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80179378, 0x801792d8, 0x80179298, 0x80238b80 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80179384, 0x801792e4, 0x801792a4, 0x80179660 }, 0x240|2, 0x240|2 }, // T1
- {{ 0x801795c4, 0x80179524, 0x801794e4, 0x80221dd4 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801795c8, 0x80179528, 0x801794e8, 0x801798a4 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801795cc, 0x8017952c, 0x801794ec, 0x802222fc }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801795d0, 0x80179530, 0x801794f0, 0x801798ac }, 0x14|2, 0x14|2 }, // T1
- {{ 0x801795e4, 0x80179544, 0x80179504, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801795e8, 0x80179548, 0x80179508, 0x801798c4 }, 0x584|2, 0x584|2 }, // T1
+ {{ 0x80179384, 0x801792e4, 0x801792a4, 0x80179660 }, 0x7e8|2, 0x7e8|2 }, // T1
{{ 0x80179b6c, 0x80179acc, 0x80179a8c, 0x80179e44 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80179b70, 0x80179ad0, 0x80179a90, 0x80179e4c }, 0xd4|2, 0xd4|2 }, // T1
- {{ 0x80179c44, 0x80179ba4, 0x80179b64, 0x8009ab24 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80179c48, 0x80179ba8, 0x80179b68, 0x80179f24 }, 0x2fc|2, 0x2fc|2 }, // T1
- {{ 0x80179f44, 0x80179ea4, 0x80179e64, 0x8009ab24 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80179f48, 0x80179ea8, 0x80179e68, 0x8017a224 }, 0x4c|2, 0x4c|2 }, // T1
+ {{ 0x80179b70, 0x80179ad0, 0x80179a90, 0x80179e4c }, 0x424|2, 0x424|2 }, // T1
{{ 0x80179f94, 0x80179ef4, 0x80179eb4, 0x8017a1ec }, 0x24|2, 0x24|2 }, // T1
{{ 0x80179fb8, 0x80179f18, 0x80179ed8, 0x80179e14 }, 0x4|3, 0x4|3 }, // T1
{{ 0x80179fbc, 0x80179f1c, 0x80179edc, 0x8017a2a4 }, 0x30|2, 0x30|2 }, // T1
{{ 0x80179fec, 0x80179f4c, 0x80179f0c, 0x801799bc }, 0x4|3, 0x4|3 }, // T1
- {{ 0x80179ff0, 0x80179f50, 0x80179f10, 0x8017a2d8 }, 0x18|2, 0x18|2 }, // T1
- {{ 0x8017a008, 0x80179f68, 0x80179f28, 0x80085c7c }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017a00c, 0x80179f6c, 0x80179f2c, 0x8017a2f4 }, 0x20|2, 0x20|2 }, // T1
+ {{ 0x80179ff0, 0x80179f50, 0x80179f10, 0x8017a2d8 }, 0x3c|2, 0x3c|2 }, // T1
{{ 0x8017a02c, 0x80179f8c, 0x80179f4c, 0x801799bc }, 0x4|3, 0x4|3 }, // T1
{{ 0x8017a030, 0x80179f90, 0x80179f50, 0x8017a318 }, 0x48|2, 0x48|2 }, // T1
{{ 0x8017a078, 0x80179fd8, 0x80179f98, 0x801799bc }, 0x4|3, 0x4|3 }, // T1
{{ 0x8017a07c, 0x80179fdc, 0x80179f9c, 0x8017a364 }, 0x8|3, 0x8|3 }, // T1
- {{ 0x8017a0bc, 0x8017a01c, 0x80179fdc, 0x80128c34 }, 0x4|3, 0x4|3 }, // T1
{{ 0x8017a0c0, 0x8017a020, 0x80179fe0, 0x8017a3b0 }, 0x214|2, 0x214|2 }, // T1
{{ 0x8017a2d4, 0x8017a234, 0x8017a1f4, 0x8017987c }, 0x8|3, 0x8|3 }, // T1
{{ 0x8017a2dc, 0x8017a23c, 0x8017a1fc, 0x8017a5cc }, 0x18|2, 0x18|2 }, // T1
@@ -186,122 +107,40 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x8017a658, 0x8017a5b8, 0x8017a578, 0x801799bc }, 0x4|3, 0x4|3 }, // T1
{{ 0x8017a65c, 0x8017a5bc, 0x8017a57c, 0x8017a94c }, 0x50|2, 0x50|2 }, // T1
{{ 0x8017a6ac, 0x8017a60c, 0x8017a5cc, 0x801799bc }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017a6b0, 0x8017a610, 0x8017a5d0, 0x8017a9a0 }, 0xb4|2, 0xb4|2 }, // T1
- {{ 0x8017a764, 0x8017a6c4, 0x8017a684, 0x8012bef0 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017a768, 0x8017a6c8, 0x8017a688, 0x8017aa58 }, 0xc|2, 0xc|2 }, // T1
- {{ 0x8017a774, 0x8017a6d4, 0x8017a694, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017a778, 0x8017a6d8, 0x8017a698, 0x8017aa68 }, 0x5c|2, 0x5c|2 }, // T1
- {{ 0x8017a7d4, 0x8017a734, 0x8017a6f4, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017a7d8, 0x8017a738, 0x8017a6f8, 0x8017aac8 }, 0x58|2, 0x58|2 }, // T1
- {{ 0x8017a830, 0x8017a790, 0x8017a750, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017a834, 0x8017a794, 0x8017a754, 0x8017ab24 }, 0x12c|2, 0x12c|2 }, // T1
+ {{ 0x8017a6b0, 0x8017a610, 0x8017a5d0, 0x8017a9a0 }, 0x2b0|2, 0x2b0|2 }, // T1
{{ 0x8017a960, 0x8017a8c0, 0x8017a880, 0x8017aa18 }, 0x4|3, 0x4|3 }, // T1
{{ 0x8017a964, 0x8017a8c4, 0x8017a884, 0x8017ac54 }, 0x14|2, 0x14|2 }, // T1
{{ 0x8017a97c, 0x8017a8dc, 0x8017a89c, 0x8017aa34 }, 0x18|2, 0x18|2 }, // T1
- {{ 0x8017a994, 0x8017a8f4, 0x8017a8b4, 0x8017ac84 }, 0x298|2, 0x298|2 }, // T1
- {{ 0x8017ac2c, 0x8017ab8c, 0x8017ab4c, 0x8021ee90 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017ac30, 0x8017ab90, 0x8017ab50, 0x8017af20 }, 0xc|2, 0xc|2 }, // T1
- {{ 0x8017ac44, 0x8017aba4, 0x8017ab64, 0x801cc084 }, 0x8|3, 0x8|3 }, // T1
+ {{ 0x8017a994, 0x8017a8f4, 0x8017a8b4, 0x8017ac84 }, 0x2a8|2, 0x2a8|2 }, // T1
{{ 0x8017ac4c, 0x8017abac, 0x8017ab6c, 0x8017b094 }, 0x34c|2, 0x34c|2 }, // T1
{{ 0x8017afa4, 0x8017af04, 0x8017aec4, 0x8017b3f4 }, 0x390|2, 0x390|2 }, // T1
- {{ 0x8017b338, 0x8017b298, 0x8017b258, 0x8017b790 }, 0x10a0|2, 0x10a0|2 }, // T1
- {{ 0x8017c3d8, 0x8017c338, 0x8017c2f8, 0x800a2668 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017c3dc, 0x8017c33c, 0x8017c2fc, 0x8017c834 }, 0x1a0|2, 0x1a0|2 }, // T1
- {{ 0x8017c57c, 0x8017c4dc, 0x8017c49c, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017c580, 0x8017c4e0, 0x8017c4a0, 0x8017c9d8 }, 0x5c|2, 0x5c|2 }, // T1
- {{ 0x8017c5dc, 0x8017c53c, 0x8017c4fc, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017c5e0, 0x8017c540, 0x8017c500, 0x8017ca38 }, 0x58|2, 0x58|2 }, // T1
- {{ 0x8017c638, 0x8017c598, 0x8017c558, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017c63c, 0x8017c59c, 0x8017c55c, 0x8017ca94 }, 0x14c|2, 0x14c|2 }, // T1
+ {{ 0x8017b338, 0x8017b298, 0x8017b258, 0x8017b790 }, 0x1450|2, 0x1450|2 }, // T1
{{ 0x8017c788, 0x8017c6e8, 0x8017c6a8, 0x8017c910 }, 0x8|3, 0x8|3 }, // T1
- {{ 0x8017c790, 0x8017c6f0, 0x8017c6b0, 0x8017cbe8 }, 0xb8|2, 0xb8|2 }, // T1
- {{ 0x8017c848, 0x8017c7a8, 0x8017c768, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017c84c, 0x8017c7ac, 0x8017c76c, 0x8017cca4 }, 0x5c|2, 0x5c|2 }, // T1
- {{ 0x8017c8a8, 0x8017c808, 0x8017c7c8, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017c8ac, 0x8017c80c, 0x8017c7cc, 0x8017cd04 }, 0x58|2, 0x58|2 }, // T1
- {{ 0x8017c904, 0x8017c864, 0x8017c824, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017c908, 0x8017c868, 0x8017c828, 0x8017cd60 }, 0x14c|2, 0x14c|2 }, // T1
+ {{ 0x8017c790, 0x8017c6f0, 0x8017c6b0, 0x8017cbe8 }, 0x2c4|2, 0x2c4|2 }, // T1
{{ 0x8017ca54, 0x8017c9b4, 0x8017c974, 0x8017c910 }, 0x8|3, 0x8|3 }, // T1
- {{ 0x8017ca5c, 0x8017c9bc, 0x8017c97c, 0x8017ceb4 }, 0x750|2, 0x750|2 }, // T1
- {{ 0x8017d1ac, 0x8017d10c, 0x8017d0cc, 0x801f5920 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017d1b0, 0x8017d110, 0x8017d0d0, 0x8017d608 }, 0x1c|2, 0x1c|2 }, // T1
- {{ 0x8017d1cc, 0x8017d12c, 0x8017d0ec, 0x801fa410 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017d1d0, 0x8017d130, 0x8017d0f0, 0x8009844c }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017d1d4, 0x8017d134, 0x8017d0f4, 0x8017d62c }, 0xa58|2, 0xa58|2 }, // T1
- {{ 0x8017dc2c, 0x8017db8c, 0x8017db4c, 0x80089d3c }, 0x8|3, 0x8|3 }, // T1
- {{ 0x8017dc34, 0x8017db94, 0x8017db54, 0x8017e08c }, 0x4a4|2, 0x4a4|2 }, // T1
- {{ 0x8017e0d8, 0x8017e038, 0x8017dff8, 0x800f3a18 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017e0dc, 0x8017e03c, 0x8017dffc, 0x8017e534 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017e0e0, 0x8017e040, 0x8017e000, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017e0e4, 0x8017e044, 0x8017e004, 0x8017e53c }, 0xe8|2, 0xe8|2 }, // T1
- {{ 0x8017e1cc, 0x8017e12c, 0x8017e0ec, 0x80186414 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017e1d0, 0x8017e130, 0x8017e0f0, 0x8017e628 }, 0x4c|2, 0x4c|2 }, // T1
- {{ 0x8017e21c, 0x8017e17c, 0x8017e13c, 0x80186414 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017e220, 0x8017e180, 0x8017e140, 0x8017e678 }, 0x80|2, 0x80|2 }, // T1
- {{ 0x8017e2a0, 0x8017e200, 0x8017e1c0, 0x80186414 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017e2a4, 0x8017e204, 0x8017e1c4, 0x8017e6fc }, 0x100|2, 0x100|2 }, // T1
- {{ 0x8017e3a4, 0x8017e304, 0x8017e2c4, 0x80102bd8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017e3a8, 0x8017e308, 0x8017e2c8, 0x8017e800 }, 0x140|2, 0x140|2 }, // T1
- {{ 0x8017e4e8, 0x8017e448, 0x8017e408, 0x80186414 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017e4ec, 0x8017e44c, 0x8017e40c, 0x8017e944 }, 0x80|2, 0x80|2 }, // T1
- {{ 0x8017e56c, 0x8017e4cc, 0x8017e48c, 0x80186414 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017e570, 0x8017e4d0, 0x8017e490, 0x8017e9c8 }, 0x650|2, 0x650|2 }, // T1
- {{ 0x8017ebc0, 0x8017eb20, 0x8017eae0, 0x801a4be8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017ebc4, 0x8017eb24, 0x8017eae4, 0x8017f01c }, 0xec|2, 0xec|2 }, // T1
+ {{ 0x8017ca5c, 0x8017c9bc, 0x8017c97c, 0x8017ceb4 }, 0x2254|2, 0x2254|2 }, // T1
{{ 0x8017ecb4, 0x8017ec14, 0x8017ebd4, 0x8017eff4 }, 0x8|3, 0x8|3 }, // T1
- {{ 0x8017ece8, 0x8017ec48, 0x8017ec08, 0x8017f190 }, 0x33c|2, 0x33c|2 }, // T1
- {{ 0x8017f05c, 0x8017efbc, 0x8017ef7c, 0x801fade4 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017f068, 0x8017efc8, 0x8017ef88, 0x8017f510 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017f06c, 0x8017efcc, 0x8017ef8c, 0x80096e38 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017f080, 0x8017efe0, 0x8017efa0, 0x8013cd50 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017f084, 0x8017efe4, 0x8017efa4, 0x8017f52c }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017f0a4, 0x8017f004, 0x8017efc4, 0x80096e38 }, 0x4|3, 0x4|3 }, // T1
+ {{ 0x8017ece8, 0x8017ec48, 0x8017ec08, 0x8017f190 }, 0x33c|2, 0x380|3 }, // T1
+ {{ 0x8017f068, 0x8017efc8, 0x8017ef88, 0x8017f510 }, 0x20|2, 0x64|3 }, // T1
{{ 0x8017f0cc, 0x8017f02c, 0x8017efec, 0x8017f574 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017f0e8, 0x8017f048, 0x8017f008, 0x8017f5ac }, 0x150|2, 0x150|2 }, // T1
- {{ 0x8017f238, 0x8017f198, 0x8017f158, 0x8008f338 }, 0x8|3, 0x8|3 }, // T1
- {{ 0x8017f240, 0x8017f1a0, 0x8017f160, 0x8017f704 }, 0xe0|2, 0xe0|2 }, // T1
- {{ 0x8017f320, 0x8017f280, 0x8017f240, 0x802420dc }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017f324, 0x8017f284, 0x8017f244, 0x8017f7e8 }, 0x64|2, 0x64|2 }, // T1
- {{ 0x8017f388, 0x8017f2e8, 0x8017f2a8, 0x802421f4 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8017f38c, 0x8017f2ec, 0x8017f2ac, 0x8017f850 }, 0xac|2, 0xac|2 }, // T1
+ {{ 0x8017f0e8, 0x8017f048, 0x8017f008, 0x8017f5ac }, 0x350|2, 0x350|2 }, // T1
{{ 0x8017f438, 0x8017f398, 0x8017f358, 0x8017f830 }, 0x8|3, 0x8|3 }, // T1
{{ 0x8017f440, 0x8017f3a0, 0x8017f360, 0x8017f904 }, 0x64|2, 0x64|2 }, // T1
- {{ 0x8017f4ac, 0x8017f40c, 0x8017f3cc, 0x8014a090 }, 0xc|2, 0xc|2 }, // T1
{{ 0x8017f4b8, 0x8017f418, 0x8017f3d8, 0x801778fc }, 0x1b4|2, 0x1b4|2 }, // T1
- {{ 0x8017f670, 0x8017f5d0, 0x8017f590, 0x8017f9cc }, 0x20acc|0, 0x20acc|0 }, // T1
- {{ 0x801a013c, 0x801e7330, 0x801e72f0, 0x801e772c }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801a0140, 0x801a00a0, 0x801a0060, 0x801a049c }, 0x56a4|0, 0x56a4|0 }, // T1
- {{ 0x801a57e4, 0x80242a08, 0x801a5704, 0x801a5b40 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801a57e8, 0x801a5748, 0x801a5708, 0x801a5b44 }, 0x1cc|2, 0x1cc|2 }, // T1
- {{ 0x801a59e0, 0x802070d4, 0x801a5900, 0x801a5d3c }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801a59e8, 0x801a5948, 0x801a5908, 0x801a5d44 }, 0x368|2, 0x368|2 }, // T1
- {{ 0x801a5d7c, 0x802070d4, 0x801a5c9c, 0x801a60d8 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801a5d84, 0x801a5ce4, 0x801a5ca4, 0x801a60e0 }, 0x3bc|2, 0x3bc|2 }, // T1
- {{ 0x801a6164, 0x802070d4, 0x801a6084, 0x801a64c0 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801a616c, 0x801a60cc, 0x801a608c, 0x801a64c8 }, 0x264|2, 0x264|2 }, // T1
- {{ 0x801a63fc, 0x802070d4, 0x801a631c, 0x801a6758 }, 0x4|3, 0x4|3 }, // T1
+ {{ 0x8017f670, 0x8017f5d0, 0x8017f590, 0x8017f9cc }, 0x26344|0, 0x26378|1 }, // T1
+ {{ 0x801a59e8, 0x801a5948, 0x801a5908, 0x801a5d44 }, 0x368|2, 0x39c|3 }, // T1
+ {{ 0x801a5d84, 0x801a5ce4, 0x801a5ca4, 0x801a60e0 }, 0x3bc|2, 0x3e8|3 }, // T1
+ {{ 0x801a616c, 0x801a60cc, 0x801a608c, 0x801a64c8 }, 0x264|2, 0x298|3 }, // T1
{{ 0x801a6404, 0x801a6364, 0x801a6324, 0x801a6760 }, 0x104|2, 0x104|2 }, // T1
- {{ 0x801a6534, 0x802070d4, 0x801a6454, 0x801a6890 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801a653c, 0x801a649c, 0x801a645c, 0x801a6898 }, 0x4534|0, 0x4534|0 }, // T1
- {{ 0x801aaa70, 0x801aa2d8, 0x801aa990, 0x801aa6d4 }, 0xc|2, 0xc|2 }, // T1
- {{ 0x801aaa94, 0x8014149c, 0x801aa9b4, 0x801415b4 }, 0xc|2, 0xc|2 }, // T1
- {{ 0x801aaaa4, 0x801aaa04, 0x801aa9c4, 0x801aae00 }, 0x72b8|0, 0x72b8|0 }, // T1
- {{ 0x801b1d5c, 0x801b1dd4, 0x801b1c7c, 0x801b21d0 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801b1d60, 0x801b1c48, 0x801b1c80, 0x801b2044 }, 0xc|2, 0xc|2 }, // T1
- {{ 0x801b1d6c, 0x801b1ccc, 0x801b1c8c, 0x801b20c8 }, 0x8d94|0, 0x8d94|0 }, // T1
+ {{ 0x801a653c, 0x801a649c, 0x801a645c, 0x801a6898 }, 0x4534|0, 0x4568|1 }, // T1
+ {{ 0x801aaaa4, 0x801aaa04, 0x801aa9c4, 0x801aae00 }, 0x1005c|0, 0x1005c|0 }, // T1
{{ 0x801bab00, 0x801aa9e0, 0x801baa20, 0x801aaddc }, 0x8|3, 0x8|3 }, // T1
{{ 0x801bab08, 0x801baa68, 0x801baa28, 0x801bae64 }, 0x4|0, 0x4|0 }, // T1
{{ 0x801bab0c, 0x801aa9ec, 0x801baa2c, 0x801aade8 }, 0x14|2, 0x14|2 }, // T1
- {{ 0x801bab20, 0x801baa80, 0x801baa40, 0x801bae7c }, 0x11468|0, 0x11468|0 }, // T1
- {{ 0x801cbf88, 0x80233680, 0x80233924, 0x80233d78 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x801cbf8c, 0x801cbeec, 0x801cbeac, 0x801cc2e8 }, 0x1c464|0, 0x1c464|0 }, // T1
+ {{ 0x801bab20, 0x801baa80, 0x801baa40, 0x801bae7c }, 0x2d8d0|0, 0x2d8d0|0 }, // T1
{{ 0x801e83f8, 0x801e8358, 0x801e8318, 0x801e8820 }, 0x27904|0, 0x27904|0 }, // T1
- {{ 0x8020fd14, 0x8020fc74, 0x8020fc34, 0x8023eab8 }, 0x4|3, 0x4|3 }, // T1
{{ 0x8020fd18, 0x8020fc78, 0x8020fc38, 0x80210138 }, 0x50|2, 0x50|2 }, // T1
- {{ 0x8020fdbc, 0x8020fd1c, 0x8020fcdc, 0x8011bc98 }, 0x4|3, 0x4|3 }, // T1
- {{ 0x8020fde4, 0x8020fd44, 0x8020fd04, 0x80238838 }, 0xc|2, 0xc|2 }, // T1
{{ 0x8020fe10, 0x8020fd70, 0x8020fd30, 0x80210198 }, 0x264|2, 0x264|2 }, // T1
- {{ 0x80210074, 0x8020ffd4, 0x8020ff94, 0x801565d8 }, 0x18|2, 0x18|2 }, // T1
{{ 0x802100a0, 0x80210000, 0x8020ffc0, 0x80210414 }, 0x15e6c|0, 0x15e6c|0 }, // T1
{{ 0x80225f14, 0x80243f18, 0x80225e34, 0x80226288 }, 0x2dc|2, 0x2dc|2 }, // T1
{{ 0x802261f8, 0x80225e74, 0x80226118, 0x8022656c }, 0x1a0d0|0, 0x1a0d0|0 }, // T1
@@ -317,9 +156,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80245580, 0x80245258, 0x80244fd0, 0x80245460 }, 0x4|3, 0x4|3 }, // D4
{{ 0x802456b4, 0x8024539c, 0x80245064, 0x80245504 }, 0x2d0|0, 0x2d0|0 }, // D4
{{ 0x80245a18, 0x80245700, 0x802453c8, 0x802457f8 }, 0x57c|0, 0x57c|0 }, // D4
- {{ 0x80246028, 0x80245d10, 0x802459d8, 0x80245e00 }, 0x6dc4|0, 0x6dc4|0 }, // D4
- {{ 0x8024cdec, 0x8024cad4, 0x8024c79c, 0x80248ce0 }, 0x4|3, 0x4|3 }, // D4
- {{ 0x8024cdf0, 0x8024cad8, 0x8024c7a0, 0x8024cbc8 }, 0x5994|0, 0x5994|0 }, // D4
+ {{ 0x80246028, 0x80245d10, 0x802459d8, 0x80245e00 }, 0xc75c|0, 0xc75c|0 }, // D4
{{ 0x8025278c, 0x80252474, 0x8025213c, 0x8025255c }, 0x32c|0, 0x32c|0 }, // D4
{{ 0x80252ab8, 0x802527a0, 0x80252468, 0x80252890 }, 0x498c|0, 0x498c|0 }, // D4
{{ 0x80257480, 0x80257160, 0x80256e20, 0x80257240 }, 0x1104|0, 0x1104|0 }, // D4
@@ -342,7 +179,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80274d5c, 0x80270a1c, 0x802746fc, 0x80262270 }, 0x4|3, 0x4|3 }, // D5
{{ 0x80274d60, 0x80270a20, 0x80274700, 0x80262b40 }, 0x50c4|0, 0x50c4|0 }, // D5
{{ 0x80279e28, 0x80275ae8, 0x802797c8, 0x80267cdc }, 0x5c|2, 0x5c|2 }, // D5
- {{ 0x80279e8c, 0x80275b4c, 0x8027982c, 0x80268a8c }, 0xc|2, 0xc|2 }, // D5
{{ 0x80279ea0, 0x80275b60, 0x80279840, 0x80267d50 }, 0x25e0|0, 0x31e0|1 }, // D5
{{ 0x8027d080, 0x80278d40, 0x8027ca20, 0x8026af30 }, 0x284|0, 0x420|1 }, // D5
{{ 0x8027d4a0, 0x80279160, 0x8027ce40, 0x8026b350 }, 0x13ac|0, 0x13ac|0 }, // D5
@@ -356,7 +192,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x8028a8f8, 0x802865b8, 0x8028a298, 0x802788ec }, 0x4c|2, 0x4c|2 }, // D5
{{ 0x8028a944, 0x80286604, 0x8028a2e4, 0x80278824 }, 0x4|3, 0x4|3 }, // D5
{{ 0x8028a950, 0x80286610, 0x8028a2f0, 0x80278940 }, 0x458|2, 0x458|2 }, // D5
- {{ 0x8028ada8, 0x80286a68, 0x8028a748, 0x80290568 }, 0x14|2, 0x14|2 }, // D5
{{ 0x8028adbc, 0x80286a7c, 0x8028a75c, 0x8027624c }, 0x4|3, 0x4|3 }, // D5
{{ 0x8028adcc, 0x80286a8c, 0x8028a76c, 0x80275f34 }, 0x4|3, 0x4|3 }, // D5
{{ 0x8028add0, 0x80286a90, 0x8028a770, 0x80278dc0 }, 0x12c8|2, 0x1338|3 }, // D5
@@ -366,9 +201,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x8028fc70, 0x8028fc70, 0x8028f610, 0x8027dc70 }, 0x4|3, 0x4|3 }, // D5
{{ 0x8028fc74, 0x8028b934, 0x8028f614, 0x8027dc74 }, 0xd074|2, 0xd098|3 }, // D5
{{ 0x8029cd0c, 0x802989cc, 0x8029c6ac, 0x8028ad0c }, 0x1f4|2, 0x1f4|2 }, // D5
- {{ 0x8029cf04, 0x80298bc4, 0x8029c8a4, 0x8028af0c }, 0x48|2, 0x48|2 }, // D5
- {{ 0x8029cf54, 0x80298c38, 0x8029c918, 0x8028af5c }, 0x4|3, 0x4|3 }, // D5
- {{ 0x8029cf68, 0x80298c28, 0x8029c908, 0x8028af70 }, 0x571c|0, 0x571c|0 }, // D5
+ {{ 0x8029cf04, 0x80298bc4, 0x8029c8a4, 0x8028af0c }, 0x5780|0, 0x5780|0 }, // D5
{{ 0x802a2694, 0x8029e354, 0x802a2034, 0x80290694 }, 0x8e0|2, 0x8e0|2 }, // D5
{{ 0x802a2f78, 0x8029ea50, 0x802a2918, 0x80290f78 }, 0x10|2, 0x10|2 }, // D5
{{ 0x802a2f88, 0x8029fcd8, 0x802a2928, 0x80290f88 }, 0x4|3, 0x4|3 }, // D5
@@ -382,12 +215,9 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80350580, 0x8034c200, 0x8034ff00, 0x8033e580 }, 0x20|0, 0x34680|1 }, // BSS
{{ 0x80384c00, 0x80380880, 0x80384580, 0x80372c00 }, 0xcdc|0, 0xcdc|0 }, // D6
{{ 0x803858e0, 0x80381560, 0x80385260, 0x803738e8 }, 0x6bc|0, 0x6bc|0 }, // D6
- {{ 0x80385fbc, 0x80381b64, 0x8038593c, 0x80373eec }, 0x4|3, 0x4|3 }, // D6
{{ 0x80385fc0, 0x80381c40, 0x80385940, 0x80373fe0 }, 0x44|0, 0x44|0 }, // BSS
{{ 0x8038601c, 0x80381c84, 0x8038599c, 0x8037403c }, 0x8|3, 0x8|3 }, // BSS
- {{ 0x80386044, 0x8033f2ac, 0x803859c4, 0x80374064 }, 0x2c|2, 0x2c|2 }, // BSS
- {{ 0x803860b0, 0x80381d30, 0x80385a30, 0x803740d0 }, 0x24|2, 0x24|2 }, // BSS
- {{ 0x80386124, 0x80381da4, 0x80385aa4, 0x8037252c }, 0x4|3, 0x4|3 }, // BSS
+ {{ 0x803860b0, 0x80381d30, 0x80385a30, 0x803740d0 }, 0x24|2, 0x78|3 }, // BSS
{{ 0x80386128, 0x80381da8, 0x80385aa8, 0x80374148 }, 0x10|2, 0x10|2 }, // BSS
{{ 0x8038613c, 0x80382444, 0x80385abc, 0x803747e4 }, 0x4|3, 0x4|3 }, // BSS
{{ 0x80386160, 0x80381de0, 0x80385ae0, 0x80374180 }, 0x34|2, 0x58|3 }, // BSS
@@ -416,9 +246,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x803868a0, 0x80382520, 0x80386220, 0x803748c0 }, 0x20|2, 0x84|3 }, // BSS
{{ 0x80386924, 0x803825a4, 0x803862a4, 0x80374944 }, 0x24|2, 0x6c|3 }, // BSS
{{ 0x80386990, 0x80382610, 0x80386310, 0x803749b0 }, 0x4|2, 0x44|3 }, // BSS
- {{ 0x803869d4, 0x80382654, 0x80386354, 0x803749f4 }, 0x8|3, 0x8|3 }, // BSS
- {{ 0x803869e0, 0x80352a94, 0x80386360, 0x80374a00 }, 0x4|3, 0x4|3 }, // BSS
- {{ 0x803869e4, 0x80382664, 0x80386364, 0x80374a04 }, 0x20|2, 0x80|3 }, // BSS
+ {{ 0x803869d4, 0x80382654, 0x80386354, 0x803749f4 }, 0x30|2, 0x90|3 }, // BSS
{{ 0x80386a64, 0x803826e4, 0x803863e4, 0x80374a84 }, 0xf0|2, 0xf0|2 }, // BSS
{{ 0x80386b58, 0x803827e8, 0x803864d8, 0x80374b88 }, 0x1c|2, 0x1c|2 }, // BSS
{{ 0x80386bac, 0x8038282c, 0x8038652c, 0x80374bcc }, 0x1c|2, 0x64|3 }, // BSS
@@ -427,20 +255,15 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80386c5c, 0x803828dc, 0x803865dc, 0x80374c7c }, 0x20|2, 0x20|2 }, // BSS
{{ 0x80386c80, 0x803823e8, 0x803860e8, 0x80374ca0 }, 0x8|3, 0x8|3 }, // BSS
{{ 0x80386ca8, 0x80382928, 0x80386628, 0x80374cc8 }, 0x8|2, 0xa4|3 }, // BSS
- {{ 0x80386d4c, 0x803829cc, 0x803866cc, 0x80374d6c }, 0x128|2, 0x128|2 }, // BSS
- {{ 0x80386e80, 0x80382b00, 0x80386800, 0x80348428 }, 0x4|3, 0x4|3 }, // BSS
+ {{ 0x80386d4c, 0x803829cc, 0x803866cc, 0x80374d6c }, 0x128|2, 0x140|3 }, // BSS
{{ 0x80386e8c, 0x80382b0c, 0x8038680c, 0x80374eac }, 0x18|2, 0x50|3 }, // BSS
{{ 0x80386edc, 0x80382b5c, 0x8038685c, 0x80374efc }, 0x4c|2, 0x4c|2 }, // BSS
{{ 0x80386f44, 0x80382bbc, 0x803868c4, 0x80374f64 }, 0x34|2, 0x34|2 }, // BSS
{{ 0x80386fa0, 0x80382c20, 0x80386920, 0x80374fc8 }, 0x24|2, 0x24|2 }, // D7
- {{ 0x80386fcc, 0x80382c4c, 0x8038694c, 0x80375e84 }, 0x4|3, 0x4|3 }, // D7
{{ 0x80386fdc, 0x80382c5c, 0x8038695c, 0x8037500c }, 0x1b54|0, 0x1b54|0 }, // D7
{{ 0x80388b34, 0x803847b4, 0x803884b4, 0x80376b54 }, 0x1c4|0, 0x1c4|0 }, // D7
{{ 0x80388cf8, 0x80384970, 0x80388678, 0x80376d18 }, 0x3c0|0, 0x3c0|0 }, // D7
{{ 0x803890b8, 0x80384d90, 0x80388a38, 0x803770d8 }, 0x14|2, 0x14|2 }, // D7
- {{ 0x803890d8, 0x80383338, 0x80388a58, 0x803770f8 }, 0xc|2, 0xc|2 }, // D7
- {{ 0x803890e4, 0x80384d2c, 0x80388a64, 0x80377104 }, 0x44|2, 0x44|2 }, // D7
- {{ 0x80389130, 0x80383260, 0x80388ab0, 0x80377150 }, 0x4|3, 0x4|3 }, // D7
{{ 0x8038913c, 0x80384dbc, 0x80388abc, 0x8037715c }, 0x30|2, 0x30|2 }, // D7
{{ 0x8038916c, 0x802d2190, 0x802d5e90, 0x802c4510 }, 0xc|2, 0xc|2 }, // BSS
{{ 0x80389178, 0x802a3094, 0x802a6d94, 0x80295414 }, 0x4|3, 0x4|3 }, // BSS
@@ -450,20 +273,14 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80510a88, 0x8054f704, 0x80510408, 0x804feaa8 }, 0xe8|2, 0xe8|2 }, // REL1
{{ 0x80510b70, 0x8050c6fc, 0x805104f0, 0x804feb90 }, 0xccb4|0, 0xccb4|0 }, // REL1
{{ 0x8051d824, 0x805193b0, 0x8051d1a4, 0x8050b848 }, 0xca70|0, 0xca70|0 }, // REL1
- {{ 0x8052a294, 0x80525e20, 0x80529c14, 0x805183b0 }, 0xa4|2, 0xa4|2 }, // REL1
- {{ 0x8052a338, 0x80525ec4, 0x80529cb8, 0x80518390 }, 0x2f54|2, 0x2f54|2 }, // REL1
+ {{ 0x8052a338, 0x80525ec4, 0x80529cb8, 0x80518390 }, 0x2f5c|0, 0x2f5c|0 }, // REL1
{{ 0x8052d294, 0x8054f7fc, 0x8052cc14, 0x8051b2ec }, 0x6b8|2, 0x6b8|2 }, // REL1
{{ 0x8052d94c, 0x805c4d48, 0x8052d2cc, 0x8051b9a4 }, 0x14|2, 0x14|2 }, // REL1
{{ 0x8052d968, 0x80528e20, 0x8052d2e8, 0x8051b9c0 }, 0x4890|0, 0x4890|0 }, // REL1
{{ 0x805321f8, 0x8052d6b0, 0x80531b78, 0x805b6a04 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x805321fc, 0x8052d6b4, 0x80531b7c, 0x80520254 }, 0x2540|0, 0x2540|0 }, // REL1
- {{ 0x8053473c, 0x8058b90c, 0x80591ab0, 0x80580188 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80534740, 0x8052fbf8, 0x805340c0, 0x80522798 }, 0x922c|0, 0x922c|0 }, // REL1
+ {{ 0x805321fc, 0x8052d6b4, 0x80531b7c, 0x80520254 }, 0xb770|0, 0xb770|0 }, // REL1
{{ 0x8053d978, 0x8054fed0, 0x8053d2f8, 0x8052b9d0 }, 0x934|2, 0x934|2 }, // REL1
- {{ 0x8053e2dc, 0x805830ac, 0x8053dc5c, 0x8052c334 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8053e36c, 0x80538e30, 0x8053dcec, 0x8052c3c4 }, 0x1a44|0, 0x1a44|0 }, // REL1
- {{ 0x8053fdb0, 0x8053a874, 0x805ef568, 0x8052de08 }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x8053fdb8, 0x8053a87c, 0x8053f738, 0x8052de10 }, 0xfd6c|0, 0xfd6c|0 }, // REL1
+ {{ 0x8053e36c, 0x80538e30, 0x8053dcec, 0x8052c3c4 }, 0x117b8|0, 0x117b8|0 }, // REL1
{{ 0x8054fb28, 0x805508c4, 0x8054f4a8, 0x8053db80 }, 0xa0c|0, 0xa0c|0 }, // REL1
{{ 0x80550544, 0x8054a5ec, 0x8054fec4, 0x8053e59c }, 0x3240|2, 0x3240|2 }, // REL1
{{ 0x80553784, 0x805512e0, 0x80553104, 0x805417dc }, 0xa4|2, 0xa4|2 }, // REL1
@@ -471,18 +288,15 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80553850, 0x8054d830, 0x805531d0, 0x805418a8 }, 0x1ed0|0, 0x1ed0|0 }, // REL1
{{ 0x8055572c, 0x805513ac, 0x805550ac, 0x80543784 }, 0x153f0|0, 0x153f0|0 }, // REL1
{{ 0x8056ab68, 0x805ae0e4, 0x8056a4e8, 0x80558bc0 }, 0xab8|2, 0xab8|2 }, // REL1
- {{ 0x8056b620, 0x80652b60, 0x8056afa0, 0x80559678 }, 0xc|2, 0xc|2 }, // REL1
{{ 0x8056b62c, 0x805d3b9c, 0x8056afac, 0x80559684 }, 0xc|2, 0xc|2 }, // REL1
{{ 0x8056b638, 0x805667e8, 0x8056afb8, 0x80559690 }, 0x89a4|0, 0x89a4|0 }, // REL1
{{ 0x8057402c, 0x805aebb4, 0x805739ac, 0x80562084 }, 0x1858|2, 0x1858|2 }, // REL1
- {{ 0x80575890, 0x80583f3c, 0x80575210, 0x805638e8 }, 0x10|2, 0x10|2 }, // REL1
{{ 0x805758d4, 0x805b041c, 0x80575254, 0x8056392c }, 0x158|2, 0x158|2 }, // REL1
{{ 0x80575a30, 0x8056f1cc, 0x805753b0, 0x80563a88 }, 0xe4e0|0, 0xe4e0|0 }, // REL1
{{ 0x80583f1c, 0x8057d6f8, 0x8058389c, 0x80571f74 }, 0x17604|0, 0x17604|0 }, // REL1
{{ 0x8059b590, 0x805b0578, 0x8059af10, 0x805895e8 }, 0x34f8|0, 0x34f8|0 }, // REL1
{{ 0x8059ea98, 0x80594d74, 0x8059e418, 0x8058caf0 }, 0x1a98|2, 0x1a98|2 }, // REL1
{{ 0x805a054c, 0x805b3a88, 0x8059fecc, 0x8058e5a4 }, 0x3c|2, 0x3c|2 }, // REL1
- {{ 0x805a05d0, 0x80588c78, 0x8059ff50, 0x8058e628 }, 0x40|2, 0x40|2 }, // REL1
{{ 0x805a068c, 0x805b3ac8, 0x805a000c, 0x8058e6e4 }, 0xde0|2, 0xde0|2 }, // REL1
{{ 0x805a147c, 0x805a0d1c, 0x805a0dfc, 0x8058f4d4 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x805a1484, 0x805b48b0, 0x805a0e04, 0x8058f4dc }, 0x38c|2, 0x38c|2 }, // REL1
@@ -497,48 +311,33 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x805b92f8, 0x805a3800, 0x805b8c78, 0x805a7350 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x805b9300, 0x8061f7f4, 0x805b8c80, 0x805a7358 }, 0x1820|2, 0x1820|2 }, // REL1
{{ 0x805bab28, 0x805ef59c, 0x805ba4a8, 0x805a8b80 }, 0xc|2, 0xc|2 }, // REL1
- {{ 0x805bab34, 0x805ca844, 0x805ba4b4, 0x805a8b8c }, 0x8|3, 0x8|3 }, // REL1
{{ 0x805bab40, 0x805b4f80, 0x805ba4c0, 0x805a8b98 }, 0x750|2, 0x750|2 }, // REL1
{{ 0x805bb2b4, 0x80621030, 0x805bac34, 0x805a930c }, 0x200c|0, 0x200c|0 }, // REL1
{{ 0x805bd2d4, 0x805b695c, 0x805bcc54, 0x805ab32c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805bd2e0, 0x80623050, 0x805bcc60, 0x805ab338 }, 0xb4|2, 0xb4|2 }, // REL1
- {{ 0x805bd394, 0x805b56f0, 0x805bcd14, 0x805ab3ec }, 0x1268|2, 0x1268|2 }, // REL1
- {{ 0x805be5fc, 0x805d9524, 0x805bdf7c, 0x805ac654 }, 0x4|3, 0x4|3 }, // REL1
+ {{ 0x805bd394, 0x805b56f0, 0x805bcd14, 0x805ab3ec }, 0x1268|0, 0x1268|0 }, // REL1
{{ 0x805be600, 0x805b6968, 0x805bdf80, 0x805ac658 }, 0x58|2, 0x58|2 }, // REL1
- {{ 0x805be658, 0x8058be40, 0x805bdfd8, 0x805ac6b0 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805be65c, 0x806284dc, 0x805bdfdc, 0x805ac6b4 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805be660, 0x80623100, 0x805bdfe0, 0x805ac6b8 }, 0x180|2, 0x180|2 }, // REL1
{{ 0x805be83c, 0x80623284, 0x805be1bc, 0x805ac894 }, 0x514|2, 0x514|2 }, // REL1
{{ 0x805bed6c, 0x806237a8, 0x805be6ec, 0x805acdc4 }, 0x548|2, 0x548|2 }, // REL1
{{ 0x805bf2b8, 0x80617818, 0x805bec38, 0x805ad310 }, 0x20|2, 0x20|2 }, // REL1
{{ 0x805bf2dc, 0x80623d14, 0x805bec5c, 0x805ad334 }, 0x8c|2, 0x8c|2 }, // REL1
- {{ 0x805bf368, 0x80609184, 0x805bece8, 0x805ad3c0 }, 0x5c|2, 0x5c|2 }, // REL1
{{ 0x805bf3c4, 0x805b69c8, 0x805bed44, 0x805ad41c }, 0xa3c|2, 0xa3c|2 }, // REL1
{{ 0x805bfe14, 0x805b7424, 0x805bf794, 0x805ade6c }, 0x29c|2, 0x29c|2 }, // REL1
{{ 0x805c00b0, 0x805b7718, 0x805bfa30, 0x805ae108 }, 0x808|2, 0x808|2 }, // REL1
{{ 0x805c08d4, 0x805b7f3c, 0x805c0254, 0x805ae938 }, 0x124c|2, 0x124c|2 }, // REL1
- {{ 0x805c1b24, 0x8062144c, 0x805c14a4, 0x805afb88 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x805c1b34, 0x805b91a0, 0x805c14b4, 0x805afb98 }, 0x1aa4|2, 0x1aa4|2 }, // REL1
- {{ 0x805c35e8, 0x8061c6b4, 0x805c2f68, 0x805b164c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x805c35ec, 0x805ca844, 0x805c2f6c, 0x805b1650 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x805c35f4, 0x80623e04, 0x805c2f74, 0x805b1658 }, 0x57c|2, 0x57c|2 }, // REL1
- {{ 0x805c3b78, 0x80609198, 0x805c34f8, 0x805b1bdc }, 0x1c|2, 0x1c|2 }, // REL1
{{ 0x805c3bc8, 0x805bac60, 0x805c3548, 0x805b1c2c }, 0xb74|0, 0xb74|0 }, // REL1
{{ 0x805c4744, 0x8063be90, 0x805c40c4, 0x805b27a8 }, 0x1c|2, 0x1c|2 }, // REL1
{{ 0x805c4760, 0x806243d4, 0x805c40e0, 0x805b27c4 }, 0xff0|2, 0xff0|2 }, // REL1
{{ 0x805c5764, 0x8061e8a0, 0x805c50e4, 0x805b37c8 }, 0x34|2, 0x34|2 }, // REL1
{{ 0x805c5798, 0x805bb7e8, 0x805c5118, 0x805b37fc }, 0x55d0|2, 0x55d0|2 }, // REL1
- {{ 0x805cad68, 0x805e27f8, 0x805ca6e8, 0x805b8dcc }, 0x3c|2, 0x3c|2 }, // REL1
- {{ 0x805cada4, 0x806091b4, 0x805ca724, 0x805b8e08 }, 0x30|2, 0x30|2 }, // REL1
{{ 0x805cadd4, 0x8062541c, 0x805ca754, 0x805b8e38 }, 0x12b8|2, 0x12b8|2 }, // REL1
{{ 0x805cc098, 0x805a7444, 0x805b1cec, 0x805a03c4 }, 0x18|2, 0x18|2 }, // REL1
- {{ 0x805cc0c0, 0x80576b5c, 0x8057cd40, 0x8056b418 }, 0xc|2, 0xc|2 }, // REL1
{{ 0x805cc0d8, 0x80626700, 0x805cba38, 0x805ba11c }, 0x14|2, 0x14|2 }, // REL1
- {{ 0x805cc0f8, 0x8058e09c, 0x80594240, 0x80582918 }, 0xc|2, 0xc|2 }, // REL1
- {{ 0x805cc14c, 0x8058e09c, 0x80594240, 0x80582918 }, 0xc|2, 0xc|2 }, // REL1
- {{ 0x805cc184, 0x8053f5dc, 0x80544498, 0x80532b70 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805cc194, 0x8060aa04, 0x8063b490, 0x8062a13c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x805cc198, 0x805b6468, 0x805bda8c, 0x805ac164 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805cc1b4, 0x80626758, 0x805cba90, 0x805ba174 }, 0x4c|2, 0x4c|2 }, // REL1
{{ 0x805cc204, 0x806267a8, 0x805cbae0, 0x805ba1b0 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x805cc20c, 0x806267b0, 0x805cbae8, 0x805ba1cc }, 0x173c|2, 0x173c|2 }, // REL1
@@ -555,17 +354,13 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x805cf824, 0x805c2d04, 0x805cf100, 0x80605650 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x805cf82c, 0x805c2d0c, 0x805cf108, 0x805bd788 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x805cf840, 0x805c2d20, 0x805cf11c, 0x805bd7d4 }, 0x28|2, 0x28|2 }, // REL1
- {{ 0x805cf878, 0x805c2d58, 0x805cf154, 0x805bd9fc }, 0x854|2, 0x854|2 }, // REL1
- {{ 0x805d00cc, 0x805c35ac, 0x805cf9a8, 0x8069e478 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x805d00d4, 0x805c35b4, 0x805cf9b0, 0x805be258 }, 0xe8|2, 0xe8|2 }, // REL1
+ {{ 0x805cf878, 0x805c2d58, 0x805cf154, 0x805bd9fc }, 0x944|2, 0x944|2 }, // REL1
{{ 0x805d01c4, 0x805c36a4, 0x805cfaa0, 0x805be34c }, 0x1084|2, 0x1084|2 }, // REL1
- {{ 0x805d124c, 0x805c472c, 0x805d0b28, 0x805d39dc }, 0x8|3, 0x8|3 }, // REL1
{{ 0x805d1258, 0x805c4738, 0x805d0b34, 0x805bf3f4 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805d125c, 0x805c473c, 0x805d0b38, 0x805bf3ec }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805d1260, 0x805c4740, 0x805d0b3c, 0x805bf3fc }, 0x604|2, 0x604|2 }, // REL1
{{ 0x805d1874, 0x8064c778, 0x805d1150, 0x805bfa10 }, 0x10|2, 0x10|2 }, // REL1
{{ 0x805d1884, 0x80627eec, 0x805d1160, 0x805bfa20 }, 0x5c0|2, 0x5c0|2 }, // REL1
- {{ 0x805d1e74, 0x8058be44, 0x805d1750, 0x805c0010 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805d1e80, 0x805c4d64, 0x805d175c, 0x805c001c }, 0x60f0|0, 0x60f0|0 }, // REL1
{{ 0x805d7f70, 0x806284e4, 0x805d784c, 0x805c610c }, 0x4058|0, 0x4058|0 }, // REL1
{{ 0x805dc024, 0x8062c540, 0x805db900, 0x805ca1c0 }, 0x27f8|0, 0x27f8|0 }, // REL1
@@ -578,10 +373,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x805ea774, 0x8061f7e8, 0x805ea050, 0x805d8910 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805ea778, 0x80631a50, 0x805ea054, 0x805d8914 }, 0x435c|2, 0x435c|2 }, // REL1
{{ 0x805eeb38, 0x80635e10, 0x805ee414, 0x805dcf58 }, 0x1c|2, 0x1c|2 }, // REL1
- {{ 0x805eeb58, 0x8052d930, 0x805ee434, 0x805dcf78 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805eeb64, 0x805d4090, 0x805ee440, 0x805dcf84 }, 0x41b0|0, 0x41b0|0 }, // REL1
- {{ 0x805f2d14, 0x8063fc3c, 0x805f25f0, 0x805e1134 }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x805f2d1c, 0x8060d52c, 0x805f25f8, 0x805e113c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805f2d20, 0x80635e3c, 0x805f25fc, 0x805e1140 }, 0x4a24|2, 0x4a24|2 }, // REL1
{{ 0x805f7744, 0x80639348, 0x805f5b08, 0x805e464c }, 0x18|2, 0x18|2 }, // REL1
{{ 0x805f775c, 0x8063934c, 0x805f5b0c, 0x805e4650 }, 0x14|2, 0x14|2 }, // REL1
@@ -589,24 +381,15 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x805f7784, 0x8063934c, 0x805f5b0c, 0x805e4650 }, 0x14|2, 0x14|2 }, // REL1
{{ 0x805f7798, 0x8063a8b4, 0x805f7074, 0x805e5bb8 }, 0x1388|2, 0x1388|2 }, // REL1
{{ 0x805f8b24, 0x806e4bd4, 0x805f8400, 0x805e6f44 }, 0xc|2, 0xc|2 }, // REL1
- {{ 0x805f8b30, 0x805d824c, 0x805f840c, 0x805e6f50 }, 0x180c|2, 0x180c|2 }, // REL1
- {{ 0x805fa33c, 0x805d9a58, 0x805f97bc, 0x805e8300 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x805fa340, 0x805d9a5c, 0x805f9c1c, 0x805e8760 }, 0x1270|2, 0x1270|2 }, // REL1
- {{ 0x805fb5b0, 0x8061aa1c, 0x805fae8c, 0x805e99d0 }, 0x4|3, 0x4|3 }, // REL1
+ {{ 0x805f8b30, 0x805d824c, 0x805f840c, 0x805e6f50 }, 0x2a80|0, 0x2a80|0 }, // REL1
{{ 0x805fb5b8, 0x8063bc4c, 0x805fae94, 0x805e99d8 }, 0x244|2, 0x244|2 }, // REL1
- {{ 0x805fb80c, 0x8058c0d4, 0x805fb0e8, 0x805e9c2c }, 0x8|3, 0x8|3 }, // REL1
{{ 0x805fb814, 0x805aebac, 0x805fb0f0, 0x805e9c34 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805fb81c, 0x805dacd4, 0x805fb0f8, 0x805e9c3c }, 0x1cf4|2, 0x1cf4|2 }, // REL1
{{ 0x805fd514, 0x8063beb0, 0x805fcdf0, 0x805eb934 }, 0x241c|2, 0x241c|2 }, // REL1
{{ 0x805ff930, 0x8063e2cc, 0x805bf164, 0x805edd50 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x805ff934, 0x8063e2d0, 0x806b27bc, 0x805edd54 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x805ff958, 0x8063e2f4, 0x8062f5a8, 0x805edd78 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805ff970, 0x8063e30c, 0x805ff230, 0x805edd90 }, 0x2d4|2, 0x2d4|2 }, // REL1
- {{ 0x805ffc4c, 0x8063e5e8, 0x805da18c, 0x805ee06c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x805ffc64, 0x8063e600, 0x805ff51c, 0x805ee084 }, 0xf0|2, 0xf0|2 }, // REL1
{{ 0x805ffd64, 0x8063e700, 0x805ff51c, 0x805ee184 }, 0x658|2, 0x658|2 }, // REL1
- {{ 0x806003c8, 0x8063ed64, 0x8053cbc8, 0x805ee7e8 }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x806003d0, 0x8063ed6c, 0x8065415c, 0x805ee7f0 }, 0xc|2, 0xc|2 }, // REL1
{{ 0x806003fc, 0x8063ed98, 0x805dee38, 0x805ee81c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8060045c, 0x8063edf8, 0x805ff94c, 0x805ee87c }, 0x2c|2, 0x2c|2 }, // REL1
{{ 0x80600488, 0x8063ee24, 0x805ffc30, 0x805ee8a8 }, 0x174|2, 0x174|2 }, // REL1
@@ -619,59 +402,35 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x806012ac, 0x805dc9cc, 0x80600a20, 0x805ef6cc }, 0x7a48|0, 0x7a48|0 }, // REL1
{{ 0x80608d10, 0x805e443c, 0x80608484, 0x805f7130 }, 0x1a18|0, 0x1a18|0 }, // REL1
{{ 0x8060a728, 0x8063fc48, 0x80609e9c, 0x805f8b48 }, 0x70ac|2, 0x70ac|2 }, // REL1
- {{ 0x806117d4, 0x80609154, 0x80610f48, 0x805ffbf4 }, 0x8c|2, 0x8c|2 }, // REL1
{{ 0x80611860, 0x805e5e4c, 0x80610fd4, 0x805ffc80 }, 0x4fdc|0, 0x4fdc|0 }, // REL1
{{ 0x8061683c, 0x80646d84, 0x80615fb0, 0x80604c5c }, 0x45f4|2, 0x45f4|2 }, // REL1
{{ 0x8061ae60, 0x806dc7dc, 0x8061a5d4, 0x80609280 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8061ae68, 0x805eae2c, 0x8061a5dc, 0x80609288 }, 0x3a24|2, 0x3a24|2 }, // REL1
- {{ 0x8061e88c, 0x8061c8bc, 0x8061e000, 0x8060ccac }, 0x8|3, 0x8|3 }, // REL1
{{ 0x8061e894, 0x8064b3b0, 0x8061e008, 0x8060ccb4 }, 0xe00|2, 0xe00|2 }, // REL1
{{ 0x8061f694, 0x8061e898, 0x8061ee08, 0x8060dab4 }, 0x3c|2, 0x3c|2 }, // REL1
- {{ 0x8061f6d0, 0x80617bcc, 0x8061ee44, 0x8060daf0 }, 0x10|2, 0x10|2 }, // REL1
- {{ 0x8061f6e0, 0x805ee854, 0x8061ee54, 0x8060db00 }, 0x15e4|2, 0x15e4|2 }, // REL1
- {{ 0x80620cc4, 0x8069cdec, 0x806a08e0, 0x8068f61c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80620cc8, 0x805efe3c, 0x8062043c, 0x8060f0e8 }, 0x64|2, 0x64|2 }, // REL1
- {{ 0x80620d44, 0x805c1d74, 0x805ce170, 0x805bc854 }, 0x4|3, 0x4|3 }, // REL1
+ {{ 0x8061f6e0, 0x805ee854, 0x8061ee54, 0x8060db00 }, 0x164c|2, 0x164c|2 }, // REL1
{{ 0x80620d7c, 0x805efec8, 0x806204c8, 0x8060f174 }, 0x141c8|0, 0x141c8|0 }, // REL1
{{ 0x80634f44, 0x806040ac, 0x80634690, 0x8062333c }, 0x2544|2, 0x2544|2 }, // REL1
- {{ 0x80637488, 0x805e0d14, 0x80636bd4, 0x80625880 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x80637490, 0x806066a0, 0x80636bdc, 0x80625888 }, 0x7c|2, 0x7c|2 }, // REL1
{{ 0x80637510, 0x8064c200, 0x80636c5c, 0x80625908 }, 0x4dc|2, 0x4dc|2 }, // REL1
- {{ 0x80637a04, 0x8064c6f4, 0x80592240, 0x80580918 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80637a18, 0x8064c708, 0x80701fa4, 0x806f0ce0 }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x80637a30, 0x805c5a8c, 0x805d2484, 0x805c0d44 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x80637a80, 0x8064c748, 0x8063716c, 0x80625e18 }, 0x40|2, 0x40|2 }, // REL1
{{ 0x80637ac0, 0x80606720, 0x806371ac, 0x80625e58 }, 0x4218|0, 0x4218|0 }, // REL1
- {{ 0x8063bcdc, 0x806d56d0, 0x806e5d80, 0x806d4abc }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8063bce0, 0x805e2e38, 0x80606e8c, 0x805f5b38 }, 0x14|2, 0x14|2 }, // REL1
- {{ 0x8063bcf4, 0x806d56e8, 0x806e5d98, 0x806d4ad4 }, 0x18|2, 0x18|2 }, // REL1
+ {{ 0x8063bcdc, 0x806d56d0, 0x806e5d80, 0x806d4abc }, 0x30|2, 0x30|2 }, // REL1
{{ 0x8063bd18, 0x805ece08, 0x8061c5b8, 0x8060b264 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x8063bd48, 0x80724cb8, 0x8072b510, 0x8071a24c }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x8063bd50, 0x8070599c, 0x8070b9ac, 0x806fa6e8 }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x8063bd6c, 0x80655050, 0x80658b44, 0x806477f0 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8063bd98, 0x80655050, 0x80658b44, 0x806477f0 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8063bda8, 0x8060a9c8, 0x8063b454, 0x8062a100 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8063bdc0, 0x807059a0, 0x8070b9b0, 0x806fa6ec }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8063bdd8, 0x8060a9bc, 0x8063b448, 0x8062a0f4 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8063be04, 0x80655050, 0x80658b44, 0x806477f0 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8063be10, 0x8055be04, 0x8055fb04, 0x8054e1dc }, 0x4|3, 0x4|3 }, // REL1
+ {{ 0x8063bdd8, 0x8060a9bc, 0x8063b448, 0x8062a0f4 }, 0x4|2, 0x3c|3 }, // REL1
{{ 0x8063be14, 0x8060a9f8, 0x8063b484, 0x8062a130 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x8063be1c, 0x806d0118, 0x806e0434, 0x806cf170 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x8063be2c, 0x8060aa0c, 0x8063b498, 0x8062a144 }, 0x952c|0, 0x952c|0 }, // REL1
- {{ 0x80645360, 0x80609168, 0x806449cc, 0x80633678 }, 0x80|2, 0x80|2 }, // REL1
{{ 0x806453e0, 0x8064c788, 0x80644a4c, 0x806336f8 }, 0x13d0|0, 0x13d0|0 }, // REL1
{{ 0x806467bc, 0x80631130, 0x80645e28, 0x80634ad4 }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x806467c4, 0x8061c8b8, 0x80645e30, 0x80634adc }, 0x4|3, 0x4|3 }, // REL1
{{ 0x806467c8, 0x80613fb8, 0x80645e34, 0x80634ae0 }, 0x3c0c|2, 0x3c0c|2 }, // REL1
{{ 0x8064a3d4, 0x8063be94, 0x80649a40, 0x806386ec }, 0x14|2, 0x14|2 }, // REL1
{{ 0x8064a3e8, 0x80725270, 0x80649a54, 0x80638700 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8064a3ec, 0x8064db74, 0x80649a58, 0x80638704 }, 0xac0|0, 0xac0|0 }, // REL1
{{ 0x8064aec8, 0x8061e8bc, 0x8064a534, 0x806391e0 }, 0x18|2, 0x18|2 }, // REL1
- {{ 0x8064aee0, 0x80617bcc, 0x8064a54c, 0x806391f8 }, 0x3b1c|0, 0x3b1c|0 }, // REL1
- {{ 0x8064e9fc, 0x8061b6e8, 0x8064e068, 0x80582134 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8064ea00, 0x8061b6ec, 0x8064e06c, 0x8063cd18 }, 0xbac|0, 0xbac|0 }, // REL1
- {{ 0x8064f5ac, 0x8061c298, 0x8064ec18, 0x805c003c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8064f5b0, 0x8061c29c, 0x8064ec1c, 0x8063d8c8 }, 0x25fc|0, 0x25fc|0 }, // REL1
+ {{ 0x8064aee0, 0x80617bcc, 0x8064a54c, 0x806391f8 }, 0x6ccc|0, 0x6ccc|0 }, // REL1
{{ 0x80651bb4, 0x806253d8, 0x80651220, 0x8063fecc }, 0x1c|2, 0x1c|2 }, // REL1
{{ 0x80651bd0, 0x8064e650, 0x8065123c, 0x8063fee8 }, 0x6f0|2, 0x6f0|2 }, // REL1
{{ 0x806522c0, 0x805bf784, 0x8065192c, 0x806405d8 }, 0x14|2, 0x14|2 }, // REL1
@@ -686,14 +445,11 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x8065fa4c, 0x80657ad0, 0x8065f0b8, 0x8064dd64 }, 0x3f4|2, 0x3f4|2 }, // REL1
{{ 0x8065fe40, 0x80657f04, 0x8065f4ac, 0x8064e158 }, 0x292c|0, 0x292c|0 }, // REL1
{{ 0x8066276c, 0x8071413c, 0x80661dd8, 0x80650a84 }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x80662774, 0x80660690, 0x80661de0, 0x80650a8c }, 0xa04|2, 0xa04|2 }, // REL1
+ {{ 0x80662774, 0x80660690, 0x80661de0, 0x80650a8c }, 0xa04|0, 0xa04|0 }, // REL1
{{ 0x80663178, 0x8065a820, 0x806627e4, 0x80651490 }, 0x2334|0, 0x2334|0 }, // REL1
- {{ 0x806654ac, 0x8065ca9c, 0x80664b18, 0x806537c4 }, 0x78|2, 0x78|2 }, // REL1
{{ 0x8066552c, 0x8067317c, 0x80664b98, 0x80653844 }, 0x2cb8|2, 0x2cb8|2 }, // REL1
{{ 0x806681e4, 0x80675e34, 0x80667850, 0x805af934 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x806681e8, 0x80675e38, 0x80667854, 0x80656500 }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x80668274, 0x80675ec4, 0x806678e0, 0x8065ee28 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80668310, 0x80675f60, 0x8066797c, 0x8063e918 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x8066832c, 0x80675f7c, 0x80667998, 0x80656678 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x80668330, 0x80675f80, 0x8066799c, 0x80656688 }, 0x4dc|2, 0x4dc|2 }, // REL1
{{ 0x80668810, 0x806610ac, 0x80667e7c, 0x80656b68 }, 0xcc40|0, 0xcc40|0 }, // REL1
@@ -736,12 +492,9 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80675f1c, 0x8066e7b8, 0x80675588, 0x8066427c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x80675f20, 0x8066e7bc, 0x8067558c, 0x80664260 }, 0xc|2, 0xc|2 }, // REL1
{{ 0x80675f2c, 0x8066e7c8, 0x80675598, 0x8066428c }, 0x12c0|2, 0x12c0|2 }, // REL1
- {{ 0x806771ec, 0x8066fa88, 0x80676858, 0x806482a8 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x806771f4, 0x8066fa90, 0x80676860, 0x8066559c }, 0x1e2c|2, 0x1e2c|2 }, // REL1
{{ 0x80679068, 0x80676460, 0x806786d4, 0x80667410 }, 0x300|2, 0x300|2 }, // REL1
{{ 0x80679380, 0x80671908, 0x806789ec, 0x80667728 }, 0x186c|2, 0x186c|2 }, // REL1
- {{ 0x8067abf0, 0x805812fc, 0x8067a25c, 0x80668f98 }, 0xc|2, 0xc|2 }, // REL1
- {{ 0x8067abfc, 0x805ca84c, 0x8067a268, 0x80668fa4 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8067ac00, 0x80676778, 0x8067a26c, 0x80668fa8 }, 0x8bb8|2, 0x8bb8|2 }, // REL1
{{ 0x806837b8, 0x8067e554, 0x80682048, 0x80670d84 }, 0xddc|2, 0xddc|2 }, // REL1
{{ 0x80684594, 0x8067e554, 0x80682048, 0x80670d84 }, 0x8cc|2, 0x8cc|2 }, // REL1
@@ -770,7 +523,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x806ce5f4, 0x806e9f70, 0x806ef0b4, 0x806bc99c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x806ce5f8, 0x806e9f74, 0x806cdc64, 0x806bc9a0 }, 0x21c|2, 0x21c|2 }, // REL1
{{ 0x806ce814, 0x806ede54, 0x806cde80, 0x806bcbbc }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x806ce81c, 0x806b327c, 0x806cde88, 0x806bcbc4 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x806ce820, 0x806c2294, 0x806cde8c, 0x806bcbc8 }, 0xccc|2, 0xccc|2 }, // REL1
{{ 0x806cf4ec, 0x807774ac, 0x806ceb58, 0x806bd894 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x806cf4f0, 0x806c2f64, 0x806ceb5c, 0x806bd898 }, 0x258|2, 0x258|2 }, // REL1
@@ -782,30 +534,10 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x806d08bc, 0x80777d3c, 0x806cff28, 0x806bec64 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x806d08c0, 0x806ea7a0, 0x806cff2c, 0x806bec68 }, 0x2020|2, 0x2020|2 }, // REL1
{{ 0x806d28fc, 0x806c1e14, 0x806d1f68, 0x806c0ca4 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806d2900, 0x807c3790, 0x806d1f6c, 0x806c0ca8 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806d2908, 0x806c3d38, 0x806d1f74, 0x806c0cb0 }, 0x84|2, 0x84|2 }, // REL1
- {{ 0x806d298c, 0x80658b30, 0x806600d8, 0x8064ed84 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806d2990, 0x806c3dc0, 0x806d1ffc, 0x806c0d38 }, 0x32c8|2, 0x32c8|2 }, // REL1
+ {{ 0x806d2908, 0x806c3d38, 0x806d1f74, 0x806c0cb0 }, 0x3350|2, 0x3350|2 }, // REL1
{{ 0x806d5c58, 0x806ec7cc, 0x806d52c4, 0x806c4000 }, 0x26c|2, 0x26c|2 }, // REL1
- {{ 0x806d5ed4, 0x806c7094, 0x806d5540, 0x806c427c }, 0x934|2, 0x934|2 }, // REL1
- {{ 0x806d6808, 0x805f7c90, 0x80628290, 0x80616f3c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806d680c, 0x806c79cc, 0x806d5e78, 0x806c4bb4 }, 0x20|2, 0x20|2 }, // REL1
- {{ 0x806d682c, 0x805f7c90, 0x80628290, 0x80616f3c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806d6830, 0x806c79f0, 0x806d5e9c, 0x806c4bd8 }, 0x20|2, 0x20|2 }, // REL1
- {{ 0x806d6850, 0x805f7c90, 0x80628290, 0x80616f3c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806d6854, 0x806c7a14, 0x806d5ec0, 0x806c4bfc }, 0x192c|2, 0x192c|2 }, // REL1
- {{ 0x806d8180, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806d8184, 0x806c9344, 0x806d77f0, 0x806c652c }, 0xac4|2, 0xac4|2 }, // REL1
- {{ 0x806d8c48, 0x806ccbc8, 0x806db8e4, 0x806ca620 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806d8c4c, 0x806c9e0c, 0x806d82b8, 0x806c6ff4 }, 0xa0|2, 0xa0|2 }, // REL1
- {{ 0x806d8cec, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806d8cf0, 0x806c9eb0, 0x806d835c, 0x806c7098 }, 0xf24|2, 0xf24|2 }, // REL1
- {{ 0x806d9c14, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806d9c18, 0x806cadd8, 0x806d9284, 0x806c7fc0 }, 0xd0|2, 0xd0|2 }, // REL1
- {{ 0x806d9ce8, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806d9cec, 0x806caeac, 0x806d9358, 0x806c8094 }, 0xbc8|2, 0xbc8|2 }, // REL1
+ {{ 0x806d5ed4, 0x806c7094, 0x806d5540, 0x806c427c }, 0x49e0|2, 0x49e0|2 }, // REL1
{{ 0x806da8b4, 0x806d850c, 0x806d9f20, 0x806c8c5c }, 0x54|2, 0x54|2 }, // REL1
- {{ 0x806da908, 0x806cdc1c, 0x806d9f74, 0x806c8cb0 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x806da910, 0x806e4d54, 0x806d9f7c, 0x806c8cb8 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x806da914, 0x806eca58, 0x806d9f80, 0x806c8cbc }, 0x85c|2, 0x85c|2 }, // REL1
{{ 0x806db174, 0x806d5b28, 0x806da7e0, 0x806c951c }, 0xc|2, 0xc|2 }, // REL1
@@ -820,7 +552,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x806e3a78, 0x806e6580, 0x806e30e4, 0x806d1e20 }, 0x10|2, 0x10|2 }, // REL1
{{ 0x806e3a8c, 0x806ee8c8, 0x806e30f8, 0x806d1e34 }, 0x348|2, 0x348|2 }, // REL1
{{ 0x806e3e20, 0x806d2ddc, 0x806e348c, 0x806d21c8 }, 0x5784|2, 0x5784|2 }, // REL1
- {{ 0x806e95a4, 0x806cdc1c, 0x806e8c10, 0x806d794c }, 0x8|3, 0x8|3 }, // REL1
{{ 0x806e95b0, 0x806eec5c, 0x806e8c1c, 0x806d7958 }, 0x31f8|2, 0x31f8|2 }, // REL1
{{ 0x806ec7a8, 0x806e6574, 0x806ebe14, 0x806dab50 }, 0x14|2, 0x14|2 }, // REL1
{{ 0x806ec7bc, 0x806d8560, 0x806ebe28, 0x806dab64 }, 0xd70|2, 0xd70|2 }, // REL1
@@ -831,7 +562,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x806f77c0, 0x80713a74, 0x806f6e2c, 0x806e5b68 }, 0x260|2, 0x260|2 }, // REL1
{{ 0x806f7a20, 0x80713f0c, 0x806f708c, 0x806e5dc8 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x806f7a3c, 0x806f5428, 0x806f70a8, 0x806e5de4 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x806f7a40, 0x806f5768, 0x806f70ac, 0x806e5de8 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x806f7a74, 0x806d8a30, 0x806f70e0, 0x806e5e1c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x806f7a90, 0x80713cf0, 0x806f70fc, 0x806e5e38 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x806f7a98, 0x80713acc, 0x806f7104, 0x806e5e40 }, 0xc|2, 0xc|2 }, // REL1
@@ -848,7 +578,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x8070019c, 0x8070ff18, 0x806ff808, 0x806ee544 }, 0x64|2, 0x64|2 }, // REL1
{{ 0x8070022c, 0x806dc7f4, 0x806ff898, 0x806ee5d4 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x80700230, 0x80715c44, 0x806ff89c, 0x806ee5d8 }, 0x23c|2, 0x23c|2 }, // REL1
- {{ 0x8070046c, 0x806f9ac8, 0x806ffad8, 0x806ee814 }, 0xe300|2, 0xe300|2 }, // REL1
+ {{ 0x8070046c, 0x806f9ac8, 0x806ffad8, 0x806ee814 }, 0xe300|0, 0xe300|0 }, // REL1
{{ 0x8070e7b8, 0x80715e88, 0x8070de24, 0x806fcb60 }, 0x10ec|2, 0x10ec|2 }, // REL1
{{ 0x8070f8b8, 0x80707e14, 0x8070ef24, 0x806fdc60 }, 0x80f0|0, 0x80f0|0 }, // REL1
{{ 0x807179c4, 0x8070ffac, 0x80717030, 0x80705d6c }, 0x46c|2, 0x46c|2 }, // REL1
@@ -860,7 +590,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80726570, 0x8073c5d8, 0x80725bdc, 0x80714918 }, 0x1c8c|2, 0x1c8c|2 }, // REL1
{{ 0x80728218, 0x8073e270, 0x80727884, 0x807165c0 }, 0x398|2, 0x398|2 }, // REL1
{{ 0x807285b4, 0x80745450, 0x80727c20, 0x8071695c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x807285c4, 0x80721178, 0x80727c30, 0x8071696c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x807285c8, 0x8073e61c, 0x80727c34, 0x80716970 }, 0xd54|2, 0xd54|2 }, // REL1
{{ 0x8072931c, 0x808227a8, 0x80728988, 0x807176c4 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8072932c, 0x80724754, 0x80728998, 0x807176d4 }, 0x8|3, 0x8|3 }, // REL1
@@ -874,20 +603,15 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x8072dfcc, 0x8073f390, 0x8072d638, 0x8071c374 }, 0x1f78|2, 0x1f78|2 }, // REL1
{{ 0x8072ff5c, 0x807276cc, 0x8072f5c8, 0x8071e304 }, 0x10|2, 0x10|2 }, // REL1
{{ 0x8072ff74, 0x80741320, 0x8072f5e0, 0x8071e31c }, 0x1fc|2, 0x1fc|2 }, // REL1
- {{ 0x80730178, 0x8071dd74, 0x8072f7e4, 0x8071e520 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8073017c, 0x807f8418, 0x8072f7e8, 0x8071e524 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x80730184, 0x80726dd4, 0x8072f7f0, 0x8071e52c }, 0x8e0|2, 0x8e0|2 }, // REL1
- {{ 0x80730a68, 0x80721168, 0x807300d4, 0x8071ee10 }, 0x14|2, 0x14|2 }, // REL1
- {{ 0x80730a7c, 0x8073385c, 0x807300e8, 0x8071ee24 }, 0xb8|2, 0xb8|2 }, // REL1
{{ 0x80730b34, 0x80741538, 0x807301a0, 0x8071eedc }, 0xe08|2, 0xe08|2 }, // REL1
- {{ 0x80731944, 0x807e78e0, 0x80730fb0, 0x8071fcec }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8073194c, 0x80727794, 0x80730fb8, 0x8071fcf4 }, 0x3fe0|2, 0x3fe0|2 }, // REL1
{{ 0x80735934, 0x80742350, 0x80734fa0, 0x80723cdc }, 0x33b8|2, 0x33b8|2 }, // REL1
{{ 0x80738cec, 0x80741328, 0x80738358, 0x80727094 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x80738da4, 0x8072b77c, 0x80738410, 0x8072714c }, 0x37a4|2, 0x37a4|2 }, // REL1
{{ 0x8073c548, 0x807457d0, 0x8073bbb4, 0x8072a8f0 }, 0x2898|2, 0x2898|2 }, // REL1
- {{ 0x8073edec, 0x8072ef20, 0x8073e458, 0x8072d194 }, 0x3d8c|2, 0x3d8c|2 }, // REL1
- {{ 0x80742b78, 0x80732cac, 0x807421e4, 0x80730f18 }, 0x4|3, 0x4|3 }, // REL1
+ {{ 0x8073edec, 0x8072ef20, 0x8073e458, 0x8072d194 }, 0x3d8c|0, 0x3d8c|0 }, // REL1
{{ 0x80742b88, 0x80732cbc, 0x807421f4, 0x807289f8 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x80742b94, 0x80732cc8, 0x80742200, 0x80730f54 }, 0x28c|2, 0x28c|2 }, // REL1
{{ 0x80742e20, 0x80732f54, 0x8074248c, 0x807311cc }, 0x4|3, 0x4|3 }, // REL1
@@ -898,7 +622,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80743140, 0x80733274, 0x807427ac, 0x80731500 }, 0x10|2, 0x10|2 }, // REL1
{{ 0x80743150, 0x80733284, 0x807427bc, 0x807314d4 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x80743154, 0x80733288, 0x807427c0, 0x80731514 }, 0x9310|0, 0x9310|0 }, // REL1
- {{ 0x8074c4a4, 0x80769350, 0x8074bb10, 0x8073a864 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8074c4a8, 0x8076ceac, 0x8074bb14, 0x8073a868 }, 0x10e4|0, 0x10e4|0 }, // REL1
{{ 0x8074d5b8, 0x80748078, 0x8074cc24, 0x8073b978 }, 0x440c|2, 0x440c|2 }, // REL1
{{ 0x807519c4, 0x80759e3c, 0x80751030, 0x8073fd84 }, 0x4|3, 0x4|3 }, // REL1
@@ -907,7 +630,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80753f68, 0x8075c35c, 0x807535d4, 0x80742328 }, 0x198|2, 0x198|2 }, // REL1
{{ 0x80754100, 0x8074c484, 0x8075376c, 0x807424c0 }, 0x4ab4|2, 0x4ab4|2 }, // REL1
{{ 0x80758bc4, 0x807cacf4, 0x80758230, 0x80746f84 }, 0x14|2, 0x14|2 }, // REL1
- {{ 0x80758bd8, 0x80683998, 0x80758244, 0x80746f98 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x80758bdc, 0x807706f8, 0x80758248, 0x80746f9c }, 0x4f48|2, 0x4f48|2 }, // REL1
{{ 0x8075db24, 0x80750f48, 0x8075d190, 0x8074bee4 }, 0xc0c|2, 0xc0c|2 }, // REL1
{{ 0x8075e730, 0x8077d4f0, 0x8075dd9c, 0x8074caf0 }, 0x10|2, 0x10|2 }, // REL1
@@ -918,14 +640,11 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80765bc4, 0x8075c428, 0x80765230, 0x80753f84 }, 0xc0|2, 0xc0|2 }, // REL1
{{ 0x80765c90, 0x807759c4, 0x807652fc, 0x80754050 }, 0x1bb8|2, 0x1bb8|2 }, // REL1
{{ 0x80767848, 0x8067c250, 0x80766eb4, 0x80755c08 }, 0x54|2, 0x54|2 }, // REL1
- {{ 0x807678f0, 0x80758d44, 0x80766f5c, 0x80755cb0 }, 0x140c|2, 0x140c|2 }, // REL1
- {{ 0x80768cfc, 0x80816614, 0x80768368, 0x807570bc }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x80768d04, 0x8075a158, 0x80768370, 0x807570c4 }, 0x8|3, 0x8|3 }, // REL1
+ {{ 0x807678f0, 0x80758d44, 0x80766f5c, 0x80755cb0 }, 0x141c|2, 0x141c|2 }, // REL1
{{ 0x80768d0c, 0x8077e048, 0x80768378, 0x807570cc }, 0x8|3, 0x8|3 }, // REL1
{{ 0x80768d14, 0x8077db5c, 0x80768380, 0x807570d4 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x80768d1c, 0x80777624, 0x80768388, 0x807570dc }, 0x648|2, 0x648|2 }, // REL1
{{ 0x80769364, 0x8076687c, 0x807689d0, 0x80757724 }, 0x14|2, 0x14|2 }, // REL1
- {{ 0x80769398, 0x80817a94, 0x80768a04, 0x80757758 }, 0x3c|2, 0x3c|2 }, // REL1
{{ 0x807693d4, 0x80777674, 0x80768a40, 0x80757794 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x807693d8, 0x80777ca0, 0x80768a44, 0x80757798 }, 0x1a8|2, 0x1a8|2 }, // REL1
{{ 0x80769580, 0x806e87e8, 0x80768bec, 0x80757940 }, 0x14|2, 0x14|2 }, // REL1
@@ -933,48 +652,26 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x807695f0, 0x807768c8, 0x80768c5c, 0x807579b0 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x807695f4, 0x806e6550, 0x80768c60, 0x807579b4 }, 0x18|2, 0x18|2 }, // REL1
{{ 0x8076960c, 0x80777e68, 0x80768c78, 0x807579cc }, 0x3228|2, 0x3228|2 }, // REL1
- {{ 0x8076c854, 0x80688548, 0x8076bec0, 0x8075ac14 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8076c858, 0x8075a170, 0x8076bec4, 0x8075ac18 }, 0x2378|2, 0x2378|2 }, // REL1
{{ 0x8076ebd0, 0x8077b0a8, 0x8076e23c, 0x8075cf90 }, 0x708|0, 0x708|0 }, // REL1
{{ 0x8076f2d8, 0x8075c4f0, 0x8076e944, 0x8075d698 }, 0x3374|2, 0x3374|2 }, // REL1
{{ 0x8077264c, 0x80760058, 0x80771cb8, 0x80760a0c }, 0x6c|2, 0x6c|2 }, // REL1
{{ 0x80772700, 0x8077b7b4, 0x80771d6c, 0x80760ac0 }, 0x1510|2, 0x1510|2 }, // REL1
{{ 0x80773c10, 0x8075f8d0, 0x8077327c, 0x80761fd0 }, 0x764|2, 0x764|2 }, // REL1
- {{ 0x8077437c, 0x80850320, 0x807739e8, 0x8076273c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x80774388, 0x80764540, 0x807739f4, 0x80762748 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x80774390, 0x80849284, 0x807739fc, 0x80762750 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x80774398, 0x80764550, 0x80773a04, 0x80762758 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8077439c, 0x80760108, 0x80773a08, 0x8076275c }, 0x1b34|0, 0x1b34|0 }, // REL1
- {{ 0x80775ed0, 0x8083c2a0, 0x8077553c, 0x80764290 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80775ed4, 0x80761c40, 0x80775540, 0x80764294 }, 0x119c|2, 0x119c|2 }, // REL1
- {{ 0x80777070, 0x8068b160, 0x8068ec54, 0x8067d990 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80777074, 0x80762de0, 0x807766e0, 0x80765434 }, 0xbbc|2, 0xbbc|2 }, // REL1
- {{ 0x80777c30, 0x8073ad90, 0x8074a2c8, 0x8073901c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80777c34, 0x807639a0, 0x807772a0, 0x80765ff4 }, 0x14|2, 0x14|2 }, // REL1
- {{ 0x80777c48, 0x8073ad90, 0x8074a2c8, 0x8073901c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80777c4c, 0x807639b8, 0x807772b8, 0x8076600c }, 0x18|2, 0x18|2 }, // REL1
- {{ 0x80777c64, 0x8073ad90, 0x8074a2c8, 0x8073901c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80777c68, 0x807639d4, 0x807772d4, 0x80766028 }, 0x1e8|2, 0x1e8|2 }, // REL1
- {{ 0x80777e50, 0x8073ad90, 0x8074a2c8, 0x8073901c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80777e54, 0x80763bc0, 0x807774c0, 0x80766214 }, 0x40c|2, 0x40c|2 }, // REL1
- {{ 0x80778260, 0x8073ad90, 0x8074a2c8, 0x8073901c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80778264, 0x80763fd0, 0x807778d0, 0x80766624 }, 0x14|2, 0x14|2 }, // REL1
- {{ 0x80778278, 0x8073ad90, 0x8074a2c8, 0x8073901c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8077827c, 0x80763fe8, 0x807778e8, 0x8076663c }, 0x18|2, 0x18|2 }, // REL1
- {{ 0x80778294, 0x8073ad90, 0x8074a2c8, 0x8073901c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80778298, 0x80764004, 0x80777904, 0x80766658 }, 0x54c|2, 0x54c|2 }, // REL1
+ {{ 0x8077439c, 0x80760108, 0x80773a08, 0x8076275c }, 0x4448|0, 0x4448|0 }, // REL1
{{ 0x807787e4, 0x8076e214, 0x80777e50, 0x80766ba4 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x807787ec, 0x8077cd0c, 0x80777e58, 0x80766bac }, 0x7f4|2, 0x7f4|2 }, // REL1
{{ 0x80779018, 0x80776838, 0x80778684, 0x807673d8 }, 0x10|2, 0x10|2 }, // REL1
{{ 0x80779028, 0x80764558, 0x80778694, 0x807673e8 }, 0x3df4|2, 0x3df4|2 }, // REL1
- {{ 0x8077ce1c, 0x8070f9d0, 0x8077c488, 0x8076b1dc }, 0x28|2, 0x28|2 }, // REL1
{{ 0x8077ce84, 0x8077d508, 0x8077c4f0, 0x8076b244 }, 0xfe0|2, 0xfe0|2 }, // REL1
{{ 0x8077de64, 0x8076e160, 0x8077d4d0, 0x8076c224 }, 0xa0|2, 0xa0|2 }, // REL1
{{ 0x8077df18, 0x8075a168, 0x8077d584, 0x8076c2d8 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x8077df20, 0x807683f4, 0x8077d58c, 0x8076c2e0 }, 0x4a84|0, 0x4a84|0 }, // REL1
{{ 0x807829d8, 0x8077e5a8, 0x80782044, 0x80770d98 }, 0x27b8|0, 0x27b8|0 }, // REL1
{{ 0x80785190, 0x80780df8, 0x80784894, 0x807735e8 }, 0x140|0, 0x140|0 }, // REL1
- {{ 0x807852d0, 0x80780ea0, 0x8078493c, 0x80773690 }, 0x2aac|2, 0x2aac|2 }, // REL1
{{ 0x80787d7c, 0x806f93a0, 0x807873e8, 0x8077613c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x80787d80, 0x807d0318, 0x807873ec, 0x80776140 }, 0x4bc4|2, 0x4bc4|2 }, // REL1
{{ 0x8078c95c, 0x80783950, 0x8078bfc8, 0x8077ad1c }, 0x19150|0, 0x19150|0 }, // REL1
@@ -982,43 +679,32 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x807a5be0, 0x8079cbd4, 0x807a524c, 0x80793fa0 }, 0x2558|0, 0x2558|0 }, // REL1
{{ 0x807a8138, 0x807d4ef8, 0x807a77a4, 0x807964f8 }, 0x1b88|0, 0x1b88|0 }, // REL1
{{ 0x807a9cc0, 0x8079f12c, 0x807a932c, 0x80798080 }, 0xe4|2, 0xe4|2 }, // REL1
- {{ 0x807a9dac, 0x807d6a58, 0x807a9418, 0x8079816c }, 0x10c|2, 0x10c|2 }, // REL1
{{ 0x807a9eb8, 0x8079f210, 0x807a9524, 0x80798278 }, 0x5178|0, 0x5178|0 }, // REL1
- {{ 0x807af0ec, 0x8079c9c0, 0x807ae758, 0x8079d4ac }, 0x28|2, 0x28|2 }, // REL1
- {{ 0x807af114, 0x807a4184, 0x807ae780, 0x8079d4d4 }, 0x14|2, 0x14|2 }, // REL1
{{ 0x807af12c, 0x807d4ee4, 0x807ae798, 0x8079d4ec }, 0xc|2, 0xc|2 }, // REL1
- {{ 0x807af138, 0x807a9098, 0x807ae7a4, 0x8079d4f8 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x807af13c, 0x807d6b90, 0x807ae7a8, 0x8079d4fc }, 0x3d90|0, 0x3d90|0 }, // REL1
- {{ 0x807b2ee8, 0x8077f8d4, 0x807b2554, 0x807a12a8 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x807b2ef4, 0x807a4494, 0x807b2560, 0x807a12b4 }, 0x26854|0, 0x26854|0 }, // REL1
{{ 0x807d976c, 0x807da94c, 0x807d8dd8, 0x807c7b2c }, 0x404|2, 0x404|2 }, // REL1
{{ 0x807d9b80, 0x807cacf4, 0x807d91ec, 0x807c7f40 }, 0xa28|2, 0xa28|2 }, // REL1
{{ 0x807da5ac, 0x8084b558, 0x807d9c18, 0x807c896c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x807da5c0, 0x807dad78, 0x807d9c2c, 0x807c8980 }, 0x16ac|2, 0x16ac|2 }, // REL1
- {{ 0x807dbc6c, 0x8079a9b8, 0x807db2d8, 0x807ca02c }, 0x4c|2, 0x4c|2 }, // REL1
{{ 0x807dbcc8, 0x807cba20, 0x807db334, 0x807ca088 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x807dbccc, 0x807cb734, 0x807db338, 0x807ca08c }, 0xbf0|2, 0xbf0|2 }, // REL1
{{ 0x807dc8c8, 0x807dc484, 0x807dbf34, 0x807cac88 }, 0x68|2, 0x68|2 }, // REL1
{{ 0x807dc94c, 0x807cc32c, 0x807dbfb8, 0x807cad0c }, 0x3fe8|2, 0x3fe8|2 }, // REL1
{{ 0x807e0938, 0x8083c6ec, 0x807dffa4, 0x807cecf8 }, 0x1bc4|2, 0x1bc4|2 }, // REL1
{{ 0x807e24fc, 0x807df55c, 0x807e1b68, 0x807d08bc }, 0x70|2, 0x70|2 }, // REL1
- {{ 0x807e2594, 0x807ebee0, 0x807e1c00, 0x807d0954 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x807e259c, 0x807dc50c, 0x807e1c08, 0x807d095c }, 0x3028|0, 0x3028|0 }, // REL1
- {{ 0x807e55c4, 0x8083f8ac, 0x807e4c30, 0x807d3984 }, 0x30|2, 0x30|2 }, // REL1
{{ 0x807e55f4, 0x8083e2b8, 0x807e4c60, 0x807d39b4 }, 0x60|2, 0x60|2 }, // REL1
{{ 0x807e5654, 0x807df5e4, 0x807e4cc0, 0x807d3a14 }, 0xd5c|0, 0xd5c|0 }, // REL1
{{ 0x807e63b0, 0x8083cfd8, 0x807e5a1c, 0x807d4770 }, 0x20|2, 0x20|2 }, // REL1
- {{ 0x807e63fc, 0x807de374, 0x807e5a68, 0x807d47bc }, 0x8|3, 0x8|3 }, // REL1
{{ 0x807e6404, 0x8083c6ec, 0x807e5a70, 0x807d47c4 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x807e6408, 0x8083e330, 0x807e5a74, 0x807d47c8 }, 0x3838|0, 0x3838|0 }, // REL1
{{ 0x807e9c40, 0x807e0394, 0x807e92ac, 0x807d8000 }, 0x4154|0, 0x4154|0 }, // REL1
{{ 0x807edd94, 0x80841b68, 0x807ed400, 0x807dc154 }, 0x468|2, 0x468|2 }, // REL1
- {{ 0x807ee248, 0x80841b64, 0x807ed8b4, 0x807dc608 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x807ee24c, 0x807e44e8, 0x807ed8b8, 0x807dc60c }, 0x1b4|2, 0x1b4|2 }, // REL1
{{ 0x807ee430, 0x80841fcc, 0x807eda9c, 0x807dc7f0 }, 0x5b0|2, 0x5b0|2 }, // REL1
{{ 0x807ee9e0, 0x807e46d0, 0x807ee04c, 0x807dcda0 }, 0x1004|0, 0x1004|0 }, // REL1
{{ 0x807ef9e4, 0x808425c0, 0x807ef050, 0x807ddda4 }, 0x2fc|2, 0x2fc|2 }, // REL1
- {{ 0x807efd00, 0x807e09b8, 0x807ef36c, 0x807de0c0 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x807efd04, 0x807e56dc, 0x807ef370, 0x807de0c4 }, 0x79d4|0, 0x79d4|0 }, // REL1
{{ 0x807f76e0, 0x808428dc, 0x807f6d4c, 0x807e5aa0 }, 0x464|2, 0x464|2 }, // REL1
{{ 0x807f7bbc, 0x807ed0bc, 0x807f7228, 0x807e5f7c }, 0xd4c|2, 0xd4c|2 }, // REL1
@@ -1026,7 +712,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x807f9274, 0x807ede84, 0x807f88e0, 0x807e7634 }, 0xc0|0, 0xc0|0 }, // REL1
{{ 0x807f9334, 0x80747b60, 0x807f89a0, 0x807e76f4 }, 0xc|2, 0xc|2 }, // REL1
{{ 0x807f9384, 0x808436ac, 0x807f89f0, 0x807e7744 }, 0x1d4|2, 0x1d4|2 }, // REL1
- {{ 0x807f9568, 0x80734848, 0x807f8bd4, 0x807e7928 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x807f9580, 0x808438a0, 0x807f8bec, 0x807e7940 }, 0x15ac|2, 0x15ac|2 }, // REL1
{{ 0x807fab3c, 0x80800e0c, 0x807fa1a8, 0x807e8efc }, 0xc|2, 0xc|2 }, // REL1
{{ 0x807fab48, 0x807edf88, 0x807fa1b4, 0x807e8f08 }, 0x3fd0|2, 0x3fd0|2 }, // REL1
@@ -1042,64 +727,47 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80813b88, 0x807f873c, 0x808131f4, 0x80801f48 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x80813b8c, 0x807edf50, 0x808131f8, 0x80801f4c }, 0x38|2, 0x38|2 }, // REL1
{{ 0x80813bc4, 0x80800e18, 0x80813230, 0x80801f84 }, 0xa6a8|0, 0xa6a8|0 }, // REL1
- {{ 0x8081e270, 0x8072fc98, 0x8081d8dc, 0x8080c630 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8081e278, 0x8072c704, 0x8081d8e4, 0x8080c638 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x8081e280, 0x8084b060, 0x8081d8ec, 0x8080c640 }, 0xd68|2, 0xd68|2 }, // REL1
{{ 0x8081efec, 0x8080b4d8, 0x8081e658, 0x8080d3ac }, 0xf4fc|0, 0xf4fc|0 }, // REL1
- {{ 0x8082e4e8, 0x80814a44, 0x8082db54, 0x8081c8a8 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x8082e4f0, 0x80750e38, 0x8082db5c, 0x8081c8b0 }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x8082e4f4, 0x80814a50, 0x8082db60, 0x8081c8b4 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8082e52c, 0x80762de4, 0x8082db98, 0x8081c8ec }, 0x14|2, 0x14|2 }, // REL1
{{ 0x8082e540, 0x8084bdcc, 0x8082dbac, 0x8081c900 }, 0x2ec|2, 0x2ec|2 }, // REL1
- {{ 0x8082e834, 0x8077b798, 0x8082dea0, 0x8081cbf4 }, 0x14|2, 0x14|2 }, // REL1
{{ 0x8082e850, 0x8081aa28, 0x8082debc, 0x8081cc10 }, 0xb6c|2, 0xb6c|2 }, // REL1
- {{ 0x8082f3bc, 0x80878070, 0x8082ea28, 0x8081d77c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8082f404, 0x8084c0dc, 0x8082ea70, 0x8081d7c4 }, 0x4090|2, 0x4090|2 }, // REL1
{{ 0x80833494, 0x8081b594, 0x80832b00, 0x80821854 }, 0x63c|0, 0x63c|0 }, // REL1
{{ 0x80833af0, 0x8076e4c8, 0x8083315c, 0x80821eb0 }, 0xc|2, 0xc|2 }, // REL1
{{ 0x80833afc, 0x8081bc04, 0x80833168, 0x80821ebc }, 0x430c|2, 0x430c|2 }, // REL1
{{ 0x80837e08, 0x8081ff0c, 0x80837470, 0x808261c8 }, 0x4|0, 0x4|0 }, // REL1
{{ 0x80837e0c, 0x8081ff14, 0x80837478, 0x808261cc }, 0xfb4|2, 0xfb4|2 }, // REL1
- {{ 0x80838e5c, 0x808501b4, 0x808384c8, 0x8082721c }, 0x21f8|2, 0x21f8|2 }, // REL1
+ {{ 0x80838e5c, 0x808501b4, 0x808384c8, 0x8082721c }, 0x21f8|0, 0x21f8|0 }, // REL1
{{ 0x8083b054, 0x808540f4, 0x8083a6c0, 0x80829414 }, 0xc|2, 0xc|2 }, // REL1
{{ 0x8083b060, 0x80857c34, 0x8083a6cc, 0x80829420 }, 0xc|2, 0xc|2 }, // REL1
{{ 0x8083b06c, 0x80820ef4, 0x8083a6d8, 0x8082942c }, 0x19ac|2, 0x19ac|2 }, // REL1
{{ 0x8083ca18, 0x80833630, 0x8083c084, 0x8082add8 }, 0x94|2, 0x94|2 }, // REL1
- {{ 0x8083caac, 0x8082da30, 0x8083c118, 0x8082ae6c }, 0x94|2, 0x94|2 }, // REL1
{{ 0x8083cb40, 0x80852420, 0x8083c1ac, 0x8082af00 }, 0x86c|0, 0x86c|0 }, // REL1
- {{ 0x8083d408, 0x807e46ec, 0x8083ca74, 0x8082b7c8 }, 0x1c|2, 0x1c|2 }, // REL1
{{ 0x8083d424, 0x808229c4, 0x8083ca90, 0x8082b7e4 }, 0x4e60|0, 0x4e60|0 }, // REL1
- {{ 0x808422a0, 0x80851378, 0x8084190c, 0x80830660 }, 0x10|2, 0x10|2 }, // REL1
- {{ 0x808422b0, 0x80852c7c, 0x8084191c, 0x80830670 }, 0x2474|2, 0x2474|2 }, // REL1
{{ 0x80844728, 0x80827850, 0x80843d94, 0x80832ae8 }, 0x6274|0, 0x6274|0 }, // REL1
{{ 0x8084a99c, 0x80855180, 0x8084a008, 0x80838d5c }, 0x26b0|2, 0x26b0|2 }, // REL1
- {{ 0x8084d04c, 0x8082f754, 0x8084c6b8, 0x8083b40c }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8084d050, 0x80820ec8, 0x8084c6bc, 0x8083b410 }, 0x28|2, 0x28|2 }, // REL1
{{ 0x8084d0d4, 0x8082dac0, 0x8084c740, 0x8083b494 }, 0x4bf4|0, 0x4bf4|0 }, // REL1
{{ 0x80851cc8, 0x80854c00, 0x80851334, 0x80840088 }, 0x8|3, 0x8|3 }, // REL1
{{ 0x80851cd0, 0x80857858, 0x8085133c, 0x80840090 }, 0xe00|2, 0xe00|2 }, // REL1
{{ 0x80852ad0, 0x80821824, 0x8085213c, 0x80840e90 }, 0x138|2, 0x138|2 }, // REL1
{{ 0x80852c08, 0x808326c0, 0x80852274, 0x80840fc8 }, 0x1004|2, 0x1004|2 }, // REL1
- {{ 0x80853c0c, 0x8082da30, 0x80853278, 0x80841fcc }, 0x94|2, 0x94|2 }, // REL1
{{ 0x80853ca0, 0x808587f0, 0x8085330c, 0x80842060 }, 0x14c8|2, 0x14c8|2 }, // REL1
{{ 0x808551e4, 0x80833754, 0x80854850, 0x808435a4 }, 0x71a8|0, 0x71a8|0 }, // REL1
{{ 0x8085c3c4, 0x80859d34, 0x8085ba30, 0x8084a784 }, 0x22a0|2, 0x22a0|2 }, // REL1
{{ 0x8085e664, 0x808436a0, 0x8085dcd0, 0x8084ca24 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x8085e66c, 0x8083a948, 0x8085dcd8, 0x8084ca2c }, 0xa30|2, 0xa30|2 }, // REL1
{{ 0x8085f09c, 0x8085bfd4, 0x8085e708, 0x8084d45c }, 0xe24|2, 0xe24|2 }, // REL1
- {{ 0x8085fec0, 0x8082e5c4, 0x8085f52c, 0x8084e280 }, 0x68|2, 0x68|2 }, // REL1
{{ 0x8085ffcc, 0x8083b380, 0x8085f638, 0x8084e38c }, 0xf54|0, 0xf54|0 }, // REL1
{{ 0x80860f28, 0x8085cf08, 0x80860594, 0x8084f2e8 }, 0x1ee8|2, 0x1ee8|2 }, // REL1
- {{ 0x80862e14, 0x8083c2d0, 0x80862480, 0x808511d4 }, 0x40c|2, 0x40c|2 }, // REL1
- {{ 0x8086322c, 0x8085edfc, 0x80862898, 0x808515ec }, 0x1c64|2, 0x1c64|2 }, // REL1
- {{ 0x80864e90, 0x80860a60, 0x808644fc, 0x80794d0c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x80864e94, 0x80860a64, 0x80864500, 0x80853254 }, 0x25c|2, 0x25c|2 }, // REL1
+ {{ 0x8086322c, 0x8085edfc, 0x80862898, 0x808515ec }, 0x1ec4|2, 0x1ec4|2 }, // REL1
{{ 0x808650f0, 0x8077cc20, 0x8086475c, 0x808534b0 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x808650f4, 0x80860cc4, 0x80864760, 0x808534b4 }, 0xdd4|2, 0xdd4|2 }, // REL1
{{ 0x80865ec8, 0x80853420, 0x80865534, 0x80854288 }, 0x8|3, 0x8|3 }, // REL1
- {{ 0x80865ed0, 0x80861aa0, 0x8086553c, 0x80854290 }, 0x6fc|2, 0x6fc|2 }, // REL1
- {{ 0x808665cc, 0x8086219c, 0x80865c38, 0x80794d0c }, 0x4|3, 0x4|3 }, // REL1
- {{ 0x808665d0, 0x808621a0, 0x80865c3c, 0x80854990 }, 0xaa8|2, 0xaa8|2 }, // REL1
+ {{ 0x80865ed0, 0x80861aa0, 0x8086553c, 0x80854290 }, 0x11a8|2, 0x11a8|2 }, // REL1
{{ 0x80867084, 0x80864d30, 0x808666f0, 0x80855444 }, 0x650|2, 0x650|2 }, // REL1
{{ 0x808676e0, 0x80862c5c, 0x80866d4c, 0x80855aa0 }, 0x20d0|2, 0x20d0|2 }, // REL1
{{ 0x808697b8, 0x8086e680, 0x80868e24, 0x80857b78 }, 0x4|3, 0x4|3 }, // REL1
@@ -1110,7 +778,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x8086c958, 0x80866b00, 0x8086bfc4, 0x8085ad18 }, 0xb0|2, 0xb0|2 }, // REL1
{{ 0x8086ca30, 0x80878da8, 0x8086c09c, 0x8085adf0 }, 0x624c|2, 0x624c|2 }, // REL1
{{ 0x80872c94, 0x80865e14, 0x80872300, 0x80861054 }, 0xcec|2, 0xcec|2 }, // REL1
- {{ 0x80873990, 0x8082d8c0, 0x80872ffc, 0x80861d50 }, 0x4|3, 0x4|3 }, // REL1
{{ 0x80873998, 0x80866bd0, 0x80873004, 0x80861d58 }, 0x1aac|2, 0x1aac|2 }, // REL1
{{ 0x80875450, 0x808686f8, 0x80874abc, 0x80863810 }, 0x804|2, 0x804|2 }, // REL1
{{ 0x80875c54, 0x80877578, 0x8086a744, 0x80859498 }, 0x108|0, 0x108|0 }, // REL1
@@ -1122,9 +789,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x8088f8d0, 0x8088b478, 0x8088ef30, 0x8087dc90 }, 0x32c|0, 0x32c|0 }, // REL4
{{ 0x8088fbfc, 0x8088b7a4, 0x8088f25c, 0x8087e004 }, 0x1c4|0, 0x1c4|0 }, // REL4
{{ 0x8088fdf4, 0x8088b990, 0x8088f440, 0x8087e1f0 }, 0x4|3, 0x4|3 }, // REL4
- {{ 0x8088fe00, 0x8088b9a0, 0x8088f450, 0x8087e200 }, 0x160|2, 0x160|2 }, // REL4
- {{ 0x8088ff60, 0x8088bb00, 0x8088f5b0, 0x8087ff60 }, 0x4|3, 0x4|3 }, // REL4
- {{ 0x8088ff64, 0x8088bb04, 0x8088f5b4, 0x8087e364 }, 0x2c|2, 0x2c|2 }, // REL4
+ {{ 0x8088fe00, 0x8088b9a0, 0x8088f450, 0x8087e200 }, 0x190|2, 0x190|2 }, // REL4
{{ 0x8088ff98, 0x8088cc90, 0x8088f5e8, 0x8087e398 }, 0x8|3, 0x8|3 }, // REL4
{{ 0x8088ffa8, 0x8088bb38, 0x8088f5f8, 0x8087e3a8 }, 0x88|0, 0x88|0 }, // REL4
{{ 0x80890030, 0x8088f9c0, 0x80894908, 0x808836c8 }, 0x310|0, 0x310|0 }, // REL4
@@ -1138,7 +803,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80891634, 0x8088e07c, 0x80890c84, 0x8087fa3c }, 0x84|2, 0x84|2 }, // REL4
{{ 0x808916bc, 0x8088d1ec, 0x80890d0c, 0x8087fac4 }, 0xec|2, 0xec|2 }, // REL4
{{ 0x808917ac, 0x8088e104, 0x80890dfc, 0x8087fbb4 }, 0x44|2, 0x44|2 }, // REL4
- {{ 0x808917f4, 0x8088d2dc, 0x80890e44, 0x8087fbfc }, 0x7ac|2, 0x7ac|2 }, // REL4
+ {{ 0x808917f4, 0x8088d2dc, 0x80890e44, 0x8087fbfc }, 0x7ac|0, 0x7ac|0 }, // REL4
{{ 0x80891fa8, 0x8088e150, 0x808915f8, 0x808803b0 }, 0x44|2, 0x44|2 }, // REL4
{{ 0x80891ff8, 0x8088da90, 0x80891648, 0x80880400 }, 0x28|2, 0x28|2 }, // REL4
{{ 0x80892024, 0x8088e19c, 0x80891674, 0x8088042c }, 0x1d8|2, 0x1d8|2 }, // REL4
@@ -1163,8 +828,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80894240, 0x8088f158, 0x80893890, 0x80882650 }, 0x59c|2, 0x59c|2 }, // REL4
{{ 0x808947e0, 0x808934b0, 0x80893e30, 0x80882bf0 }, 0x7f8|2, 0x7f8|2 }, // REL4
{{ 0x80894ff0, 0x8088f6f8, 0x80894640, 0x80883400 }, 0x5c8|0, 0x5c8|0 }, // REL4
- {{ 0x808955b8, 0x80894c14, 0x80894c08, 0x808839c8 }, 0xc|2, 0xc|2 }, // REL4
- {{ 0x808955cc, 0x8088fccc, 0x80894c1c, 0x808839dc }, 0x28|2, 0x28|2 }, // REL4
{{ 0x808955f4, 0x80893cc4, 0x80894c44, 0x80883a04 }, 0x68c|2, 0x68c|2 }, // REL4
{{ 0x80895c9c, 0x8088fcf4, 0x808952ec, 0x808845c4 }, 0xe0|2, 0xe0|2 }, // REL4
{{ 0x80895d84, 0x8089436c, 0x808953d4, 0x808846ac }, 0x3bc|2, 0x3bc|2 }, // REL4
@@ -1181,21 +844,16 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80897cbc, 0x80890f14, 0x8089730c, 0x808865e4 }, 0x468|2, 0x468|2 }, // REL4
{{ 0x80898124, 0x8089516c, 0x80897774, 0x80886a4c }, 0x28|2, 0x7c|3 }, // REL4
{{ 0x808981a0, 0x808951e8, 0x808977f0, 0x80886ac8 }, 0x14|2, 0x14|2 }, // REL4
- {{ 0x808981c8, 0x80895210, 0x8088edcc, 0x8088410c }, 0x8|3, 0x8|3 }, // REL4
- {{ 0x8089822c, 0x8089526c, 0x8088edcc, 0x8087db2c }, 0x14|2, 0x14|2 }, // REL4
{{ 0x80898244, 0x8089528c, 0x80897874, 0x80886b4c }, 0x2c|2, 0x2c|2 }, // REL4
{{ 0x80898270, 0x808952b8, 0x8089779c, 0x80886a74 }, 0x30|2, 0x30|2 }, // REL4
- {{ 0x80898344, 0x8089538c, 0x8088edd4, 0x8087db34 }, 0x4|3, 0x4|3 }, // REL4
{{ 0x80898368, 0x808953b0, 0x80897874, 0x80886b4c }, 0x2c|2, 0x2c|2 }, // REL4
{{ 0x80898394, 0x808953dc, 0x8089779c, 0x80886a74 }, 0x30|2, 0x30|2 }, // REL4
{{ 0x808983e8, 0x808951e8, 0x808977f0, 0x80886ac8 }, 0x14|2, 0x14|2 }, // REL4
- {{ 0x80898410, 0x80895210, 0x8088edcc, 0x8088410c }, 0x8|3, 0x8|3 }, // REL4
{{ 0x80898484, 0x80895284, 0x8089786c, 0x80886b44 }, 0x8|3, 0x8|3 }, // REL4
{{ 0x808985a8, 0x80895284, 0x8089786c, 0x80886b44 }, 0x8|3, 0x8|3 }, // REL4
{{ 0x808985b0, 0x808953b0, 0x80897874, 0x80886b4c }, 0x2c|2, 0x2c|2 }, // REL4
{{ 0x808985dc, 0x808953dc, 0x8089779c, 0x80886a74 }, 0x30|2, 0x54|3 }, // REL4
{{ 0x80898630, 0x80895430, 0x808977f0, 0x80886ac8 }, 0x14|2, 0x14|2 }, // REL4
- {{ 0x80898658, 0x80895458, 0x8088edcc, 0x8088410c }, 0x8|3, 0x8|3 }, // REL4
{{ 0x808986cc, 0x808954cc, 0x8089786c, 0x80886b44 }, 0x34|2, 0x34|2 }, // REL4
{{ 0x80898704, 0x8089137c, 0x808978a4, 0x80886b7c }, 0x314|2, 0x314|2 }, // REL4
{{ 0x80898a20, 0x80893190, 0x808932e8, 0x808820a8 }, 0x4|3, 0x4|3 }, // REL4
@@ -1207,7 +865,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x80899638, 0x80891f08, 0x80898798, 0x80887a70 }, 0x1e0|2, 0x1e0|2 }, // REL4
{{ 0x80899820, 0x80895870, 0x80898980, 0x80887c58 }, 0x154|2, 0x154|2 }, // REL4
{{ 0x80899978, 0x8088f1a4, 0x80898ad8, 0x80887db0 }, 0x4|3, 0x4|3 }, // REL4
- {{ 0x8089997c, 0x808920ec, 0x80898adc, 0x80887db4 }, 0x574|2, 0x574|2 }, // REL4
+ {{ 0x8089997c, 0x808920ec, 0x80898adc, 0x80887db4 }, 0x574|0, 0x574|0 }, // REL4
{{ 0x80899ef8, 0x808959d0, 0x80899058, 0x80888330 }, 0xdc|2, 0xdc|2 }, // REL4
{{ 0x80899fd8, 0x80892668, 0x80899138, 0x80888410 }, 0x1a0|2, 0x1a0|2 }, // REL4
{{ 0x8089a180, 0x80895ab0, 0x808992e0, 0x808885b8 }, 0x124|2, 0x124|2 }, // REL4
@@ -1220,8 +878,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x8089ab5c, 0x80896164, 0x80899cbc, 0x80888f4c }, 0x10|2, 0x10|2 }, // REL4
{{ 0x8089ab74, 0x8089617c, 0x80899cd4, 0x80888fb4 }, 0xb0|0, 0xb0|0 }, // REL4
{{ 0x8089ac24, 0x8089622c, 0x80899d84, 0x8088965c }, 0x4|3, 0x4|3 }, // REL4
- {{ 0x8089ac2c, 0x80896234, 0x80899d8c, 0x80889018 }, 0x14|2, 0x14|2 }, // REL4
- {{ 0x8089acc8, 0x808962d0, 0x80899e28, 0x80888b38 }, 0x8|3, 0x8|3 }, // REL4
{{ 0x8089ad30, 0x80896338, 0x80899e90, 0x808891d4 }, 0x18|2, 0x18|2 }, // REL4
{{ 0x8089ad78, 0x80896380, 0x80899ed8, 0x808891fc }, 0x4|3, 0x4|3 }, // REL4
{{ 0x8089ad84, 0x8089638c, 0x80899ee4, 0x808891a4 }, 0x1c|2, 0x1c|2 }, // REL4
@@ -1231,11 +887,9 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x8089aec0, 0x80897070, 0x8089a020, 0x80889320 }, 0x1c|2, 0x1c|2 }, // REL4
{{ 0x8089aee0, 0x808964c8, 0x8089a040, 0x80889340 }, 0x878|2, 0x878|2 }, // REL4
{{ 0x8089b760, 0x80897090, 0x8089a8c0, 0x80889bc0 }, 0x3ca4|2, 0x3ca4|2 }, // REL4
- {{ 0x8089f404, 0x808adf7c, 0x8089e564, 0x8088d864 }, 0x4|3, 0x4|3 }, // REL4
{{ 0x8089f408, 0x8089bb68, 0x8089e568, 0x8088d868 }, 0x98|2, 0x98|2 }, // REL4
{{ 0x8089f4a4, 0x8089ad34, 0x8089e604, 0x8088d904 }, 0xfc|2, 0xfc|2 }, // REL4
{{ 0x8089f5a0, 0x8089bc08, 0x8089e700, 0x8088da00 }, 0x1a0|2, 0x1a0|2 }, // REL4
- {{ 0x8089f740, 0x808a49a0, 0x8089e8a0, 0x8088dba0 }, 0x10|2, 0x10|2 }, // REL4
{{ 0x8089f758, 0x8089ae30, 0x8089e8b8, 0x8088dbb8 }, 0x5c|2, 0x5c|2 }, // REL4
{{ 0x8089f7b4, 0x8089bdbc, 0x8089e914, 0x8088dc14 }, 0x1c4|2, 0x1c4|2 }, // REL4
{{ 0x8089f984, 0x8089bf84, 0x8089eae4, 0x8088dde4 }, 0x5c|2, 0x5c|2 }, // REL4
@@ -1256,9 +910,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808a0070, 0x8089c210, 0x8089f1d0, 0x8088e4d0 }, 0x1c|2, 0x1c|2 }, // REL4
{{ 0x808a0098, 0x8089b2f8, 0x8089f1f8, 0x8088e4f8 }, 0x38|2, 0x38|2 }, // REL4
{{ 0x808a00d0, 0x8089b330, 0x8089f230, 0x808900d0 }, 0x4|3, 0x4|3 }, // REL4
- {{ 0x808a00d4, 0x8089b334, 0x8089f234, 0x8088e534 }, 0x4|3, 0x4|3 }, // REL4
- {{ 0x808a00d8, 0x808a00d8, 0x808a00d8, 0x808900d8 }, 0x4|3, 0x4|3 }, // REL4
- {{ 0x808a00dc, 0x8089b33c, 0x8089f23c, 0x8088e53c }, 0x220|2, 0x220|2 }, // REL4
+ {{ 0x808a00d4, 0x8089b334, 0x8089f234, 0x8088e534 }, 0x228|2, 0x228|2 }, // REL4
{{ 0x808a02fc, 0x8089f078, 0x8089f45c, 0x8088e75c }, 0x40|2, 0x40|2 }, // REL4
{{ 0x808a0340, 0x8089c238, 0x8089f4a0, 0x8088e7a0 }, 0x34|2, 0x34|2 }, // REL4
{{ 0x808a0378, 0x8089b5a0, 0x8089f4d8, 0x8088e7d8 }, 0xe4|2, 0xe4|2 }, // REL4
@@ -1279,7 +931,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808a1d38, 0x8089d930, 0x808a0e98, 0x80890198 }, 0x14|2, 0x3c|3 }, // REL4
{{ 0x808a1d74, 0x8089d96c, 0x808a0ed4, 0x808901d4 }, 0xc|2, 0xc|2 }, // REL4
{{ 0x808a1d80, 0x8089d378, 0x808a0ee0, 0x808901e0 }, 0x274|2, 0x274|2 }, // REL4
- {{ 0x808a1ff4, 0x8089c8ac, 0x808a1154, 0x80890454 }, 0x8|3, 0x8|3 }, // REL4
{{ 0x808a1ffc, 0x8089d5ec, 0x808a115c, 0x8089045c }, 0x8|3, 0x8|3 }, // REL4
{{ 0x808a2050, 0x8089d980, 0x808a11b0, 0x808904b0 }, 0x368|2, 0x368|2 }, // REL4
{{ 0x808a23c0, 0x8089e3f8, 0x808a1520, 0x80890820 }, 0x17c|2, 0x17c|2 }, // REL4
@@ -1296,9 +947,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808a2ce8, 0x8089e2a0, 0x808a1e48, 0x80891148 }, 0x8|3, 0x8|3 }, // REL4
{{ 0x808a2cf8, 0x8089f6c0, 0x808a1e58, 0x80891158 }, 0x1e0|2, 0x1e0|2 }, // REL4
{{ 0x808a2edc, 0x8089e624, 0x808a203c, 0x8089133c }, 0x3f8|2, 0x3f8|2 }, // REL4
- {{ 0x808a32d4, 0x808a2d34, 0x808a2434, 0x80891734 }, 0x4|3, 0x4|3 }, // REL4
- {{ 0x808a32d8, 0x8089f8a8, 0x808a2438, 0x80891738 }, 0xfc|2, 0xfc|2 }, // REL4
- {{ 0x808a33e0, 0x8089ea20, 0x808a2540, 0x80891840 }, 0x1d4|2, 0x1d4|2 }, // REL4
{{ 0x808a35b4, 0x8089f9ac, 0x808a2714, 0x80891a14 }, 0x248|2, 0x248|2 }, // REL4
{{ 0x808a37fc, 0x8089ebf4, 0x808a295c, 0x80891c5c }, 0x64|2, 0x64|2 }, // REL4
{{ 0x808a3860, 0x808a0020, 0x808a29c0, 0x80891cc0 }, 0x4|3, 0x4|3 }, // REL4
@@ -1427,9 +1075,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808b5104, 0x808b0114, 0x808b4264, 0x808a357c }, 0x10|2, 0x10|2 }, // REL5
{{ 0x808b5118, 0x808b09e0, 0x808b4278, 0x808a3590 }, 0x5ac|2, 0x5ac|2 }, // REL5
{{ 0x808b5704, 0x808b292c, 0x808b4864, 0x808a3b7c }, 0x94|2, 0x94|2 }, // REL5
- {{ 0x808b5798, 0x808b1770, 0x808b48f8, 0x808a3c10 }, 0x8|3, 0x8|3 }, // REL5
{{ 0x808b57a0, 0x808b215c, 0x808b4900, 0x808a3c18 }, 0x48|2, 0x48|2 }, // REL5
- {{ 0x808b5818, 0x808b177c, 0x808b4978, 0x808a3c90 }, 0x70|2, 0x70|2 }, // REL5
{{ 0x808b5888, 0x808b0fc8, 0x808b49e8, 0x808a3d00 }, 0xe80|0, 0xf10|1 }, // REL5
{{ 0x808b6798, 0x808b1ed8, 0x808b58f8, 0x808a4c10 }, 0x4|2, 0x48|3 }, // REL5
{{ 0x808b67e0, 0x808b1f20, 0x808b5940, 0x808a4c58 }, 0x4|3, 0x4|3 }, // REL5
@@ -1472,7 +1118,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808b77c8, 0x808b2e08, 0x808b6928, 0x808a5c40 }, 0x8|3, 0x8|3 }, // REL5
{{ 0x808b77d0, 0x808ba3a8, 0x808b6930, 0x808a5c48 }, 0x4c|2, 0xac|3 }, // REL5
{{ 0x808b787c, 0x808ba454, 0x808b69dc, 0x808a5cf4 }, 0x1c|2, 0x1c|2 }, // REL5
- {{ 0x808b78e8, 0x808b1990, 0x808b6a48, 0x808a5d60 }, 0x18|2, 0x18|2 }, // REL5
{{ 0x808b7904, 0x808b50ac, 0x808b6a64, 0x808a5d7c }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808b7910, 0x808b2ef0, 0x808b6a70, 0x808a5d88 }, 0x78|2, 0x78|2 }, // REL5
{{ 0x808b7988, 0x808b2f68, 0x808b6ae8, 0x808a6cb8 }, 0x4|3, 0x4|3 }, // REL5
@@ -1594,9 +1239,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808bb194, 0x808bb84c, 0x808ba2e4, 0x808a9604 }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808bb198, 0x808bbb58, 0x808ba2e8, 0x808a9608 }, 0x28c|2, 0x28c|2 }, // REL5
{{ 0x808bb428, 0x808c4948, 0x808ba578, 0x808a9898 }, 0x4|3, 0x4|3 }, // REL5
- {{ 0x808bb42c, 0x808ae5c4, 0x808ba57c, 0x808a989c }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808bb430, 0x808bbdf0, 0x808ba580, 0x808a98a0 }, 0x4|3, 0x4|3 }, // REL5
- {{ 0x808bb434, 0x808ae5cc, 0x808ba584, 0x808a98a4 }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808bb43c, 0x808b50b4, 0x808ba58c, 0x808a98ac }, 0x248|2, 0x270|3 }, // REL5
{{ 0x808bb6ac, 0x808b5324, 0x808ba7fc, 0x808a9b1c }, 0x4|2, 0x7c|3 }, // REL5
{{ 0x808bb728, 0x808b53a0, 0x808ba878, 0x808a9b98 }, 0x1c|2, 0x1c|2 }, // REL5
@@ -1646,12 +1289,11 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808bfd0c, 0x808bc0f4, 0x808bee5c, 0x808ae17c }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808bfd10, 0x808b9ff0, 0x808bee60, 0x808ae180 }, 0x60|2, 0x60|2 }, // REL5
{{ 0x808bfd70, 0x808bc158, 0x808beec0, 0x808ae1e0 }, 0x4|3, 0x4|3 }, // REL5
- {{ 0x808bfd74, 0x808b19dc, 0x808beec4, 0x808ae1e4 }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808bfd78, 0x808b96c8, 0x808beec8, 0x808ae1e8 }, 0xd4|2, 0xd4|2 }, // REL5
{{ 0x808bfe4c, 0x808bfe4c, 0x808bef9c, 0x808ae2bc }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808bfe50, 0x808b97a0, 0x808befa0, 0x808ae2c0 }, 0x78|2, 0x78|2 }, // REL5
{{ 0x808bfec8, 0x808bfec8, 0x808bf018, 0x808ae338 }, 0x4|3, 0x4|3 }, // REL5
- {{ 0x808bfecc, 0x808b981c, 0x808bf01c, 0x808ae33c }, 0x250|2, 0x250|2 }, // REL5
+ {{ 0x808bfecc, 0x808b981c, 0x808bf01c, 0x808ae33c }, 0x250|0, 0x250|0 }, // REL5
{{ 0x808c011c, 0x808b9a6c, 0x808bf26c, 0x808b011c }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808c0120, 0x808b9a70, 0x808bf270, 0x808ae590 }, 0x7c|2, 0x7c|2 }, // REL5
{{ 0x808c019c, 0x808c019c, 0x808c019c, 0x808b019c }, 0x4|3, 0x4|3 }, // REL5
@@ -1742,7 +1384,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808c5834, 0x808bf424, 0x808c4984, 0x808b3ccc }, 0x408|2, 0x408|2 }, // REL5
{{ 0x808c5c74, 0x808c275c, 0x808c4dc4, 0x808b410c }, 0x14|2, 0x14|2 }, // REL5
{{ 0x808c5c8c, 0x808d870c, 0x808c4ddc, 0x808b4124 }, 0xa4|2, 0xa4|2 }, // REL5
- {{ 0x808c5d30, 0x808b1d88, 0x808c4e80, 0x808b41c8 }, 0x3c|2, 0x3c|2 }, // REL5
{{ 0x808c5d70, 0x808bf868, 0x808c4ec0, 0x808b4208 }, 0x1a4|2, 0x1a4|2 }, // REL5
{{ 0x808c5f14, 0x808c0c84, 0x808c5064, 0x808b43ac }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808c5f18, 0x808bfa10, 0x808c5068, 0x808b43b0 }, 0x4|3, 0x4|3 }, // REL5
@@ -1764,9 +1405,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808c6f6c, 0x808c0f5c, 0x808c60bc, 0x808b5404 }, 0xb0|2, 0xb0|2 }, // REL5
{{ 0x808c7050, 0x808c0460, 0x808c61a0, 0x808b54e8 }, 0x49c|2, 0x49c|2 }, // REL5
{{ 0x808c7524, 0x808c2f3c, 0x808c6674, 0x808b59bc }, 0x140|2, 0x140|2 }, // REL5
- {{ 0x808c7664, 0x808c0934, 0x808c67b4, 0x808b5afc }, 0x168|2, 0x168|2 }, // REL5
- {{ 0x808c77d0, 0x808c6054, 0x808c6920, 0x808b5c68 }, 0x4|3, 0x4|3 }, // REL5
- {{ 0x808c77d4, 0x808c0aa4, 0x808c6924, 0x808b5c6c }, 0x4|3, 0x4|3 }, // REL5
+ {{ 0x808c7664, 0x808c0934, 0x808c67b4, 0x808b5afc }, 0x174|2, 0x174|2 }, // REL5
{{ 0x808c77d8, 0x808c3080, 0x808c6928, 0x808b5c70 }, 0x1c|2, 0x1c|2 }, // REL5
{{ 0x808c77f4, 0x808c32c0, 0x808c6944, 0x808b5c8c }, 0x3c|2, 0x3c|2 }, // REL5
{{ 0x808c7830, 0x808c4530, 0x808c6980, 0x808b5cc8 }, 0x30|2, 0x30|2 }, // REL5
@@ -1804,7 +1443,6 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808caf84, 0x808c08fc, 0x808ca0d4, 0x808b941c }, 0x34|2, 0x34|2 }, // REL5
{{ 0x808cafb8, 0x808c5cb0, 0x808ca108, 0x808b9450 }, 0x80|2, 0x80|2 }, // REL5
{{ 0x808cb040, 0x808c7368, 0x808ca190, 0x808b94d8 }, 0x188|2, 0x188|2 }, // REL5
- {{ 0x808cb1c8, 0x808b1778, 0x808ca318, 0x808b9660 }, 0x74|2, 0x74|2 }, // REL5
{{ 0x808cb240, 0x808c5d38, 0x808ca390, 0x808b96d8 }, 0xa44|0, 0xa44|0 }, // REL5
{{ 0x808cbcc0, 0x808cab10, 0x808cae10, 0x808ba158 }, 0x4c|0, 0x4c|0 }, // REL5
{{ 0x808cbd54, 0x808c7564, 0x808caea4, 0x808ba1ec }, 0x154|2, 0x154|2 }, // REL5
@@ -1823,12 +1461,10 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808cdab0, 0x808c85d0, 0x808ccc00, 0x808bbf48 }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808cdab4, 0x808c8d2c, 0x808ccc04, 0x808bbf4c }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808cdab8, 0x808cb880, 0x808ccc08, 0x808bbf50 }, 0x570|2, 0x570|2 }, // REL5
- {{ 0x808ce12c, 0x808c60d4, 0x808cd27c, 0x808bc5c4 }, 0x10|2, 0x10|2 }, // REL5
{{ 0x808ce140, 0x808c85f0, 0x808cd290, 0x808bc5d8 }, 0x33c|2, 0x33c|2 }, // REL5
{{ 0x808ce480, 0x808c9dc0, 0x808cd5d0, 0x808bc918 }, 0xc4|2, 0xc4|2 }, // REL5
{{ 0x808ce568, 0x808cbf08, 0x808cd6b8, 0x808bca00 }, 0x5c0|2, 0x5c0|2 }, // REL5
{{ 0x808ceb28, 0x808af1dc, 0x808cdc78, 0x808bcfc0 }, 0x18|2, 0x18|2 }, // REL5
- {{ 0x808ceb48, 0x808b0fc8, 0x808cdc98, 0x808bcfe0 }, 0x8|3, 0x8|3 }, // REL5
{{ 0x808ceb50, 0x808cc4f0, 0x808cdca0, 0x808bcfe8 }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808ceb54, 0x808c8d2c, 0x808cdca4, 0x808bcfec }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808ceb58, 0x808c8a00, 0x808cdca8, 0x808bcff0 }, 0x648|2, 0x648|2 }, // REL5
@@ -1912,10 +1548,8 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808d3234, 0x808ce92c, 0x808d2384, 0x808c16cc }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808d323c, 0x808d4cec, 0x808d238c, 0x808c16d4 }, 0x518|2, 0x518|2 }, // REL5
{{ 0x808d3764, 0x808ce934, 0x808d28b4, 0x808c1bfc }, 0x33c|2, 0x384|3 }, // REL5
- {{ 0x808d3ae8, 0x808cecb8, 0x808d2c38, 0x808c1f80 }, 0x4|3, 0x4|3 }, // REL5
- {{ 0x808d3b48, 0x808cef88, 0x808d2c98, 0x808c1fe0 }, 0x40|2, 0x40|2 }, // REL5
+ {{ 0x808d3ae8, 0x808cecb8, 0x808d2c38, 0x808c1f80 }, 0x4|2, 0xa0|3 }, // REL5
{{ 0x808d3b88, 0x808ced58, 0x808d2cd8, 0x808c2020 }, 0x4|3, 0x4|3 }, // REL5
- {{ 0x808d3b8c, 0x808cefcc, 0x808d2cdc, 0x808c2024 }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808d3bd8, 0x808d5248, 0x808d2d28, 0x808c2070 }, 0x4|3, 0x4|3 }, // REL5
{{ 0x808d3c18, 0x808ceda8, 0x808d2d68, 0x808c20b0 }, 0x28|2, 0x28|2 }, // REL5
{{ 0x808d3c74, 0x808cec64, 0x808d2dc4, 0x808c210c }, 0x4|3, 0x4|3 }, // REL5
@@ -2046,7 +1680,7 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x808dbe84, 0x808d7d4c, 0x808dafd4, 0x808ca31c }, 0x6c4|2, 0x6c4|2 }, // REL5
{{ 0x808dc580, 0x808bda70, 0x808db6d0, 0x808caa18 }, 0x34|2, 0x34|2 }, // REL5
{{ 0x808dc5b4, 0x808d772c, 0x808db704, 0x808caa4c }, 0x598|2, 0x598|2 }, // REL5
- {{ 0x808dcbd4, 0x808d847c, 0x808dbd24, 0x808cb06c }, 0x388|2, 0x800|3 }, // REL5
+ {{ 0x808dcbd4, 0x808d847c, 0x808dbd24, 0x808cb06c }, 0x388|2, 0x388|2 }, // REL5
{{ 0x808dd3d4, 0x808d8c7c, 0x808dc524, 0x808cb86c }, 0x4c|0, 0x4c|0 }, // RELX
{{ 0x809bd6e8, 0x809b8f28, 0x809bc748, 0x809abd28 }, 0x4|0, 0x40|1 }, // MEM1
{{ 0x809bd728, 0x809b8f68, 0x809bc788, 0x809abd68 }, 0x24|0, 0x24|0 }, // MEM1
@@ -2055,10 +1689,11 @@ static const addr_port_t addr_port_0[2050] =
{{ 0x809c20d8, 0x809bd918, 0x809c1138, 0x809b0718 }, 0x4|0, 0x4|0 }, // MEM1
{{ 0x809c20f8, 0x809bd950, 0x809c1158, 0x809b0738 }, 0x4|0, 0x4|0 }, // MEM1
{{ 0x809c2100, 0x809bd930, 0x809c1160, 0x809b0740 }, 0x4|0, 0x4|0 }, // MEM1
+ {{ 0x809c2108, 0x809bd958, 0x809c1168, 0x809b0748 }, 0x4|0, 0x4|0 }, // MEM1
{{ 0x809c3618, 0x809bee20, 0x809c2678, 0x809b1c58 }, 0x4|0, 0x4|0 }, // MEM1
{{ 0x809c38b8, 0x809bf0b0, 0x809c2918, 0x809b13f8 }, 0x4|0, 0x4|0 }, // MEM1
{{ 0x809c38bc, 0x809bf0b4, 0x809c291c, 0x809b1efc }, 0x8|0, 0x8|0 }, // MEM1
{{ 0x80ae9544, 0x80ae4d84, 0x80ae85a4, 0x80ad7b84 }, 0x4|0, 0x4|0 }, // MEM1
{{ 0xcd000000, 0xcd000000, 0xcd000000, 0xcd000000 }, 0x8000|0, 0x8000|0 }, // GPU
-}; // 2050 records
+}; // 1685 records
diff --git a/project/src/analyze.c b/project/src/analyze.c
index 7809a7a..8472a42 100644
--- a/project/src/analyze.c
+++ b/project/src/analyze.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/crypt.h b/project/src/crypt.h
index d252aab..a3862ed 100644
--- a/project/src/crypt.h
+++ b/project/src/crypt.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/crypto/ssl-asm.S b/project/src/crypto/ssl-asm.S
index 84963d4..8bc103c 100644
--- a/project/src/crypto/ssl-asm.S
+++ b/project/src/crypto/ssl-asm.S
@@ -16,7 +16,7 @@
* This file is part of the WIT project. *
* Visit http://wit.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/crypto/ssl-asm.h b/project/src/crypto/ssl-asm.h
index 1219e16..5259338 100644
--- a/project/src/crypto/ssl-asm.h
+++ b/project/src/crypto/ssl-asm.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/db-ctcode.c b/project/src/db-ctcode.c
index 4001a9f..983603c 100644
--- a/project/src/db-ctcode.c
+++ b/project/src/db-ctcode.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/db-ctcode.h b/project/src/db-ctcode.h
index 5d1f8ac..f9e03bc 100644
--- a/project/src/db-ctcode.h
+++ b/project/src/db-ctcode.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/db-object.c b/project/src/db-object.c
index 2e61e59..57c084b 100644
--- a/project/src/db-object.c
+++ b/project/src/db-object.c
@@ -61,28 +61,28 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
/* 0x000 */ { 0,0,0,0,0,0, {-1,-1,-1},0, {0,0,0,0,0,0,0,0} },
/* 0x001 */
- { "airblock", "Object not used in regular tracks. Used in competitions as \"invisible wall\" above barriers (so you can't fly/jump over them). They are boxes of 200x200x200 units with a pivot in the bottom face.",
+ { "airblock", "Object not used in regular tracks. Used in tournaments as an \"invisible wall\" above barriers so you cannot fly/jump over them. They are boxes of 200x200x200 units with a pivot in the bottom face.",
OBF_OBJFLOW | OBF_SOLID,
obj_charact_s,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x002 */
- { "Psea", "The sea on GCN Peach Beach; for details see Object/Psea.",
+ { "Psea", "The sea on <small>GCN</small> Peach Beach; for details see Object/Psea.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
{116,-1,-1}, "Psea(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x003 */
- { "lensFX", "Generates a lens flare object when looking at the sun; it's also highly recommended to place this object near or coincident to `sun'.",
+ { "lensFX", "Generates a lens flare object when looking at the sun; it is also highly recommended to place this object near or coincident to `sun'.",
OBF_OBJECT | OBF_NO_FILE | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK | OBF_M_ARENA,
obj_charact_ta,
&settings_format_uuuu, &settings_format_uuuu,
{203,-1,-1}, "lensFX",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x004 */
- { "venice_nami", "The rising and dropping sea on Delfino Pier. This object goes through five stages before it ends at its final height given in setting 2. Stages 1, 3 and 5 are active until a target height is reached, stages 2 and 4 are active for a given time period. The object has an ongoing additional cyclus of rising and dropping between -80 and 80 added to its current height. All target heights are relative to the placement height, the rising speed is in units per frame.",
+ { "venice_nami", "The rising and dropping sea on Delfino Pier. It requires `pocha' if the player can interact with it, or else the game will freeze upon respawning. This object goes through five stages before it ends at its final height given in setting 2. Stages 1, 3 and 5 are active until a target height is reached, stages 2 and 4 are active for a given time period. The object has an ongoing additional cyclus of rising and dropping between -80 and 80 added to its current height. All target heights are relative to the placement height, the rising speed is in units per frame.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_ARENA,
obj_charact_a,
&settings_format_uuuu, &settings_format_uuuu,
@@ -96,21 +96,21 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Rising speed in even stages",
0 }},
/* 0x005 */
- { "sound_river", "Generates a river sound effect, the range where the sound comes from is controlled by the route, so makes use of it. Only works on slots 3.2, 4.2, 5.2 and 7.3.",
+ { "sound_river", "Generates a river sound effect. The range where the sound comes from is controlled by the route, so make use of it. Only works on slots 3.2, 4.2, 5.2, and 7.3.",
OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x006 */
- { "sound_water_fall", "Generates a waterfall sound effect, the range where the sound comes from is controlled by the route, so makes use of it. Only works on slots 3.2, 4.2, 5.2 and 7.3.",
+ { "sound_water_fall", "Generates a waterfall sound effect. The range where the sound comes from is controlled by the route, so make use of it. Only works on slots 3.2, 4.2 and 7.3.",
OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x007 */
- { "pocha", "Generates a water splash effect when a player touches KCL flag 0x10 with variants 1 (water) or 3 (icy water that also needs the `0x17|Ice' object). Also works for KCL flag 0x1A with variant 2, but cannot be triggered again until the player respawns. Only Y coordinate is used.",
+ { "pocha", "Generates a water splash effect when a player touches KCL flag 0x10 with variants 1 (water) or 3 (icy water that also needs the `0x17|ice' object). Also works for KCL flag 0x1A with variant 2, but cannot be triggered again until the player respawns. Only the Y coordinate is used.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK | OBF_M_ARENA,
obj_charact_ta,
&settings_format_uuuu, &settings_format_uuuu,
@@ -118,70 +118,70 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{ "Group Y KCL Index",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x008 */
- { "sound_lake", "Generates a lake sound effect, the range where the sound comes from is controlled by the route, so makes use of it. Only works on slot 8.2.",
+ { "sound_lake", "Generates a lake sound effect. The range where the sound comes from is controlled by the route, so make use of it. Only works on slots 2.2, 3.1, 5.1, and 8.2.",
OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x009 */
- { "sound_big_fall", "Generates a louder waterfall sound effect, the range where the sound comes from is controlled by the route, so makes use of it. Only works on slots 3.2 and 7.3.",
+ { "sound_big_fall", "Generates a louder waterfall sound effect. The range where the sound comes from is controlled by the route, so make use of it. Only works on slots 3.2, 4.2 and 7.3.",
OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x00a */
- { "sound_sea", "Generates a sea sound effect, the range where the sound comes from is controlled by the route, so makes use of it.",
+ { "sound_sea", "Generates a sea sound effect. The range where the sound comes from is controlled by the route, so make use of it. Only works on slots 5.1 and 6.3.",
OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x00b */
- { "sound_fountain", "Generates a fountain sound effect, the range where the sound comes from is controlled by the route, so makes use of it. Only works on slots 2.2 and 3.1.",
+ { "sound_fountain", "Generates a fountain sound effect. The range where the sound comes from is controlled by the route, so make use of it. Only works on slots 2.2, 3.1, 5.1, and 8.2.",
OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x00c */
- { "sound_volcano", "Generates a volcano sound effect, the range where the sound comes from is controlled by the route, so makes use of it.",
+ { "sound_volcano", "Generates a volcano sound effect. The range where the sound comes from is controlled by the route, so make use of it. Only works on slot 8.3.",
OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x00d */
- { "sound_audience", "Generates an audience sound effect, the range where the sound comes from is controlled by the route, so makes use of it. Works on slots 1.1, 1.4, 2.3, 3.1 and 5.4; slot 3.1 doesn't feature slot-based audience ambience.",
+ { "sound_audience", "Generates an audience sound effect. The range where the sound comes from is controlled by the route, so make use of it. Works on slots 1.1, 1.4, 2.3, 3.1, and 5.4; slot 3.1 does not feature slot-based audience ambience.",
OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x00e */
- { "sound_big_river", "Generates a louder river sound effect, the range where the sound comes from is controlled by the route, so makes use of it. Only works on slot 5.2.",
+ { "sound_big_river", "Generates a louder river sound effect. The range where the sound comes from is controlled by the route, so make use of it. Only works on slots 3.2, 4.2, 5.2, and 7.3.",
OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x00f */
- { "sound_sand_fall", "Object not used in any track. Generates a sand fall sound effect, the range where the sound comes from is controlled by the route. This object must have a route.",
+ { "sound_sand_fall", "Object not used in any track. Generates a sand fall sound effect. The range where the sound comes from is controlled by the route. This object must have a route.",
OBF_OBJFLOW,
obj_charact,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x010 */
- { "sound_lift", "Generates a lift sound effect, the range where the sound comes from is controlled by the route, so makes use of it. Route Setting 1 is always 1 in all Nintendo tracks.",
+ { "sound_lift", "Generates a lift sound effect. The range where the sound comes from is controlled by the route, so make use of it. Route Setting 1 is always 1 in all Nintendo tracks.",
OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x011 */
- { "pochaYogan", "Generates a lava splash effect when a player touches KCL flag 0x10 with variant 2. Only Y coordinate is used.",
+ { "pochaYogan", "Generates a lava splash effect when a player touches KCL flag 0x10 with variant 2. Only the Y coordinate is used.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -196,7 +196,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{172,-1,-1}, "entry(E)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x013 */
- { "pochaMori", "Generates a leaf splash effect when a player touches KCL flag 0x1A with variant 2. Only Y coordinate is used.",
+ { "pochaMori", "Generates a leaf splash effect when a player touches KCL flag 0x1A with variant 2. Only the Y coordinate is used. Only works on slots 4.2 and arena slot 2.5 with group Y KCL index set to 5.",
OBF_OBJECT | OBF_UNIQUE | OBF_EFFECT | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK | OBF_M_ARENA,
obj_charact_ta,
&settings_format_uuuu, &settings_format_uuuu,
@@ -204,7 +204,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{ "Group Y KCL Index",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x014 */
- { "eline_control", "Enemy line controller. Multiple controllers can be chained together. The timer of the next controller in a chain begins after the end of the previous. Controller ID 0 is reserved to indicate the end of a controller chain. Enemies can choose to not obey a controller unless the next EHPH Section is set to -1. Found in slots 1.4, 2.2, 3.4 and 4.1 and in Arena 1.2.",
+ { "eline_control", "Enemy line controller. Multiple controllers can be chained together. The timer of the next controller in a chain begins after the end of the previous controller. Controller ID 0 is reserved to indicate the end of a controller chain. Enemies can choose to not obey a controller unless the next ENPH Section is set to -1. Found in slots 1.4, 2.2, 3.4, 4.1, and arena slot 1.2.",
OBF_OBJFLOW | OBF_NO_ROUTE | OBF_M_TRACK | OBF_M_ARENA,
obj_charact_ta,
&settings_format_uuuu, &settings_format_uuuu,
@@ -216,14 +216,14 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
0, 0, 0,
"ENPH Section; if -1, use ENPH of previous controller" }},
/* 0x015 */
- { "sound_Mii", "Generates a mii crowd sound effect, the range where the sound comes from is controlled by the route, so makes use of it.",
+ { "sound_Mii", "Generates a Mii crowd sound effect. The range where the sound comes from is controlled by the route, so make use of it. Only works on slots 1.1 and 3.1.",
OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x016 */
- { "begoman_manager", "Galaxy Colosseum Topmen manager; object not used in any track. Once the topmen controlled by the first manager are defeated, the topmen controlled by the second manager will spawn, etc...",
+ { "begoman_manager", "Galaxy Colosseum Topmen manager; object not used in any track. Once the Topmen controlled by the first manager are defeated, the Topmen controlled by the second manager will spawn and so forth.",
OBF_OBJFLOW | OBF_NO_ROUTE | OBF_F_OTHER,
obj_charact_o,
&settings_format_uuuu, &settings_format_uuuu,
@@ -231,18 +231,20 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{ "Manager ID (1-based)",
"[?] Number of Topmen to control",
"First Topman ID to control",
- "[?] Topman behavior: 1: Coward, they will ignore the player 2: Aggressive, they will attack the player",
+ "[?] Topman behavior: 0: *unknown* 1: Coward, they will ignore the player 2: Aggressive, they will attack the player",
"[?] Number of Topmen under control + Number of Topmen controlled by the previous manager",
- 0, 0, 0 }},
+ "[?] *unknown*",
+ "[?] *unknown*",
+ "[?] *unknown*" }},
/* 0x017 */
- { "ice", "Generates ice around the player when respawned after falling in an icy water fall boundary flag; the location doesn't matter, the ice effect is always gotten. This object can be used to enable tracks for slot 6.1. But is has only impact with in combination with an icy boundary flag. In this case it works only at slot 6.1.",
+ { "ice", "Generates ice around the player when respawned after falling in an icy water fall boundary flag; the location does not matter, the ice effect is always enabled. This object can be used to enable tracks for slot 6.1, but it only has impact in combination with an icy boundary flag. In this case, it only works on slot 6.1.",
OBF_OPTIONAL | OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
{191,-1,-1}, "ice(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x018 */
- { "startline2D", "Generates a finish line at given location, this object is used in competitions where you have to drive laps on a battle course and some others; object not used in any track.",
+ { "startline2D", "Generates a finish line at given location. This object is used in tournaments where you have to drive laps on a battle arena and some others; object not used in any track.",
OBF_OBJFLOW,
obj_charact,
&settings_format_uuuu, &settings_format_uuuu,
@@ -325,7 +327,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
/* 0x063 */ { 0,0,0,0,0,0, {-1,-1,-1},0, {0,0,0,0,0,0,0,0} },
/* 0x064 */ { 0,0,0,0,0,0, {-1,-1,-1},0, {0,0,0,0,0,0,0,0} },
/* 0x065 */
- { "itembox", "Spinning box with a question mark in it. If touched it snaps and an item lottery begins; after the lottery the item shown is gotten.",
+ { "itembox", "Spinning box with a question mark inside it. If touched, it snaps and an item lottery begins; after the lottery, the item shown is retrieved.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_FOUND | OBF_ITEMBOX,
obj_charact_s_tao,
&settings_format_uxxu, &settings_format_uuuu,
@@ -339,7 +341,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"[?] Additional height, multiplied with unknown number (always 1?).",
"Unknown" }},
/* 0x066 */
- { "DummyPole", "Solidity of the poles of different courses. Deleting this object will cause the Dummy pole itself to be unsolid.",
+ { "DummyPole", "Pole solidity across different tracks. Deleting this object will cause the pole itself to be unsolid.",
OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_M_TRACK | OBF_F_OTHER,
obj_charact_s_to,
&settings_format_uuuu, &settings_format_uuuu,
@@ -361,56 +363,56 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{176,-1,-1}, "flagBlend",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x069 */
- { "gnd_sphere", "Object not used in any track. Green sphere with animation, solid.",
+ { "gnd_sphere", "Object not used in any track. Solid green sphere with an animation.",
OBF_OBJFLOW,
obj_charact,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x06a */
- { "gnd_trapezoid", "Object not used in any track. Red trapezoid with animation, solid.",
+ { "gnd_trapezoid", "Object not used in any track. Solid red trapezoid with an animation.",
OBF_OBJFLOW,
obj_charact,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x06b */
- { "gnd_wave1", "Object not used in any track. Blue object that makes wave animation. If CPUs touch down the object, they dissapear.",
+ { "gnd_wave1", "Object not used in any track. Blue object that makes a wave animation. If CPUs touch down the object, they disappear.",
OBF_OBJFLOW,
obj_charact,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x06c */
- { "gnd_wave2", "Object not used in any track. Yellow object that makes wave animation. If CPUs touch down the object, they dissapear.",
+ { "gnd_wave2", "Object not used in any track. Yellow object that makes a wave animation. If CPUs touch down the object, they disappear.",
OBF_OBJFLOW,
obj_charact,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x06d */
- { "gnd_wave3", "Object not used in any track. Orange object that makes wave animation. If CPUs touch down the object, they dissapear.",
+ { "gnd_wave3", "Object not used in any track. Orange object that makes a wave animation. If CPUs touch down the object, they disappear.",
OBF_OBJFLOW,
obj_charact,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x06e */
- { "gnd_wave4", "Object not used in any track. Blue object that makes wave animation. If CPUs touch down the object, they dissapear.",
+ { "gnd_wave4", "Object not used in any track. Blue object that makes a wave animation. If CPUs touch down the object, they disappear.",
OBF_OBJFLOW,
obj_charact,
&settings_format_uuuu, &settings_format_uuuu,
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x06f */
- { "sun", "The sun in the vrcorn, often used with `lensFX'.",
+ { "sun", "The sun in the background; often used with `lensFX'.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK | OBF_M_ARENA,
obj_charact_ta,
&settings_format_uuuu, &settings_format_uuuu,
{240,-1,-1}, "sun(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x070 */
- { "woodbox", "Wooden box. When touched the player slows down and the box drops an item. The wooden boxes respawn after 5 seconds, drop from 5000 units above the origin and drop onto the first face they touch. In Time Trial it becomes an unbreakable `ironbox'.",
+ { "woodbox", "Wooden box. When touched, the player slows down and the box drops an item. The wooden boxes respawn after five seconds, drop from 5000 units above the origin and drop onto the first face they touch. In Time Trials, it becomes an unbreakable `ironbox'.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_SCALE | OBF_ROTATE | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -428,7 +430,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{73,-1,-1}, "KmoonZ(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x072 */
- { "sunDS", "The Angry Sun from DS Desert Hills. It changes point of view and rotation of the crown according to player's position. Route Setting 2 controls the behavior depending on the value X: X < 30 (1E in hex) → Stays for X/60 seconds X ≥ 30 (1E in hex) → Drops a `FireSnake' staying for X/60 seconds. In both cases the dropping animation is viewed; if the route start point is set to drop, it will drop at the second \"lap\" of the route. Only slots 3.1 and 7.1 support this object.",
+ { "sunDS", "The Angry Sun from <small>DS</small> Desert Hills. It changes point of view and rotation of the crown according to player's position. Route Setting 2 controls the behavior depending on the value X: X < 30 (1E in hex) → Stays for X/60 seconds X ≥ 30 (1E in hex) → Drops a `FireSnake' staying for X/60 seconds. In both cases, the dropping animation is viewed; if the route start point is set to drop, it will drop at the second \"lap\" of the route. Only slots 3.1, 4.2, 6.2, and 7.1 support this object.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -437,7 +439,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Delay before starting in 1/60 seconds after starting of countdown. 240 (F0 in hex) = Starts immediately after the \"GO!\"",
0, 0, 0, 0, 0, 0 }},
/* 0x073 */
- { "coin", "Present in all battle courses in Coin Runners mode and in some tournaments, when touched it disappears and the player gets one coin. Some coins don't appear at the start of the battle but show up later. See Object/coin for details.",
+ { "coin", "Present within all battle arenas in Coin Runners mode and in some tournaments. When touched, it disappears and the player gets one coin. Some coins do not appear at the start of the battle but show up later on. See Object/coin for details.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_SCALE | OBF_ROTATE | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_ARENA,
obj_charact_s_a,
&settings_format_uuuu, &settings_format_uuuu,
@@ -454,7 +456,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x075 */
- { "ItemDirect", "Object used in tournaments (SNES Battle Course 4 and Daisy Circuit). Can be used to place an item directly onto the track. They will not show up in time trial. You must not place more than 11 of these in a track otherwise your track will freeze or hang in online play.",
+ { "ItemDirect", "Object used in tournaments (Daisy Circuit and <small>SNES</small> Battle Course 4). Can be used to place an item directly onto the track; they will not show up in Time Trials. You must not place more than 11 of these in a track; otherwise, your track will freeze or hang in online play.",
OBF_OBJFLOW,
obj_charact,
&settings_format_uuuu, &settings_format_uuuu,
@@ -462,7 +464,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{ "0 = Green Shell 1 = Red Shell 2 = Banana 3 = Mushroom 4 = Star",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x076 */
- { "s_itembox", "Item box that acts like a kart, it moves with moving KCL. When placed high, it falls until it reaches the ground, and when placed on a steep surface, it falls.",
+ { "s_itembox", "Item box that acts similarly to a placed item. It moves in conjunction with most moving objects and is normally locked in a relative Y-position, moving along with the object's behavior. Otherwise, it typically phases through object collision altogether. Some interactions might be slot specific, such as with `quicksand'. When placed high without an object underneath, it falls until it reaches the ground, and when placed on a steep surface, it falls down the slope, but can sometimes cause a crash due to unknown reasons.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK | OBF_M_ARENA | OBF_ITEMBOX,
obj_charact_s_ta,
&settings_format_uxxu, &settings_format_uuuu,
@@ -473,10 +475,10 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"[?] Disables shadow if set",
0,
"[?] Timing lottery",
- "?",
+ "Height offset with object's position, signed.",
"[?] Unknown" }},
/* 0x077 */
- { "pile_coin", "Object not used in any track. This is the pile of coins above the players used in battle mode, static and without collision.",
+ { "pile_coin", "Object not used in any track. This is the pile of coins above the players used in Battle Mode; static and without collision.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_SCALE | OBF_ROTATE | OBF_OBJFLOW | OBF_SOLID | OBF_FNAME,
obj_charact_s,
&settings_format_uuuu, &settings_format_uuuu,
@@ -576,7 +578,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Route start point",
0, 0, 0 }},
/* 0x0ca */
- { "MashBalloonGC", "Airballoon as seen on GCN Mario Circuit. It has an assigned route but also floats from Y to Y.",
+ { "MashBalloonGC", "Air balloon as seen in <small>GCN</small> Mario Circuit. It has an assigned route but also floats from Y to Y. It turns to face the direction it is traveling in.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK | OBF_F_OTHER,
obj_charact_r_to,
&settings_format_uuuu, &settings_format_uuuu,
@@ -585,7 +587,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Max Y difference",
0, 0, 0, 0, 0, 0 }},
/* 0x0cb */
- { "WLwallGC", "Horizontal moving Piranha Plant wall from GCN Waluigi Stadium. It moves like a sine function (inside → outside → inside); normally combined with `WLdokanGC'.",
+ { "WLwallGC", "Horizontal moving Piranha Plant wall from <small>GCN</small> Waluigi Stadium. It moves like a sine function (inside → outside → inside); normally combined with `WLdokanGC'.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_KCL | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -597,7 +599,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Going out first time",
0, 0, 0 }},
/* 0x0cc */
- { "CarA1", "Moving Car from Coconut Mall. It moves exactly like `WLwallGC' but instead left → right.",
+ { "CarA1", "Moving car from Coconut Mall. It moves exactly like `WLwallGC' but instead left → right.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -607,7 +609,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Time of pause",
0, 0, 0, 0, 0 }},
/* 0x0cd */
- { "basabasa", "Bats following a route, when touched they act like a wall. The bats are released as groups which can be edited in any way.",
+ { "basabasa", "Swoopers that follow a route. When touched, they act like a wall. They are released as groups which can be edited in any way.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -621,7 +623,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Start delay in 1/60 seconds",
"?" }},
/* 0x0ce */
- { "HeyhoShipGBA", "Shy Guy ship which shoots exploding cannonballs; cannonball object is `HeyhoBallGBA'. This object is made for counterclockwise directed tracks, so if a track is clockwise directed this object must be modified with BrawlBox in the following ways: Cullmode from Materials must be set on Cull_Outside and Z scale in KMP must be -1. Only slot 6.2 supports this object and it's necessary to allow tracks to work on this slot.",
+ { "HeyhoShipGBA", "Shy Guy ship which shoots exploding cannonballs; cannonball object is `HeyhoBallGBA'. This object is made for counterclockwise directed tracks, so if a track is clockwise directed, this object must be modified with BrawlBox in the following ways: CullMode from Materials must be set on Cull_Outside and the Z scale in the KMP must be -1. Only slot 6.2 supports this object and it is necessary to allow tracks to work on this slot.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -630,7 +632,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"How strong it moves up and down",
0, 0, 0, 0, 0, 0 }},
/* 0x0cf */
- { "koopaBall", "Gigantic exploding fireball, used with `koopaFigure'.",
+ { "koopaBall", "Gigantic exploding fireball; used with `koopaFigure'. It bounces on every new route point and explodes on the last one if the route cycle setting is turned on. This object always spins northward. Scale is only obeyed if the route cycle setting is turned off, although the fiery effect still does not obey scaling.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -649,7 +651,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Texturing: 0 = MooMoo 1 = Fruit 2 = Factory",
0, 0, 0, 0 }},
/* 0x0d1 */
- { "car_body", "Car from Moonview Highway. Route Setting 1 is used for blinking (1 = Left, 2 = Right) Route Setting 2 selects the speed (0 or 1)",
+ { "car_body", "Car from Moonview Highway. Route Setting 1 is used for blinking (1 = Left, 2 = Right) Route Setting 2 selects the speed (0 or 1).",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -661,7 +663,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Unknown",
0, 0, 0 }},
/* 0x0d2 */
- { "skyship", "Blimp from Luigi Circuit.",
+ { "skyship", "Blimp from Luigi Circuit. It turns to face the direction it is traveling in.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK | OBF_F_OTHER,
obj_charact_r_to,
&settings_format_uuuu, &settings_format_uuuu,
@@ -670,7 +672,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"[?] Max Y difference",
0, 0, 0, 0, 0, 0 }},
/* 0x0d3 */
- { "w_woodbox", "Box following route. Route Setting 1 sets the speed (gets added to S1).",
+ { "w_woodbox", "Wooden box that follows a route. Route Setting 1 sets the speed (gets added to S1).",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_SCALE | OBF_ROTATE | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -684,7 +686,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Max amount of boxes",
0 }},
/* 0x0d4 */
- { "w_itembox", "Itemboxes following route.",
+ { "w_itembox", "Multiple item boxes that follow a route from a starting point to an ending point.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK | OBF_ITEMBOX,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -698,7 +700,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Number of itemboxes on the route (default 5)",
0 }},
/* 0x0d5 */
- { "w_itemboxline", "`Press', block.brres and `itembox' combination from Toad's Factory. Each block follows a route until it reach the press and the press converts it to an itembox which continues the route. Route setting 1 is the speed it slows down to (if 0 it uses the speed setting in S1). Route setting 2: 0x1: press activates when a block reaches this point 0x2: determines where the itembox glows",
+ { "w_itemboxline", "`Press', block.brres and `itembox' combination from Toad's Factory. Each block follows a route until it reach the press and the press converts it to an item box which continues the route. Route setting 1 is the speed it slows down to (if 0 it uses the speed setting in S1). Route setting 2: 0x1: press activates when a block reaches this point 0x2: determines where the item box goes",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_MULTI_FNAME | OBF_M_TRACK | OBF_ITEMBOX,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -710,7 +712,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Number of Blocks/Item Boxes that can exist at any one time",
0 }},
/* 0x0d6 */
- { "VolcanoBall1", "Firery rock from Grumble Volcano. When created a volcano explosion occurs and it follows the route until it touches a solid part, then it becomes a fire; slot 3.4 enables its SFX.",
+ { "VolcanoBall1", "Fiery rock from Grumble Volcano. When created, a volcano explosion occurs and it follows the route until it touches a solid part, then it becomes a fire; slot 3.4 enables its SFX.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -721,7 +723,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Time until the fire goes out",
0, 0, 0, 0 }},
/* 0x0d7 */
- { "penguin_s", "Small penguin from N64 Sherbet Land, creates a symmetrical copy of itself under the ground to simulate ice reflection. Route Setting 1: 0 = Default; 1 = Glide; 2 = Animation faster; 3 = Default. Route Setting 2 describes the speed when Route Setting 1 ≠ 0, but is always required a value ≠ 0. Slot 6.1 enables its SFX.",
+ { "penguin_s", "Small penguin from <small>N64</small> Sherbet Land. It creates a symmetrical copy of itself under the ground to simulate an ice reflection. Route Setting 1: 0 = Default; 1 = Glide; 2 = Animation faster; 3 = Default. Route Setting 2 describes the speed when Route Setting 1 ≠ 0, but always requires a value ≠ 0. Slot 6.1 enables its SFX.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_BRASD | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -729,7 +731,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{ "Speed",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x0d8 */
- { "penguin_m", "Medium penguin from N64 Sherbet Land. Slot 6.1 enables its SFX.",
+ { "penguin_m", "Medium penguin from <small>N64</small> Sherbet Land. Slot 6.1 enables its SFX.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_BRASD | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -738,9 +740,9 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"LE-CODE or cheat code required: Route start point.",
"LE-CODE or cheat code required: If S8=1: Item to drop (same as ItemDirect).",
0, 0, 0, 0,
- "LE-CODE or special cheat code required: 0: normal behaviour 1: custom \"mushroom car\" behaviour developed by KHacker." }},
+ "LE-CODE or special cheat code required: 0: normal behavior 1: custom \"mushroom car\" behavior developed by kHacker35000vr." }},
/* 0x0d9 */
- { "penguin_l", "Large penguin from N64 Sherbet Land.",
+ { "penguin_l", "Large penguin from <small>N64</small> Sherbet Land.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -757,7 +759,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Max Y difference",
0, 0, 0, 0, 0, 0 }},
/* 0x0db */
- { "dossunc", "Thwomp with optional route; without route, S1 and S2 must be 0. If S2 = 2, a 3-point route is needed to make effect: 1 → Start point, Route Setting 2 = 0 2 → Rotation point, Route Setting 2 = 1 3 → Going down point, Route Setting 2 = 0. The couple starts, at the second point turns of 180° and goes left and right, going down around the third point according to player's direction, then goes back to the first point. To make effect the object needs a rotation of ±90°, route points must have the same Y and Z coordinate and no other object must be near the start point. In GP and VS Race the object is activated by the proximity of a main player (not a CPU) and the speed is proportional to the player's; in Time Trial speed and start delay are the same of respective settings in KMP file. If S2 = 3, Route Setting 2 (\"cycle\") must be 1, or else the Thwomp will spin endlessly when hit by an item.",
+ { "dossunc", "Thwomp with optional route; without route, S1 and S2 must be 0. If S2 = 2, a 3-point route is needed to make effect: 1 → Start point, Route Setting 2 = 0 2 → Rotation point, Route Setting 2 = 1 3 → Going down point, Route Setting 2 = 0. The couple starts, at the second point turns of 180° and goes left and right, going down around the third point according to player's direction, then goes back to the first point. To make effect, the object needs a rotation of ±90°, route points must have the same Y and Z coordinate and no other object must be near the start point. In Grand Prix and VS races, the object is activated by the proximity of a main player (not a CPU) and the speed is proportional to the player's; in Time Trial speed and start delay are the same of respective settings in KMP file. If S2 = 3, Route Setting 2 (\"cycle\") must be 1, or else the Thwomp will spin endlessly when hit by an item.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_OPT_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_or_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -775,7 +777,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x0dd */
- { "boble", "Podoboo from GBA Bowser Castle 3. Route Setting 1 controls the speed (gets added to S1), Route Setting 2 = 1 means that the model flips horizontally.",
+ { "boble", "Lava bubble from <small>GBA</small> Bowser Castle 3. Route Setting 1 controls the speed (gets added to S1), Route Setting 2 = 1 means that the model flips horizontally.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -814,7 +816,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{194,-1,-1}, "kart_truck_dummy",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x0e2 */
- { "hanachan", "Wiggler from Maple Treeway. Route Setting 1 sets the time in 1/60 seconds of stop in that point. Define the route heights carfefully. If the Wiggler has issues with the body segments, move the route to a more flat area.",
+ { "hanachan", "Wiggler from Maple Treeway. It shows up on the minimap in non-racing modes. Route Setting 1 sets the time in 1/60 seconds of stop in that point. Define the route heights carefully. If the Wiggler has issues with the body segments, move the route to a more flat area.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_BRASD | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -822,7 +824,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{ "Speed",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x0e3 */
- { "seagull", "Seagull route following from tracks with marine setting.",
+ { "seagull", "Seagull that follows a route. It is found in tracks with a marine setting.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -839,7 +841,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{ "Speed",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x0e5 */
- { "crab", "Crab from GBA Shy Guy Beach. Route Setting 1 sets the time in 1/60 seconds of stop in that point.",
+ { "crab", "Crab from <small>GBA</small> Shy Guy Beach. Route Setting 1 sets the time in 1/60 seconds of stop in that point.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_BRASD | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -855,7 +857,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x0e7 */
- { "CarA2", "Moving Car from Coconut Mall.",
+ { "CarA2", "Moving car from Coconut Mall.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -865,7 +867,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Time of pause",
0, 0, 0, 0, 0 }},
/* 0x0e8 */
- { "CarA3", "Moving Car from Coconut Mall.",
+ { "CarA3", "Moving car from Coconut Mall.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -875,7 +877,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Time of pause",
0, 0, 0, 0, 0 }},
/* 0x0e9 */
- { "Hwanwan", "Route-following Chain Chomp from DS Peach Gardens. Hwanwan and wanwan only work together if the effect files are absent. Route Setting 2 = 1 plays a rollover animation, originally used on a Competition in Rainbow Road.",
+ { "Hwanwan", "Route-following Chain Chomp from <small>DS</small> Peach Gardens. Hwanwan and wanwan only work together if the effect files are absent. Route Setting 2 = 1 plays a rollover animation, originally used within a tournament in Rainbow Road.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -884,7 +886,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Amount of item boxes carried",
0, 0, 0, 0, 0, 0 }},
/* 0x0ea */
- { "HeyhoBallGBA", "Cannonball landing area, which explodes after 3 seconds, shot by `HeyhoShipGBA'; in GP and VS Race it explodes if touched. The object's scale doesn't affect the explosion effect's dimension. Generally CPUs don't go against this object as they try to avoid them. This objects requires `HeyhoShipGBA' and therefor it can only be used on 6.2. Note that no more than 59 of this object can be used.",
+ { "HeyhoBallGBA", "Cannonball landing area that explodes after three seconds, shot by `HeyhoShipGBA'; in Grand Prix and VS races, it explodes if touched. The object's scale does not affect the explosion effect's dimension. Generally, CPUs do not go against this object as they try to avoid them. This objects requires `HeyhoShipGBA', and therefore, it can only be used on slot 6.2. Note that no more than 59 of this object can be used.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -893,7 +895,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Time between shot and arrival in 1/60 seconds",
0, 0, 0, 0, 0, 0 }},
/* 0x0eb */
- { "Twanwan", "Rolling Chain Chomp from Chain Chomp Wheel. The object has two different kind of movements; one being a route and one relative to it's current location based off a sine wave, whereby the wave is controlled by s3 and s4.",
+ { "Twanwan", "Rolling Chain Chomp from Chain Chomp Wheel. The object has two different kind of movements; one being a route and one relative to its current location based on a sine wave, whereby the wave is controlled by s3 and s4. It appears on the minimap when playing on arena slot 1.4.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_ARENA,
obj_charact_r_s_a,
&settings_format_uuuu, &settings_format_uuuu,
@@ -914,7 +916,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{ "Start speed",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x0ed */
- { "bird", "Eagle route following from GCN DK Mountain.",
+ { "bird", "Route-following eagle from <small>GCN</small> DK Mountain.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -923,7 +925,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Number of eagles",
0, 0, 0, 0, 0, 0 }},
/* 0x0ee */
- { "sin_itembox", "Item box following a route back and forth; speed is like sine function. Route Setting 2: 0 = Asymetric; 1 = Symetric.",
+ { "sin_itembox", "Item box following a route back and forth; speed is like a sine function. Route Setting 2: 0 = Asymetric; 1 = Symetric.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_M_TRACK | OBF_ITEMBOX,
obj_charact_r_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -940,18 +942,18 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{131,-1,-1}, "Twanwan_ue",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x0f0 */
- { "BossHanachan", "Big Wiggler boss used in the Wario's Gold Mine competition; follows a route. If S2 of the route point = 0002 (S1 needs to be 0000 otherwise it will try to do different things at the same time and Wiggler's body will glitch out), it will play Wiggler's trick animation once Wiggler gets to the point. See BossHanachan for more information about his route settings.",
+ { "BossHanachan", "Big Wiggler boss used in the Wario's Gold Mine tournament; follows a route. If S2 of the route point = 0002 (S1 needs to be 0000; otherwise, it will try to do different things at the same time and Wiggler's body will glitch out), it will play Wiggler's trick animation once Wiggler gets to the point. See BossHanachan for more information about its route settings.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_BRASD | OBF_OBJFLOW | OBF_SOLID | OBF_FNAME,
obj_charact_s,
&settings_format_uuuu, &settings_format_uuuu,
{187,-1,-1}, "hanachan(BE2D)",
{ "Primary Wiggler Speed",
- "Unknown",
+ "Time in 1/60 seconds wiggler stops before using its angry speed. Used instead of s7 if player is behind point specified in s6 when wiggler stops",
"Secondary Wiggler Speed",
- "Point where wiggler changes to speed two. If passed before wiggler stops, it will not change to speed two. Route settings must be 0000 0001",
+ "Point player must pass to change wiggler to speed two. The wiggler must stop to activate this speed change. Route settings 0000 0001",
"Angry Wiggler Speed",
- "Point where wiggler changes to angry speed. It will function as long as the second speed change has been added, and route settings are 0000 0001",
- "Time Wiggler stop to being angry (in decimals)",
+ "Point player must pass to allow the wiggler to become angry. Route settings 0000 0001",
+ "Time in 1/60 seconds wiggler stops before using its angry speed. Used instead of s2 if player is past point specified in s6 when wiggler stops",
0 }},
/* 0x0f1 */
{ "Kdossunc", "Object not used in any track.",
@@ -961,7 +963,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x0f2 */
- { "BossHanachanHead", "Object used in the Wario's Gold Mine competition to show the Wiggler's head on the map. It is not found in the KMP, but adding BossHanachan will automatically generate it in game.",
+ { "BossHanachanHead", "Object used in the Wario's Gold Mine tournament to show the Wiggler's head on the minimap. It is not found in the KMP, but adding BossHanachan will automatically generate it in-game.",
OBF_OBJFLOW | OBF_SOLID,
obj_charact_s,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1039,7 +1041,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{171,-1,-1}, "dummy",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x12e */
- { "dokan_sfc", "Pipe from Luigi Circuit and SNES Mario Circuit 3.",
+ { "dokan_sfc", "Pipe from Luigi Circuit and <small>SNES</small> Mario Circuit 3.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_SCALE | OBF_ROTATE | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1198,7 +1200,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{197,-1,-1}, "kinokoT2",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x144 */
- { "pylon01", "Street cone from Daisy Circuit. Only slots 3.1 and 7.1 support this object with a limit of 30. Colors can be changed in the CLR0 (maybe even added).",
+ { "pylon01", "Street cone from Daisy Circuit. Only slots 3.1, 4.2, 6.2 and 7.1 support this object with a limit of 30. Colors can be changed in the CLR0 (maybe even added).",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1206,7 +1208,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{ "Color: 0 = Red 1 = Blue 2 = Yellow",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x145 */
- { "PalmTree", "Solid palm from Coconut Mall. It's the largest tree of Mario Kart Wii.",
+ { "PalmTree", "Solid palm from Coconut Mall. It is the largest tree of Mario Kart Wii.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_SCALE | OBF_ROTATE | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1234,7 +1236,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{70,-1,-1}, "K_sticklift00(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x149 */
- { "heyho2", "Manager of the Shy Guy Ski Lift from DK Summit. Spawns 30 Chairlifts that travel on a route. Route setting 0 removes the Shy Guys. Route setting 1 randomly makes either 0, 1 or 2 randomly coloured Shy Guys spawn on the chair.",
+ { "heyho2", "Manager of the Shy Guy Ski Lift from DK Summit. Spawns 30 Chairlifts that travel on a route. Route setting 0 removes the Shy Guys. Route setting 1 randomly makes either 0, 1 or 2 randomly colored Shy Guys spawn on the chair.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_ALWAYS_ROUTE | OBF_FNAME | OBF_MULTI_FNAME | OBF_M_TRACK,
obj_charact_r_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1328,7 +1330,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{46,-1,-1}, "FlagB2(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x156 */
- { "FlagA3", "\"Mario Kart\" flag from DS Delfino Square. Strangely, scales must follow a precise proportion: Xscale < Yscale < Zscale, or game freezes. It's a bit buggy, so it's better use another \"FlagA\" object and import the original texture.",
+ { "FlagA3", "\"Mario Kart\" flag from DS Delfino Square. Strangely, scales must follow a precise proportion: Xscale < Yscale < Zscale, or game freezes. It is a bit buggy, so it is better use another \"FlagA\" object and import the original texture.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1412,7 +1414,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{255,-1,-1}, "windmill(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x162 */
- { "dossun", "Thwomp caged in N64 Bowser's Castle growling when a player approaches; it's an unsolid decoration.",
+ { "dossun", "Thwomp caged in N64 Bowser's Castle growling when a player approaches; it is an unsolid decoration.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1426,7 +1428,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{128,-1,-1}, "TownTreeDS(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x164 */
- { "Ksticketc", "Port, opens when approaching.",
+ { "Ksticketc", "Toll booth gate from Moonview Highway, opens when approaching. Opens for cars and trucks only on slot 4.2.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1561,14 +1563,14 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{247,-1,-1}, "v_stand2",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x175 */
- { "leaf_effect", "Leaf effect when player drives or flies through tree leafs.",
+ { "leaf_effect", "Leaf effect when player drives or flies through tree leaves. Its SFX is exclusive to certain slot(s).",
OBF_OBJECT | OBF_UNIQUE | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
{202,-1,-1}, "leaf_effect(E)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x176 */
- { "karehayama", "Leaf pile from Maple Treeway.",
+ { "karehayama", "Leaf pile from Maple Treeway. Its SFX is exclusive to certain slot(s).",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_SCALE | OBF_ROTATE | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uxuu, &settings_format_uuuu,
@@ -1641,7 +1643,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{98,-1,-1}, "MiiSphinxY2(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x180 */
- { "FlagA5", "Start line flag from Koopa Cape. It's less buggy than `FlagA3'.",
+ { "FlagA5", "Start line flag from Koopa Cape. It is less buggy than `FlagA3'.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1817,13 +1819,13 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{ "Length of chain in game units",
"Unknown",
0,
- "Let (X,Y) be the the center of the wedge points to, then (X/10) if X positive, 65536+(X/10) if X negative",
- "Let (X,Y) be the the center of the wedge points to, then (Y/10) if Y positive, 65536+(Y/10) if Y negative",
- "Time to wander around (in 1/60 seconds); if 0, about 5 seconds is used. Add 3,5 seconds for full cycle time",
+ "Let (X,Y) be the center of the area where the Chain Chomp snaps to (neither X nor Y are height coordinates). If X is positive, X/10 is the X-Value for the setting; if X is negative, 65536 + X/10 is the X-Value for the setting (make sure to include the negative sign when adding!).",
+ "Let (X,Y) be the center of the area where the Chain Chomp snaps to (neither X nor Y are height coordinates). If Y is positive, Y/10 is the Y-Value for the setting; if Y is negative, 65536 + Y/10 is the Y-Value for the setting (make sure to include the negative sign when adding!).",
+ "Time to wander around (in 1/60 seconds); if 0, about 5 seconds is used. Add 3.5 seconds for full cycle time",
"(Width of wedge in degrees-35)/2",
0 }},
/* 0x197 */
- { "poihana", "Cataquack from GCN Peach Beach. It flings players into the air. In GP and VS race, it looks for players. In Time Trials, it flings only if touched. It is likely possible to add further colors by modifying the Pat0.",
+ { "poihana", "Cataquack from GCN Peach Beach. It flings players into the air. In GP and VS race, it looks for players. In Time Trials, it flings only if touched. It is likely possible to add further colors by modifying the Pat0. Only works on Slot 5.1 if psea or venice_nami is present for a splash sfx.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_BRASD | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1929,7 +1931,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{217,-1,-1}, "pakkun_dokan(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x1a3 */
- { "begoman_spike", "Topman from Galaxy Colosseum; object not used in any track. To appear, it (or they) must be the first object of section GOBJ. Note that the rings are hardcoded to have their centre at (0,0)",
+ { "begoman_spike", "Topman from Galaxy Colosseum; object not used in any track. To appear, it (or they) must be the first object of section GOBJ. They appear to not obey wall collision. Note that the rings are hardcoded to have their centre at (0,0).",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_F_OTHER,
obj_charact_s_o,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1941,9 +1943,9 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Time in frames from the start of the race until the topman will switch from the 2nd ring to the 3rd ring.",
"The radius of the 3rd ring in which the topman is allowed to roam in.",
"Time in frames from the start of the race until the topman will switch from the 3rd ring to the 4th ring.",
- "The radius of the 3rd ring in which the topman is allowed to roam in." }},
+ "The radius of the 4th ring in which the topman is allowed to roam in." }},
/* 0x1a4 */
- { "FireSnake", "Grounded Podoboo from DS Desert Hills. It bounces casually around its position point. It works with the object `sunDS', so it only works on slots 3.1 and 7.1.",
+ { "FireSnake", "Grounded Podoboo from DS Desert Hills. It bounces casually around its position point. It works with the object `sunDS', so it only works on slots 3.1, 4.2, 6.2 and 7.1.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -1971,7 +1973,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{ "Rotations per 12 seconds",
"Direction: 0 = Clockwise 1 = Counterclockwise",
0, 0, 0, 0, 0,
- "[?] Unused in the normal game. With this cheat code this setting can be used to change the speed to S1/(30*S8) instead of S1/30, allowing for slower Epropellers." }},
+ "[?] Unused in the normal game. With LE-CODE or this cheat code this setting can be used to change the speed to S1/(30*S8) instead of S1/30, allowing for slower Epropellers." }},
/* 0x1a7 */
{ "dc_pillar_c", "Object not used in any track.",
OBF_OBJFLOW | OBF_SOLID,
@@ -1980,17 +1982,17 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x1a8 */
- { "FireSnake_v", "Grounded Podoboo from Grumble Volcano. It jump from its position point describing a parabola and after landing bounces casually around the arrival point.",
+ { "FireSnake_v", "Grounded Podoboo from Grumble Volcano. It jump from its position point describing a parabola and after landing bounces casually around the arrival point for 10 seconds until it vanishes.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
{39,-1,-1}, "FireSnake(BE)",
{ "Start delay in 1/60 seconds after starting of countdown. 240 (F0 in hex) = Starts immediately after the \"GO!\"",
- "Duration and respawn factor, K reference value is 600 (258 in hex): X < K → Duration time in 1/60 seconds, then respawn without loading vanishing animation X = K → 10 seconds of duration, then respawn after other 10 seconds X > K → 10 seconds of duration, then respawn after (X - 600)/60 seconds. Normally is used the third option",
- "Units of distance from position point to landing point following the Y angulation",
+ "The time between two firesnake spawns. <600 causes the previous snake to disappear, 600 despawns each second snake immediately.",
+ "Units of distance from position point to landing point following the Y angulation.",
0, 0, 0, 0, 0 }},
/* 0x1a9 */
- { "honeBall", "Object not used in regular tracks. Used in the N64 Bowser castle competition with Dry Bowser.",
+ { "honeBall", "Object not used in regular tracks. Used in the <small>N64</small> Bowser's Castle tournament with Dry Bowser. For use of this object in Mission Mode, at least one CPU must be defined. The location of the object does not matter. If more than one CPU is defined, it will cause weird behavior. If more than one CPU exists in a mission with this object, only the one that is the closest to the player will fire at them. Occasionally, some will try and fire at the same time, but this causes them to spin out repeatedly until another fireball is fired. Regardless of how many CPUs are defined in a mission with this object, or how many times this object is added, only one of the CPUs will fire at the player.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_COMMONOBJ | OBF_OBJFLOW | OBF_SOLID | OBF_FNAME,
obj_charact_s,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2004,7 +2006,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{229,-1,-1}, "puchi_pakkun(BD)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x1ab */
- { "sanbo_big", "Giant Pokey used in the Thwomp Desert Competition, where its scale is 7 on the X, Y, and Z axis KMP KMP cloud seems to slightly corrupt the giant pokey, as its sound will not be loaded and its head will not appear on the minimap.",
+ { "sanbo_big", "Giant Pokey used in the Thwomp Desert tournament, where its scale is 7 on the X, Y and Z-axes. KMP KMP Cloud seems to slightly corrupt the Giant Pokey, as its sound will not be loaded and its head will not appear on the minimap.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_BRASD | OBF_OBJFLOW | OBF_SOLID | OBF_FNAME,
obj_charact_s,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2090,23 +2092,30 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
/* 0x1f3 */ { 0,0,0,0,0,0, {-1,-1,-1},0, {0,0,0,0,0,0,0,0} },
/* 0x1f4 */ { 0,0,0,0,0,0, {-1,-1,-1},0, {0,0,0,0,0,0,0,0} },
/* 0x1f5 */
- { "kinoko_ud", "Moving decoration mushroom from Mushroom Gorge.",
+ { "kinoko_ud", "Moving bouncy mushroom from Mushroom Gorge.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_KCL | OBF_SCALE | OBF_ROTATE | OBF_FALLDOWN | OBF_OBJFLOW | OBF_SOLID | OBF_ROAD | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
{195,-1,-1}, "kinoko(B4K)",
- { "[?] Texturing: 0 = Light 1 = Dark",
- 0, 0, 0, 0, 0, 0, 0 }},
+ { "[?] Texturing: nonzero values load the dark variant for the stem instead",
+ "[?] Amplitude of the up-down movement",
+ "[?] Time in 1/60s for a full up-down cycle",
+ "[?] Cycle shift (controls where in the cycle to start)",
+ "[?] Time in 1/60s to pause at the lowest point in the cycle",
+ 0, 0, 0 }},
/* 0x1f6 */
- { "kinoko_bend", "Bouncy mushroom.",
+ { "kinoko_bend", "Bouncy mushroom. The model perpetually loops an animation that resembles pulling a rubber band and letting go. It appears on the minimap as a solid circle in non-racing modes.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_KCL | OBF_SCALE | OBF_ROTATE | OBF_FALLDOWN | OBF_OBJFLOW | OBF_SOLID | OBF_ROAD | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
{195,-1,-1}, "kinoko(B4K)",
- { "Texturing: 0 = Light 1 = Dark",
- 0, 0, 0, 0, 0, 0, 0 }},
+ { "Texturing: nonzero values load the dark variant instead",
+ "[?] Maximum angle",
+ "[?] Time in 1/60s for a full cycle",
+ "[?] Cycle shift (controls where in the cycle to start)",
+ 0, 0, 0, 0 }},
/* 0x1f7 */
- { "VolcanoRock1", "Floating drivable rock (at Grumble Volcano in the lava), it moves like a cosine on the x-axis and the y-axis.",
+ { "VolcanoRock1", "Floating drivable rock (at Grumble Volcano in the lava). It moves like a cosine on the X-axis and the Y-axis.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_KCL | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2115,11 +2124,11 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Time to go from x1 to x2 and back in 1/60 seconds",
"Max X movement in both directions",
"Offsets starting X and Y position within the specified movement in 1/60 seconds",
- "Time of one period on the y-axis in 1/60 secons",
- "The amplitude of the cosine on the y-axis",
+ "Time of one period on the Y-axis in 1/60 seconds",
+ "The amplitude of the cosine on the Y-axis",
0, 0 }},
/* 0x1f8 */
- { "bulldozer_left", "The moving bulldozer from Toad's Factory.",
+ { "bulldozer_left", "Moving bulldozer from Toad's Factory. Regardless of Y-rotation, it moves eastward from its current position.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_KCL | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2143,12 +2152,12 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Time of standing still",
0, 0, 0 }},
/* 0x1fa */
- { "kinoko_nm", "Green mushroom.",
+ { "kinoko_nm", "Green mushroom. It appears on the minimap as a solid circle in non-racing modes.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_KCL | OBF_SCALE | OBF_ROTATE | OBF_FALLDOWN | OBF_OBJFLOW | OBF_SOLID | OBF_ROAD | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
{195,-1,-1}, "kinoko(B4K)",
- { "Texturing: 0 = Light 1 = Dark",
+ { "Texturing: nonzero values load the dark variant instead",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x1fb */
{ "Crane", "Crane platform Toad's Factory. Slot 1.4 enables its SFX.",
@@ -2157,8 +2166,8 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
&settings_format_uuuu, &settings_format_uuuu,
{13,-1,-1}, "Crane(BK)",
{ 0,
- "Movement Distance",
- "Movement Time",
+ "Amplitude of the motion (in game units)",
+ "Period of the motion (in 1/60s)",
"Time before starting",
0, 0, 0, 0 }},
/* 0x1fc */
@@ -2219,7 +2228,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{-1,-1,-1}, 0,
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x202 */
- { "DKturibashiGCc", "Wooden, Swaying bridge from GCN DK Mountain. The object collision is not affected by rotation, so all rotation values need to be 0 in order to work properly.",
+ { "DKturibashiGCc", "Wooden, Swaying bridge from GCN DK Mountain. The object collision is not affected by rotation or scale, so all rotation values need to be 0 and scale 1 in order to work properly.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_SCALE | OBF_ROTATE | OBF_FALLDOWN | OBF_OBJFLOW | OBF_SOLID | OBF_ROAD | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2240,7 +2249,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{143,-1,-1}, "aurora(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x205 */
- { "venice_saku", "Fence gate from Delfino Pier.",
+ { "venice_saku", "Fence gate from Delfino Pier. Using multiple of this object appears to cause all of them to rise simultaneously.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_KCL | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_ARENA,
obj_charact_s_a,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2250,7 +2259,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Speed that it moves up",
0, 0, 0, 0, 0 }},
/* 0x206 */
- { "casino_roulette", "The rotating parts of Chain Chomp Wheel; when used with KCL flag 0x1D, the road slowly around the object counterclockwise. X, Y and Z positions and rotations need to be 0 and scales need to be 1 in order to work properly. Arena slot 1.4 enables functionality that causes players to additionally rotate the direction they are facing on both the object by itself and on KCL flag 0x1D.",
+ { "casino_roulette", "The rotating parts of Chain Chomp Wheel; when used with KCL flag 0x1D, the road slowly rotates around the object counterclockwise. X, Y and Z positions and rotations need to be 0 and scales need to be 1 in order to work properly. Additionally, the file must have a texture animation named \"dushBoard\" (without quotations), or else the game will crash. Arena slot 1.4 enables functionality that causes players to additionally rotate the direction they are facing on both the object by itself and on KCL flag 0x1D. For more information: Moving Terrain",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_KCL | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_ARENA,
obj_charact_s_a,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2352,20 +2361,20 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
&settings_format_uuuu, &settings_format_uuuu,
{117,-1,-1}, "RM_ring1(B8K)",
{ "Ring ID; 1 = Outer ring 2 = ring in the middle 3 = Inner ring",
- "Time after course start when the ring starts shaking (seconds)",
+ "Time after course start when the ring starts shaking (seconds) (s2=0 means the ring will never fall)",
"Time that ring shakes (seconds)",
"[?] Delay after ring shakes before falling down (1/60 seconds)",
0, 0, 0, 0 }},
/* 0x212 */
- { "FlamePole_v", "Fire geyser without a base.",
+ { "FlamePole_v", "Fire geyser without a base. It rises like a parabolic curve for 1 second, stays up for s1 - s4 - 490 frames, drops in a linear line for 3 seconds and waits for the time specified in s4 before restarting. Before rising, the geyser has an additional state of 50 frames whereby it is enabled but not rising yet, for this reason it is recommended to not put geysers above track section.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_EFFECT | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
{51,-1,-1}, "FlamePole_v(BE)",
- { "Time outside the lava, K reference value is 500 (1F4 in hex): X < K → Stays outside the lava for 5 seconds X ≥ K → Stays outside the lava for X/100 seconds",
+ { "Total cycle length, affects time between rising and dropping only.",
"Start delay in 1/60 seconds; it starts 3 seconds before the \"GO!\"",
- "Scale factor; values up to 3 shrink the size, 4 and above grow the size",
- "Cycle time in 1/60 seconds + 8.25 seconds",
+ "The dropping height of the pillar / 384",
+ "Idling time - 200 (1/60 seconds)",
0, 0, 0, 0 }},
/* 0x213 */
{ "M_obj_s_jump", "Ramp used on competitions; object not used in any track.",
@@ -2407,7 +2416,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"S1 activator and S2 conditioner: 0 = S1 Deactivated 1 = S1 Activated",
0, 0, 0, 0, 0 }},
/* 0x217 */
- { "Mdush", "Small jump ramp from Mario Circuit and Moo Moo Meadows.",
+ { "Mdush", "Small jump ramp from Mario Circuit.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_KCL | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2510,21 +2519,21 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{26,-1,-1}, "DonkyCannonGC(BED)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x25a */
- { "BeltEasy", "Second set of belts from Toad's Factory.",
+ { "BeltEasy", "Second set of belts from Toad's Factory. For more information: Moving Terrain",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
{5,-1,-1}, "BeltEasy(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x25b */
- { "BeltCrossing", "First set of belts from Toad's Factory.",
+ { "BeltCrossing", "First set of belts from Toad's Factory. For more information: Moving Terrain",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
{2,-1,-1}, "BeltCrossing(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x25c */
- { "BeltCurveA", "Third set of belts from Toad's Factory. Object is not scalable.",
+ { "BeltCurveA", "Third set of belts from Toad's Factory. Object is not scalable. For more information: Moving Terrain",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2541,7 +2550,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{4,-1,-1}, "BeltCurveB",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x25e */
- { "escalator", "Coconut Mall escalator.",
+ { "escalator", "Coconut Mall escalator. For more information: Moving Terrain",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_KCL | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2561,7 +2570,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{27,-1,-1}, "DonkyCannon_wii(BED)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x260 */
- { "escalator_group", "2 Time Escalators from Coconut Mall. One of the two escalators uses the given speed, the other uses multiplies the speed with -1 (negative speed), so they always run in opposite directions.",
+ { "escalator_group", "2 Time Escalators from Coconut Mall. One of the two escalators uses the given speed, the other uses a multiplied speed of -1 (negative speed), so they always run in opposite directions. For more information: Moving Terrain",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_KCL | OBF_OBJFLOW | OBF_SOLID | OBF_NO_ROUTE | OBF_FNAME | OBF_MULTI_FNAME | OBF_M_TRACK,
obj_charact_s_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2833,7 +2842,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
{57,-1,-1}, "Flash_W(E)",
- { "Unknown",
+ { "0 = flashWaluigi_A 1 = flashWaluigi_B 2 = flashWaluigi_C",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x2d3 */
{ "Flash_M", "Audience camera flashes on N64 Mario Raceway. Active whenever the audience ambience is playing.",
@@ -2848,7 +2857,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
obj_charact_a,
&settings_format_uuuu, &settings_format_uuuu,
{56,-1,-1}, "Flash_S(E)",
- { "Unknown",
+ { "0 = flashSkate_A 1 = flashSkate_B",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x2d5 */
{ "MiiSignNoko", "Koopa face sign from Koopa Cape.",
@@ -2872,7 +2881,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{124,-1,-1}, "Spot64(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x2d8 */
- { "DemoEf", "Object not used in any track.",
+ { "DemoEf", "Fireworks used in the Mario Circuit winning demo.",
OBF_OBJECT | OBF_UNIQUE | OBF_EFFECT | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_F_OTHER,
obj_charact_o,
&settings_format_uuuu, &settings_format_uuuu,
@@ -2886,12 +2895,12 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{37,-1,-1}, "Fall_MH(E)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x2da */
- { "Fall_Y", "Part of the waterfall effects from Koopa Cape and DS Yoshi Falls.",
+ { "Fall_Y", "Breff animation of the waterfall effects from Koopa Cape and DS Yoshi Falls.",
OBF_OBJECT | OBF_UNIQUE | OBF_EFFECT | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
{38,-1,-1}, "Fall_Y(E)",
- { "0 = A, 1 = B or 2 = C breff animation",
+ { "0 = A 1 = B 2 = C",
0, 0, 0, 0, 0, 0, 0 }},
/* 0x2db */
{ "DemoJugemu", "Lakitu model from the Mario Circuit winning demo.",
@@ -3006,7 +3015,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{93,-1,-1}, "MiiObjD03(B)",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x2eb */
- { "mare_a", "Toad from GCN Peach Peach.",
+ { "mare_a", "Yellow Noki from GCN Peach Peach.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -3017,7 +3026,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
"Distance at which it loads the clapping chr0.",
0, 0, 0, 0 }},
/* 0x2ec */
- { "mare_b", "Toad from GCN Peach Peach.",
+ { "mare_b", "Green Noki from GCN Peach Peach.",
OBF_OBJECT | OBF_UNIQUE | OBF_BRRES | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
@@ -3056,7 +3065,7 @@ const ObjectInfo_t ObjectInfo[N_KMP_GOBJ] =
{83,-1,-1}, "M_obj_start",
{ 0, 0, 0, 0, 0, 0, 0, 0 }},
/* 0x2f1 */
- { "EnvKarehaUp", "Upward Leaf effect on screen from Maple Treeway; AREA type 0x01 activates this object.",
+ { "EnvKarehaUp", "Upward Leaf effect on screen from Maple Treeway; AREA type 0x01 activates this object if the first AREA setting is set to 1. Instead of surrounding the player with the particle effect, the object's position is used to create a region in which the effect will occur. This region is loosely 10000un eastward and 10000un above the object's position.",
OBF_OBJECT | OBF_UNIQUE | OBF_EFFECT | OBF_OBJFLOW | OBF_NO_ROUTE | OBF_FNAME | OBF_M_TRACK,
obj_charact_t,
&settings_format_uuuu, &settings_format_uuuu,
diff --git a/project/src/db-object.h b/project/src/db-object.h
index 7055eb9..763df57 100644
--- a/project/src/db-object.h
+++ b/project/src/db-object.h
@@ -172,10 +172,10 @@ extern const ObjSpec_t ObjSpec[N_OBJ_SPEC+1];
///////////////////////////////////////////////////////////////////////////////
#define OBJ_FW_NAME 18
-#define OBJ_FW_INFO 897
+#define OBJ_FW_INFO 908
#define OBJ_FW_FNAME 46
#define OBJ_FW_CHAR 55
-#define OBJ_FW_SETTING 330
+#define OBJ_FW_SETTING 280
//
diff --git a/project/src/lib-breff.c b/project/src/lib-breff.c
index 8fe2a38..ca7e366 100644
--- a/project/src/lib-breff.c
+++ b/project/src/lib-breff.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-breff.h b/project/src/lib-breff.h
index bd82adc..6cec9ee 100644
--- a/project/src/lib-breff.h
+++ b/project/src/lib-breff.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-brres.c b/project/src/lib-brres.c
index 4bb1058..b441176 100644
--- a/project/src/lib-brres.c
+++ b/project/src/lib-brres.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -2098,6 +2098,7 @@ void ListNameRef ( FILE *f, int indent, name_ref_t *nr, SortMode_t sort )
break;
case SORT_OFFSET:
+ case SORT_SIZE:
sort_func = sort_nr_by_offset;
sort_info = "sorted by offset";
break;
diff --git a/project/src/lib-brres.h b/project/src/lib-brres.h
index f0ae424..d0f4e08 100644
--- a/project/src/lib-brres.h
+++ b/project/src/lib-brres.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-bzip2.c b/project/src/lib-bzip2.c
index 894463f..25a3668 100644
--- a/project/src/lib-bzip2.c
+++ b/project/src/lib-bzip2.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-bzip2.h b/project/src/lib-bzip2.h
index 4e2ea8c..290a0cb 100644
--- a/project/src/lib-bzip2.h
+++ b/project/src/lib-bzip2.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-checksum.c b/project/src/lib-checksum.c
index ed45e7a..b4f19ba 100644
--- a/project/src/lib-checksum.c
+++ b/project/src/lib-checksum.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -533,7 +533,7 @@ void ScanSlotTranslation
}
- //--- standart text file
+ //--- standard text file
if ( verbose > 1 )
printf("Scan translation%s[TEXT/%s]: %s\n",
diff --git a/project/src/lib-checksum.h b/project/src/lib-checksum.h
index 25f8786..2215f0b 100644
--- a/project/src/lib-checksum.h
+++ b/project/src/lib-checksum.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-common.c b/project/src/lib-common.c
index 1b7cffc..e5f301b 100644
--- a/project/src/lib-common.c
+++ b/project/src/lib-common.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-common.h b/project/src/lib-common.h
index 8ca2390..4137ab0 100644
--- a/project/src/lib-common.h
+++ b/project/src/lib-common.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-ctcode.c b/project/src/lib-ctcode.c
index c89dd38..4b3f0bb 100644
--- a/project/src/lib-ctcode.c
+++ b/project/src/lib-ctcode.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -56,6 +56,20 @@
/////////////// helpers ///////////////
///////////////////////////////////////////////////////////////////////////////
+uint NormalizeMusicID ( uint music_id )
+{
+ if ( music_id < MKW_N_TRACKS )
+ music_id = track_info[music_id].music_id;
+ else if ( music_id < MKW_N_TRACKS + MKW_N_ARENAS )
+ music_id = arena_info[music_id-MKW_N_TRACKS].music_id;
+
+ if ( MusicID2TrackId(music_id,music_id,-1) == -1 )
+ music_id = track_info[0].music_id;
+ return music_id;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
int MusicID2TrackId ( uint music_id, int no_track, int not_found )
{
if ( music_id >= MKW_MUSIC_MIN_ID && music_id <= MKW_MUSIC_MAX_ID )
@@ -362,8 +376,26 @@ ccp PrintMusicID ( uint mid, bool force_hex )
ccp PrintPropertyID ( uint tid, bool force_hex )
{
- if ( tid < MKW_N_TRACKS && !force_hex )
- return track_info[tid].abbrev;
+ if (!force_hex)
+ {
+ if (IsMkwTrack(tid))
+ return track_info[tid].abbrev;
+ if (IsMkwArena(tid))
+ return arena_info[tid-MKW_ARENA_BEG].abbrev;
+ }
+
+ const int bufsize = 8;
+ char *buf = GetCircBuf(bufsize);
+ snprintf(buf,bufsize,"0x%02x",tid);
+ return buf;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+ccp PrintArenaSlot ( uint tid, bool force_hex )
+{
+ if ( !force_hex && IsMkwArena(tid) )
+ return PrintCircBuf("A%u",arena_info[tid-MKW_ARENA_BEG].def_slot);
const int bufsize = 8;
char *buf = GetCircBuf(bufsize);
@@ -1948,7 +1980,101 @@ static enumError ScanRTL_Track
///////////////////////////////////////////////////////////////////////////////
-static enumError ScanRacingTrackList ( ctcode_t *ctcode, ScanInfo_t * si )
+enumError ScanSetupArena ( ctcode_arena_t *ca, ScanInfo_t * si )
+{
+ DASSERT(ca);
+ DASSERT(si);
+
+ enumError max_err = ERR_OK;
+ for(;;)
+ {
+ char ch = NextCharSI(si,true);
+ if ( !ch || ch == '[' )
+ break;
+
+ ScanFile_t *sf = si->cur_file;
+ DASSERT(sf);
+ ccp ptr0 = sf->ptr;
+
+ uint slot;
+ enumError err = ScanUIntValueSI(si,&slot);
+ if (err)
+ return err;
+
+ if ( slot < MKW_ARENA_BEG || slot >= MKW_ARENA_END )
+ {
+ ccp eol = FindNextLineFeedSI(si,true);
+ if ( si->no_warn <= 0 )
+ {
+ ERROR0(ERR_WARNING,
+ "Invalid arena slot #%d [%s @%u]: %.*s\n",
+ slot, sf->name, sf->line, (int)(eol - ptr0), ptr0 );
+ }
+ sf->ptr = eol;
+ continue;
+ }
+
+
+ //--- property id
+
+ if ( NextCharSI(si,false) == ';' )
+ sf->ptr++;
+
+ ptr0 = sf->ptr;
+ int property_id;
+ err = ScanIntValueSI(si,&property_id);
+ if (err)
+ return err;
+
+ if ( property_id > 0 && ( property_id < MKW_ARENA_BEG || property_id >= MKW_ARENA_END ))
+ {
+ ccp eol = FindNextLineFeedSI(si,true);
+ if ( si->no_warn <= 0 )
+ {
+ ERROR0(ERR_WARNING,
+ "Invalid arena slot #%d [%s @%u]: %.*s\n",
+ property_id, sf->name, sf->line, (int)(eol - ptr0), ptr0 );
+ }
+ sf->ptr = eol;
+ continue;
+ }
+
+
+ //--- music id
+
+ if ( NextCharSI(si,false) == ';' )
+ sf->ptr++;
+
+ int music_id = -1;
+ if (NextCharSI(si,false))
+ {
+ err = ScanIntValueSI(si,&music_id);
+ if (err)
+ return err;
+ }
+
+
+ //--- store data id
+
+ slot -= MKW_ARENA_BEG;
+ if ( property_id >= 0 )
+ ca->prop[slot] = property_id;
+ if ( music_id >= 0 )
+ ca->music[slot] = NormalizeMusicID(music_id);
+
+ CheckEolSI(si);
+ if ( max_err < err )
+ max_err = err;
+ }
+
+ //HexDump16(stdout,0,0,ca->prop,sizeof(ca->prop));
+ //HexDump16(stdout,0,0,ca->music,sizeof(ca->music));
+ return max_err;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+static enumError ScanTrackList ( ctcode_t *ctcode, ScanInfo_t * si )
{
DASSERT(ctcode);
DASSERT(si);
@@ -2015,6 +2141,12 @@ static enumError ScanRacingTrackList ( ctcode_t *ctcode, ScanInfo_t * si )
err = ScanRTL_Track(ctcode,si,true,false);
break;
+ case 'b':
+ case 'B':
+ sf->ptr++;
+ err = ScanRTL_Track(ctcode,si,true,true);
+ break;
+
default:
{
ccp eol = FindNextLineFeedSI(si,true);
@@ -2035,11 +2167,99 @@ static enumError ScanRacingTrackList ( ctcode_t *ctcode, ScanInfo_t * si )
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// ScanTextArena() ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+enumError ScanTextArena
+(
+ ctcode_arena_t *ca, // valid data structure
+ ccp fname, // NULL or file name for error messages
+ const void *data, // data to scan
+ uint data_size // size of 'data'
+)
+{
+ DASSERT(ca);
+
+ const uint CTCODE_VERSION = 1;
+
+ //--- setup parser
+
+ enum { SECT_SETUP_ARENA, N_SECT };
+ const KeywordTab_t sect_names[] =
+ {
+ { SECT_SETUP_ARENA, "SETUP-ARENA", 0, 0 },
+ { 0,0,0,0 }
+ };
+
+ ScanInfo_t si;
+ InitializeSI(&si,data,data_size,fname,CTCODE_VERSION);
+ si.predef = SetupVarsCTCODE();
+
+
+ //--- main loop
+
+ enumError max_err = ERR_OK;
+
+ for(;;)
+ {
+ char ch = NextCharSI(&si,true);
+ if (!ch)
+ break;
+
+ if ( ch != '[' )
+ {
+ NextLineSI(&si,true,false);
+ continue;
+ }
+ ResetLocalVarsSI(&si,CTCODE_VERSION);
+
+ si.cur_file->ptr++;
+ char name[20];
+ ScanNameSI(&si,name,sizeof(name),true,true,0);
+
+ int abbrev_count;
+ const KeywordTab_t *cmd = ScanKeyword(&abbrev_count,name,sect_names);
+ if ( !cmd || abbrev_count )
+ continue;
+ NextLineSI(&si,false,false);
+ PRINT("--> %-6s #%-4u |%.3s|\n",cmd->name1,si.cur_file->line,si.cur_file->ptr);
+
+ if ( cmd->id < 0 || cmd->id > N_SECT )
+ continue;
+
+ enumError err = ERR_OK;
+ switch (cmd->id)
+ {
+ case SECT_SETUP_ARENA:
+ PRINT("SCAN [SETUP-ARENA]\n");
+ err = ScanSetupArena(ca,&si);
+ break;
+
+ default:
+ // ignore all other section without any warnings
+ break;
+ }
+
+ if ( max_err < err )
+ max_err = err;
+ }
+
+ CheckLevelSI(&si);
+ if ( max_err < ERR_WARNING && si.total_err )
+ max_err = ERR_WARNING;
+ PRINT("ERR(ScanTextCTCODE) = %u (errcount=%u)\n", max_err, si.total_err );
+ ResetSI(&si);
+
+ return max_err;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// ScanTextCTCODE() ///////////////
///////////////////////////////////////////////////////////////////////////////
static enumError ScanSetup ( ctcode_t *ctcode, ScanInfo_t * si );
-static enumError ScanRacingTrackList ( ctcode_t *ctcode, ScanInfo_t * si );
+static enumError ScanTrackList ( ctcode_t *ctcode, ScanInfo_t * si );
//-----------------------------------------------------------------------------
@@ -2072,11 +2292,14 @@ enumError ScanTextCTCODE
//--- setup parser
- enum { SECT_SETUP, SECT_RACING_TRACK_LIST, N_SECT };
+ enum { SECT_SETUP, SECT_SETUP_ARENA,
+ SECT_TRACK_LIST, SECT_RACING_TRACK_LIST, N_SECT };
const KeywordTab_t sect_names[] =
{
{ SECT_SETUP, "SETUP", 0, 0 },
- { SECT_RACING_TRACK_LIST, "RACING-TRACK-LIST", 0, 0 },
+ { SECT_SETUP_ARENA, "SETUP-ARENA", 0, 0 },
+ { SECT_TRACK_LIST, "TRACK-LIST", 0, 0 },
+ { SECT_RACING_TRACK_LIST, "RACING-TRACK-LIST", 0, 0 }, // [[deprecated]] 2021-08
{ 0,0,0,0 }
};
@@ -2124,9 +2347,19 @@ enumError ScanTextCTCODE
err = ScanSetup(ctcode,&si);
break;
+ case SECT_SETUP_ARENA:
+ PRINT("SCAN [SETUP-ARENA]\n");
+ err = ScanSetupArena(&ctcode->arena,&si);
+ break;
+
+ case SECT_TRACK_LIST:
+ PRINT("SCAN [TRACK-LIST]\n");
+ err = ScanTrackList(ctcode,&si);
+ break;
+
case SECT_RACING_TRACK_LIST:
PRINT("SCAN [RACING-TRACK-LIST]\n");
- err = ScanRacingTrackList(ctcode,&si);
+ err = ScanTrackList(ctcode,&si);
break;
default:
@@ -2661,6 +2894,15 @@ enumError ScanLEBinCTCODE
}
+ //--- copy arena properties
+
+ for ( int a = 0; a < MKW_N_ARENAS; a++ )
+ {
+ ctcode->arena.prop[a] = ana.property[a+MKW_ARENA_BEG];
+ ctcode->arena.music[a] = ana.music[a+MKW_ARENA_BEG];
+ }
+
+
//--- copy lecode parameter
if (!ctcode->lpar)
@@ -2962,10 +3204,35 @@ enumError SaveTextCTCODE
ctcode->n_unused_cups );
+ //--- print arena setup
+
+ if (omode.lecode)
+ {
+ fputs(section_sep,F.f);
+ fputs(text_ctcode_setup_arena_cr,F.f);
+
+ for ( int i = 0; i < MKW_N_ARENAS; i++ )
+ {
+ if ( i == MKW_N_ARENAS/2 )
+ fputs("\r\n",F.f);
+
+ const int a = arena_pos[i];
+ const TrackInfo_t *ai = arena_info+a;
+ const int prop = ctcode->arena.prop[a] ? ctcode->arena.prop[a] : ai->track_id;
+ const int music = ctcode->arena.music[a] ? ctcode->arena.music[a] : ai->music_id;
+ fprintf(F.f, "%s %s %s\r\n",
+ PrintArenaSlot(ai->track_id,false),
+ PrintArenaSlot(prop,false),
+ music == ai->music_id ? "" : PrintMusicID(music,false) );
+ }
+ }
+
+
//--- print track list
if ( omode.mode & 1 && ctcode->used_tracks )
{
+// [[2do]] [TRACK-LIST]
fprintf(F.f,"%s[RACING-TRACK-LIST]\r\n%s",
section_sep,
omode.syntax
diff --git a/project/src/lib-ctcode.h b/project/src/lib-ctcode.h
index f444e8c..9f6bf5b 100644
--- a/project/src/lib-ctcode.h
+++ b/project/src/lib-ctcode.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -40,6 +40,7 @@
#include "lib-std.h"
#include "lib-xbmg.h"
+#include "lib-mkw.h"
//
///////////////////////////////////////////////////////////////////////////////
@@ -221,6 +222,19 @@ ctcode_cupref_t;
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// struct ctcode_arena_t ///////////////
+///////////////////////////////////////////////////////////////////////////////
+// [[ctcode_arena_t]]
+
+typedef struct ctcode_arena_t
+{
+ le_property_t prop[MKW_N_ARENAS]; // only valid if !=0
+ le_music_t music[MKW_N_ARENAS]; // only valid if le_prop[]!=0
+}
+ctcode_arena_t;
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// struct ctcode_t ///////////////
///////////////////////////////////////////////////////////////////////////////
// [[ctcode_t]]
@@ -252,6 +266,11 @@ typedef struct ctcode_t
uint n_unused_cups; // number of unused cups
+ //--- arenas setup fir LE-CODE
+
+ ctcode_arena_t arena; // data of section [SETUP-ARENA]
+
+
//--- track data
ctcode_crs1_head_t *crs; // NULL or data pointer to CRS1 data
@@ -291,7 +310,7 @@ typedef struct ctcode_t
bool use_lecode; // true: enable le-code support
bool use_le_flags; // true: le_flags enabled
struct le_lpar_t *lpar; // NULL or LPAR parameters
-
+
//--- misc
@@ -372,9 +391,23 @@ void PrepareExportCTCODE ( ctcode_t * ctcode );
void PatchNamesCTCODE ( ctcode_t * ctcode );
void PrepareSaveCTCODE ( ctcode_t * ctcode );
-int MusicID2TrackId ( uint music_id, int no_track, int not_found );
-ccp PrintMusicID ( uint mid, bool force_hex );
-ccp PrintPropertyID ( uint tid, bool force_hex );
+uint NormalizeMusicID ( uint music_id );
+int MusicID2TrackId ( uint music_id, int no_track, int not_found );
+ccp PrintMusicID ( uint mid, bool force_hex );
+ccp PrintPropertyID ( uint tid, bool force_hex );
+ccp PrintArenaSlot ( uint tid, bool force_hex );
+
+///////////////////////////////////////////////////////////////////////////////
+
+enumError ScanSetupArena ( ctcode_arena_t *ca, ScanInfo_t * si );
+
+enumError ScanTextArena
+(
+ ctcode_arena_t *ca, // valid data structure
+ ccp fname, // NULL or file name for error messages
+ const void *data, // data to scan
+ uint data_size // size of 'data'
+);
///////////////////////////////////////////////////////////////////////////////
diff --git a/project/src/lib-ctdata.c b/project/src/lib-ctdata.c
index f39f10f..1517773 100644
--- a/project/src/lib-ctdata.c
+++ b/project/src/lib-ctdata.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-file.c b/project/src/lib-file.c
index fe7ab02..18a5bd1 100644
--- a/project/src/lib-file.c
+++ b/project/src/lib-file.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -104,6 +104,19 @@ void SetSource ( ccp source )
///////////////////////////////////////////////////////////////////////////////
+void SetReference ( ccp source )
+{
+ #ifdef __CYGWIN__
+ opt_reference = IsWindowsDriveSpec(source)
+ ? AllocNormalizedFilenameCygwin(source,false)
+ : source;
+ #else
+ opt_reference = source;
+ #endif
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
void SetDest ( ccp dest, bool mkdir )
{
#ifdef __CYGWIN__
@@ -742,7 +755,6 @@ file_format_t GetByMagicFF
case BMG_MAGIC8_NUM: return FF_BMG;
case PNG_MAGIC8_NUM: return FF_PNG;
case GCT_MAGIC8_NUM: return FF_GCT;
- case LE_LPAR_MAGIC_NUM: return FF_LPAR;
case ADDR_PORT_MAGIC_NUM: return FF_PORTDB;
//--- see below for BOM support
@@ -754,6 +766,7 @@ file_format_t GetByMagicFF
case GH_IOBJ_TEXT_MAGIC8_NUM: return FF_GH_IOBJ_TXT;
case GH_KART_TEXT_MAGIC8_NUM: return FF_GH_KART_TXT;
case GH_KOBJ_TEXT_MAGIC8_NUM: return FF_GH_KOBJ_TXT;
+ case LE_LPAR_MAGIC_NUM: return FF_LPAR;
}
}
@@ -785,10 +798,6 @@ file_format_t GetByMagicFF
case KMG_MAGIC_NUM: return FF_KMG;
case KRT_MAGIC_NUM: return FF_KRT;
case KRM_MAGIC_NUM: return FF_KRM;
-// [[obj-type+]] 3x
-// case OBJFLOW_MAGIC_NUM: return FF_OBJFLOW;
-// case GH_ITEM_MAGIC_NUM: return FF_GH_ITEM;
-// case GH_KART_MAGIC_NUM: return FF_GH_KART;
case U8_MAGIC_NUM: return FF_U8;
case WU8_MAGIC_NUM: return FF_WU8;
@@ -860,12 +869,13 @@ file_format_t GetByMagicFF
{
case CT_TEXT_MAGIC8_NUM: return FF_CT_TEXT;
case DISTRIB_MAGIC8_NUM: return FF_DISTRIB;
+ case ITEMSLT_TEXT_MAGIC_NUM: return FF_ITEMSLT_TXT;
case OBJFLOW_TEXT_MAGIC8_NUM: return FF_OBJFLOW_TXT;
-// [[obj-type+]]
case GH_ITEM_TEXT_MAGIC8_NUM: return FF_GH_ITEM_TXT;
case GH_IOBJ_TEXT_MAGIC8_NUM: return FF_GH_IOBJ_TXT;
case GH_KART_TEXT_MAGIC8_NUM: return FF_GH_KART_TXT;
case GH_KOBJ_TEXT_MAGIC8_NUM: return FF_GH_KOBJ_TXT;
+ case LE_LPAR_MAGIC_NUM: return FF_LPAR;
}
}
diff --git a/project/src/lib-geohit.c b/project/src/lib-geohit.c
index 6acf70c..1d5a357 100644
--- a/project/src/lib-geohit.c
+++ b/project/src/lib-geohit.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-image.h b/project/src/lib-image.h
index 40d6012..b00ec9d 100644
--- a/project/src/lib-image.h
+++ b/project/src/lib-image.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-image1.c b/project/src/lib-image1.c
index 054fb6b..571df55 100644
--- a/project/src/lib-image1.c
+++ b/project/src/lib-image1.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-image2.c b/project/src/lib-image2.c
index a91f9e3..0bcb22b 100644
--- a/project/src/lib-image2.c
+++ b/project/src/lib-image2.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-image3.c b/project/src/lib-image3.c
index 916c379..a242106 100644
--- a/project/src/lib-image3.c
+++ b/project/src/lib-image3.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-itemslot.c b/project/src/lib-itemslot.c
index d2716e7..8e32690 100644
--- a/project/src/lib-itemslot.c
+++ b/project/src/lib-itemslot.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-kcl-image.c b/project/src/lib-kcl-image.c
index fcb2f9e..ad6fd22 100644
--- a/project/src/lib-kcl-image.c
+++ b/project/src/lib-kcl-image.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-kcl.c b/project/src/lib-kcl.c
index 6c4de32..4a25173 100644
--- a/project/src/lib-kcl.c
+++ b/project/src/lib-kcl.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -148,6 +148,7 @@ static const KeywordTab_t opt_kcl_tab[] =
{ KCLMD_CONV_FACEUP, "CONV-FACEUP", "CONVFACEUP", 0 },
{ KCLMD_WEAK_WALLS, "WEAK-WALLS", "WEAKWALLS", 0 },
+ { KCLMD_CLR_VISUAL, "CLR-VISUAL", "CLRVISUAL", 0 },
{ KCLMD_NEW, "NEW", 0, 0 },
{ KCLMD_SORT, "SORT", 0, 0 },
@@ -568,41 +569,88 @@ uint n_user_color = 0;
///////////////////////////////////////////////////////////////////////////////
-void InitializeKCL ( kcl_t * kcl )
+kcl_flag_t * CreatePatchFlagKCL
+(
+ // returns NULL or N_KCL_FLAG elements
+
+ kcl_mode_t kcl_mode, // relevant: KCLMD_CLR_VISUAL | KCLMD_WEAK_WALLS
+ SlotMode_t slot_mode, // relevant: SLOTMD_ICE_TO_WATER | SLOTMD_WATER_TO_ICE
+ bool null_on_orig // TRUE: return NULL on no flag modifications
+)
{
- //--- one time setup
+ kcl_flag_t *flag = MALLOC( N_KCL_FLAG * sizeof(*flag) );
+ for ( int i = 0; i < N_KCL_FLAG; i++ )
+ flag[i] = i;
- static int done = 0;
- if (!done)
+ if ( opt_slot & (SLOTMD_ICE_TO_WATER|SLOTMD_WATER_TO_ICE) )
{
- ++done;
- if ( opt_slot & (SLOTMD_ICE_TO_WATER|SLOTMD_WATER_TO_ICE) )
- {
- SetupPatchKclFlag();
- const u16 search = opt_slot & SLOTMD_ICE_TO_WATER ? 0x0070 : 0x0030;
-
- uint i;
- for ( i = 0; i < N_KCL_FLAG; i++ )
- if ( ( patch_kcl_flag[i] & 0x00ff ) == search )
- patch_kcl_flag[i] = patch_kcl_flag[i] ^ 0x0040;
+ const u16 search = opt_slot & SLOTMD_ICE_TO_WATER ? 0x0070 : 0x0030;
+ for ( int i = 0; i < N_KCL_FLAG; i++ )
+ if ( ( flag[i] & 0x00ff ) == search )
+ flag[i] = flag[i] ^ 0x0040;
+ }
- PurgePatchKclFlag();
+ if ( kcl_mode & KCLMD_WEAK_WALLS )
+ {
+ for ( int i = 0; i < N_KCL_FLAG; i++ )
+ {
+ const int type = GET_KCL_TYPE(i);
+ if ( type >= 0 && kcl_type[type].attrib & KCLT_C_WALL )
+ flag[i] |= 0x8000;
}
+ }
- if ( KCL_MODE & KCLMD_WEAK_WALLS )
+ if ( kcl_mode & KCLMD_CLR_VISUAL )
+ {
+ static u16 tab[32] =
{
- SetupPatchKclFlag();
- uint i;
- for ( i = 0; i < N_KCL_FLAG; i++ )
+ 0xe01f,0xe01f,0xe01f,0xe01f, 0xe01f,0xe01f,0xe0ff,0xe0ff,
+ 0xe0ff,0xe0ff,0xe01f,0xe0ff, 0x601f,0x60ff,0x60ff,0x601f,
+ 0xe01f,0xe0ff,0xffff,0xe0ff, 0xe01f,0xe0ff,0xe01f,0xe01f,
+ 0x001f,0xffff,0xe01f,0xffff, 0xe0ff,0xe0ff,0x601f,0x60ff,
+ };
+
+ for ( int i = 0; i < N_KCL_FLAG; i++ )
+ flag[i] &= tab[i&31];
+ }
+
+ if (null_on_orig)
+ {
+ bool have_patch = false;
+ for ( int i = 0; i < N_KCL_FLAG; i++ )
+ if ( flag[i] != i )
{
- const int type = GET_KCL_TYPE(i);
- if ( type >= 0 && kcl_type[type].attrib & KCLT_C_WALL )
- patch_kcl_flag[i] |= 0x8000;
+ have_patch = true;
+ break;
}
- PurgePatchKclFlag();
+ if (!have_patch)
+ {
+ FREE(flag);
+ flag = 0;
}
}
+ return flag;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void InitializeKCL ( kcl_t * kcl )
+{
+ //--- one time setup
+
+ static int done = 0;
+ if (!done++)
+ {
+ SetupPatchKclFlag();
+ kcl_flag_t *flag = CreatePatchFlagKCL(KCL_MODE,opt_slot,false);
+ DASSERT(flag);
+ memcpy(patch_kcl_flag,flag,sizeof(*patch_kcl_flag)*N_KCL_FLAG);
+ FREE(flag);
+ PurgePatchKclFlag();
+ }
+
+
//--- object setup
DASSERT(kcl);
@@ -6767,7 +6815,7 @@ bool TransformKCL
/////////////// Patch KCL ///////////////
///////////////////////////////////////////////////////////////////////////////
-u16 *patch_kcl_flag = 0; // NULL or 'N_KCL_FLAG' elements
+kcl_flag_t *patch_kcl_flag = 0; // NULL or 'N_KCL_FLAG' elements
///////////////////////////////////////////////////////////////////////////////
@@ -6810,8 +6858,7 @@ void ResetPatchKclFlag()
patch_kcl_flag = MALLOC( N_KCL_FLAG * sizeof(*patch_kcl_flag) );
}
- uint i;
- for ( i = 0; i < N_KCL_FLAG; i++ )
+ for ( int i = 0; i < N_KCL_FLAG; i++ )
patch_kcl_flag[i] = i;
}
@@ -7615,6 +7662,9 @@ int CheckKCL
DASSERT(kcl);
PRINT("CheckKCL(%d)\n",mode);
+ if ( disable_checks > 0 )
+ return 0;
+
//--- setup
diff --git a/project/src/lib-kcl.h b/project/src/lib-kcl.h
index 6deb16a..19444f2 100644
--- a/project/src/lib-kcl.h
+++ b/project/src/lib-kcl.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -116,6 +116,7 @@ __attribute__ ((packed)) kcl_head_t;
///////////////////////////////////////////////////////////////////////////////
/////////////// kcl_triangle_t ///////////////
///////////////////////////////////////////////////////////////////////////////
+// [[kcl_triangle_t]]
typedef struct kcl_triangle_t
{
@@ -319,12 +320,14 @@ typedef enum kcl_mode_t
KCLMD_CONV_FACEUP = 1ull<<34, // convert face up walls to road
KCLMD_WEAK_WALLS = 1ull<<35, // OR 0x8000 to KCL flags of walls
- KCLMD_NEW = 1ull<<36, // create a new KCL file even if nothing changed
- KCLMD_SORT = 1ull<<37, // sort triangles
+ KCLMD_CLR_VISUAL = 1ull<<36, // clear effect bits
+ KCLMD_NEW = 1ull<<37, // create a new KCL file even if nothing changed
+ KCLMD_SORT = 1ull<<38, // sort triangles
KCLMD_M_PATCH = KCLMD_M_DROP
| KCLMD_M_RM
| KCLMD_CONV_FACEUP
| KCLMD_WEAK_WALLS
+ | KCLMD_CLR_VISUAL
| KCLMD_NEW
| KCLMD_SORT,
@@ -380,7 +383,7 @@ typedef enum kcl_mode_t
| KCLMD_TEST,
KCLMD_M_PRINT = KCLMD_M_ALL // all relevant bits for obj output
- % ~KCLMD_ADD_ROAD
+ & ~KCLMD_ADD_ROAD
& ~KCLMD_IN_SWAP
& ~KCLMD_AUTO
& ~KCLMD_M_HEX
@@ -615,6 +618,16 @@ bool DropSortHelper
bool sort // true: sort triangles
);
+typedef u16 kcl_flag_t;
+kcl_flag_t * CreatePatchFlagKCL
+(
+ // returns NULL or N_KCL_FLAG elements
+
+ kcl_mode_t kcl_mode, // relevant: KCLMD_CLR_VISUAL | KCLMD_WEAK_WALLS
+ SlotMode_t slot_mode, // relevant: SLOTMD_ICE_TO_WATER | SLOTMD_WATER_TO_ICE
+ bool null_on_orig // TRUE: return NULL on no flag modifications
+);
+
bool KCL_ACTION_LOG ( const char * format, ... )
__attribute__ ((__format__(__printf__,1,2)));
@@ -1096,7 +1109,7 @@ uint GetExportFlagKCL ( uint kcl_flag );
extern int have_kcl_patch_count;
extern StringField_t kcl_script_list;
-extern u16 *patch_kcl_flag; // NULL or 'N_KCL_FLAG' elements
+extern kcl_flag_t *patch_kcl_flag; // NULL or 'N_KCL_FLAG' elements
//-----------------------------------------------------------------------------
diff --git a/project/src/lib-kmp-diff.c b/project/src/lib-kmp-diff.c
index 35774f9..4a0c86d 100644
--- a/project/src/lib-kmp-diff.c
+++ b/project/src/lib-kmp-diff.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -207,7 +207,11 @@ static void print_ph
else
printf("%4u",*d1);
}
- putchar('\n');
+
+ printf(" : %s0x%02x %s0x%02x%s\n",
+ p1->setting[0] == p2->setting[0] ? ok : warn, p1->setting[0],
+ p1->setting[1] == p2->setting[1] ? ok : warn, p1->setting[1],
+ colout->reset );
}
else
{
@@ -225,7 +229,8 @@ static void print_ph
else
printf("%4u",*d1);
}
- putchar('\n');
+
+ printf(" : 0x%02x 0x%02x\n", p1->setting[0], p1->setting[1] );
}
}
@@ -254,7 +259,10 @@ static sort_ph_t * print_ph_single ( const section_info_t *si,
static int diff_ph ( const sort_ph_t *e1, const sort_ph_t *e2 )
{
- if (!memcmp(&e1->data,&e2->data,sizeof(e1->data)))
+ uint size = sizeof(e1->data);
+ if ( opt_battle_mode <= OFFON_OFF )
+ size -= sizeof(e1->data.setting);
+ if (!memcmp(&e1->data,&e2->data,size))
return 0;
uint count = ( e1->data.pt_start != e2->data.pt_start )
@@ -947,7 +955,7 @@ static void print_area
printf( "%c %5u %5u %11.3f %11.3f %11.3f %#6x %#6x\n"
"%c %5u %5u %11.3f %11.3f %11.3f %6s %6s %#6x\n"
"%c %24.3f %11.3f %11.3f\n",
- mode,
+ mode,
e1->mode, e1->type,
e1->position[0], e1->position[1], e1->position[2],
e1->setting[0], e1->setting[1],
diff --git a/project/src/lib-kmp-draw.c b/project/src/lib-kmp-draw.c
index 23f573b..b7a8106 100644
--- a/project/src/lib-kmp-draw.c
+++ b/project/src/lib-kmp-draw.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -699,7 +699,7 @@ void AddRoutes2KCL
(
DrawKCL_t * dk, // pointer to initalized object
uint sect_pt, // KMP section
- uint color_std // standart color index
+ uint color_std // standard color index
)
{
DASSERT(dk);
diff --git a/project/src/lib-kmp-pflags.c b/project/src/lib-kmp-pflags.c
index 9e3e674..d6d84da 100644
--- a/project/src/lib-kmp-pflags.c
+++ b/project/src/lib-kmp-pflags.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -863,9 +863,9 @@ void AnalyseGobj ( kmp_ana_gobj_t *ag, const kmp_t *kmp )
continue;
ag->n_object++;
- info->obj_id = relevant_id;
- info->type = KGTY_OBJECT;
- info->status |= KGST_USED;
+ info->obj_id = relevant_id;
+ info->type = KGTY_OBJECT;
+ info->status |= KGST_USED;
if ( gobj->obj_id < GOBJ_M_OBJECT )
{
@@ -1844,7 +1844,7 @@ static uint DiffXPF ( xpf_mode1_info_t *l1, xpf_mode1_info_t *l2, int loop )
}
}
- eval += 999 - 3*abs( e1->index - e2->index );
+ eval += 999 - 3*abs( e1->index - e2->index );
if ( e1->eval < eval || e1->eval == eval && e1->diff_sum > diff_sum )
{
diff --git a/project/src/lib-kmp-text.c b/project/src/lib-kmp-text.c
index 507cbc0..1e83f41 100644
--- a/project/src/lib-kmp-text.c
+++ b/project/src/lib-kmp-text.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -1393,14 +1393,26 @@ static enumError GroupPrevGL
DASSERT(gl);
DASSERT(si);
- if ( !gl->used)
+ if (!gl->used)
{
GotoEolSI(si);
return ERR_OK;
}
SkipCharSI(si,':');
- kmp_group_t *grp = gl->group + gl->used - 1;
+ const int idx = gl->used - 1;
+ kmp_group_t *grp = gl->group + idx;
+ grp->have_prev_cmd = true;
+
+ #if 0 // [[auto-prev]]
+ if ( idx < KMP_MAX_GROUP )
+ {
+ kmp_ph_t *ph = grp->ph;
+ if (ph)
+ ph->gopt[idx].have_prev_cmd = true;
+ }
+ #endif
+
ScanGroupNames(gl,grp->prev,si);
//HEXDUMP16(0,0,grp->prev,sizeof(grp->prev));
return CheckEolSI(si);
@@ -1618,7 +1630,7 @@ static enumError AddGroupGL
const bool split_group = !strcmp(name,"$SPLIT");
if (split_group)
{
- if ( gl->ph && gl->ph->ac_mode != KMP_AC_PREV )
+ if ( gl->ph && gl->ph->ac_mode != KMP_AC_PREV && gl->ph->ac_mode != KMP_AC_AUTO_PREV )
{
si->total_err++;
sf->line_err++;
@@ -1626,7 +1638,7 @@ static enumError AddGroupGL
if (!si->no_warn)
ERROR0(ERR_WARNING,
"Command '$SPLIT' only possible if AUTO-CONNECT is set to AC$PREV"
- " => ignored [%s @%u].\n", sf->name, sf->line );
+ " or AC$AUTO_PREV => ignored [%s @%u].\n", sf->name, sf->line );
return ERR_WARNING;
}
@@ -1843,7 +1855,6 @@ static void TermGL
CheckLevelSI(si);
ResetRouteLinksKMP(kmp);
- const bool auto_prev = gl->ph->ac_mode == KMP_AC_PREV;
memset(gl->ph->gname,0,sizeof(gl->ph->gname));
List_t *list = kmp->dlist + sect_ph;
@@ -1871,10 +1882,25 @@ static void TermGL
rotate_links = rotate_links <= 0 ? 0 : rotate_links % KMP_MAX_PH_LINK;
PRINT_IF(rotate_links,"ROTATE-LINKS %d\n",rotate_links);
+ kmp_ph_t *ph = gl->ph;
+ DASSERT(ph);
+
for ( i = 0, grp = gl->group; i < gl->used; i++, grp++ )
{
//--- NEXT links
+ // [[auto-prev]]
+ #if 1
+ const bool auto_prev
+ = gl->ph->ac_mode == KMP_AC_PREV
+ || gl->ph->ac_mode == KMP_AC_AUTO_PREV && !grp->have_prev_cmd;
+ if (sect_ph==KMP_ENPH) PRINT1("auto_prev=%d ; %s\n",auto_prev,grp->name);
+ #else
+ const bool auto_prev
+ = gl->ph->ac_mode == KMP_AC_PREV
+ || gl->ph->ac_mode == KMP_AC_AUTO_PREV;
+ #endif
+
uint l;
for ( l = 0; l < KMP_MAX_PH_LINK; l++ )
{
@@ -1917,6 +1943,7 @@ static void TermGL
kmp_section_name[gl->ph->sect_pt].name1, grp->name, lname);
}
+
//--- PREV links
if (!auto_prev)
@@ -1958,9 +1985,6 @@ static void TermGL
//--- @AUTO-CONNECT == AC$DISPATCH
- kmp_ph_t *ph = gl->ph;
- DASSERT(ph);
-
if ( ph && ph->ac_mode == KMP_AC_DISPATCH
&& ( sect_ph == KMP_ENPH || sect_ph == KMP_ITPH ))
{
@@ -2452,10 +2476,12 @@ const VarMap_t * SetupVarsKMP()
{ "AC$OFF", KMP_AC_OFF },
{ "AC$PREV", KMP_AC_PREV },
+ { "AC$AUTO_PREV", KMP_AC_AUTO_PREV },
{ "AC$DISPATCH", KMP_AC_DISPATCH },
{ "ACF$FIX_PREV", KMP_ACF_FIX_PREV },
{ "ACF$FIX_NEXT", KMP_ACF_FIX_NEXT },
{ "ACF$FIX", KMP_ACF_FIX },
+ { "ACF$PR_PREV", KMP_ACF_PR_PREV },
{ "AM$OFF", KMP_AM_OFF },
{ "AM$NORM", KMP_AM_NORM },
@@ -2464,10 +2490,11 @@ const VarMap_t * SetupVarsKMP()
{ "AM$SHORT", KMP_AM_SHORT },
{ "AM$UNLIMIT", KMP_AM_UNLIMIT },
- { "SORT$OFF", KMP_SORT_OFF },
- { "SORT$GROUPING", KMP_SORT_GROUPING },
- { "SORT$ANGLE", KMP_SORT_ANGLE },
- { "SORT$TINY", KMP_SORT_TINY },
+ { "SORT$OFF", KSORT_OFF },
+ { "SORT$GROUPING", KSORT_GROUP },
+ { "SORT$ANGLE", KSORT_ANGLE },
+ { "SORT$XYZ", KSORT_XYZ },
+ { "SORT$TINY", KSORT_TINY },
{ "DOB$OFF", KMP_DOB_OFF },
{ "DOB$BEGIN", KMP_DOB_BEGIN },
@@ -3026,7 +3053,7 @@ static enumError ScanText_PT_PH
const kmp_enpt_entry_t * prev = GetListElem(ptlist,-1,&temp);
if (!ptlist->used) // no previous point available
gl.line.n = 1;
- else if ( auto_fill >= 1.0
+ else if ( auto_fill >= 1.0
&& gl.line.n == 1
&& gl.used
&& ptlist->used != gl.group[gl.used-1].first_index )
@@ -3626,7 +3653,7 @@ static enumError ScanTextGOBJ
kcl_fall_t kfall;
ResetKclFall(&kfall);
- int auto_object_name = 0, sort_objects = 0;
+ int auto_object_name = 0, sort_objects = KSORT_OFF;
int fix_objdef = 0, sort_objdef = 0;
int fix_reference = 0, sort_reference = 0;
uint auto_enemy_item = 0, auto_enemy_index = 32;
@@ -5828,7 +5855,11 @@ static ccp print_kmp_group
//--- $PREV
- bool print_prev = ph->ac_mode != KMP_AC_PREV;
+ // [[auto-prev]]
+ bool print_prev = ph->ac_mode != KMP_AC_PREV && ph->ac_mode != KMP_AC_AUTO_PREV
+ || ph->ac_flags & KMP_ACF_PR_PREV
+ || KMP_MODE & KMPMD_PR_PREV;
+
if ( !print_prev && idx < KMP_MAX_LINFO )
{
SetupRouteLinksKMP(kmp,ph->sect_ph,false);
@@ -6000,7 +6031,7 @@ static void print_kmp_pt
if ( opt_route_options > OFFON_OFF )
{
- ccp ac_mode, ac_fix;
+ ccp ac_mode, ac_fix, ac_pr_prev;
switch ( ph->ac_flags & KMP_ACF_FIX )
{
@@ -6010,22 +6041,26 @@ static void print_kmp_pt
default: ac_fix = ""; break;
}
+ ac_pr_prev = ph->ac_flags & KMP_ACF_PR_PREV ? " | ACF$PR_PREV" : "";
+
switch( ph->ac_mode )
{
case KMP_AC_OFF: ac_mode = "AC$OFF"; break;
case KMP_AC_PREV: ac_mode = "AC$PREV"; break;
+ case KMP_AC_AUTO_PREV: ac_mode = "AC$AUTO_PREV"; break;
case KMP_AC_DISPATCH: ac_mode = "AC$DISPATCH"; break;
default: // should never happen
snprintf(buf,sizeof(buf),"0x%0x",ph->ac_mode|ph->ac_flags);
- ac_mode = buf;
- ac_fix = "";
+ ac_mode = buf;
+ ac_fix = "";
+ ac_pr_prev = "";
}
if ( sect_pt == KMP_ENPT )
- fprintf(F->f,text_kmp_enpt_ropt_cr, ph->show_options, ac_mode, ac_fix );
+ fprintf(F->f,text_kmp_enpt_ropt_cr, ph->show_options, ac_mode,ac_fix,ac_pr_prev );
else
- fprintf(F->f,text_kmp_itpt_ropt_cr, ph->show_options, ac_mode, ac_fix );
+ fprintf(F->f,text_kmp_itpt_ropt_cr, ph->show_options, ac_mode,ac_fix,ac_pr_prev );
}
if ( ph->mask[0] != 0xffff || ph->mask[1] != 0xffff )
@@ -6154,6 +6189,7 @@ static void print_kmp_ph
ccp pt_name = kmp_section_name[sect_pt].name1;
ccp ph_name = kmp_section_name[sect_ph].name1;
+
//--- print data
fprintf(F->f,text_kmp_ph_cr,
@@ -6501,7 +6537,7 @@ enumError SaveTextKMP
"#%.78s\r\n",
area->prio,
area->rotation[0], area->rotation[1], area->rotation[2],
- PrintU8M1(area->route), PrintU8M1(area->enemy), area->unknown_2e,
+ PrintU8M1(area->route), PrintU8M1(area->enemy), area->unknown_2e,
area->scale[0], area->scale[1], area->scale[2],
Minus300 );
}
@@ -7126,8 +7162,7 @@ enumError SaveTextKMP
fputs("\r\n",F.f);
double total_len = 0.0, total_tim = 0.0;
- uint ei;
- for ( ei = 0; ei < en; ei++, i++, pp++ )
+ for ( uint ei = 0; ei < en; ei++, i++, pp++ )
{
fprintf(F.f, "%4u %11.3f %11.3f %11.3f %5u %5u #",
ei,
diff --git a/project/src/lib-kmp.c b/project/src/lib-kmp.c
index 7c39d97..820639e 100644
--- a/project/src/lib-kmp.c
+++ b/project/src/lib-kmp.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -569,6 +569,8 @@ static const KeywordTab_t opt_kmp_tab[] =
{ KMPMD_RM_EMPTY, "RM-EMPTY", "RMEMPTY", 0 },
{ KMPMD_MINIMIZE, "MINIMIZE", 0, 0 },
+ { KMPMD_PR_PREV, "PR-PREV", "PRPREV", 0 },
+
{ KMPMD_TEST1, "TEST1", 0, 0 },
{ KMPMD_TEST2, "TEST2", 0, 0 },
@@ -3647,6 +3649,24 @@ static int sort_gobj ( const sort_gobj_t * a, const sort_gobj_t * b )
//-----------------------------------------------------------------------------
+static int sort_gobj_xyz ( const sort_gobj_t * a, const sort_gobj_t * b )
+{
+ int stat = a->rank - b->rank;
+ if (!stat)
+ {
+ stat = a->data.position[0] < b->data.position[0] ? -1
+ : a->data.position[0] > b->data.position[0] ? 1
+ : a->data.position[1] < b->data.position[1] ? -1
+ : a->data.position[1] > b->data.position[1] ? 1
+ : a->data.position[2] < b->data.position[2] ? -1
+ : a->data.position[2] > b->data.position[2] ? 1
+ : a->pos - b->pos;
+ }
+ return stat;
+}
+
+//-----------------------------------------------------------------------------
+
static int sort_gobj_tiny ( const sort_gobj_t * a, const sort_gobj_t * b )
{
int stat = memcmp( a->data.setting,
@@ -3673,17 +3693,15 @@ static int sort_gobj_tiny ( const sort_gobj_t * a, const sort_gobj_t * b )
bool SortGOBJ
(
kmp_t * kmp, // pointer to valid KMP
- int sort_mode // <=0: dont sort
- // 1: group only
- // 2: secondary sort by angle
- // 3: sort for TINY
+ kmp_sort_t sort_mode // one of KSORT_OFF, KSORT_GROUP,
+ // KSORT_ANGLE, KSORT_XYZ or KSORT_TINY
)
{
DASSERT(kmp);
PRINT("SortGOBJ(%d)\n",sort_mode);
List_t *dlist = kmp->dlist + KMP_GOBJ;
- if ( sort_mode < 1 || dlist->used < 2 )
+ if ( sort_mode <= KSORT_OFF || dlist->used < 2 )
return false;
@@ -3713,21 +3731,26 @@ bool SortGOBJ
const typeof(gobj->obj_id) obj_id = gobj->obj_id;
sg->pos = sg - sg_beg;
sg->rank = obj_id < N_KMP_GOBJ ? rank[obj_id] : obj_id;
- if ( sort_mode == KMP_SORT_ANGLE )
+ if ( sort_mode == KSORT_ANGLE )
{
sg->angle = atan2(gobj->position[0],gobj->position[2]) * (180000000/M_PI);
- if ( sg->angle < 0)
+ if ( sg->angle < 0 )
sg->angle += 360000000;
}
memcpy(&sg->data,gobj,sizeof(sg->data));
}
+
//--- sort data
- if ( sort_mode == KMP_SORT_TINY )
- qsort( sg_beg, dlist->used, sizeof(*sg_beg), (qsort_func)sort_gobj_tiny );
- else
- qsort( sg_beg, dlist->used, sizeof(*sg_beg), (qsort_func)sort_gobj );
+ int (*func) ( const sort_gobj_t * a, const sort_gobj_t * b );
+ switch (sort_mode)
+ {
+ case KSORT_XYZ: func = sort_gobj_xyz; break;
+ case KSORT_TINY: func = sort_gobj_tiny; break;
+ default: func = sort_gobj; break;
+ }
+ qsort( sg_beg, dlist->used, sizeof(*sg_beg), (qsort_func)func );
//--- store sorted data
@@ -5225,7 +5248,7 @@ bool PatchKMP
}
}
- SortGOBJ(kmp,KMP_SORT_TINY);
+ SortGOBJ(kmp,KSORT_TINY);
}
@@ -5827,7 +5850,7 @@ void ModifyUsedPosObj
obj->allowed.v[i] *= stretch->v[i];
}
}
- EvaluateUsedPosObj(obj);
+ EvaluateUsedPosObj(obj);
obj->useful = useful;
if (src)
@@ -5864,7 +5887,7 @@ ccp GetUsedPosObjSuggestion
if (obj->pos_factor_valid)
return PrintCircBuf("@ITEM-POS-FACTOR=v(%4.2f,%4.2f,%4.2f)",
obj->pos_factor.x, obj->pos_factor.y, obj->pos_factor.z );
- }
+ }
return return_if_empty;
}
@@ -5881,7 +5904,7 @@ void PrintUsedPosObj ( FILE *f, int indent, const kmp_usedpos_obj_t *obj )
"R=%d,%d,%d, P=%d/%1.2f,%1.2f,%1.2f\n",
indent,"",
obj->valid, obj->useful, obj->shift_active, obj->stretch_active,
- obj->min.x/1000, obj->min.y/1000, obj->min.z/1000,
+ obj->min.x/1000, obj->min.y/1000, obj->min.z/1000,
obj->max.x/1000, obj->max.y/1000, obj->max.z/1000,
obj->allowed.x/1000, obj->allowed.y/1000, obj->allowed.z/1000,
obj->shift.x/1000, obj->shift.y/1000, obj->shift.z/1000,
@@ -6106,6 +6129,7 @@ const kmp_obj_info_t have_kmp_info[HAVEKMP__N] =
{ 0, "coob-r", "Conditional OOB by Riidefi" }, // HAVEKMP_COOB_R
{ 0, "coob-k", "Conditional OOB by kHacker35000vr" }, // HAVEKMP_COOB_K
{ 0, "uoob", "Unconditional OOB" }, // HAVEKMP_UOOB
+ { 0, "goomba-sz", "Goomba with scale other than 1.00" }, // HAVEKMP_GOOMBA_SIZE
};
///////////////////////////////////////////////////////////////////////////////
@@ -6161,6 +6185,11 @@ void DetectSpecialKMP
res[HAVEKMP_PENGUIN_POS]++;
break;
+ case 0x191: // goomba (kuribo)
+ if ( gobj->scale[0] != 1.0 || gobj->scale[1] != 1.0 || gobj->scale[2] != 1.0 )
+ res[HAVEKMP_GOOMBA_SIZE]++;
+ break;
+
case 0x1a6: // Epropeller
if ( gobj->setting[7] && res[HAVEKMP_EPROP_SPEED] < 0xff )
res[HAVEKMP_EPROP_SPEED]++;
@@ -6213,7 +6242,7 @@ ccp CreateSpecialInfoKMP
//
///////////////////////////////////////////////////////////////////////////////
-/////////////// CkeckKMP() ///////////////
+/////////////// CheckKMP() ///////////////
///////////////////////////////////////////////////////////////////////////////
// [[check_kmp_t]]
@@ -6722,6 +6751,9 @@ int CheckKMP
DASSERT(kmp);
PRINT("CheckKMP(%d)\n",mode);
+ if ( disable_checks > 0 )
+ return 0;
+
//--- setup
check_kmp_t chk;
diff --git a/project/src/lib-kmp.h b/project/src/lib-kmp.h
index 050444e..09b7a4a 100644
--- a/project/src/lib-kmp.h
+++ b/project/src/lib-kmp.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -175,13 +175,6 @@ enum
KMP_AM_SHORT, // define modes to get a very short race
KMP_AM_UNLIMIT, // remove lap counter for unlimited race
- //----- sort modes
-
- KMP_SORT_OFF = 0, // sort is off
- KMP_SORT_GROUPING, // grouping only
- KMP_SORT_ANGLE, // grouping and sorting by angle
- KMP_SORT_TINY, // grouping and sorting optimized for TINY
-
//----- definition-object (DOB) sort modes
KMP_DOB_OFF = 0, // sort if off
@@ -221,16 +214,18 @@ typedef enum kmp_ac_mode
//--- modes
KMP_AC_OFF = 0, // don't auto connect, always 0
- KMP_AC_PREV, // auto connect PREV by NEXT
+ KMP_AC_PREV, // auto connect PREV by NEXT always
+ KMP_AC_AUTO_PREV, // auto connect PREV by NEXT if $PREV not used
KMP_AC_DISPATCH, // auto connect for arenas, mode DISPATCH
KMP_AC_MASK = 0x0f, // mask for modes
//--- flags/options
- KMP_ACF_FIX_PREV = 0x10, // flags/options
- KMP_ACF_FIX_NEXT = 0x20, // flags/options
+ KMP_ACF_FIX_PREV = 0x10, // fix prev links
+ KMP_ACF_FIX_NEXT = 0x20, // fix next links
KMP_ACF_FIX = KMP_ACF_FIX_PREV | KMP_ACF_FIX_NEXT,
- KMP_ACF_MASK = KMP_ACF_FIX, // mask for flags
+ KMP_ACF_PR_PREV = 0x40, // print $PREV:...
+ KMP_ACF_MASK = 0x70, // mask for flags
}
__attribute__ ((packed)) kmp_ac_mode;
@@ -369,7 +364,6 @@ typedef struct kmp_head_info_t
uint max_off; // max usable offset (end-4)
int n_sect; // number of section, 0 on error
u32 *sect_off; // list mit section offsets
-
}
kmp_head_info_t;
@@ -425,7 +419,7 @@ __attribute__ ((packed)) kmp_enpt_entry_t;
typedef kmp_enpt_entry_t kmp_itpt_entry_t;
///////////////////////////////////////////////////////////////////////////////
-// [[kmp_enph_entry_t]]
+// [[kmp_enph_entry_t]]
typedef struct kmp_enph_entry_t
{
@@ -602,6 +596,22 @@ __attribute__ ((packed)) kmp_stgi_entry_t;
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// KMP sort modes ///////////////
+///////////////////////////////////////////////////////////////////////////////
+// [[kmp_sort_t]]
+
+typedef enum kmp_sort_t
+{
+ KSORT_OFF, // don't sort
+ KSORT_GROUP, // sort by groups
+ KSORT_ANGLE, // sort by groups and angles
+ KSORT_XYZ, // sort by groups and coordonates in xyz order
+ KSORT_TINY, // sort for TINY
+}
+kmp_sort_t;
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// Wim0 support ///////////////
///////////////////////////////////////////////////////////////////////////////
// [[kmp_wim0_sect_id]]
@@ -806,6 +816,7 @@ typedef struct kmp_gopt2_t
kmp_rtype_mode rtype_active; // active route type
kmp_oneway_mode ac_oneway; // oneway mode for auto-connect
u8 setting[2]; // values of bytes at offeset 0x0e and 0x0f
+// u8 have_prev_cmd; // >0: $PREV command used
kmp_gopt_t prev; // values for first point (prev link)
kmp_gopt_t next; // values for last point (next link)
@@ -817,7 +828,7 @@ kmp_gopt2_t;
typedef struct kmp_group_elem_t
{
- kmp_group_name_t name; // name of eleemns
+ kmp_group_name_t name; // name of element
kmp_oneway_mode oneway; // oneway mode
} kmp_group_elem_t;
@@ -830,6 +841,7 @@ typedef struct kmp_group_t
int first_index; // index of first point
int last_index; // index of last point
bool no_rotate; // true: do not rotate links
+ bool have_prev_cmd; // >0: $PREV command scannend
kmp_group_name_t name; // name of group
kmp_group_elem_t prev[KMP_MAX_PH_LINK]; // prev-link names and status
@@ -848,7 +860,7 @@ typedef struct kmp_group_list_t
uint used; // used groups
kmp_group_t group[KMP_MAX_GROUP]; // list with groups
char selector; // '!' selector
- bool have_options; // >0 at least one option detected
+ bool have_options; // >0_ at least one option detected
Line_t line; // '$LINE' settings
} kmp_group_list_t;
@@ -982,13 +994,21 @@ typedef enum kmp_mode_t
KMPMD_RM_EMPTY = KMPMD_TINY_1 << 3, // skip empty KMP sections
KMPMD_MINIMIZE = KMPMD_RM_EMPTY << 1, // minimize KMP by reordering [[obsolete]] not used
+
+ //--- misc
+
+ KMPMD_PR_PREV = KMPMD_MINIMIZE << 1, // print $PREV: ... (CKPT,ENPT,ITPT)
+ KMPMD_M_MISC = KMPMD_PR_PREV,
+
+
//--- tests
- KMPMD_TEST1 = KMPMD_MINIMIZE << 1, // reserved for testing
+ KMPMD_TEST1 = KMPMD_PR_PREV << 1, // reserved for testing
KMPMD_TEST2 = KMPMD_TEST1 << 1, // reserved for testing
KMPMD_M_TEST = KMPMD_TEST1
| KMPMD_TEST2,
+
//--- summaries
KMPMD_M_DEFAULT = 0, // default settings
@@ -1003,6 +1023,7 @@ typedef enum kmp_mode_t
| KMPMD_M_TINY
| KMPMD_RM_EMPTY
| KMPMD_MINIMIZE
+ | KMPMD_M_MISC
| KMPMD_M_TEST,
KMPMD_M_ALL = KMPMD_M_GENERAL // all relevant bits
@@ -1465,9 +1486,8 @@ enumError SaveTextKMP
bool SortGOBJ
(
kmp_t * kmp, // pointer to valid KMP
- int sort_mode // <=0: dont sort
- // 1: group only
- // 2: secondary sort by angle
+ kmp_sort_t sort_mode // one of KSORT_OFF, KSORT_GROUP,
+ // KSORT_ANGLE, KSORT_XYZ or KSORT_TINY
);
//-----------------------------------------------------------------------------
@@ -1795,7 +1815,7 @@ void AddRoutes2KCL
(
DrawKCL_t * dk, // pointer to initalized object
uint sect_pt, // KMP section
- uint color_std // standart color index
+ uint color_std // standard color index
);
//-----------------------------------------------------------------------------
@@ -2186,7 +2206,7 @@ uint CountPresenceFlags ( const kmp_t *kmp, kmp_pflags_t *pf );
// 13 0x2000 Online race with 19 or more players total and 2 humans at Wii.
//--------------------------------------------------------------------------
// 14 0x4000 RESERVED1. In Versus (setting #3) it is used for Time Trial.
-// 15 0x8000 RESERVED2.
+// 15 0x8000 RESERVED2.
//--------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////
@@ -2766,7 +2786,7 @@ typedef enum xpf_mode1_t
XMODE1_CONDREF, // MODE==1 && conditiopn reference
XMODE1_OBJREF, // MODE==1 && object reference
XMODE1__N
-
+
}
xpf_mode1_t;
diff --git a/project/src/lib-lecode.c b/project/src/lib-lecode.c
index 8c71067..331db20 100644
--- a/project/src/lib-lecode.c
+++ b/project/src/lib-lecode.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -50,6 +50,7 @@
///////////////////////////////////////////////////////////////////////////////
ccp opt_le_define = 0;
+ccp opt_le_arena = 0;
ccp opt_lpar = 0;
ccp opt_track_dest = 0;
ParamField_t opt_track_source = {0};
@@ -474,9 +475,10 @@ bool GetNextDebugMode ( lecode_debug_info_t *ldi )
{ LEDEB_POSITION, 0, "POSITION" },
{ LEDEB_CHECK_POINT, LEDEB_S_CHECK_POINT, "CHECK-POINT" },
{ LEDEB_RESPAWN, 0, "RESPAWN" },
+ { LEDEB_ITEM_POINT, 0, "ITEM-POINT" },
+ { LEDEB_KCL_TYPE, 0, "KCL-TYPE" },
{ LEDEB_LAP_POS, 0, "LAP-POS" },
- { LEDEB_XPF, LEDEB_S_XPF, "XPF" },
-// [[xpf+]]
+ { LEDEB_XPF, LEDEB_S_XPF, "XPF" },
};
while ( ldi->index >= 0 && ldi->index < sizeof(tab)/sizeof(*tab) )
@@ -518,6 +520,8 @@ lecode_debug_t DecodeLecodeDebug ( lecode_debug_ex_t *lde, lecode_debug_t mode )
lde->position = ( mode & LEDEB_POSITION ) > 0;
lde->check_point = mode >> LEDEB_S_CHECK_POINT & LEDEB_M_CHECK_POINT;
lde->respawn = ( mode & LEDEB_RESPAWN ) > 0;
+ lde->item_point = ( mode & LEDEB_ITEM_POINT ) > 0;
+ lde->kcl_type = ( mode & LEDEB_KCL_TYPE ) > 0;
lde->lap_pos = ( mode & LEDEB_LAP_POS ) > 0;
lde->xpf = mode >> LEDEB_S_XPF & LEDEB_M_XPF;
@@ -541,6 +545,8 @@ lecode_debug_t EncodeLecodeDebug ( lecode_debug_ex_t *lde )
if ( lde->space ) mode |= LEDEB_SPACE;
if ( lde->position ) mode |= LEDEB_POSITION;
if ( lde->respawn ) mode |= LEDEB_RESPAWN;
+ if ( lde->item_point ) mode |= LEDEB_ITEM_POINT;
+ if ( lde->kcl_type ) mode |= LEDEB_KCL_TYPE;
if ( lde->lap_pos ) mode |= LEDEB_LAP_POS;
return DecodeLecodeDebug(lde,mode); // normalize all settings
@@ -597,10 +603,11 @@ bool SetupLecodeDebugLPAR
{ PREDEBUG_VERTICAL,-1, 0 }, // hide speedo
{ PREDEBUG_VERTICAL, 1, LEDEB_CHECK_POINT },
{ PREDEBUG_VERTICAL, 2, LEDEB_RESPAWN },
- { PREDEBUG_VERTICAL, 3, LEDEB_LAP_POS },
- { PREDEBUG_VERTICAL, 4, LEDEB_POSITION },
- { PREDEBUG_VERTICAL, 5, LEDEB_LONG_XPF },
-// [[xpf+]]
+ { PREDEBUG_VERTICAL, 3, LEDEB_ITEM_POINT },
+ { PREDEBUG_VERTICAL, 4, LEDEB_KCL_TYPE },
+ { PREDEBUG_VERTICAL, 5, LEDEB_LAP_POS },
+ { PREDEBUG_VERTICAL, 6, LEDEB_POSITION },
+ { PREDEBUG_VERTICAL, 7, LEDEB_LONG_XPF },
{0,0,0}
};
@@ -920,7 +927,7 @@ void InitializeLPAR ( le_lpar_t *lpar, bool load_lpar )
}
///////////////////////////////////////////////////////////////////////////////
-
+
static void NormalizeLPAR ( le_lpar_t * lp )
{
DASSERT(lp);
@@ -1178,7 +1185,7 @@ enumError WriteSectionLPAR
{
fputs(text_lpar_sect_chat_cr,f);
- int i;
+ int i;
for ( i = 0; i < BMG_N_CHAT; i++ )
if ( lpar->chat_mode_1[i] || lpar->chat_mode_2[i] )
break;
@@ -1186,7 +1193,7 @@ enumError WriteSectionLPAR
fputs(text_lpar_sect_chat_example_cr,f);
}
- int last_group = -1;
+ int last_group = -1;
for ( int i = 0; i < BMG_N_CHAT; i++ )
{
const u16 mode1 = lpar->chat_mode_1[i];
@@ -1296,6 +1303,66 @@ void ResetLEAnalyseUsage ( le_analyse_t *ana )
///////////////////////////////////////////////////////////////////////////////
+static void ApplyArena ( le_analyse_t * ana, const ctcode_arena_t * ca )
+{
+ DASSERT(ana);
+ DASSERT(ca);
+
+ if (!ana->arena_setup)
+ SetupArenasLEAnalyse(ana,false);
+
+ if (ana->property)
+ for ( int a = 0; a < MKW_N_ARENAS; a++ )
+ if (ca->prop[a])
+ {
+ ana->property[a+MKW_ARENA_BEG] = ca->prop[a];
+ ana->arena_applied = true;
+ }
+
+ if (ana->music)
+ for ( int a = 0; a < MKW_N_ARENAS; a++ )
+ if (ca->music[a])
+ {
+ ana->music[a+MKW_ARENA_BEG] = ca->music[a];
+ ana->arena_applied = true;
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void SetupArenasLEAnalyse ( le_analyse_t *ana, bool force )
+{
+ DASSERT(ana);
+ if ( ana->property && ana->music )
+ {
+ ana->arena_setup = true;
+
+ if ( force || !ana->property[MKW_ARENA_BEG] )
+ {
+ const TrackInfo_t *ai = arena_info;
+ for ( int a = 0; a < MKW_N_ARENAS; a++, ai++ )
+ {
+ ana->property[a+MKW_ARENA_BEG] = ai->track_id;
+ ana->music[a+MKW_ARENA_BEG] = ai->music_id;
+ }
+ }
+
+ if ( opt_le_arena && *opt_le_arena )
+ {
+ raw_data_t raw;
+ if ( LoadRawData(&raw,true,opt_le_arena,0,false,0) == ERR_OK )
+ {
+ ctcode_arena_t ca = {{0}};
+ ScanTextArena(&ca,raw.fname,raw.data,raw.data_size);
+ ApplyArena(ana,&ca);
+ }
+ ResetRawData(&raw);
+ }
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
enumError AnalyseLEBinary
(
le_analyse_t *ana, // NULL or destination of analysis
@@ -1567,9 +1634,9 @@ enumError AnalyseLEBinary
*(uint*)((u8*)ana+pnm->off_max) = max;
}
+ SetupArenasLEAnalyse(ana,false);
CalculateStatsLE(ana);
-
//--- return
return ana->valid & LE_PARAM_VALID ? ERR_OK :
@@ -1801,7 +1868,7 @@ static ccp GetSlotInfo
uint *warnings // not NULL: increment on warnings
)
{
- if ( tid < ana->n_slot )
+ if ( tid < ana->n_slot || IsMkwArena(tid) )
{
uint warn = 0;
@@ -1848,7 +1915,7 @@ static ccp GetSlotInfo
music0 = col->reset;
}
}
- else if (!(music&1))
+ else if ( !(music&1) || IsMkwArena(tid) && MusicID2TrackId(music,0,0) != tid )
{
warn |= 1;
if (col)
@@ -1887,17 +1954,14 @@ static ccp GetSlotInfo
flags = "-?-";
static const char warn_list[] = " <!!";
- char buf[40];
- const int len = is_alias
- ? snprintf(buf,sizeof(buf),"[%s->%4x %s,%s] ",
+ return is_alias
+ ? PrintCircBuf("[%s->%4x %s,%s] ",
col->differ, TrackByAliasLE(prop,music),
col->reset, flags )
- : snprintf(buf,sizeof(buf),"[%s%s%s,%s%s%s,%s]%c",
+ : PrintCircBuf("[%s%s%s,%s%s%s,%s]%c",
prop1, propx, prop0,
music1, musicx, music0,
flags, warn_list[warn] );
- if ( len > 0 )
- return CopyCircBuf0(buf,len);
}
if (col)
@@ -2310,7 +2374,7 @@ void DumpLEAnalyse ( FILE *f, uint indent, const le_analyse_t *ana )
"%*s" "Allow cheat codes: %u = %s\n"
,indent,"", h->cheat_mode, GetCheatModeInfo(h->cheat_mode)
);
-
+
fprintf(f,
"%*s" "Engine chances: "
"%u + %u + %u = %u (1%s0cc+mirror=total)\n"
@@ -2350,7 +2414,7 @@ void DumpLEAnalyse ( FILE *f, uint indent, const le_analyse_t *ana )
}
else
comment = "";
-
+
fprintf(f,
"%*s" "Speedometer: %u%s\n",
indent,"", h->enable_speedo, comment );
@@ -2603,13 +2667,16 @@ const ctcode_t * LoadLEFile ( uint le_phase )
le_file_done = false;
}
+
+ // --le-define
+
if ( !le_file_done && opt_le_define && *opt_le_define )
{
PRINT("le=%d, ctm=%d[%s]\n",
le_phase, ct_mode, GetCtModeNameBMG(ct_mode,true) );
if ( logging > 1 )
- fprintf(stdlog,"Load LE definition for phase %d (%s)\n",
- le_phase, GetCtModeNameBMG(ct_mode,true) );
+ fprintf(stdlog,"Load LE definition (%s)\n",
+ GetCtModeNameBMG(ct_mode,true) );
le_file_done = true;
le_file = MALLOC(sizeof(*le_file));
@@ -2633,6 +2700,8 @@ const ctcode_t * LoadLEFile ( uint le_phase )
enumError ApplyLEFile ( le_analyse_t * ana )
{
DASSERT(ana);
+ SetupArenasLEAnalyse(ana,false);
+
const ctcode_t *ctcode = LoadLEFile(ana->version);
return ctcode ? ApplyCTCODE(ana,ctcode) : ERR_ERROR;
}
@@ -2742,6 +2811,15 @@ enumError ApplyCTCODE ( le_analyse_t * ana, const ctcode_t * ctcode )
}
}
+
+ //--- arena setup (override)
+
+ SetupArenasLEAnalyse(ana,false);
+ ApplyArena(ana,&ctcode->arena);
+
+
+ //--- setup by version
+
switch (ana->param_vers)
{
case 1:
diff --git a/project/src/lib-lecode.h b/project/src/lib-lecode.h
index e37b36e..c8ed13d 100644
--- a/project/src/lib-lecode.h
+++ b/project/src/lib-lecode.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -119,12 +119,14 @@ typedef enum lecode_debug_t
LEDEB_XPF = 0x0300, // 2 bits!
LEDEB_SHORT_XPF = 0x0100,
LEDEB_LONG_XPF = 0x0200,
+ LEDEB_ITEM_POINT = 0x0400,
+ LEDEB_KCL_TYPE = 0x0800,
//--- derived values
- LEDEB__STD = 0x00f9, // standard output
- LEDEB__OUTPUT = 0x03f8, // flags that produce output
- LEDEB__ALL = 0x03ff, // all flags
+ LEDEB__STD = 0x0ff9, // standard output
+ LEDEB__OUTPUT = 0x0ff8, // flags that produce output
+ LEDEB__ALL = 0x0fff, // all flags
LEDEB_S_CHECK_POINT = 4, // shift for LEDEB_CHECK_POINT
LEDEB_M_CHECK_POINT = 3, // mask after shift
@@ -184,6 +186,8 @@ typedef struct lecode_debug_ex_t
u8 position;
u8 check_point;
u8 respawn;
+ u8 item_point;
+ u8 kcl_type;
u8 lap_pos;
u8 xpf;
@@ -400,7 +404,7 @@ typedef struct le_binpar_v1_35_t
/*20*/ u32 off_course_par; // offset of course param
/*24*/ u32 off_property; // offset of property list
/*28*/ u32 off_music; // offset of music list
- /*2c*/ u32 off_flags; // offset of music list
+ /*2c*/ u32 off_flags; // offset of flags
/*30*/ u8 engine[3]; // 100cc, 150cc, mirror (sum always 100)
/*33*/ u8 enable_200cc; // TRUE: 200C enabled => 150cc, 200cc, mirror
@@ -427,7 +431,7 @@ typedef struct le_binpar_v1_37_t
/*20*/ u32 off_course_par; // offset of course param
/*24*/ u32 off_property; // offset of property list
/*28*/ u32 off_music; // offset of music list
- /*2c*/ u32 off_flags; // offset of music list
+ /*2c*/ u32 off_flags; // offset of flags
/*30*/ u8 engine[3]; // 100cc, 150cc, mirror (sum always 100)
/*33*/ u8 enable_200cc; // TRUE: 200C enabled => 150cc, 200cc, mirror
@@ -456,7 +460,7 @@ typedef struct le_binpar_v1_f8_t
/*20*/ u32 off_course_par; // offset of course param
/*24*/ u32 off_property; // offset of property list
/*28*/ u32 off_music; // offset of music list
- /*2c*/ u32 off_flags; // offset of music list
+ /*2c*/ u32 off_flags; // offset of flags
/*30*/ u8 engine[3]; // 100cc, 150cc, mirror (sum always 100)
/*33*/ u8 enable_200cc; // TRUE: 200C enabled => 150cc, 200cc, mirror
@@ -487,7 +491,7 @@ typedef struct le_binpar_v1_1b8_t
/*020*/ u32 off_course_par; // offset of course param
/*024*/ u32 off_property; // offset of property list
/*028*/ u32 off_music; // offset of music list
- /*02c*/ u32 off_flags; // offset of music list
+ /*02c*/ u32 off_flags; // offset of flags
/*030*/ u8 engine[3]; // 100cc, 150cc, mirror (sum always 100)
/*033*/ u8 enable_200cc; // TRUE: 200C enabled => 150cc, 200cc, mirror
@@ -519,7 +523,7 @@ typedef struct le_binpar_v1_1bc_t
/*020*/ u32 off_course_par; // offset of course param
/*024*/ u32 off_property; // offset of property list
/*028*/ u32 off_music; // offset of music list
- /*02c*/ u32 off_flags; // offset of music list
+ /*02c*/ u32 off_flags; // offset of flags
/*030*/ u8 engine[3]; // 100cc, 150cc, mirror (sum always 100)
/*033*/ u8 enable_200cc; // TRUE: 200C enabled => 150cc, 200cc, mirror
@@ -558,7 +562,7 @@ typedef struct le_binpar_v1_260_t
/*020*/ u32 off_course_par; // offset of course param
/*024*/ u32 off_property; // offset of property list
/*028*/ u32 off_music; // offset of music list
- /*02c*/ u32 off_flags; // offset of music list
+ /*02c*/ u32 off_flags; // offset of flags
/*030*/ u8 engine[3]; // 100cc, 150cc, mirror (sum always 100)
/*033*/ u8 enable_200cc; // TRUE: 200C enabled => 150cc, 200cc, mirror
@@ -599,7 +603,7 @@ typedef struct le_binpar_v1_264_t
/*020*/ u32 off_course_par; // offset of course param
/*024*/ u32 off_property; // offset of property list
/*028*/ u32 off_music; // offset of music list
- /*02c*/ u32 off_flags; // offset of music list
+ /*02c*/ u32 off_flags; // offset of flags
/*030*/ u8 engine[3]; // 100cc, 150cc, mirror (sum always 100)
/*033*/ u8 enable_200cc; // TRUE: 200C enabled => 150cc, 200cc, mirror
@@ -708,6 +712,9 @@ typedef struct le_analyse_t
le_usage_t *usage; // NULL or alloced list[n_slot], setup by GetLEUsage()
uint usage_size; // number of alloed 'usage' elements
+ bool arena_setup; // set by SetupArenasLEAnalyse()
+ bool arena_applied; // set by ApplyArena()
+
//--- binary data
@@ -746,6 +753,7 @@ le_analyse_t;
void ResetLEAnalyse ( le_analyse_t *ana );
void ResetLEAnalyseUsage ( le_analyse_t *ana );
+void SetupArenasLEAnalyse ( le_analyse_t *ana, bool force );
enumError AnalyseLEBinary
(
@@ -791,6 +799,7 @@ uint GetNextRacingTrackLE ( uint tid );
///////////////////////////////////////////////////////////////////////////////
extern ccp opt_le_define;
+extern ccp opt_le_arena;
extern ccp opt_lpar;
extern ccp opt_track_dest;
extern ParamField_t opt_track_source;
diff --git a/project/src/lib-lex.c b/project/src/lib-lex.c
index db63bfe..5640674 100644
--- a/project/src/lib-lex.c
+++ b/project/src/lib-lex.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -135,6 +135,7 @@ static const feature_var_t szs_feature_list[] =
static const feature_var_t kmp_feature_list[] =
{
+ DEF_VAR( 0,HAVEKMP_GOOMBA_SIZE, kmp_goomba_size, "KMP: Goomba with scale != 1.00" ),
DEF_VAR( 0,HAVEKMP_WOODBOX_HT, kmp_woodbox_ht, "KMP: Woodbox with fall height" ),
DEF_VAR( 0,HAVEKMP_MUSHROOM_CAR, kmp_mushroom_car, "KMP: penguin_m as mushroom car" ),
DEF_VAR( 0,HAVEKMP_PENGUIN_POS, kmp_penguin_pos, "KMP: Alternative start of penguin_m" ),
@@ -160,10 +161,10 @@ static const feature_var_t lex_section_list[] =
DEF_VAR( 0,HAVELEXS_SET1, lex_sect_set1, "LEX section SET1" ),
DEF_VAR( 0,HAVELEXS_CANN, lex_sect_cann, "LEX section CANN" ),
DEF_VAR( 0,HAVELEXS_HIPT, lex_sect_hipt, "LEX section HIPT" ),
- // move HAVELEXS_TEST to here
{0,0,0,0,0}
};
+
//-----------------------------------------------------------------------------
static const feature_var_t lex_feature_list[] =
@@ -172,7 +173,7 @@ static const feature_var_t lex_feature_list[] =
DEF_VAR( 0,HAVELEXF_ITEM_RANGE, lex_item_range, "LEX: Expand the range of item positions" ),
DEF_VAR( 0,HAVELEXF_CANNON, lex_cannon, "LEX: Alternative cannon settings" ),
DEF_VAR( 0,HAVELEXF_HIDE_POS, lex_hide_pos, "LEX: Hide position tracker conditionally" ),
- // move HAVELEXF_TEST_ACTIVE to here
+ DEF_VAR( 0,HAVELEXF_START_ITEM, lex_start_item, "LEX: Player can get item before start of race." ),
{0,0,0,0,0}
};
@@ -194,6 +195,7 @@ typedef struct feature_list_t
const feature_var_t *var; // var list
uint var_type; // one of enum feature_list_var_type
uint offset; // offset in analyse_szs_t
+ uint max_value; // maximum possible value
ccp ref_prefix; // prefix for references
ccp heading1; // heading1
ccp heading2; // heading2
@@ -207,6 +209,7 @@ static const feature_list_t feature_lists[] =
{ szs_feature_list,
FVT_BYTE_ARRAY,
offsetof(szs_have_t,szs),
+ FZV_MAYBE_IMPACT,
"SZS file",
"Additional sub-files found in SZS file",
"0:no file, 1:unmodified file, 2:modified file" },
@@ -214,32 +217,35 @@ static const feature_list_t feature_lists[] =
{ kmp_feature_list,
FVT_BOOL_ARRAY,
offsetof(szs_have_t,kmp),
+ FZV_IMPACT,
"KMP feature",
"Special features found in KMP (sub-file course.kmp)",
- 0 },
+ "0:not found, 1:found without impact, 3:found with impact" },
{ lex_section_list,
FVT_UINT_BITS,
offsetof(szs_have_t,lex_sect),
+ FZV_MAYBE_IMPACT,
"LEX section",
"Sections found in LEX (sub-file course.lex)",
- 0 },
+ "0:section not found, 1:section found, 2:found and relevant" },
{ lex_feature_list,
FVT_UINT_BITS,
offsetof(szs_have_t,lex_feat),
+ FZV_IMPACT,
"LEX feature",
"Special features found in LEX (sub-file course.lex)",
- 0 },
+ "0:not found, 1:found without impact, 3:found with impact" },
- {0,0,0,0,0}
+ {0,0,0,0,0,0}
};
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void InitializeFeaturesSZS ( features_szs_t * fs )
-{
+{
DASSERT(fs);
memset(fs,0,sizeof(*fs));
fs->size_be = htons(sizeof(*fs));
@@ -323,8 +329,8 @@ void SetupFeaturesSZS ( features_szs_t *fs, const szs_have_t *have, bool is_lex
for ( var = list->var; var->offset; var++ )
((u8*)fs)[var->offset]
= is_lex && var->no_lex
- ? 1
- : src[var->index] > 0;
+ ? list->max_value
+ : src[var->index] > 0 ? list->max_value : 0;
}
break;
@@ -334,7 +340,7 @@ void SetupFeaturesSZS ( features_szs_t *fs, const szs_have_t *have, bool is_lex
for ( var = list->var; var->offset; var++ )
((u8*)fs)[var->offset]
= is_lex && var->no_lex
- ? 1
+ ? list->max_value
: src[var->index];
}
break;
@@ -345,8 +351,8 @@ void SetupFeaturesSZS ( features_szs_t *fs, const szs_have_t *have, bool is_lex
for ( var = list->var; var->offset; var++ )
((u8*)fs)[var->offset]
= is_lex && var->no_lex
- ? 1
- : ( val & 1 << var->index ) != 0;
+ ? list->max_value
+ : ( val & 1 << var->index ) != 0 ? list->max_value : 0;
}
break;
@@ -355,6 +361,10 @@ void SetupFeaturesSZS ( features_szs_t *fs, const szs_have_t *have, bool is_lex
}
}
+ //-------------------------------------------------------------------------
+
+ NormalizeFeatures(fs);
+
// ??? [[2do]]
}
@@ -407,16 +417,34 @@ void PrintFeaturesSZS
(
PrintScript_t *ps, // valid output definition
const features_szs_t *fs, // valid source
- bool is_lex, // TRUE: Create output for a LEX file
+ bool is_lex, // TRUE: Create output for a LEX file
int comments, // >0: add extended comments
int print_modes, // >0: append ",MODES"
- u8 include, // print only if all bits match
+ u8 include, // print only if all bits match
u8 exclude // exclude if any bit match
)
{
DASSERT(ps);
DASSERT(fs);
+ PrintScriptVars(ps,0,
+ "\n"
+ "# The base value (lower bits) of each feature is one of:\n"
+ "# %u: file or feature not found.\n"
+ "# %u: file or feature found, but no impact.\n"
+ "# %u: file or feature found, maybe some settings with impact.\n"
+ "# %u: feature found with impact to game play.\n",
+ FZV_UNDEF, FZV_NO_IMPACT, FZV_MAYBE_IMPACT, FZV_IMPACT );
+
+ if ( comments >= 1 )
+ PrintScriptVars(ps,0,
+ "#\n"
+ "# If value is %u, then some additional bits may be set:\n"
+ "# 0x%02x: Impact to game play of time-trial.\n"
+ "# 0x%02x: Impact to game play of offline (local) races and battles.\n"
+ "# 0x%02x: Impact to game play of online races and battles.\n",
+ FZV_IMPACT, FZM_TIMETRIAL, FZM_OFFLINE, FZM_ONLINE );
+
if ( ps->fform == PSFF_UNKNOWN && comments >= 0 )
ps->fform = PSFF_ASSIGN;
@@ -470,11 +498,18 @@ void PrintFeaturesSZS
if (effect)
PrintScriptVars(ps,0,"# %s\n",effect);
}
+
+ char valbuf[30];
+ if ( value & FZV_M_OPTIONS && !is_lex && comments )
+ snprintf(valbuf,sizeof(valbuf),"0x%02x",value);
+ else
+ snprintf(valbuf,sizeof(valbuf),"%u", value & FZV_M_VALUE );
+
if ( print_modes > 0 )
- PrintScriptVars(ps,0,"%s=\"%u,%s\"\n",
- var->name, value, GetFeaturesMode(mode) );
+ PrintScriptVars(ps,0,"%s=\"%s,%s\"\n",
+ var->name, valbuf, GetFeaturesMode(mode) );
else
- PrintScriptVars(ps,0,"%s=%u\n",var->name,value);
+ PrintScriptVars(ps,0,"%s=%s\n",var->name,valbuf);
}
}
}
@@ -495,7 +530,7 @@ const features_szs_t * GetFeaturesModes()
if (!m.size_be)
{
InitializeFeaturesSZS(&m);
-
+
const u8 invalid = FZM_SECTION | FZM_BATTLE | FZM_TIMETRIAL;
memset((u8*)&m+sizeof(m.size_be),invalid,sizeof(m)-sizeof(m.size_be));
@@ -512,6 +547,7 @@ const features_szs_t * GetFeaturesModes()
m.f_aiparam_baa = FZM_GAMEPLAY | FZM_M_TYPE | FZM_OFFLINE;
m.f_aiparam_bas = FZM_GAMEPLAY | FZM_M_TYPE | FZM_OFFLINE;
+ m.kmp_goomba_size = FZM_GAMEPLAY | FZM_M_TYPE | FZM_M_WHERE;
m.kmp_woodbox_ht = FZM_GAMEPLAY | FZM_M_TYPE | no_timetrial;
m.kmp_mushroom_car = FZM_VISUAL | FZM_GAMEPLAY | FZM_M_TYPE | FZM_M_WHERE;
m.kmp_penguin_pos = FZM_GAMEPLAY | FZM_M_TYPE | FZM_M_WHERE;
@@ -523,18 +559,20 @@ const features_szs_t * GetFeaturesModes()
m.kmp_eprop_speed = FZM_GAMEPLAY | FZM_M_TYPE | FZM_M_WHERE;
m.kmp_coob_riidefii = FZM_GAMEPLAY | FZM_M_TYPE | FZM_M_WHERE;
m.kmp_coob_khacker = FZM_GAMEPLAY | FZM_M_TYPE | FZM_M_WHERE;
- m.kmp_uncond_oob = FZM_GAMEPLAY | FZM_M_TYPE | FZM_M_WHERE;
+ m.kmp_uncond_oob = FZM_M_TYPE | FZM_M_WHERE;
- m.lex_sect_fea0 = FZM_SECTION;
+ // existence of a section don't have impact to gameplay => see lex attributes
+ m.lex_sect_fea0 = FZM_SECTION;
m.lex_sect_test = FZM_VISUAL | FZM_GAMEPLAY | FZM_M_TYPE | no_timetrial | FZM_SECTION;
- m.lex_sect_set1 = FZM_GAMEPLAY | FZM_M_TYPE | FZM_ONLINE | FZM_SECTION;
- m.lex_sect_cann = FZM_GAMEPLAY | FZM_M_TYPE | FZM_M_WHERE | FZM_SECTION;
- m.lex_sect_hipt = FZM_VISUAL | FZM_M_TYPE | no_timetrial | FZM_SECTION;
+ m.lex_sect_set1 = FZM_GAMEPLAY | FZM_M_TYPE | FZM_ONLINE | FZM_SECTION;
+ m.lex_sect_cann = FZM_GAMEPLAY | FZM_M_TYPE | FZM_M_WHERE | FZM_SECTION;
+ m.lex_sect_hipt = FZM_VISUAL | FZM_M_TYPE | no_timetrial | FZM_SECTION;
m.lex_test_active = FZM_VISUAL | FZM_GAMEPLAY | FZM_M_TYPE | no_timetrial;
m.lex_item_range = FZM_GAMEPLAY | FZM_M_TYPE | FZM_ONLINE;
m.lex_cannon = FZM_GAMEPLAY | FZM_M_TYPE | FZM_M_WHERE;
m.lex_hide_pos = FZM_VISUAL | FZM_M_TYPE | no_timetrial;
+ m.lex_start_item = FZM_GAMEPLAY | FZM_M_TYPE | FZM_ONLINE;
#if CHECK_FEATURES
uint err_count = 0;
@@ -581,10 +619,10 @@ ccp GetFeaturesEffects ( features_szs_mode_t mode )
{
{ 0,FZM_SECTION, "section" },
- { 1,FZM_M_KIND, "no effects" },
- { 0,FZM_M_KIND, "visual and gameplay effects" },
- { 0,FZM_VISUAL, "visual effects only" },
- { 0,FZM_GAMEPLAY, "gameplay effects" },
+ { 1,FZM_M_KIND, "no impact" },
+ { 0,FZM_M_KIND, "visual and gameplay impact" },
+ { 0,FZM_VISUAL, "visual impact only" },
+ { 0,FZM_GAMEPLAY, "gameplay impact" },
{ 0,FZM_M_TYPE, 0 },
{ 0,FZM_BATTLE, "battle only" },
@@ -631,6 +669,31 @@ ccp GetFeaturesEffectsByOffset ( uint offset )
return GetFeaturesEffects(((u8*)fs)[offset]);
}
+//-----------------------------------------------------------------------------
+
+void NormalizeFeatures ( features_szs_t *fs )
+{
+ if (fs)
+ {
+ const features_szs_t *mode = GetFeaturesModes();
+ for ( int idx = 2; idx < sizeof(features_szs_t); idx++ )
+ {
+ const u8 md = ((u8*)mode)[idx];
+
+ u8 *ptr = ((u8*)fs) + idx;
+ u8 val = *ptr & FZV_M_VALUE;
+ if ( val >= FZV_IMPACT )
+ {
+ if ( md & FZM_GAMEPLAY )
+ val = FZV_IMPACT | md & FZV_M_OPTIONS;
+ else
+ val = FZV_NO_IMPACT;
+ }
+ *ptr = val;
+ }
+ }
+}
+
//
///////////////////////////////////////////////////////////////////////////////
/////////////// lecode extension LEX ///////////////
@@ -745,6 +808,8 @@ static void FixLEXElement_SET1 ( lex_set1_t *set1 )
if ( !isnormal(f) || f < 1.0 )
write_bef4(set1->item_factor.v+i,1.0);
}
+
+ set1->start_item = set1->start_item > 0;
}
//-----------------------------------------------------------------------------
@@ -1105,6 +1170,10 @@ static uint GetLexFeaturesSET1 ( const lex_element_t *elem )
have_feat |= 1 << HAVELEXF_ITEM_RANGE;
}
}
+
+ if ( size > offsetof(lex_set1_t,start_item) && set1->start_item )
+ have_feat |= 1 << HAVELEXF_START_ITEM;
+
return have_feat;
}
@@ -1156,6 +1225,7 @@ const have_lex_info_t have_lex_feat_info[HAVELEXF__N] =
{ HAVELEXF_ITEM_RANGE, "itempos", 0 },
{ HAVELEXF_CANNON, "cannon", 0 },
{ HAVELEXF_HIDE_POS, "hipt", 0 },
+ { HAVELEXF_START_ITEM, "startitem", 0 },
//--- add new sections here (order is important)
};
@@ -1665,16 +1735,22 @@ static enumError ScanLEXElement_SET1
//--- setup data
- lex_set1_t set1;
- memset(&set1,0,sizeof(set1));
+ lex_set1_t set1 = { .item_factor.v = {1,1,1} };
+ //HexDump16(stdout,0,0,&set1,sizeof(set1));
const ScanParam_t ptab[] =
{
{ "ITEM-POS-FACTOR", SPM_FLOAT3_BE, &set1.item_factor },
- { "TEST1", SPM_U8, set1.test+0 },
- { "TEST2", SPM_U8, set1.test+1 },
- { "TEST3", SPM_U8, set1.test+2 },
- { "TEST4", SPM_U8, set1.test+3 },
+ { "START-ITEM", SPM_U8, &set1.start_item },
+
+ // renamed at 2021-05-12
+ { "TEST1", SPM_U8, &set1.start_item }, // [[obsolete]] 2022
+ { "TEST2", SPM_U8, &set1.test_0d }, // [[obsolete]] 2022
+ { "TEST_0D", SPM_U8, &set1.test_0d },
+ { "TEST3", SPM_U8, &set1.test_0e }, // [[obsolete]] 2022
+ { "TEST_0E", SPM_U8, &set1.test_0e },
+ { "TEST4", SPM_U8, &set1.test_0f }, // [[obsolete]] 2022
+ { "TEST_0F", SPM_U8, &set1.test_0f },
{0}
};
@@ -2257,13 +2333,15 @@ static enumError SaveTextLEX_SET1
,bef4(&set1->item_factor.x)
,bef4(&set1->item_factor.y)
,bef4(&set1->item_factor.z)
+ ,set1->start_item
);
- if (*(u32*)set1->test)
+ if ( set1->test_0d || set1->test_0e || set1->test_0f )
fprintf(f,text_lex_elem_set1_develop_cr
- ,set1->test[0],set1->test[1],set1->test[2],set1->test[3]
+ ,set1->test_0d
+ ,set1->test_0e
+ ,set1->test_0f
);
-
if ( size > sizeof(lex_set1_t) )
{
fputs("\n# Hex dump for unknown settings:\n",f);
diff --git a/project/src/lib-lex.h b/project/src/lib-lex.h
index 96c2d4f..da54ab3 100644
--- a/project/src/lib-lex.h
+++ b/project/src/lib-lex.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -62,6 +62,8 @@ typedef struct features_szs_t
u16 size_be; // size of features_szs_t in big endian
// == version number
+ // ==> see enum features_szs_value_t for following feature values
+
//--- SZS files (initial list)
u8 f_lex; // HAVESZS_COURSE_LEX
@@ -77,6 +79,7 @@ typedef struct features_szs_t
//--- KMP features (initial list)
+ u8 kmp_goomba_size; // HAVEKMP_GOOMBA_SIZE
u8 kmp_woodbox_ht; // HAVEKMP_WOODBOX_HT
u8 kmp_mushroom_car; // HAVEKMP_MUSHROOM_CAR
u8 kmp_penguin_pos; // HAVEKMP_PENGUIN_POS
@@ -104,6 +107,7 @@ typedef struct features_szs_t
u8 lex_item_range; // HAVELEXF_ITEM_RANGE
u8 lex_cannon; // HAVELEXF_CANNON
u8 lex_hide_pos; // HAVELEXF_HIDE_POS
+ u8 lex_start_item; // HAVELEXF_START_ITEM
//--- new files and features will be appended here
}
@@ -128,10 +132,10 @@ void PrintFeaturesSZS
(
PrintScript_t *ps, // valid output definition
const features_szs_t *fs, // valid source
- bool is_lex, // TRUE: Create output for a LEX file
+ bool is_lex, // TRUE: Create output for a LEX file
int comments, // >0: add extended comments
int print_modes, // >0: append ",MODES"
- u8 include, // print only if all bits match
+ u8 include, // print only if all bits match
u8 exclude // exclude if any bit match
);
@@ -151,27 +155,69 @@ typedef enum features_szs_mode_t
FZM_RACING = 0x10, // R: impact on racings
FZM_TIMETRIAL = 0x20, // T: impact on time trial
- FZM_OFFLINE = 0x40, // L: impact on offline battles/races
+ FZM_OFFLINE = 0x40, // L: impact on local battles/races
FZM_ONLINE = 0x80, // O: impact on online battles/races
FZM_M_KIND = FZM_VISUAL | FZM_GAMEPLAY,
FZM_M_TYPE = FZM_BATTLE | FZM_RACING,
FZM_M_WHERE = FZM_TIMETRIAL | FZM_OFFLINE | FZM_ONLINE,
- FZM__MASK = FZM_SECTION | FZM_M_KIND | FZM_M_TYPE | FZM_M_WHERE,
+ FZM__MASK = FZM_SECTION | FZM_M_KIND | FZM_M_TYPE | FZM_M_WHERE,
}
features_szs_mode_t;
//-----------------------------------------------------------------------------
+// [[features_szs_value_t]]
+
+typedef enum features_szs_value_t
+{
+ // values for struct features_szs_t
+
+ FZV_UNDEF, // feature not defined
+ FZV_NO_IMPACT, // feature defined but without gameplay impact
+ FZV_MAYBE_IMPACT, // feature defined, gameplay impact is possible
+ FZV_IMPACT, // feature defined, with gameplay impact
+
+ // masks for struct features_szs_t
+
+ FZV_M_VALUE = 7, // mask for values
+ FZV_M_OPTIONS = FZM_M_WHERE, // mask for options
+}
+features_szs_value_t;
+
+//-----------------------------------------------------------------------------
ccp GetFeaturesMode ( features_szs_mode_t mode );
ccp GetFeaturesEffects ( features_szs_mode_t mode );
ccp GetFeaturesEffectsByOffset ( uint offset );
+void NormalizeFeatures ( features_szs_t *fs );
const features_szs_t * GetFeaturesModes();
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// check_features_szs_t ///////////////
+///////////////////////////////////////////////////////////////////////////////
+// [[check_features_szs_t]]
+
+typedef struct check_features_szs_t
+{
+ bool have_features; // true: szs has LEX/FEA0 section
+ bool need_features; // true: szs needs a LEX/FEA0 section
+ bool wrong_features; // true: 'current' and 'correct' differ
+
+ features_szs_t current; // current features
+ features_szs_t correct; // correct features
+}
+check_features_szs_t __attribute__((aligned(4)));
+
+//-----------------------------------------------------------------------------
+
+void SetupCheckFeaturesSZS
+ ( check_features_szs_t *cfs, const struct szs_have_t *have, bool is_lex );
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// lecode extension LEX ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -209,6 +255,7 @@ typedef enum have_lex_feat_t
HAVELEXF_ITEM_RANGE,
HAVELEXF_CANNON,
HAVELEXF_HIDE_POS,
+ HAVELEXF_START_ITEM,
//--- add new elements here (order is important)
HAVELEXF__N
}
@@ -274,8 +321,11 @@ __attribute__ ((packed)) lex_element_t;
typedef struct lex_set1_t
{
- float3 item_factor; // factor for item positions, always >=1.0
- u8 test[4]; // 4 test values (TEST1..TEST4)
+ /*00*/ float3 item_factor; // factor for item positions, always >=1.0
+ /*0c*/ u8 start_item; // 1: player can get an item before start (hint only)
+ /*0d*/ u8 test_0d; // reserved
+ /*0e*/ u8 test_0e; // reserved
+ /*0f*/ u8 test_0f; // reserved
}
__attribute__ ((packed,aligned(4))) lex_set1_t;
diff --git a/project/src/lib-mdl.c b/project/src/lib-mdl.c
index 88bd7cd..7b3650f 100644
--- a/project/src/lib-mdl.c
+++ b/project/src/lib-mdl.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -3874,6 +3874,7 @@ static int ana_slot42_brres
u8 *data = it->szs->data + it->off;
if ( !term
+ && it->off +4 <= it->size
&& ( it->fform == FF_MDL
|| it->fform == FF_UNKNOWN && !memcmp(data,MDL_MAGIC,4) )
&& !strcasecmp(it->name,"course")
diff --git a/project/src/lib-mdl.h b/project/src/lib-mdl.h
index bf0142f..b8f1e80 100644
--- a/project/src/lib-mdl.h
+++ b/project/src/lib-mdl.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-minigame.c b/project/src/lib-minigame.c
index 2c4b53f..a9ae7a6 100644
--- a/project/src/lib-minigame.c
+++ b/project/src/lib-minigame.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -173,7 +173,7 @@ static void limit_duration ( be16_t *dest )
const u16 limith = opt_kmg_limit;
const u16 limitn = htons(limith);
-
+
u16 *end;
for ( end = dest + 10*11; dest < end; dest++ )
if ( ntohs(*dest) > limith )
@@ -844,7 +844,7 @@ int ScanOptKmgLimit ( ccp arg )
return 1;
}
- opt_kmg_limit = num < 0 ? 0 : num > 0xffff ? 0xffff : num;
+ opt_kmg_limit = num < 0 ? 0 : num > 0xffff ? 0xffff : num;
return 0;
}
diff --git a/project/src/lib-numeric.c b/project/src/lib-numeric.c
index b868f84..7e47199 100644
--- a/project/src/lib-numeric.c
+++ b/project/src/lib-numeric.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-numeric.h b/project/src/lib-numeric.h
index a7c741a..c52261b 100644
--- a/project/src/lib-numeric.h
+++ b/project/src/lib-numeric.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -2015,6 +2015,25 @@ enumError ScanUValueSI
//-----------------------------------------------------------------------------
+enumError ScanIntValueSI
+(
+ ScanInfo_t * si, // valid data
+ int * num // return value
+);
+
+//-----------------------------------------------------------------------------
+
+static inline enumError ScanUIntValueSI
+(
+ ScanInfo_t * si, // valid data
+ uint * num // return value
+)
+{
+ return ScanIntValueSI(si,(int*)num);
+}
+
+//-----------------------------------------------------------------------------
+
enumError ScanDValueSI
(
ScanInfo_t * si, // valid data
diff --git a/project/src/lib-object.c b/project/src/lib-object.c
index 9e93781..23ffcdd 100644
--- a/project/src/lib-object.c
+++ b/project/src/lib-object.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-object.h b/project/src/lib-object.h
index ff96b32..7aa9f95 100644
--- a/project/src/lib-object.h
+++ b/project/src/lib-object.h
@@ -18,7 +18,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -151,6 +151,7 @@ typedef enum have_kmp_obj_t
HAVEKMP_COOB_R, // Conditional Out of Bounds by Riidefi
HAVEKMP_COOB_K, // Conditional Out of Bounds by kHacker35000vr
HAVEKMP_UOOB, // Unconditional Out of Bounds
+ HAVEKMP_GOOMBA_SIZE, // 0x191:goomba (kuribo) with scale !0 1.00
HAVEKMP__N
}
__attribute__ ((packed)) have_kmp_obj_t;
diff --git a/project/src/lib-objflow.c b/project/src/lib-objflow.c
index 5cda47a..d7cb1cc 100644
--- a/project/src/lib-objflow.c
+++ b/project/src/lib-objflow.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-pack.c b/project/src/lib-pack.c
index ecc57d9..9473108 100644
--- a/project/src/lib-pack.c
+++ b/project/src/lib-pack.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-pack.h b/project/src/lib-pack.h
index dc01a00..aa6ab75 100644
--- a/project/src/lib-pack.h
+++ b/project/src/lib-pack.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-parser-func.c b/project/src/lib-parser-func.c
index d8e1e48..6854619 100644
--- a/project/src/lib-parser-func.c
+++ b/project/src/lib-parser-func.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-parser.c b/project/src/lib-parser.c
index df0cc21..f375395 100644
--- a/project/src/lib-parser.c
+++ b/project/src/lib-parser.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -5972,7 +5972,7 @@ void CalcExpr
FreeV(dest);
dest->mode = VAR_INT;
dest->i = op_id == OPI_NEQNEQ;
- return;
+ return;
case OPI_EQ: // S
case OPI_NEQ: // S
@@ -7355,6 +7355,46 @@ enumError ScanUValueSI
///////////////////////////////////////////////////////////////////////////////
+enumError ScanIntValueSI
+(
+ ScanInfo_t * si, // valid data
+ int * num // return value
+)
+{
+ DASSERT(si);
+ DASSERT(num);
+
+ DEFINE_VAR(var);
+ enumError err = ScanValueSI(si,&var);
+ SkipCharSI(si,',');
+
+ switch(var.mode)
+ {
+ case VAR_UNSET:
+ *num = 0;
+ return err;
+
+ case VAR_INT:
+ *num = var.i;
+ return err;
+
+ case VAR_DOUBLE:
+ case VAR_VECTOR:
+ *num = double2int(var.d);
+ return err;
+
+ case VAR_STRING:
+ *num = var.str_len ? str2l(var.str,0,10) : 0;
+ break;
+ }
+
+ // only needed to avoid compiler warnings
+ *num = 0;
+ return err;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
enumError ScanDValueSI
(
ScanInfo_t * si, // valid data
diff --git a/project/src/lib-pat.c b/project/src/lib-pat.c
index 0a37c90..535c8d7 100644
--- a/project/src/lib-pat.c
+++ b/project/src/lib-pat.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-pat.h b/project/src/lib-pat.h
index 7157544..eb8e5a9 100644
--- a/project/src/lib-pat.h
+++ b/project/src/lib-pat.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-rarc.c b/project/src/lib-rarc.c
index 3088ddf..7e4b1f5 100644
--- a/project/src/lib-rarc.c
+++ b/project/src/lib-rarc.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-rarc.h b/project/src/lib-rarc.h
index 3514668..dc793ec 100644
--- a/project/src/lib-rarc.h
+++ b/project/src/lib-rarc.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-rkc.c b/project/src/lib-rkc.c
index c1e4afb..8e8d103 100644
--- a/project/src/lib-rkc.c
+++ b/project/src/lib-rkc.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-rkc.h b/project/src/lib-rkc.h
index 53be8ec..ec44445 100644
--- a/project/src/lib-rkc.h
+++ b/project/src/lib-rkc.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-rkg.c b/project/src/lib-rkg.c
index d89dd7c..2838c65 100644
--- a/project/src/lib-rkg.c
+++ b/project/src/lib-rkg.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-rkg.h b/project/src/lib-rkg.h
index d82245c..4c9737f 100644
--- a/project/src/lib-rkg.h
+++ b/project/src/lib-rkg.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-staticr.c b/project/src/lib-staticr.c
index 10e0ff1..eef7e60 100644
--- a/project/src/lib-staticr.c
+++ b/project/src/lib-staticr.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -733,6 +733,7 @@ const str_server_patch_t ServerPatch[217+1] =
static const addr_port_t *addr_port = addr_port_0;
static int addr_port_records = sizeof(addr_port_0)/sizeof(*addr_port_0);
+ccp addr_port_file = "<intern>";
//-----------------------------------------------------------------------------
@@ -810,6 +811,7 @@ enumError LoadAddrPortDB ( ccp path1, int silent )
PrintTimeByFormat("%F",version->timestamp),
version->revision );
+ addr_port_file = STRDUP(path);
addr_port_records = n_records;
addr_port = (addr_port_t*)mgr.data;
memcpy(&addr_port_version,version,sizeof(addr_port_version));
@@ -834,7 +836,7 @@ void SetupAddrPortDB()
static bool done = false;
if (!done)
{
- addr_port_version.revision = REVISION_NUM;
+ addr_port_version.revision = REVISION_NUM;
if ( addr_port_version.timestamp < BINTIME )
addr_port_version.timestamp = BINTIME;
@@ -1922,7 +1924,7 @@ const rel_info_t * GetInfoREL ( str_mode_t mode )
default: return 0;
}
- DASSERT(ri)
+ DASSERT(ri);
if (!ri->sect[0].addr)
{
for ( dol_sect_info_t *ptr = ri->sect; ptr->section >= 0; ptr++ )
@@ -2872,6 +2874,7 @@ const addr_port_t * GetPortingRecord ( str_mode_t mode, u32 addr )
const int region = mode - STR_ZBI_FIRST;
const addr_port_t **base = *list_ptr;
+ #if 1
while ( beg <= end )
{
const uint idx = (beg+end)/2;
@@ -2885,6 +2888,28 @@ const addr_port_t * GetPortingRecord ( str_mode_t mode, u32 addr )
else
return p;
}
+ #else
+ while ( beg <= end )
+ {
+ const uint idx = (beg+end)/2;
+ const addr_port_t *p = base[idx];
+ const u32 raddr = p->addr[region];
+
+ if ( addr < raddr )
+ end = idx - 1 ;
+ else if ( addr > raddr )
+ beg = idx + 1;
+ else
+ break;
+ }
+
+ const addr_port_t *p = base[beg];
+ PRINT1("%u/%u: %08x + %06x + %06x, %08x\n",
+ beg, addr_port_records,
+ p->addr[region], p->size1, p->size2,
+ (p[1]).addr[region] );
+ return p;
+ #endif
return 0;
}
@@ -6976,6 +7001,7 @@ wcode_t opt_wcode = WCODE_AUTO;
ccp opt_port_db = 0;
ccp opt_order = 0;
bool opt_no_0x = false;
+bool opt_upper = false;
///////////////////////////////////////////////////////////////////////////////
diff --git a/project/src/lib-staticr.h b/project/src/lib-staticr.h
index 157498b..1bdc247 100644
--- a/project/src/lib-staticr.h
+++ b/project/src/lib-staticr.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -527,7 +527,7 @@ extern const char rel_section_name[REL_SECT__N+1][5];
typedef struct rel_info_t
{
u32 offset_sect; // offset of section data, always 0xd4
- u32 fix_size; // OSLinkFixed (and of reserved mem)
+ u32 fix_size; // OSLinkFixed (and of reserved mem)
u32 bss_size; // size of BSS, always 0x78b0
u32 load_addr; // address, at which file is loaded
@@ -674,8 +674,8 @@ __attribute__ ((packed)) addr_port_t;
typedef struct addr_port_version_t
{
- char magic[8]; // ADDR_PORT_MAGIC
- u32 db_version; // ADDR_PORT_DB_VERSION
+ char magic[8]; // ADDR_PORT_MAGIC
+ u32 db_version; // ADDR_PORT_DB_VERSION
u32 revision; // REVISION_NUM
u32 timestamp; // time(0)
u32 n_records; // number of records
@@ -686,6 +686,7 @@ __attribute__ ((packed)) addr_port_version_t;
void SetupAddrPortDB();
const addr_port_version_t * GetAddrPortVersion();
+extern ccp addr_port_file;
const addr_port_t * GetPortingRecord ( str_mode_t mode, u32 addr );
const addr_port_t * GetPortingRecordPAL ( u32 addr );
@@ -940,6 +941,7 @@ extern char patch_bt_str[2];
extern ccp opt_port_db;
extern ccp opt_order;
extern bool opt_no_0x;
+extern bool opt_upper;
int ScanOptVS ( bool is_bt, bool allow_2, ccp arg );
diff --git a/project/src/lib-std.c b/project/src/lib-std.c
index 97323ba..3200eb4 100644
--- a/project/src/lib-std.c
+++ b/project/src/lib-std.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -63,6 +63,7 @@
#include "db-mkw.h"
#include "crypt.h"
#include "logo.inc"
+#include "sha1-db.inc"
#if defined(TEST) && !defined(__APPLE__) && !defined(__CYGWIN__)
#include <mcheck.h>
@@ -77,7 +78,6 @@ ccp opt_config = 0;
ccp tool_name = "?";
ccp std_share_path = 0;
ccp share_path = 0;
-volatile int SIGINT_level = 0;
volatile int verbose = 0;
volatile int logging = 0;
bool allow_all = false;
@@ -91,12 +91,14 @@ int testmode = 0;
int force_count = 0;
uint opt_tiny = 0;
bool force_kmp = false;
+int disable_checks = 0;
OffOn_t opt_battle_mode = OFFON_AUTO;
OffOn_t opt_export_flags = OFFON_AUTO;
int opt_route_options = 0;
OffOn_t opt_wim0 = OFFON_AUTO;
ccp opt_source = 0;
StringField_t source_list = {0};
+ccp opt_reference = 0;
ccp opt_dest = 0;
bool opt_mkdir = false;
bool opt_overwrite = false;
@@ -376,6 +378,9 @@ void SetupLib ( int argc, char ** argv, ccp tname, ccp tvers, ccp ttitle )
GetTimerMSec();
SetupColors();
+ AddDefaultToSizeofInfoMgr();
+ //AddListToSizeofInfoMgr(si_list);
+
#if defined(TEST) && !defined(__APPLE__) && !defined(__CYGWIN__)
mtrace();
#endif
@@ -459,6 +464,12 @@ void SetupLib ( int argc, char ** argv, ccp tname, ccp tvers, ccp ttitle )
TRACE_SIZEOF(exmem_key_t);
TRACE_SIZEOF(exmem_list_t);
+ TRACE("- sha1\n");
+ TRACE_SIZEOF(sha1_hash_t);
+ TRACE_SIZEOF(sha1_hex_t);
+ TRACE_SIZEOF(sha1_type_t);
+ TRACE_SIZEOF(sha1_db_t);
+
TRACE("- arch\n");
TRACE_SIZEOF(yaz0_header_t);
TRACE_SIZEOF(wbz_header_t);
@@ -949,6 +960,27 @@ ccp LibGetErrorText ( int stat, ccp ret_not_found )
return ret_not_found;
}
+///////////////////////////////////////////////////////////////////////////////
+
+void SetupPager()
+{
+ if (isatty(fileno(stdout)))
+ {
+ opt_colorize = 1;
+ SetupColors();
+ StdoutToPager();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void PrintHelpColor ( const InfoUI_t * iu )
+{
+ SetupPager();
+ PrintHelp(iu,stdout,0,"HELP",0,URI_HOME,first_param?first_param->arg:0);
+ ClosePager();
+}
+
//
///////////////////////////////////////////////////////////////////////////////
/////////////// compatibility ///////////////
@@ -1032,6 +1064,97 @@ char * PrintOptCompatible()
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// warnings ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+warn_mode_t WARN_MODE = WARN_M_DEFAULT;
+
+///////////////////////////////////////////////////////////////////////////////
+
+static const KeywordTab_t opt_warn_tab[] =
+{
+ { 0, "NONE", "OFF", WARN_M_ALL | WARN_F_HIDE },
+ { WARN_M_DEFAULT, "DEFAULT", 0, WARN_M_ALL | WARN_F_HIDE },
+ { WARN_M_ALL, "ALL", 0, WARN_M_ALL },
+
+ { WARN_INVALID_OFFSET, "INVALID-OFFSET", 0, 0 },
+
+ { WARN_LOG, "LOG", 0, 0 },
+ { WARN_TEST, "TEST", "T", 0 },
+
+ { 0,0,0,0 }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+int ScanOptWarn ( ccp arg )
+{
+ if (!arg)
+ return 0;
+
+ s64 stat = ScanKeywordList(arg,opt_warn_tab,0,true,0,WARN_MODE,
+ "Option --warn",ERR_SYNTAX);
+ if ( stat == -1 )
+ return 1;
+
+ WARN_MODE = stat;
+ if ( WARN_MODE & WARN_LOG )
+ {
+ char buf[200];
+ PrintWarnMode(buf,sizeof(buf),WARN_MODE);
+ fprintf(stderr,"WARN MODE: %s\n",buf);
+ }
+ return 0;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+uint PrintWarnMode ( char *buf, uint bufsize, warn_mode_t mode )
+{
+ DASSERT(buf);
+ DASSERT(bufsize>10);
+ char *dest = buf;
+ char *end = buf + bufsize - 1;
+
+ mode = mode & WARN_M_ALL | WARN_F_HIDE;
+ warn_mode_t mode1 = mode;
+
+ const KeywordTab_t *ct;
+ for ( ct = opt_warn_tab; ct->name1 && dest < end; ct++ )
+ {
+ if ( ct->opt & WARN_F_HIDE )
+ continue;
+
+ if ( ct->opt ? (mode & ct->opt) == ct->id : mode & ct->id )
+ {
+ if ( dest > buf )
+ *dest++ = ',';
+ dest = StringCopyE(dest,end,ct->name1);
+ mode &= ~(ct->id|ct->opt);
+ }
+ }
+
+ if ( mode1 == (WARN_M_DEFAULT|WARN_F_HIDE) )
+ dest = StringCopyE(dest,end," (default)");
+ else if (!mode1)
+ dest = StringCopyE(dest,end,"(none)");
+
+ *dest = 0;
+ return dest-buf;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+ccp GetWarnMode()
+{
+ static char buf[200] = {0};
+ if (!*buf)
+ PrintWarnMode(buf,sizeof(buf),WARN_MODE);
+ return buf;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// output_mode_t ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -3703,6 +3826,7 @@ SortMode_t GetSortMode
case SORT_NONE:
case SORT_INAME:
case SORT_OFFSET:
+ case SORT_SIZE:
case SORT_U8:
case SORT_PACK:
case SORT_BRRES:
@@ -3740,8 +3864,10 @@ SortMode_t GetSortMode
static const KeywordTab_t opt_sort_tab[] =
{
{ SORT_NONE, "NONE", "0", 0 },
- { SORT_INAME, "NAME", "INAME", 0 },
+ { SORT_INAME, "NAME", "N", 0 },
+ { SORT_INAME, "INAME", 0, 0 },
{ SORT_OFFSET, "OFFSET", 0, 0 },
+ { SORT_SIZE, "SIZE", "S", 0 },
{ SORT_U8, "U8", 0, 0 },
{ SORT_PACK, "PACK", 0, 0 },
@@ -3938,7 +4064,7 @@ enumError cmd_install()
printf("\nInstall files to the share directory: %s\n",share_path);
if ( !share_path || !*share_path )
return ERR_ERROR; // should never happen
-
+
char destbuf[PATH_MAX];
enumError max_err = ERR_OK;
@@ -5170,34 +5296,49 @@ file_format_t RepairMagicByOpt
//
///////////////////////////////////////////////////////////////////////////////
-/////////////// misc ///////////////
+/////////////// SHA1 support ///////////////
///////////////////////////////////////////////////////////////////////////////
-void SetupPrintScriptByOptions ( PrintScript_t *ps )
+const sha1_db_t * GetSha1DbHex ( sha1_type_t type, ccp hex, ccp end )
{
- DASSERT(ps);
+ sha1_hash_t hash;
+ Sha1Hex2Bin(hash,hex,end);
+ return GetSha1DbBin(type,hash);
+}
- InitializePrintScript(ps);
- ps->force_case = opt_case;
- ps->create_array = script_array > 0;
- ps->var_name = script_varname ? script_varname : "res";
- ps->var_prefix = script_varname ? script_varname : "res_";
- ps->eq_tabstop = 2;
- ps->ena_empty = brief_count < 2;
- ps->ena_comments = brief_count < 1;
+///////////////////////////////////////////////////////////////////////////////
- switch(script_fform)
+const sha1_db_t * GetSha1DbBin ( sha1_type_t type, cvp hash )
+{
+ int beg = 0;
+ int end = SHA1_DB_N -1;
+ while ( beg <= end )
{
- case FF_JSON: ps->fform = PSFF_JSON; break;
- case FF_BASH: ps->fform = PSFF_BASH; break;
- case FF_SH: ps->fform = PSFF_SH; break;
- case FF_PHP: ps->fform = PSFF_PHP; break;
- case FF_MAKEDOC: ps->fform = PSFF_MAKEDOC; break;
- default: ps->fform = print_sections ? PSFF_CONFIG : PSFF_UNKNOWN; break;
+ const int idx = (beg+end)/2;
+ const int stat = memcmp(hash,sha1_db[idx].sha1,sizeof(sha1_db->sha1));
+ if ( stat < 0 )
+ end = idx - 1 ;
+ else if ( stat > 0 )
+ beg = idx + 1;
+ else
+ {
+ const sha1_db_t *res = sha1_db + idx;
+ return res->type & type ? res : 0;
+ }
}
+ return 0;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+u8 GetSha1Slot ( sha1_type_t type, cvp hash )
+{
+ const sha1_db_t *res = GetSha1DbBin(type,hash);
+ return res ? res->slot : 0;
}
///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
void SHA1_to_ID ( sha1_id_t id, const sha1_hash_t hash )
{
@@ -5228,6 +5369,44 @@ void SHA1_to_ID ( sha1_id_t id, const sha1_hash_t hash )
}
///////////////////////////////////////////////////////////////////////////////
+
+ccp GetSha1Data ( cvp data, uint size )
+{
+ sha1_hash_t hash;
+ SHA1(data,size,hash);
+ return GetSha1Hex(hash);
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// misc ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+void SetupPrintScriptByOptions ( PrintScript_t *ps )
+{
+ DASSERT(ps);
+
+ InitializePrintScript(ps);
+ ps->force_case = opt_case;
+ ps->create_array = script_array > 0;
+ ps->var_name = script_varname ? script_varname : "res";
+ ps->var_prefix = script_varname ? script_varname : "res_";
+ ps->eq_tabstop = 2;
+ ps->ena_empty = brief_count < 2;
+ ps->ena_comments = brief_count < 1;
+
+ switch(script_fform)
+ {
+ case FF_JSON: ps->fform = PSFF_JSON; break;
+ case FF_BASH: ps->fform = PSFF_BASH; break;
+ case FF_SH: ps->fform = PSFF_SH; break;
+ case FF_PHP: ps->fform = PSFF_PHP; break;
+ case FF_MAKEDOC: ps->fform = PSFF_MAKEDOC; break;
+ default: ps->fform = print_sections ? PSFF_CONFIG : PSFF_UNKNOWN; break;
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
bool IsExtractEnabled()
diff --git a/project/src/lib-std.h b/project/src/lib-std.h
index 52d633a..f5d042d 100644
--- a/project/src/lib-std.h
+++ b/project/src/lib-std.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -153,6 +153,12 @@ enum
ccp LibGetErrorName ( int stat, ccp ret_not_found );
ccp LibGetErrorText ( int stat, ccp ret_not_found );
+void SetupPager();
+static inline void ClosePager() { CloseStdoutToPager(); }
+
+struct InfoUI_t;
+void PrintHelpColor ( const struct InfoUI_t * iu );
+
//
///////////////////////////////////////////////////////////////////////////////
/////////////// compatibility ///////////////
@@ -193,6 +199,53 @@ char * PrintOptCompatible(); // circ-buf
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// warn_mode_t ///////////////
+///////////////////////////////////////////////////////////////////////////////
+// [[warn_mode_t]]
+
+typedef enum warn_mode_t
+{
+ //--- general mode
+
+ WARN_INVALID_OFFSET = 0x0000001,
+
+
+ //--- hidden options
+
+ WARN_LOG = 1<<28, // enable kcl trace log to stdout
+ WARN_M_HIDDEN = WARN_LOG,
+
+ WARN_F_HIDE = 1<<29, // help flag to hide modes in PrintWarnMode()
+
+
+ //--- test mode
+
+ WARN_TEST = 1<<30, // reserved for testing
+
+
+ //--- summaries
+
+ WARN_M_DEFAULT = WARN_INVALID_OFFSET // default settings
+ | 0,
+
+ WARN_M_ALL = WARN_INVALID_OFFSET // all relevant bits
+ | 0,
+
+ WARN_M_PRINT = WARN_M_ALL // all relevant bits for obj output
+ & ~WARN_M_HIDDEN,
+}
+warn_mode_t;
+
+//-----------------------------------------------------------------------------
+
+extern warn_mode_t WARN_MODE;
+
+int ScanOptWarn ( ccp arg );
+uint PrintWarnMode( char *buf, uint bufsize, warn_mode_t mode );
+ccp GetWarnMode();
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// warn level ///////////////
///////////////////////////////////////////////////////////////////////////////
// [[WarnLevel_t]] Same as CTW: WarnLevel
@@ -1131,6 +1184,7 @@ typedef enum SortMode_t
SORT_INAME, // sort with strcasecmp()
SORT_OFFSET, // sort by offset and size
+ SORT_SIZE, // sort by size (and offset)
SORT_U8, // sort like Nintendo sort U8 archives
SORT_PACK, // sort like Nintendo sort U8 archives (inexact)
@@ -1159,6 +1213,7 @@ int ScanOptSort ( ccp arg );
///////////////////////////////////////////////////////////////////////////////
/////////////// slot mode ///////////////
///////////////////////////////////////////////////////////////////////////////
+// [[SlotMode_t]]
typedef enum SlotMode_t
{
@@ -1169,13 +1224,13 @@ typedef enum SlotMode_t
//--- jobs
- SLOTMD_RM_ICE = 0x0001, // rm ice.brres from SZS and KMP
- SLOTMD_RM_SUNDS = 0x0002, // rm 'sunDS' and 'pylon01' from SZS and KMP
- SLOTMD_RM_SHYGUY = 0x0004, // rm 'HeyhoShipGBA'+'HeyhoBallGBA' from SZS and KMP
+ SLOTMD_RM_ICE = 0x0001, // remove ice.brres from SZS+KMP
+ SLOTMD_RM_SUNDS = 0x0002, // remove 'sunDS' and 'pylon01' from SZS+KMP
+ SLOTMD_RM_SHYGUY = 0x0004, // remove 'HeyhoShipGBA'+'HeyhoBallGBA' from SZS+KMP
SLOTMD_ADD_GICE = 0x0010, // add 'ice' to KMP/GOBJ
SLOTMD_ADD_BICE = 0x0020, // add 'ice.brres' to SZS
- SLOTMD_ADD_SHYGUY = 0x0040, // add 'HeyhoShipGBA' to SZS and KMP
+ SLOTMD_ADD_SHYGUY = 0x0040, // add 'HeyhoShipGBA' to SZS+KMP
SLOTMD_ICE_TO_WATER = 0x0100, // change KCL flag 0x70 to 0x30
SLOTMD_WATER_TO_ICE = 0x0200, // change KCL flag 0x30 to 0x70
@@ -1607,6 +1662,7 @@ static inline uint GetStrIdxCountMIL ( const MemItem_t * mi )
//-----------------------------------------------------------------------------
void SetSource ( ccp source );
+void SetReference ( ccp source );
void SetDest ( ccp dest, bool mkdir );
void CheckOptDest ( ccp default_dest, bool default_mkdir );
@@ -2008,6 +2064,42 @@ extern ccp autoadd_destination;
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// SHA1 support ///////////////
+///////////////////////////////////////////////////////////////////////////////
+// [[sha1_type_t]]
+
+typedef enum sha1_type_t
+{
+ SHA1T_KCL = 0x01,
+ SHA1T_KMP = 0x02,
+ SHA1T_MAP = 0x04,
+
+ SHA1T__ALL = 0x07
+}
+__attribute__ ((packed)) sha1_type_t;
+
+//-----------------------------------------------------------------------------
+// [[sha1_db_t]]
+
+typedef struct sha1_db_t
+{
+ u8 slot; // 11..84, 111..125
+ sha1_type_t type;
+ sha1_hash_t sha1;
+}
+__attribute__ ((packed)) sha1_db_t;
+
+//-----------------------------------------------------------------------------
+
+const sha1_db_t * GetSha1DbHex ( sha1_type_t type, ccp hex, ccp end );
+const sha1_db_t * GetSha1DbBin ( sha1_type_t type, cvp hash );
+u8 GetSha1Slot ( sha1_type_t type, cvp hash );
+
+void SHA1_to_ID ( sha1_id_t id, const sha1_hash_t hash );
+ccp GetSha1Data ( cvp data, uint size );
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// misc ///////////////
///////////////////////////////////////////////////////////////////////////////
// [[IsArena_t]]
@@ -2073,8 +2165,6 @@ void AnalyzeKMP ( const struct kmp_t * kmp, ccp base_fname );
struct kcl_t;
void AnalyzeKCL ( const struct kcl_t * kcl );
-void SHA1_to_ID ( sha1_id_t id, const sha1_hash_t hash );
-
///////////////////////////////////////////////////////////////////////////////
bool IsExtractEnabled(); // return true if enabled and mkdir() successful
@@ -2178,7 +2268,8 @@ typedef struct output_mode_t
bool syntax; // true: print syntax infos
u8 mode; // 1:list, 2:ref, 3:full
bool cross_ref; // true: print cross reference infos
- bool hex; // force hex out
+ bool hex; // true: force hex out
+ bool lecode; // true: print LE-CODE specific data
}
output_mode_t;
@@ -2214,7 +2305,6 @@ extern ccp config_path;
extern ccp tool_name;
extern ccp std_share_path;
extern ccp share_path;
-extern volatile int SIGINT_level;
extern volatile int verbose;
extern volatile int logging;
extern bool allow_all;
@@ -2228,12 +2318,14 @@ extern int testmode;
extern int force_count;
extern uint opt_tiny;
extern bool force_kmp;
+extern int disable_checks;
extern OffOn_t opt_battle_mode;
extern OffOn_t opt_export_flags;
extern int opt_route_options;
extern OffOn_t opt_wim0;
extern ccp opt_source;
extern StringField_t source_list;
+extern ccp opt_reference;
extern ccp opt_dest;
extern bool opt_mkdir;
extern bool opt_overwrite;
diff --git a/project/src/lib-szs-create.c b/project/src/lib-szs-create.c
index 163d2c2..9463e5b 100644
--- a/project/src/lib-szs-create.c
+++ b/project/src/lib-szs-create.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -1317,7 +1317,7 @@ void FindSpecialFilesSZS
if ( !strcasecmp(fname,have_szs_file[i]) )
{
const BZ2Manager_t *bm = GetCommonBZ2Manager(have_szs_fform[i]);
- const have_file_mode_t hfm =
+ const have_file_mode_t hfm =
bm
&& file->size == bm->size
&& !memcmp( file->data ? file->data : szs->data + file->offset,
@@ -3146,6 +3146,9 @@ int CheckSZS
{
DASSERT(szs);
PRINT("CheckSZS(%d,%d)\n",szs_mode,sub_mode);
+ if ( disable_checks > 0 )
+ return 0;
+
szs_mode = GetMainCheckMode(szs_mode,true);
sub_mode = GetSubCheckMode(sub_mode,true);
@@ -4958,6 +4961,8 @@ void AnalyseSZS
SHA1(szs->course_kmp_data,szs->course_kmp_size,sha1_data.hash);
Sha1Bin2Hex(as->sha1_kmp,sha1_data.hash);
memcpy(as->sha1_kmp_norm,as->sha1_kmp,sizeof(as->sha1_kmp_norm));
+ as->sha1_kmp_slot = as->sha1_kmp_norm_slot
+ = GetSha1Slot(SHA1T_KMP,sha1_data.hash);
kmp_t kmp;
InitializeKMP(&kmp);
@@ -4979,6 +4984,7 @@ void AnalyseSZS
SHA1(szs->course_kmp_data,szs->course_kmp_size,sha1_data.hash);
Sha1Bin2Hex(as->sha1_kmp_norm,sha1_data.hash);
+ as->sha1_kmp_norm_slot = GetSha1Slot(SHA1T_KMP,sha1_data.hash);
stgi->lap_count = as->lap_count;
stgi->speed_mod = as->speed_mod;
@@ -5050,6 +5056,7 @@ void AnalyseSZS
|| szs->have.kmp[HAVEKMP_MUSHROOM_CAR]
|| szs->have.kmp[HAVEKMP_PENGUIN_POS]
|| szs->have.kmp[HAVEKMP_EPROP_SPEED]
+ || szs->have.kmp[HAVEKMP_GOOMBA_SIZE]
)
{
ct_dest = StringCopyE(ct_dest,ct_end,",gobj");
@@ -5108,6 +5115,7 @@ void AnalyseSZS
{
SHA1(szs->course_kcl_data,szs->course_kcl_size,sha1_data.hash);
Sha1Bin2Hex(as->sha1_kcl,sha1_data.hash);
+ as->sha1_kcl_slot = GetSha1Slot(SHA1T_KCL,sha1_data.hash);
}
else
valid_track = false;
@@ -5146,6 +5154,7 @@ void AnalyseSZS
{
SHA1(szs->map_model_data,szs->map_model_size,sha1_data.hash);
Sha1Bin2Hex(as->sha1_minimap,sha1_data.hash);
+ as->sha1_minimap_slot = GetSha1Slot(SHA1T_MAP,sha1_data.hash);
}
else
szs->warn_bits |= 1 << WARNSZS_NO_MINIMAP;
@@ -5167,5 +5176,641 @@ void AnalyseSZS
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// check texture hacks ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+void PrepareCheckTextureSZS ( szs_file_t * szs )
+{
+ DASSERT(szs);
+
+ static kcl_flag_t *kcl_flag = 0;
+ if (!kcl_flag)
+ kcl_flag = CreatePatchFlagKCL(KCL_MODE|KCLMD_CLR_VISUAL,opt_slot,false);
+
+ szs_iterator_t res;
+ int stat = FindFileSZS(szs,"course.kcl",0,false,&res);
+ if ( stat > 0 )
+ {
+ kcl_analyze_t ka;
+ u8 *data = szs->data + res.off;
+ if ( IsValidKCL(&ka,data,res.size,res.size,res.path) < VALID_ERROR )
+ {
+ const uint n_tri = ka.n[2];
+ kcl_triangle_t *tri = (kcl_triangle_t*)( data + ka.off[2] );
+ for ( int i = 0; i < n_tri; i++, tri++ )
+ {
+ const kcl_flag_t flag = ntohs(tri->flag);
+ tri->flag = htons(kcl_flag[flag]);
+ if ( (flag&0x1f) == 0x12 ) // KCL flag 'force recalculation'
+ szs->check_enpt = true;
+ }
+ }
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+enumError CheckTextureRefSZS
+(
+ // returns ERR_OK | ERR_DIFFER | ERR_NOTHING_TO_DO | ERR_NO_SOURCE_FOUND | >=ERR_ERROR
+ szs_file_t * szs2, // NULL or second szs to compare
+ ccp *status // not NULL: store status info here -> FreeString()
+ // if !opt_reference: *status=NULL
+)
+{
+ DASSERT(szs2);
+ if (status)
+ {
+ FreeString(*status);
+ *status = 0;
+ }
+
+ if ( !opt_reference || !*opt_reference )
+ return ERR_NOTHING_TO_DO;
+
+ static int err = -1;
+ static szs_file_t *ref_szs = 0;
+
+ if ( err == -1 )
+ {
+ ref_szs = CALLOC(1,sizeof(*ref_szs));
+ err = LoadSZS(ref_szs,opt_reference,true,opt_ignore>0,true);
+ if (err)
+ {
+ ResetSZS(ref_szs);
+ FREE(ref_szs);
+ ref_szs = 0;
+ }
+ else
+ PrepareCheckTextureSZS(ref_szs);
+ }
+
+ if ( err || !ref_szs )
+ {
+ if (status)
+ *status = STRDUP("-1=err");
+ return err;
+ }
+
+ return szs2 ? CheckTextureSZS(ref_szs,szs2,status) : ERR_OK;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+#define KMP_POS_EPSILON 0.1
+#define KMP_ROT_EPSILON 0.05
+#define KMP_SCALE_EPSILON 0.01
+
+//-----------------------------------------------------------------------------
+
+typedef struct check_texture_t
+{
+ char info_buf[200];
+ char *info_ptr;
+ char *info_end;
+
+ char kinfo_buf[20];
+ char *kinfo_ptr;
+ char *kinfo_end;
+
+ kmp_t kmp1, kmp2;
+ u8 check_route[0x100];
+}
+check_texture_t;
+
+///////////////////////////////////////////////////////////////////////////////
+
+static bool compare_texture_helper
+(
+ szs_file_t *szs1,
+ szs_file_t *szs2,
+ ccp subfile,
+ check_texture_t *ck,
+ ccp msg
+)
+{
+ szs_iterator_t res1, res2;
+ const int stat1 = FindFileSZS(szs1,subfile,0,false,&res1);
+ const int stat2 = FindFileSZS(szs2,subfile,0,false,&res2);
+ bool same = stat1 == stat2;
+ if ( same && stat1 > 0 )
+ same = res1.size == res2.size
+ && !memcmp( szs1->data + res1.off, szs2->data + res2.off, res1.size );
+ if ( !same && ck && msg )
+ ck->info_ptr = StringCopyE(ck->info_ptr,ck->info_end,msg);
+
+ return same;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+static bool compare_kmp_ck ( check_texture_t *ck )
+{
+ DASSERT(ck);
+
+ if ( ck->kmp1.dlist[KMP_CKPH].used != ck->kmp2.dlist[KMP_CKPH].used
+ || ck->kmp1.dlist[KMP_CKPT].used != ck->kmp2.dlist[KMP_CKPT].used
+ )
+ {
+ PRINT("N(CKPH)=%d,%d, N(CKPT)=%d,%d\n",
+ ck->kmp1.dlist[KMP_CKPH].used,ck->kmp2.dlist[KMP_CKPH].used,
+ ck->kmp1.dlist[KMP_CKPT].used,ck->kmp2.dlist[KMP_CKPT].used);
+ *ck->kinfo_ptr++ = 'c';
+ return false;
+ }
+
+ const kmp_ckph_entry_t *h1 = (kmp_ckph_entry_t*)ck->kmp1.dlist[KMP_CKPH].list;
+ const kmp_ckph_entry_t *h2 = (kmp_ckph_entry_t*)ck->kmp2.dlist[KMP_CKPH].list;
+ for ( int n = ck->kmp1.dlist[KMP_CKPH].used; n>0; n--, h1++, h2++ )
+ if (memcmp(h1,h2,sizeof(*h1)))
+ {
+ *ck->kinfo_ptr++ = 'c';
+ return false;
+ }
+
+ const kmp_ckpt_entry_t *p1 = (kmp_ckpt_entry_t*)ck->kmp1.dlist[KMP_CKPT].list;
+ const kmp_ckpt_entry_t *p2 = (kmp_ckpt_entry_t*)ck->kmp2.dlist[KMP_CKPT].list;
+ for ( int n = ck->kmp1.dlist[KMP_CKPT].used; n>0; n--, p1++, p2++ )
+ {
+ if ( p1->respawn != p2->respawn
+ || p1->mode != p2->mode
+ || p1->prev != p2->prev
+ || p1->next != p2->next
+ || fabs( p1->left[0] - p2->left[0] ) > KMP_POS_EPSILON
+ || fabs( p1->left[1] - p2->left[1] ) > KMP_POS_EPSILON
+ || fabs( p1->right[0] - p2->right[0] ) > KMP_POS_EPSILON
+ || fabs( p1->right[1] - p2->right[1] ) > KMP_POS_EPSILON
+ )
+ {
+ PRINT("A: %2x %2x %2x %2x %10.3f %10.3f %10.3f %10.3f\n",
+ p1->respawn, p1->mode, p1->prev, p1->next,
+ p1->left[0], p1->left[1], p1->right[0], p1->right[1] );
+ PRINT("B: %2x %2x %2x %2x %10.3f %10.3f %10.3f %10.3f\n",
+ p2->respawn, p2->mode, p2->prev, p2->next,
+ p2->left[0], p2->left[1], p2->right[0], p2->right[1] );
+ *ck->kinfo_ptr++ = 'c';
+ return false;
+ }
+ }
+
+ return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+static const kmp_area_entry_t * next_area
+ ( const kmp_area_entry_t *p, const kmp_area_entry_t *e )
+{
+ for ( ; p < e; p++ )
+ if ( p->type == 3 || p->type == 4 || p->type >= 8 && p->type <= 10 )
+ break;
+ return p;
+}
+
+//-----------------------------------------------------------------------------
+
+static bool compare_kmp_area ( check_texture_t *ck )
+{
+ DASSERT(ck);
+
+ if ( ck->kmp1.dlist[KMP_AREA].used != ck->kmp2.dlist[KMP_AREA].used )
+ {
+ *ck->kinfo_ptr++ = 'a';
+ return false;
+ }
+
+ const kmp_area_entry_t *p1 = (kmp_area_entry_t*)ck->kmp1.dlist[KMP_AREA].list;
+ const kmp_area_entry_t *e1 = p1 + ck->kmp1.dlist[KMP_AREA].used;
+
+ const kmp_area_entry_t *p2 = (kmp_area_entry_t*)ck->kmp2.dlist[KMP_AREA].list;
+ const kmp_area_entry_t *e2 = p2 + ck->kmp2.dlist[KMP_AREA].used;
+
+ for (;;)
+ {
+ p1 = next_area(p1,e1);
+ p2 = next_area(p2,e2);
+ if ( p1 >= e1 || p2 >= e2 )
+ break;
+
+ if ( memcmp( &p1->mode, &p2->mode, 4 )
+ || memcmp( p1->setting, p2->setting, 8 )
+ || fabs( p1->position[0] - p2->position[0] ) > KMP_POS_EPSILON
+ || fabs( p1->position[1] - p2->position[1] ) > KMP_POS_EPSILON
+ || fabs( p1->position[2] - p2->position[2] ) > KMP_POS_EPSILON
+ || fabs( p1->rotation[0] - p2->rotation[0] ) > KMP_ROT_EPSILON
+ || fabs( p1->rotation[1] - p2->rotation[1] ) > KMP_ROT_EPSILON
+ || fabs( p1->rotation[2] - p2->rotation[2] ) > KMP_ROT_EPSILON
+ || fabs( p1->scale[0] - p2->scale[0] ) > KMP_SCALE_EPSILON
+ || fabs( p1->scale[1] - p2->scale[1] ) > KMP_SCALE_EPSILON
+ || fabs( p1->scale[2] - p2->scale[2] ) > KMP_SCALE_EPSILON
+ )
+ {
+ *ck->kinfo_ptr++ = 'a';
+ return false;
+ }
+
+ p1++;
+ p2++;
+ }
+
+ if ( p1 != e1 || p2 != e2 )
+ {
+ *ck->kinfo_ptr++ = 'a';
+ return false;
+ }
+
+ return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+static const kmp_gobj_entry_t * next_gobj
+ ( const kmp_gobj_entry_t *p, const kmp_gobj_entry_t *e )
+{
+ for ( ; p < e; p++ )
+ {
+ if ( p->obj_id >= GOBJ_MIN_DEF )
+ break;
+ if ( p->pflags )
+ {
+ const u16 relevant_id = GetRelevantObjectId(p->obj_id);
+ if ( ObjectInfo[relevant_id].flags & OBF_SOLID )
+ break;
+ }
+ }
+ return p;
+}
+
+//-----------------------------------------------------------------------------
+
+static bool compare_kmp_gobj ( check_texture_t *ck )
+{
+ DASSERT(ck);
+
+ SortGOBJ(&ck->kmp1,KSORT_XYZ);
+ SortGOBJ(&ck->kmp2,KSORT_XYZ);
+
+ const kmp_gobj_entry_t *p1 = (kmp_gobj_entry_t*)ck->kmp1.dlist[KMP_GOBJ].list;
+ const kmp_gobj_entry_t *e1 = p1 + ck->kmp1.dlist[KMP_GOBJ].used;
+
+ const kmp_gobj_entry_t *p2 = (kmp_gobj_entry_t*)ck->kmp2.dlist[KMP_GOBJ].list;
+ const kmp_gobj_entry_t *e2 = p2 + ck->kmp2.dlist[KMP_GOBJ].used;
+
+ bool valid = true;
+ for (;;)
+ {
+ p1 = next_gobj(p1,e1);
+ p2 = next_gobj(p2,e2);
+ if ( p1 >= e1 || p2 >= e2 )
+ break;
+
+ if ( p1->route_id < sizeof(ck->check_route) )
+ ck->check_route[p1->route_id] = 1;
+
+ if ( valid &&
+ ( memcmp( &p1->obj_id, &p2->obj_id, 4 )
+ || memcmp( &p1->route_id, &p2->route_id, 20 )
+ || fabs( p1->position[0] - p2->position[0] ) > KMP_POS_EPSILON
+ || fabs( p1->position[1] - p2->position[1] ) > KMP_POS_EPSILON
+ || fabs( p1->position[2] - p2->position[2] ) > KMP_POS_EPSILON
+ || fabs( p1->rotation[0] - p2->rotation[0] ) > KMP_ROT_EPSILON
+ || fabs( p1->rotation[1] - p2->rotation[1] ) > KMP_ROT_EPSILON
+ || fabs( p1->rotation[2] - p2->rotation[2] ) > KMP_ROT_EPSILON
+ || fabs( p1->scale[0] - p2->scale[0] ) > KMP_SCALE_EPSILON
+ || fabs( p1->scale[1] - p2->scale[1] ) > KMP_SCALE_EPSILON
+ || fabs( p1->scale[2] - p2->scale[2] ) > KMP_SCALE_EPSILON
+ ))
+ {
+ valid = false;
+ }
+
+ p1++;
+ p2++;
+ }
+
+ if ( !valid || p1 != e1 || p2 != e2 )
+ {
+ *ck->kinfo_ptr++ = 'g';
+ return false;
+ }
+
+ return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+static bool compare_kmp_poti ( check_texture_t *ck )
+{
+ DASSERT(ck);
+
+ const int ng1 = ck->kmp1.dlist[KMP_POTI].used;
+ const int ng2 = ck->kmp2.dlist[KMP_POTI].used;
+ const int np1 = ck->kmp1.poti_point.used;
+ const int np2 = ck->kmp2.poti_point.used;
+
+ if ( ng1 != ng2 || np1 != np2 )
+ {
+ err:
+ *ck->kinfo_ptr++ = 'p';
+ return false;
+ }
+
+ const kmp_poti_group_t * pg1 = (kmp_poti_group_t*)ck->kmp1.dlist[KMP_POTI].list;
+ const kmp_poti_group_t * pg2 = (kmp_poti_group_t*)ck->kmp2.dlist[KMP_POTI].list;
+ const kmp_poti_point_t * pp1 = (kmp_poti_point_t*)ck->kmp1.poti_point.list;
+ const kmp_poti_point_t * pp2 = (kmp_poti_point_t*)ck->kmp2.poti_point.list;
+
+ int i, gi;
+ for ( gi = i = 0; gi < ng1 && i < np1; gi++, pg1++, pg2++ )
+ {
+ if (memcmp(pg1,pg2,sizeof(*pg1)))
+ goto err;
+
+ const int en = pg1->n_point;
+ if ( gi < sizeof(ck->check_route) && !ck->check_route[gi] )
+ {
+ pp1 += en;
+ pp2 += en;
+ continue;
+ }
+
+ for ( int ei = 0; ei < en; ei++, i++, pp1++, pp2++ )
+ {
+ if ( pp1->speed != pp2->speed
+ || pp1->unknown != pp2->unknown
+ || fabs( pp1->position[0] - pp2->position[0] ) > KMP_POS_EPSILON
+ || fabs( pp1->position[1] - pp2->position[1] ) > KMP_POS_EPSILON
+ || fabs( pp1->position[2] - pp2->position[2] ) > KMP_POS_EPSILON
+ )
+ {
+ *ck->kinfo_ptr++ = 'p';
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+static bool compare_kmp_stgi ( check_texture_t *ck )
+{
+ DASSERT(ck);
+
+ if ( ck->kmp1.dlist[KMP_STGI].used != ck->kmp2.dlist[KMP_STGI].used )
+ {
+ *ck->kinfo_ptr++ = 's';
+ return false;
+ }
+
+ const kmp_stgi_entry_t *p1 = (kmp_stgi_entry_t*)ck->kmp1.dlist[KMP_STGI].list;
+ const kmp_stgi_entry_t *p2 = (kmp_stgi_entry_t*)ck->kmp2.dlist[KMP_STGI].list;
+ for ( int n = ck->kmp1.dlist[KMP_STGI].used; n>0; n--, p1++, p2++ )
+ {
+ const u8 lap_count1 = p1->lap_count ? p1->lap_count : 3;
+ const u8 lap_count2 = p2->lap_count ? p2->lap_count : 3;
+ const u16 speed_mod1 = p1->speed_mod ? p1->speed_mod : 0x3f80;
+ const u16 speed_mod2 = p2->speed_mod ? p2->speed_mod : 0x3f80;
+
+ if ( lap_count1 != lap_count2
+ || speed_mod1 != speed_mod2
+ || p1->pole_pos != p2->pole_pos
+ || p1->narrow_start != p2->narrow_start
+ )
+ {
+ *ck->kinfo_ptr++ = 's';
+ return false;
+ }
+ }
+
+ return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+static bool compare_kmp_pt1
+(
+ check_texture_t *ck,
+ kmp_entry_t sect, // KMP_JGPT | KMP_CNPT | KMP_MSPT | KMP_KTPT
+ char msg
+)
+{
+ DASSERT(ck);
+
+ if ( ck->kmp1.dlist[sect].used != ck->kmp2.dlist[sect].used )
+ {
+ *ck->kinfo_ptr++ = msg;
+ return false;
+ }
+
+ const kmp_jgpt_entry_t *p1 = (kmp_jgpt_entry_t*)ck->kmp1.dlist[sect].list;
+ const kmp_jgpt_entry_t *p2 = (kmp_jgpt_entry_t*)ck->kmp2.dlist[sect].list;
+ for ( int n = ck->kmp1.dlist[sect].used; n>0; n--, p1++, p2++ )
+ {
+ if ( p1->id != p2->id
+ || p1->effect != p2->effect
+ || fabs( p1->position[0] - p2->position[0] ) > KMP_POS_EPSILON
+ || fabs( p1->position[1] - p2->position[1] ) > KMP_POS_EPSILON
+ || fabs( p1->position[2] - p2->position[2] ) > KMP_POS_EPSILON
+ || fabs( p1->rotation[0] - p2->rotation[0] ) > KMP_ROT_EPSILON
+ || fabs( p1->rotation[1] - p2->rotation[1] ) > KMP_ROT_EPSILON
+ || fabs( p1->rotation[2] - p2->rotation[2] ) > KMP_ROT_EPSILON
+ )
+ {
+ *ck->kinfo_ptr++ = msg;
+ return false;
+ }
+ }
+
+ return true;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+static bool compare_kmp_pt2
+(
+ check_texture_t *ck,
+ kmp_entry_t sect_ph, // KMP_ENPH | KMP_ITPH
+ kmp_entry_t sect_pt, // KMP_ENPT | KMP_ITPT
+ char msg
+)
+{
+ DASSERT();
+
+ if ( ck->kmp1.dlist[sect_ph].used != ck->kmp2.dlist[sect_ph].used
+ || ck->kmp1.dlist[sect_pt].used != ck->kmp2.dlist[sect_pt].used
+ )
+ {
+ *ck->kinfo_ptr++ = msg;
+ return false;
+ }
+
+ const kmp_enph_entry_t *h1 = (kmp_enph_entry_t*)ck->kmp1.dlist[sect_ph].list;
+ const kmp_enph_entry_t *h2 = (kmp_enph_entry_t*)ck->kmp2.dlist[sect_ph].list;
+ uint size = sizeof(*h1);
+ if ( opt_battle_mode <= OFFON_OFF )
+ size -= sizeof(h1->setting);
+ for ( int n = ck->kmp1.dlist[sect_ph].used; n>0; n--, h1++, h2++ )
+ if (memcmp(h1,h2,size))
+ {
+ *ck->kinfo_ptr++ = msg;
+ return false;
+ }
+
+ const kmp_enpt_entry_t *p1 = (kmp_enpt_entry_t*)ck->kmp1.dlist[sect_pt].list;
+ const kmp_enpt_entry_t *p2 = (kmp_enpt_entry_t*)ck->kmp2.dlist[sect_pt].list;
+ for ( int n = ck->kmp1.dlist[sect_pt].used; n>0; n--, p1++, p2++ )
+ {
+ if ( p1->prop[0] != p2->prop[0]
+ || p1->prop[1] != p2->prop[1]
+ || fabs( p1->position[0] - p2->position[0] ) > KMP_POS_EPSILON
+ || fabs( p1->position[1] - p2->position[1] ) > KMP_POS_EPSILON
+ || fabs( p1->position[2] - p2->position[2] ) > KMP_POS_EPSILON
+ || fabs( p1->scale - p2->scale ) > KMP_SCALE_EPSILON
+ )
+ {
+ *ck->kinfo_ptr++ = msg;
+ return false;
+ }
+ }
+
+ return true;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+enumError CheckTextureSZS
+(
+ // returns ERR_OK | ERR_DIFFER | ERR_ERROR
+ szs_file_t * szs1, // first szs to compare
+ szs_file_t * szs2, // second szs to compare
+ ccp *status // not NULL: store status info here -> FreeString()
+)
+{
+ DASSERT(szs1);
+ DASSERT(szs2);
+ disable_checks++;
+
+ if (status)
+ {
+ FreeString(*status);
+ *status = 0;
+ }
+
+ check_texture_t ck;
+ memset(&ck,0,sizeof(ck));
+ ck.info_end = ck.info_buf + sizeof(ck.info_buf) - 2;
+ ck.info_ptr = StringCopyE(ck.info_buf,ck.info_end,"0=no");
+ char *info_start = ck.info_ptr;
+
+
+ //--- check KCL
+
+ compare_texture_helper(szs1,szs2,"course.kcl",&ck,",KCL");
+
+
+ //--- last check: KMP
+
+ szs_iterator_t res1, res2;
+ int stat1 = FindFileSZS(szs1,"course.kmp",0,false,&res1);
+ int stat2 = FindFileSZS(szs2,"course.kmp",0,false,&res2);
+
+ if ( stat1 != stat2 )
+ ck.info_ptr = StringCopyE(ck.info_ptr,ck.info_end,",KMP");
+ else if ( stat1 > 0
+ && ( res1.size != res2.size
+ || memcmp( szs1->data + res1.off, szs2->data + res2.off, res1.size )))
+ {
+ InitializeKMP(&ck.kmp1);
+ InitializeKMP(&ck.kmp2);
+ enumError err1 = ScanKMP(&ck.kmp1,false,szs1->data+res1.off,res1.size,0);
+ enumError err2 = ScanKMP(&ck.kmp2,false,szs2->data+res2.off,res2.size,0);
+ if ( err1 || err2 )
+ ck.info_ptr = StringCopyE(ck.info_ptr,ck.info_end,",KMP");
+ else
+ {
+ ck.kinfo_end = ck.kinfo_buf + sizeof(ck.kinfo_buf) - 2;
+ ck.kinfo_ptr = StringCopyE(ck.kinfo_buf,ck.kinfo_end,",KMP=");
+ char *kinfo_start = ck.kinfo_ptr;
+
+ compare_kmp_area(&ck); // KMP_AREA (a)
+//X // KMP_CAME (?) not needed
+ compare_kmp_ck(&ck); // KMP_CKPH + CKPT (c)
+ if ( szs1->check_enpt || szs2->check_enpt )
+ compare_kmp_pt2(&ck,KMP_ENPH,KMP_ENPT,'e'); // KMP_ENPH + ENPT (e)
+ compare_kmp_gobj(&ck); // KMP_GOBJ (g)
+ compare_kmp_pt2(&ck,KMP_ITPH,KMP_ITPT,'i'); // KMP_ITPH+ ITPT (i)
+ compare_kmp_pt1(&ck,KMP_JGPT,'j'); // KMP_JGPT (j)
+ compare_kmp_pt1(&ck,KMP_KTPT,'k'); // KMP_KTPT (k)
+ compare_kmp_pt1(&ck,KMP_MSPT,'m'); // KMP_MSPT (m)
+ compare_kmp_pt1(&ck,KMP_CNPT,'n'); // KMP_CNPT (n)
+ compare_kmp_poti(&ck); // KMP_POTI (p)
+ compare_kmp_stgi(&ck); // KMP_STGI (s)
+
+ //--- KMP summary
+
+ if ( ck.kinfo_ptr > kinfo_start )
+ {
+ *ck.kinfo_ptr = 0;
+ ck.info_ptr = StringCopyE(ck.info_ptr,ck.info_end,ck.kinfo_buf);
+ }
+ }
+ ResetKMP(&ck.kmp1);
+ ResetKMP(&ck.kmp2);
+ }
+
+
+ //--- check LEX
+
+ compare_texture_helper(szs1,szs2,"course.lex",&ck,",LEX");
+
+
+ //--- check MAP
+
+ stat1 = FindFileSZS(szs1,"map_model.brres",0,false,&res1);
+ stat2 = FindFileSZS(szs2,"map_model.brres",0,false,&res2);
+ if ( stat1 > 0 && stat2 > 0 )
+ {
+ sha1_hash_t hash;
+ SHA1( szs1->data+res1.off, res1.size, hash );
+ int slot1 = GetSha1Slot(SHA1T_MAP,hash);
+ if (slot1)
+ {
+ SHA1( szs2->data+res2.off, res2.size, hash );
+ int slot2 = GetSha1Slot(SHA1T_MAP,hash);
+ if ( slot2 && slot2 != slot1 )
+ {
+ if ( slot2 > 100 )
+ ck.info_ptr = snprintfE(ck.info_ptr,ck.info_end,",MAP=A%u",slot2%100);
+ else
+ ck.info_ptr = snprintfE(ck.info_ptr,ck.info_end,",MAP=%u",slot2);
+ }
+ }
+ }
+
+
+ //--- finalize
+
+ disable_checks--;
+ if ( ck.info_ptr > info_start )
+ {
+ if (status)
+ {
+ *info_start = ' ';
+ *status = STRDUP(ck.info_buf);
+ }
+ return ERR_DIFFER;
+ }
+
+ if (status)
+ *status = STRDUP("1=yes");
+ return ERR_OK;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// END ///////////////
///////////////////////////////////////////////////////////////////////////////
diff --git a/project/src/lib-szs.c b/project/src/lib-szs.c
index edf4700..7230c73 100644
--- a/project/src/lib-szs.c
+++ b/project/src/lib-szs.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -41,6 +41,7 @@
#include <sys/stat.h>
#include "lib-szs.h"
+#include "lib-kcl.h"
#include "lib-rarc.h"
#include "lib-pack.h"
#include "lib-rkc.h"
@@ -55,7 +56,8 @@
///////////////////////////////////////////////////////////////////////////////
/////////////// have_szs_file ///////////////
///////////////////////////////////////////////////////////////////////////////
-// order is important, compare enum have_szs_file_t and ct.wiimm.de
+// order is important,
+// compare have_szs_name[], have_szs_file[], have_szs_fform[] and ct.wiimm.de
const ccp have_szs_name[HAVESZS__N] =
{
@@ -101,6 +103,41 @@ const file_format_t have_szs_fform[HAVESZS__N] =
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// have_attrib ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+const ccp have_attrib_name[HAVEATT__N] =
+{
+ "cheat", // HAVEATT_CHEAT
+ "edit", // HAVEATT_EDIT
+ "reverse", // HAVEATT_REVERSE
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+ccp CreateSpecialInfoAttrib
+ ( have_attrib_t attrib, bool add_value, ccp return_if_empty )
+{
+ static char buf[500];
+ char *dest = buf;
+
+ if (add_value)
+ dest = snprintfE( dest, buf+sizeof(buf), "%u=" , attrib );
+
+ uint i, mask;
+ ccp sep = "";
+ for ( i = 0, mask = 1; i < HAVEATT__N; i++, mask <<= 1 )
+ if ( attrib & mask )
+ {
+ dest = StringCat2E(dest,buf+sizeof(buf),sep,have_attrib_name[i]);
+ sep = ",";
+ }
+
+ return dest == buf ? return_if_empty : CopyCircBuf0(buf,dest-buf);
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// szs_file_t ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -3192,7 +3229,7 @@ static int iterate_sort_files
{
if ( it->off > it->szs->size || it->off + it->size > it->szs->size )
{
- if ( it->size != M1(it->size) )
+ if ( it->size != M1(it->size) && WARN_MODE & WARN_INVALID_OFFSET && verbose >= -2 )
ERROR0(ERR_WARNING,
"Invalid offset [%x..%x, size=%zx] for subfile.\n"
"=> File ignored: %s%s%s\n",
@@ -3270,12 +3307,13 @@ static int iterate_sub_files
{
if ( it->off > it->szs->size || it->off + it->size > it->szs->size )
{
- ERROR0(ERR_WARNING,
- "Invalid offset [%x..%x, size=%zx] for subfile.\n"
- "=> File ignored: %s%s%s\n",
- it->off, it->off+it->size, it->szs->size,
- it->szs->fname, *it->szs->fname ? "/" : "",
- it->path );
+ if ( WARN_MODE & WARN_INVALID_OFFSET && verbose >= -2 )
+ ERROR0(ERR_WARNING,
+ "Invalid offset [%x..%x, size=%zx] for subfile.\n"
+ "=> File ignored: %s%s%s\n",
+ it->off, it->off+it->size, it->szs->size,
+ it->szs->fname, *it->szs->fname ? "/" : "",
+ it->path );
return 0;
}
@@ -3335,16 +3373,17 @@ static int iterate_sub_files
return it->func_sub(it,term);
}
+
///////////////////////////////////////////////////////////////////////////////
// [[IterateFilesSZS]]
int IterateFilesSZS
(
- szs_file_t * szs, // valid szs
+ szs_file_t *szs, // valid szs
szs_iterator_func func, // call back function
- void * param, // user defined parameter
+ void *param, // user defined parameter
const iterator_param_t
- *p_itpar, // NULL or iteration parameters
+ *p_itpar, // NULL or iteration parameters
int recurse // 0:off, <0:unlimited, >0:max depth
)
{
@@ -3404,9 +3443,9 @@ int IterateFilesSZS
int IterateFilesParSZS
(
- szs_file_t * szs, // valid szs
+ szs_file_t *szs, // valid szs
szs_iterator_func func, // call back function
- void * param, // user defined parameter
+ void *param, // user defined parameter
bool clean_path, // true: clean path from ../ and more
bool show_root_node, // true: include root node in iteration
int recurse, // 0:off, <0:unlimited, >0:max depth
@@ -3622,6 +3661,90 @@ int IterateFilesData
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// FindFileSZS() ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+struct find_subfile_t
+{
+ ccp path;
+ int status;
+ szs_iterator_t result;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+int find_subfile_iter
+(
+ struct szs_iterator_t *it, // iterator struct with all infos
+ bool term // true: termination hint
+)
+{
+ if (!term)
+ {
+ struct find_subfile_t *fsub = it->param;
+ DASSERT(fsub);
+
+ ccp path = it->path;
+ if ( path[0] == '.' && path[1] == '/' )
+ path += 2;
+ if (!strcmp(path,fsub->path))
+ {
+ fsub->status = 1;
+ fsub->result = *it;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+int FindFileSZS
+(
+ // -1: error, 0: not found + result cleared, 1: found + result set
+ szs_file_t *szs, // valid szs
+ ccp path, // path to find
+ const iterator_param_t
+ *p_itpar, // NULL or iteration parameters
+ int recurse, // 0:off, <0:unlimited, >0:max depth
+ szs_iterator_t *result // not NULL: store result here
+)
+{
+ if ( !szs || !path )
+ goto err;
+
+ while ( path[0] == '.' && path[1] == '/' )
+ path += 2;
+ if (!*path)
+ goto err;
+
+ struct find_subfile_t fsub = {0};
+ fsub.path = path;
+
+ int stat = IterateFilesSZS(szs,find_subfile_iter,&fsub,p_itpar,recurse);
+ DASSERT(szs);
+//DEL printf("FindFileSZS(%s): %d\n",path,stat);
+ if ( stat >= 0 )
+ {
+ if (result)
+ {
+ if ( fsub.status > 0 )
+ memcpy(result,&fsub.result,sizeof(*result));
+ else
+ memset(result,0,sizeof(*result));
+ }
+ if ( fsub.status >= 0 )
+ return fsub.status;
+ }
+
+ err:
+ if (result)
+ memset(result,0,sizeof(*result));
+ return -1;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// cut files: BRSUB ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -3797,10 +3920,11 @@ int CutFilesBRSUB
{
if ( (u8*)bcut.eptr > max_eptr )
{
- ERROR0(ERR_WARNING,
- "Invalid offset for BRSUB file => %u of %u entries ignored: %s%s%s\n",
- bg_n_entry - cur_entry, bg_n_entry,
- it->szs->fname, *it->szs->fname ? "/" : "", it->path );
+ if ( WARN_MODE & WARN_INVALID_OFFSET && verbose >= -2 )
+ ERROR0(ERR_WARNING,
+ "Invalid offset for BRSUB file => %u of %u entries ignored: %s%s%s\n",
+ bg_n_entry - cur_entry, bg_n_entry,
+ it->szs->fname, *it->szs->fname ? "/" : "", it->path );
break;
}
u32 data_off = bcut.endian->rd32(&bcut.eptr->data_off);
@@ -4387,6 +4511,7 @@ CmpFuncSubFile GetCmpFunc
return cmp_subfile_pack;
case SORT_OFFSET:
+ case SORT_SIZE:
return cmp_subfile_offset;
//case SORT_BREFF:
@@ -4474,7 +4599,7 @@ bool SortSubFilesSZS
enumError DiffSZS
(
szs_file_t * szs1, // first szs to compare
- szs_file_t * szs2, // second szs tp compare
+ szs_file_t * szs2, // second szs to compare
int recurse, // 0:off, <0:unlimited, >0:max depth
int cut_files, // <0:never, =0:auto, >0:always
bool quiet // true: be quiet
diff --git a/project/src/lib-szs.h b/project/src/lib-szs.h
index eea6912..25405d5 100644
--- a/project/src/lib-szs.h
+++ b/project/src/lib-szs.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -276,7 +276,8 @@ enum szs_marker_t
/////////////// have_szs_file_t ///////////////
///////////////////////////////////////////////////////////////////////////////
// [[have_szs_file_t]]
-// order is important, compare have_szs_name[], have_szs_file[] and ct.wiimm.de
+// order is important,
+// compare have_szs_name[], have_szs_file[], have_szs_fform[] and ct.wiimm.de
typedef enum have_szs_file_t
{
@@ -311,6 +312,24 @@ __attribute__ ((packed)) have_file_mode_t;
typedef have_file_mode_t szs_special_t[HAVESZS__N];
+///////////////////////////////////////////////////////////////////////////////
+// [[have_attrib_t]]
+// order is important, compare have_attrib_name[] and ct.wiimm.de
+
+typedef enum have_attrib_t
+{
+ HAVEATT_CHEAT, // attribut "cheat" found
+ HAVEATT_EDIT, // attribut "edit" found
+ HAVEATT_REVERSE, // attribut "reverse" found
+ HAVEATT__N
+}
+__attribute__ ((packed)) have_attrib_t;
+
+extern const ccp have_attrib_name[HAVEATT__N];
+
+ccp CreateSpecialInfoAttrib
+ ( have_attrib_t attrib, bool add_value, ccp return_if_empty );
+
//
///////////////////////////////////////////////////////////////////////////////
/////////////// szs_have_t ///////////////
@@ -319,11 +338,12 @@ typedef have_file_mode_t szs_special_t[HAVESZS__N];
typedef struct szs_have_t
{
- bool valid; // TRUE: SZS analyzed
- szs_special_t szs; // u8-list: one of have_file_mode_t (H_*)
- kmp_special_t kmp; // u8-list: elem>0: number of special KMP objects found
- uint lex_sect; // bit field for found lex sections
- uint lex_feat; // bit field for found lex features
+ bool valid; // TRUE: SZS analyzed
+ szs_special_t szs; // u8-list: one of have_file_mode_t (H_*)
+ kmp_special_t kmp; // u8-list: elem>0: number of special KMP objects found
+ uint lex_sect; // bit field for found lex sections
+ uint lex_feat; // bit field for found lex features
+ have_attrib_t attrib; // bit field for special attributes
}
szs_have_t;
@@ -446,6 +466,11 @@ typedef struct szs_file_t
ParamField_t *special_file; // list with files of directory /common/
+
+ //--- options set by PrepareCheckTextureSZS()
+
+ bool check_enpt; // true: check ENPT too
+
} szs_file_t;
//-----------------------------------------------------------------------------
@@ -496,7 +521,7 @@ typedef struct szs_norm_t
//--- for output via PrintNorm()
- FILE *f; // NULL or output file
+ FILE *f; // NULL or output file
int indent; // indention
char modified[SZI__N+1]; // info vector about modification -> szs_norm_info_t
}
@@ -745,12 +770,30 @@ bool IsFileOptionalSZS
enumError DiffSZS
(
szs_file_t * szs1, // first szs to compare
- szs_file_t * szs2, // second szs tp compare
+ szs_file_t * szs2, // second szs to compare
int recurse, // 0:off, <0:unlimited, >0:max depth
int cut_files, // <0:never, =0:auto, >0:always
bool quiet // true: be quiet
);
+void PrepareCheckTextureSZS ( szs_file_t * szs );
+
+enumError CheckTextureRefSZS
+(
+ // returns ERR_OK | ERR_DIFFER | ERR_NOTHING_TO_DO | ERR_NO_SOURCE_FOUND | >=ERR_ERROR
+ szs_file_t * szs2, // NULL or second szs to compare
+ ccp *status // not NULL: store status info here -> FreeString()
+ // if !opt_reference: *status=NULL
+);
+
+enumError CheckTextureSZS
+(
+ // returns ERR_OK | ERR_DIFFER | ERR_ERROR
+ szs_file_t * szs1, // first szs to compare
+ szs_file_t * szs2, // second szs to compare
+ ccp *status // not NULL: store status info here -> FreeString()
+);
+
bool SortSubFilesSZS
(
szs_file_t * szs, // valid szs structure
@@ -845,6 +888,7 @@ ccp CreateSpecialFileInfo
///////////////////////////////////////////////////////////////////////////////
/////////////// szs file iterator ///////////////
///////////////////////////////////////////////////////////////////////////////
+// [[szs_iterator_func]]
struct szs_iterator_t;
typedef int (*szs_iterator_func)
@@ -947,11 +991,24 @@ extern szs_iterator_func cut_iter_func[FF_N];
//-----------------------------------------------------------------------------
+int FindFileSZS
+(
+ // -1: error, 0: not found + result cleared, 1: found + result set
+ szs_file_t *szs, // valid szs
+ ccp path, // path to find
+ const iterator_param_t
+ *p_itpar, // NULL or iteration parameters
+ int recurse, // 0:off, <0:unlimited, >0:max depth
+ szs_iterator_t *result // not NULL: store result here
+);
+
+//-----------------------------------------------------------------------------
+
int IterateFilesSZS
(
- szs_file_t * szs, // valid szs
+ szs_file_t *szs, // valid szs
szs_iterator_func func, // call back function
- void * param, // user defined parameter
+ void *param, // user defined parameter
const iterator_param_t
*p_itpar, // NULL or iteration parameters
int recurse // 0:off, <0:unlimited, >0:max depth
@@ -959,9 +1016,9 @@ int IterateFilesSZS
int IterateFilesParSZS
(
- szs_file_t * szs, // valid szs
+ szs_file_t *szs, // valid szs
szs_iterator_func func, // call back function
- void * param, // user defined parameter
+ void *param, // user defined parameter
bool clean_path, // true: clean path from ../ and more
bool show_root_node, // true: include root node in iteration
int recurse, // 0:off, <0:unlimited, >0:max depth
@@ -1404,6 +1461,12 @@ typedef struct analyse_szs_t
sha1_hex_t sha1_vrcorn; // SHA1 of vrcorn
sha1_hex_t sha1_minimap; // SHA1 of minimap
+ //--- slots of orgiginal tarcks: 0:none, 11.84:track 111..125:arena
+
+ u8 sha1_kmp_slot;
+ u8 sha1_kmp_norm_slot;
+ u8 sha1_kcl_slot;
+ u8 sha1_minimap_slot;
//--- sub files
diff --git a/project/src/lib-transform.c b/project/src/lib-transform.c
index 2f0c912..106c63d 100644
--- a/project/src/lib-transform.c
+++ b/project/src/lib-transform.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-xbmg.c b/project/src/lib-xbmg.c
index 1aee2ef..5a82e46 100644
--- a/project/src/lib-xbmg.c
+++ b/project/src/lib-xbmg.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/lib-xbmg.h b/project/src/lib-xbmg.h
index 69fcf1e..a391330 100644
--- a/project/src/lib-xbmg.h
+++ b/project/src/lib-xbmg.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/types.h b/project/src/types.h
index ba1c230..af9ee98 100644
--- a/project/src/types.h
+++ b/project/src/types.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/ui/gen-ui.c b/project/src/ui/gen-ui.c
index 7563642..40a35a7 100644
--- a/project/src/ui/gen-ui.c
+++ b/project/src/ui/gen-ui.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/ui/tab-wbmgt.inc b/project/src/ui/tab-wbmgt.inc
index 40a02fa..753342c 100644
--- a/project/src/ui/tab-wbmgt.inc
+++ b/project/src/ui/tab-wbmgt.inc
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -221,6 +221,9 @@
{ T_OPT_GM, "LOGGING", "L|logging",
0, 0 /* copy of wszst */ },
+ { T_OPT_GP, "WARN", "W|warn",
+ 0, 0 /* copy of wszst */ },
+
{ T_OPT_G, "DE", "de",
0, 0 /* copy of wszst */ },
diff --git a/project/src/ui/tab-wctct.inc b/project/src/ui/tab-wctct.inc
index 33e5203..bb24731 100644
--- a/project/src/ui/tab-wctct.inc
+++ b/project/src/ui/tab-wctct.inc
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -208,6 +208,9 @@
{ T_OPT_GM, "LOGGING", "L|logging",
0, 0 /* copy of wszst */ },
+ { T_OPT_GP, "WARN", "W|warn",
+ 0, 0 /* copy of wszst */ },
+
{ T_OPT_G, "DE", "de",
0, 0 /* copy of wszst */ },
diff --git a/project/src/ui/tab-wimgt.inc b/project/src/ui/tab-wimgt.inc
index 6c572fc..3ab70bd 100644
--- a/project/src/ui/tab-wimgt.inc
+++ b/project/src/ui/tab-wimgt.inc
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -178,6 +178,9 @@
{ T_OPT_GM, "LOGGING", "L|logging",
0, 0 /* copy of wszst */ },
+ { T_OPT_GP, "WARN", "W|warn",
+ 0, 0 /* copy of wszst */ },
+
{ T_OPT_G, "DE", "de",
0, 0 /* copy of wszst */ },
diff --git a/project/src/ui/tab-wkclt.inc b/project/src/ui/tab-wkclt.inc
index 682dd7b..2a137c8 100644
--- a/project/src/ui/tab-wkclt.inc
+++ b/project/src/ui/tab-wkclt.inc
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -169,6 +169,17 @@
" If the flag file already exists, only missing group names"
" are added at the end of file." },
+ { H_DEF_CMD, "TYPES", "TYPES",
+ "wkclt TYPES arg...",
+ "Print a line with KCL flag details for each argument."
+ " ARG is a comma or space separated list of a optional BASEVAL"
+ " and a list of TERMS. BASEVAL can be any hexa-decimal number."
+ " The format of TERMS is @X[=]VALUE@."
+ " So a TERM begin with letter @T@ (Type), @V@ (Value) or a group"
+ " identifier (W, X,Y or Z), followed by an optional equal sign"
+ " and finished by a decimal number."
+ " It overrides the related part of BASEVAL." },
+
{ T_DEF_CMD, "FLAGS", "FLAGS|F",
"wkclt FLAGS source...",
"Print a KCL type and flag usage statistic for each source"
@@ -226,6 +237,11 @@
" Hints and warnings are written to standard output."
" The exit status is @'DIFFER'@ if at least one KMP warning found." },
+ { T_DEF_CMD, "SHA1", "SHA1",
+ "wszst SHA1 [source]...",
+ "Print a SHA1 checksum of the KCL for each source."
+ " The checksum is calculated after patching." },
+
{ H_DEF_CMD, "ANALYZE", "ANALYZE",
"wkclt ANALYZE source...",
"Analyze some KCL data." },
@@ -275,6 +291,9 @@
{ T_OPT_GM, "LOGGING", "L|logging",
0, 0 /* copy of wszst */ },
+ { T_OPT_GP, "WARN", "W|warn",
+ 0, 0 /* copy of wszst */ },
+
{ T_OPT_G, "DE", "de",
0, 0 /* copy of wszst */ },
@@ -367,6 +386,18 @@
{ T_OPT_CP, "SLOT", "slot",
0, 0 /* copy of wszst */ },
+ { T_OPT_C, "ID", "id",
+ 0, 0 /* copy of wszst */ },
+
+ { T_OPT_CO, "BASE64", "base64",
+ 0, 0 /* copy of wszst */ },
+
+ { T_OPT_CO, "DB64", "db64",
+ 0, 0 /* copy of wszst */ },
+
+ { T_OPT_CP, "CODING", "coding",
+ 0, 0 /* copy of wszst */ },
+
{ T_OPT_C, "ROUND", "round",
0, 0 /* copy of wszst */ },
@@ -701,6 +732,13 @@
{ T_COPT, "CONST", 0,0,0 },
{ T_COPT, "FLAG_FILE", 0,0,0 },
+ //---------- COMMAND wkclt TYPES ----------
+
+ { T_CMD_BEG, "TYPES", 0,0,0 },
+ { T_COPT, "NO_HEADER", 0,0,0 },
+ { T_COPT, "BRIEF", 0,0,
+ "Print only the resulting flag." },
+
//---------- COMMAND wkclt FLAGS ----------
{ T_CMD_BEG, "FLAGS", 0,0,0 },
@@ -795,6 +833,19 @@
{ T_COPT, "NO_CHECK", 0,0,0 },
{ T_COPT, "IGNORE", 0,0,0 },
+ //---------- COMMAND wkclt SHA1 ----------
+
+ { T_CMD_BEG, "SHA1", 0,0,0 },
+ { T_COPT, "IGNORE", 0,0,0 },
+ { T_COPT, "ID", 0,0,0 },
+ { T_COPT, "BASE64", 0,0,0 },
+ { T_COPT, "DB64", 0,0,0 },
+ { T_COPT, "CODING", 0,0,0 },
+ { T_COPT, "BRIEF", 0,0,
+ "Suppress output of the filename." },
+ { T_SEP_OPT, 0,0,0,0 },
+ { T_COPY_GRP, "TRANSFORM", 0,0,0 },
+
//---------- COMMAND wkclt ANALYZE ----------
{ T_CMD_BEG, "ANALYZE", 0,0,0 },
diff --git a/project/src/ui/tab-wkmpt.inc b/project/src/ui/tab-wkmpt.inc
index ace5125..0b2a49a 100644
--- a/project/src/ui/tab-wkmpt.inc
+++ b/project/src/ui/tab-wkmpt.inc
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -275,6 +275,9 @@
{ T_OPT_GM, "LOGGING", "L|logging",
0, 0 /* copy of wszst */ },
+ { T_OPT_GP, "WARN", "W|warn",
+ 0, 0 /* copy of wszst */ },
+
{ T_OPT_G, "DE", "de",
0, 0 /* copy of wszst */ },
diff --git a/project/src/ui/tab-wlect.inc b/project/src/ui/tab-wlect.inc
index 1aba6e5..d5ac35d 100644
--- a/project/src/ui/tab-wlect.inc
+++ b/project/src/ui/tab-wlect.inc
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -231,6 +231,9 @@
{ T_OPT_GM, "LOGGING", "L|logging",
0, 0 /* copy of wszst */ },
+ { T_OPT_GP, "WARN", "W|warn",
+ 0, 0 /* copy of wszst */ },
+
{ T_OPT_G, "DE", "de",
0, 0 /* copy of wszst */ },
@@ -426,6 +429,12 @@
" The file format can be LE-BIN or any supported CT-CODE file"
" (BRRES, TEX0, CT-CODE or CT-TEXT)." },
+ { H_OPT_CP, "LE_ARENA", "le-arena|learena",
+ "file",
+ "Use this file to define property and music defaults for arenas."
+ " The file format can be an text file."
+ " Option {--le-define} may override these defaults." },
+
{ T_OPT_CP, "LPAR", "lpar",
"file",
"Read a LPAR file to overwrite settings of LE-CODE section LPAR." },
@@ -637,6 +646,7 @@
{ T_GRP_BEG, "PATCH", 0,0,0 },
{ T_COPT, "LE_DEFINE", 0,0,0 },
+ { H_COPT, "LE_ARENA", 0,0,0 },
{ T_COPT, "LPAR", 0,0,0 },
{ T_COPT, "ALIAS", 0,0,0 },
{ T_COPY_GRP, "PARAM", 0,0,0 },
diff --git a/project/src/ui/tab-wmdlt.inc b/project/src/ui/tab-wmdlt.inc
index ced4e6a..85018fd 100644
--- a/project/src/ui/tab-wmdlt.inc
+++ b/project/src/ui/tab-wmdlt.inc
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -201,6 +201,9 @@
{ T_OPT_GM, "LOGGING", "L|logging",
0, 0 /* copy of wszst */ },
+ { T_OPT_GP, "WARN", "W|warn",
+ 0, 0 /* copy of wszst */ },
+
{ T_OPT_G, "DE", "de",
0, 0 /* copy of wszst */ },
diff --git a/project/src/ui/tab-wpatt.inc b/project/src/ui/tab-wpatt.inc
index 5b7e71a..b2f193e 100644
--- a/project/src/ui/tab-wpatt.inc
+++ b/project/src/ui/tab-wpatt.inc
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -169,6 +169,9 @@
{ T_OPT_GM, "LOGGING", "L|logging",
0, 0 /* copy of wszst */ },
+ { T_OPT_GP, "WARN", "W|warn",
+ 0, 0 /* copy of wszst */ },
+
{ T_OPT_G, "DE", "de",
0, 0 /* copy of wszst */ },
diff --git a/project/src/ui/tab-wstrt.inc b/project/src/ui/tab-wstrt.inc
index 3bef0fb..4015738 100644
--- a/project/src/ui/tab-wstrt.inc
+++ b/project/src/ui/tab-wstrt.inc
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -116,10 +116,11 @@
" Keywords are @PAL@ (default), @USA@, @JAPAN@, @KOREA@, or any abbreviation of them."
" They select the region for the following addresses."
" The hex numbers (with or without @0x@ prefix) are interpreted as addresses."
- " If possible, they are ported to all other regions."
+ " If an address begins with @m@ or @s@,"
+ " then it is interpreted as a file offset for @main.dol@ or @staticr.rel@."
+ " All addresses are ported to all other regions."
" The result is printed as colorized table."
- "\n"
- " This address porting is EXPERIMENTAL!" },
+ "\1 See https://szs.wiimm.de/cmd/wstrt/port for more details." },
{ T_DEF_CMD, "WHERE", "WHERE",
"wstrt WHERE address...",
@@ -129,7 +130,8 @@
" The result is output as a human and machine readable table."
"\n "
" This command is well suited to converting addresses"
- " into file offsets and vice versa." },
+ " into file offsets and vice versa."
+ "\1 See https://szs.wiimm.de/cmd/wstrt/where for more details." },
{ H_DEF_CMD, "HTTPS", "_HTTPS",
"wstrt _HTTPS file...",
@@ -230,6 +232,9 @@
{ T_OPT_GM, "LOGGING", "L|logging",
0, 0 /* copy of wszst */ },
+ { T_OPT_GP, "WARN", "W|warn",
+ 0, 0 /* copy of wszst */ },
+
{ T_OPT_G, "DE", "de",
0, 0 /* copy of wszst */ },
@@ -660,7 +665,13 @@
{ T_OPT_C, "NO_0X", "0|no-0x|no0x",
0,
- "Suppress 0x prefix of hex numbers." },
+ "Suppress 0x prefix of hex numbers."
+ " This is the default for cheat codes." },
+
+ { T_OPT_C, "UPPER", "U|upper",
+ 0,
+ "Print digits A-F of hex numbers in upper case."
+ " This is the default for cheat codes." },
{ T_SEP_OPT, 0,0,0,0 }, //----- separator -----
@@ -995,6 +1006,7 @@
{ T_COPT, "PORT_DB", 0,0,0 },
{ T_COPT, "ORDER", 0,0,0 },
{ T_COPT, "NO_0X", 0,0,0 },
+ { T_COPT, "UPPER", 0,0,0 },
{ T_COPT, "NO_HEADER", 0,0,
"Suppress the table header and footer and output exactly 1 line for"
" each specified address. This makes the output more machine-readable." },
@@ -1008,6 +1020,7 @@
{ T_CMD_BEG, "WHERE", 0,0,0 },
{ T_COPT, "ORDER", 0,0,0 },
{ T_COPT, "NO_0X", 0,0,0 },
+ { T_COPT, "UPPER", 0,0,0 },
{ T_COPT, "NO_HEADER", 0,0,
"Suppress the table header and footer and output exactly 1 line for"
" each specified address. This makes the output more machine-readable." },
diff --git a/project/src/ui/tab-wszst.inc b/project/src/ui/tab-wszst.inc
index 8220457..d836fdf 100644
--- a/project/src/ui/tab-wszst.inc
+++ b/project/src/ui/tab-wszst.inc
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -226,6 +226,11 @@
"This hidden command exports some definitions to standard output."
" Use keyword @HELP@ to get a list of possible keywords." },
+ { H_DEF_CMD, "SIZEOF", "SIZEOF",
+ "wszst SIZEOF key...",
+ "This hidden command prints a list with the size of"
+ " data structures and variables." },
+
{ H_DEF_CMD, "CODE", "_CODE",
"wszst _CODE [files]",
"All bytes of all input files are xor'ed with 0xDC and copied to stdout."
@@ -340,15 +345,28 @@
{ T_DEF_CMD, "SHA1", "SHA1",
"wszst SHA1 [source]...",
"Print a SHA1 checksum for each source."
- " The checksum is calculated by using the uncompressed data." },
+ " The checksum is calculated by using the uncompressed data"
+ " and after patching." },
{ T_DEF_CMD, "ANALYZE", "ANALYZE|ANA|ANALYSE",
"wszst ANALYZE [source]...",
"Analyse track files and print results in machine readable format." },
+ { T_DEF_CMD, "IS_TEXTURE", "IS-TEXTURE|ISTEXTURE",
+ "wszst IS-TEXTURE --reference reference [source]...",
+ "Test each source to see if it's a texture hack versus a reference file."
+ " For each source, one human and machine readable status line is printed."
+ " It is either »-1=err« on error, »1=yes« for a texture hack,"
+ " or »0=no LIST« with a comma separated list of reasons."
+ "\n "
+ " At the moment KCL, KMP (see notes) and LEX are checked."
+ " KMP section CAME has been intentionally left out."
+ " Section ENPT is only checked if KCL contains a least one face"
+ " of type force-recalculation." },
+
{ H_DEF_CMD, "FEATURES", "FEATURES",
"wszst FEATURES [source]...",
- "Analyse track files and a feature list in machine readable format." },
+ "Analyse track files and create a feature list in machine readable format." },
{ T_DEF_CMD, "DISTRIBUTION", "DISTRIBUTION|DIST",
"wszst DISTRIBUTION result source...\n"
@@ -673,9 +691,8 @@
"MAX_WIDTH", "max-width|maxwidth",
"maxwidth",
"Define the maximum terminal width (number of columns)"
- " for help and some other messages"
- " and disable the automatic detection of the terminal width."
- " This option is ignored if {--width} is set." },
+ " for help and some other messages."
+ " The default is 120. This option is ignored if --width is set." },
{ T_OPT_GM, "QUIET", "q|quiet",
0,
@@ -695,6 +712,20 @@
0,
"This debug option enables the logging of internal lists and maps." },
+ { T_OPT_GP, "WARN", "W|warn",
+ "list",
+ "Enable or disable warnings."
+ " Parameter @'list'@ is a comma separated list of keywords."
+ " A minus sign before a keyword disables a warning."
+ " Each occurrence of the option will only change entered warning"
+ " and all other warnings are untouched."
+ "\n "
+ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and @ALL@ enables all."
+ " The other allowed keywords are:"
+ " @INVALID-OFFSET@."
+ // "\1 See https://szs.wiimm.de/opt/warn for details."
+ },
+
{ T_OPT_G, "DE", "de",
0,
"Use german track and arena names." },
@@ -1017,7 +1048,7 @@
"@MODE@ is either @OFF@, @AUTO@ (default) or @ON@."
" Without value, @ON@ is used."
"\n "
- " If mode is @ON@, assume a battle arena and enable a spüecial battle support."
+ " If mode is @ON@, assume a battle arena and enable a special battle support."
" If mode is @OFF@, disable special battle arena support."
" If mode is @AUTO@, analyse the KMP and estimate, if it is a battle areana."
" Modes @ON@ and @OFF@ override KMP parameter @BATTLE-MODE@." },
@@ -1519,7 +1550,7 @@
{ T_OPT_CP, "CODING", "coding",
"mode",
"Define the coding of the non alphanumeric characters for BASE64:"
- " STANDART (+/=, default), URL (-_=), STAR (-_*) or XML (.-*)." },
+ " STANDARD (+/=, default), URL (-_=), STAR (-_*) or XML (.-*)." },
{ T_OPT_C, "VERIFY", "verify",
0,
@@ -1955,6 +1986,10 @@
"\1 Read https://szs.wiimm.de/opt/source for more details." },
+ { T_OPT_CP, "REFERENCE", "ref|reference",
+ "path",
+ "Define a reference SZS." },
+
{ T_OPT_CP, "DEST", "d|dest",
"path",
"Define a destination path (directory/file)."
@@ -2796,6 +2831,16 @@
{ T_CMD_BEG, "EXPORT", 0,0,0 },
+ //---------- COMMAND wszst _SIZEOF ----------
+
+ { T_CMD_BEG, "SIZEOF", 0,0,0 },
+ { T_COPT, "SORT", 0,0,
+ "Define a sort mode. Keywords are:"
+ " @NONE@ (default), @NAME@ end @SIZE@." },
+ { T_COPT, "BRIEF", 0,0,
+ "Limit output to SZS specific data." },
+ { T_COPT, "LOGGING", 0,0,0 },
+
//---------- COMMAND wszst _CODE ----------
{ T_CMD_BEG, "CODE", 0,0,0 },
@@ -2981,9 +3026,19 @@
{ T_SEP_OPT, 0,0,0,0 },
{ T_COPY_GRP, "SCRIPT", 0,0,0 },
{ T_SEP_OPT, 0,0,0,0 },
+ { T_COPT, "REFERENCE", 0,0,0 },
{ T_COPT, "DEST", 0,0,0 },
{ T_COPT, "DEST2", 0,0,0 },
+ //---------- COMMAND wszst IS_TEXTURE ----------
+
+ { T_CMD_BEG, "IS_TEXTURE", 0,0,0 },
+ { T_COPT, "IGNORE", 0,0,0 },
+ { T_COPT, "REFERENCE", 0,0,0 },
+ { T_COPT, "BATTLE", 0,0,0 },
+ { T_COPT, "LONG", 0,0,
+ "Append a colon and the filename after each status." },
+
//---------- COMMAND wszst FEATURES ----------
{ T_CMD_BEG, "FEATURES", 0,0,0 },
@@ -2992,7 +3047,7 @@
" If set twice, suppress empty lines (for grouping) too."
" If set three times, omit inactive features (=0) too." },
{ T_COPT, "LONG", 0,0,
- "Print additnal comments." },
+ "Print additional comments." },
{ T_COPT, "IGNORE", 0,0,0 },
{ T_COPT, "QUIET", 0,0,
"Suppress logging of input and output files." },
diff --git a/project/src/ui/ui-wbmgt.c b/project/src/ui/ui-wbmgt.c
index 29ef8b5..aa991c4 100644
--- a/project/src/ui/ui-wbmgt.c
+++ b/project/src/ui/ui-wbmgt.c
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -349,8 +349,8 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_MAX_WIDTH, false, false, false, true, false, 0, "max-width",
"maxwidth",
"Define the maximum terminal width (number of columns) for help and"
- " some other messages and disable the automatic detection of the"
- " terminal width. This option is ignored if --width is set."
+ " some other messages. The default is 120. This option is ignored if"
+ " --width is set."
},
{ OPT_QUIET, false, false, false, false, false, 'q', "quiet",
@@ -371,6 +371,16 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"This debug option enables the logging of internal lists and maps."
},
+ { OPT_WARN, false, false, false, false, false, 'W', "warn",
+ "list",
+ "Enable or disable warnings. Parameter 'list' is a comma separated"
+ " list of keywords. A minus sign before a keyword disables a warning."
+ " Each occurrence of the option will only change entered warning and"
+ " all other warnings are untouched.\n"
+ " Keyword DEFAULT resets the default settings, OFF disables and ALL"
+ " enables all. The other allowed keywords are: INVALID-OFFSET."
+ },
+
{ OPT_DE, false, false, false, false, false, 0, "de",
0,
"Use german track and arena names."
@@ -531,7 +541,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" helper option."
},
- {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 63
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 64
};
@@ -660,7 +670,7 @@ static const KeywordTab_t CommandTab[] =
/////////////// OptionShort & OptionLong ///////////////
///////////////////////////////////////////////////////////////////////////////
-static const char OptionShort[] = "VhqvLc:lHBM:T:A:td:D:E:orupiP:1X";
+static const char OptionShort[] = "VhqvLW:c:lHBM:T:A:td:D:E:orupiP:1X";
static const struct option OptionLong[] =
{
@@ -677,6 +687,7 @@ static const struct option OptionLong[] =
{ "quiet", 0, 0, 'q' },
{ "verbose", 0, 0, 'v' },
{ "logging", 0, 0, 'L' },
+ { "warn", 1, 0, 'W' },
{ "de", 0, 0, GO_DE },
{ "colors", 2, 0, GO_COLORS },
{ "no-colors", 0, 0, GO_NO_COLORS },
@@ -803,7 +814,7 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x054 T */ OPT_TRACKS,
/* 0x055 */ 0,
/* 0x056 V */ OPT_VERSION,
- /* 0x057 */ 0,
+ /* 0x057 W */ OPT_WARN,
/* 0x058 X */ OPT_EXPORT,
/* 0x059 */ 0,0,0,0, 0,0,0,0, 0,0,
/* 0x063 c */ OPT_CONST,
@@ -1029,6 +1040,7 @@ static const InfoOption_t * option_tab_tool[] =
OptionInfo + OPT_QUIET,
OptionInfo + OPT_VERBOSE,
OptionInfo + OPT_LOGGING,
+ OptionInfo + OPT_WARN,
OptionInfo + OPT_DE,
OptionInfo + OPT_COLORS,
OptionInfo + OPT_NO_COLORS,
@@ -1410,7 +1422,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"wbmgt [option]... command [option|parameter|file]...",
"Wiimms BMG Tool : Convert and patch raw and text BMG (message) files.",
0,
- 25,
+ 26,
option_tab_tool,
0
},
diff --git a/project/src/ui/ui-wbmgt.h b/project/src/ui/ui-wbmgt.h
index e957987..855342f 100644
--- a/project/src/ui/ui-wbmgt.h
+++ b/project/src/ui/ui-wbmgt.h
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -103,6 +103,7 @@ typedef enum enumOptions
OPT_QUIET,
OPT_VERBOSE,
OPT_LOGGING,
+ OPT_WARN,
OPT_DE,
OPT_COLORS,
OPT_NO_COLORS,
@@ -124,7 +125,7 @@ typedef enum enumOptions
OPT_NEW,
OPT_EXTRACT,
- OPT__N_TOTAL // == 63
+ OPT__N_TOTAL // == 64
} enumOptions;
@@ -350,6 +351,7 @@ typedef enum enumGetOpt
GO_PATCH_BMG = 'P',
GO_TRACKS = 'T',
GO_VERSION = 'V',
+ GO_WARN = 'W',
GO_EXPORT = 'X',
GO_CONST = 'c',
diff --git a/project/src/ui/ui-wctct.c b/project/src/ui/ui-wctct.c
index 10469ab..1344aa3 100644
--- a/project/src/ui/ui-wctct.c
+++ b/project/src/ui/ui-wctct.c
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -449,8 +449,8 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_MAX_WIDTH, false, false, false, true, false, 0, "max-width",
"maxwidth",
"Define the maximum terminal width (number of columns) for help and"
- " some other messages and disable the automatic detection of the"
- " terminal width. This option is ignored if --width is set."
+ " some other messages. The default is 120. This option is ignored if"
+ " --width is set."
},
{ OPT_QUIET, false, false, false, false, false, 'q', "quiet",
@@ -471,6 +471,16 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"This debug option enables the logging of internal lists and maps."
},
+ { OPT_WARN, false, false, false, false, false, 'W', "warn",
+ "list",
+ "Enable or disable warnings. Parameter 'list' is a comma separated"
+ " list of keywords. A minus sign before a keyword disables a warning."
+ " Each occurrence of the option will only change entered warning and"
+ " all other warnings are untouched.\n"
+ " Keyword DEFAULT resets the default settings, OFF disables and ALL"
+ " enables all. The other allowed keywords are: INVALID-OFFSET."
+ },
+
{ OPT_DE, false, false, false, false, false, 0, "de",
0,
"Use german track and arena names."
@@ -662,7 +672,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" 0x3b:0x41 and 0x44:0xfe."
},
- {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 82
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 83
};
@@ -851,7 +861,7 @@ static const KeywordTab_t CommandTab[] =
/////////////// OptionShort & OptionLong ///////////////
///////////////////////////////////////////////////////////////////////////////
-static const char OptionShort[] = "VhqvLc:lHB1XPNM:T:A:td:D:E:orupi";
+static const char OptionShort[] = "VhqvLW:c:lHB1XPNM:T:A:td:D:E:orupi";
static const struct option OptionLong[] =
{
@@ -868,6 +878,7 @@ static const struct option OptionLong[] =
{ "quiet", 0, 0, 'q' },
{ "verbose", 0, 0, 'v' },
{ "logging", 0, 0, 'L' },
+ { "warn", 1, 0, 'W' },
{ "de", 0, 0, GO_DE },
{ "colors", 2, 0, GO_COLORS },
{ "no-colors", 0, 0, GO_NO_COLORS },
@@ -1021,7 +1032,7 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x054 T */ OPT_TRACKS,
/* 0x055 */ 0,
/* 0x056 V */ OPT_VERSION,
- /* 0x057 */ 0,
+ /* 0x057 W */ OPT_WARN,
/* 0x058 X */ OPT_EXPORT,
/* 0x059 */ 0,0,0,0, 0,0,0,0, 0,0,
/* 0x063 c */ OPT_CONST,
@@ -1264,6 +1275,7 @@ static const InfoOption_t * option_tab_tool[] =
OptionInfo + OPT_QUIET,
OptionInfo + OPT_VERBOSE,
OptionInfo + OPT_LOGGING,
+ OptionInfo + OPT_WARN,
OptionInfo + OPT_DE,
OptionInfo + OPT_COLORS,
OptionInfo + OPT_NO_COLORS,
@@ -1642,7 +1654,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"Wiimms CT-CODE Tool : Manage the CT-CODE extension. BRRES, TEX0,"
" CT-CODE, CT-TEXT and LE-BIN files are accepted as input.",
0,
- 27,
+ 28,
option_tab_tool,
0
},
diff --git a/project/src/ui/ui-wctct.h b/project/src/ui/ui-wctct.h
index f943d52..532b082 100644
--- a/project/src/ui/ui-wctct.h
+++ b/project/src/ui/ui-wctct.h
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -118,6 +118,7 @@ typedef enum enumOptions
OPT_QUIET,
OPT_VERBOSE,
OPT_LOGGING,
+ OPT_WARN,
OPT_DE,
OPT_COLORS,
OPT_NO_COLORS,
@@ -143,7 +144,7 @@ typedef enum enumOptions
OPT_CT_LOG,
OPT_ALLOW_SLOTS,
- OPT__N_TOTAL // == 82
+ OPT__N_TOTAL // == 83
} enumOptions;
@@ -420,6 +421,7 @@ typedef enum enumGetOpt
GO_NO_PARAM = 'P',
GO_TRACKS = 'T',
GO_VERSION = 'V',
+ GO_WARN = 'W',
GO_EXPORT = 'X',
GO_CONST = 'c',
diff --git a/project/src/ui/ui-wimgt.c b/project/src/ui/ui-wimgt.c
index 367da79..7ffff1c 100644
--- a/project/src/ui/ui-wimgt.c
+++ b/project/src/ui/ui-wimgt.c
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -312,8 +312,8 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_MAX_WIDTH, false, false, false, true, false, 0, "max-width",
"maxwidth",
"Define the maximum terminal width (number of columns) for help and"
- " some other messages and disable the automatic detection of the"
- " terminal width. This option is ignored if --width is set."
+ " some other messages. The default is 120. This option is ignored if"
+ " --width is set."
},
{ OPT_QUIET, false, false, false, false, false, 'q', "quiet",
@@ -334,6 +334,16 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"This debug option enables the logging of internal lists and maps."
},
+ { OPT_WARN, false, false, false, false, false, 'W', "warn",
+ "list",
+ "Enable or disable warnings. Parameter 'list' is a comma separated"
+ " list of keywords. A minus sign before a keyword disables a warning."
+ " Each occurrence of the option will only change entered warning and"
+ " all other warnings are untouched.\n"
+ " Keyword DEFAULT resets the default settings, OFF disables and ALL"
+ " enables all. The other allowed keywords are: INVALID-OFFSET."
+ },
+
{ OPT_DE, false, false, false, false, false, 0, "de",
0,
"Use german track and arena names."
@@ -482,7 +492,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" helper option."
},
- {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 56
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 57
};
@@ -601,7 +611,7 @@ static const KeywordTab_t CommandTab[] =
/////////////// OptionShort & OptionLong ///////////////
///////////////////////////////////////////////////////////////////////////////
-static const char OptionShort[] = "VhqvLc:lHBM:T:A:td:D:E:orupiaP:x:";
+static const char OptionShort[] = "VhqvLW:c:lHBM:T:A:td:D:E:orupiaP:x:";
static const struct option OptionLong[] =
{
@@ -618,6 +628,7 @@ static const struct option OptionLong[] =
{ "quiet", 0, 0, 'q' },
{ "verbose", 0, 0, 'v' },
{ "logging", 0, 0, 'L' },
+ { "warn", 1, 0, 'W' },
{ "de", 0, 0, GO_DE },
{ "colors", 2, 0, GO_COLORS },
{ "no-colors", 0, 0, GO_NO_COLORS },
@@ -726,7 +737,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x054 T */ OPT_TRACKS,
/* 0x055 */ 0,
/* 0x056 V */ OPT_VERSION,
- /* 0x057 */ 0,0,0,0, 0,0,0,0, 0,0,
+ /* 0x057 W */ OPT_WARN,
+ /* 0x058 */ 0,0,0,0, 0,0,0,0, 0,
/* 0x061 a */ OPT_ALL,
/* 0x062 */ 0,
/* 0x063 c */ OPT_CONST,
@@ -896,6 +908,7 @@ static const InfoOption_t * option_tab_tool[] =
OptionInfo + OPT_QUIET,
OptionInfo + OPT_VERBOSE,
OptionInfo + OPT_LOGGING,
+ OptionInfo + OPT_WARN,
OptionInfo + OPT_DE,
OptionInfo + OPT_COLORS,
OptionInfo + OPT_NO_COLORS,
@@ -1175,7 +1188,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"Wiimms Image Tool : Extract and convert graphic images. The file"
" formats TPL, TEX, BTI, BREFT and PNG are supported.",
0,
- 22,
+ 23,
option_tab_tool,
0
},
diff --git a/project/src/ui/ui-wimgt.h b/project/src/ui/ui-wimgt.h
index 93bb369..4595e8e 100644
--- a/project/src/ui/ui-wimgt.h
+++ b/project/src/ui/ui-wimgt.h
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -97,6 +97,7 @@ typedef enum enumOptions
OPT_QUIET,
OPT_VERBOSE,
OPT_LOGGING,
+ OPT_WARN,
OPT_DE,
OPT_COLORS,
OPT_NO_COLORS,
@@ -117,7 +118,7 @@ typedef enum enumOptions
OPT_NEW,
OPT_EXTRACT,
- OPT__N_TOTAL // == 56
+ OPT__N_TOTAL // == 57
} enumOptions;
@@ -282,6 +283,7 @@ typedef enum enumGetOpt
GO_PATCH = 'P',
GO_TRACKS = 'T',
GO_VERSION = 'V',
+ GO_WARN = 'W',
GO_ALL = 'a',
GO_CONST = 'c',
diff --git a/project/src/ui/ui-wkclt.c b/project/src/ui/ui-wkclt.c
index 9670bbd..adcb273 100644
--- a/project/src/ui/ui-wkclt.c
+++ b/project/src/ui/ui-wkclt.c
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -261,6 +261,34 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" See https://szs.wiimm.de/opt/slot for details."
},
+ { OPT_ID, false, false, false, false, false, 0, "id",
+ 0,
+ "Print an ID with 8 characters instead of a SHA-1 sum with 40"
+ " characters. The SHA-1 sum is used to calculate the ID. The ID"
+ " consists of '0'-'9' and 'a'-'w' (32 characters)."
+ },
+
+ { OPT_BASE64, true, false, false, false, false, 0, "base64",
+ "[=mode]",
+ "Encode the the checksum string as BASE64 with 27 characters instead"
+ " of hex. If a parameter is set, it acts like --coding=mode."
+ },
+
+ { OPT_DB64, true, false, false, false, false, 0, "db64",
+ "[=mode]",
+ "Encode the the checksum string and some length as BASE64 with 32"
+ " characters instead of hex for database searches. This options"
+ " implies --coding=URL if no other coding is defined. If a parameter"
+ " is set, it acts like --coding=mode. Option --db64 has priority over"
+ " --base64."
+ },
+
+ { OPT_CODING, false, false, false, false, false, 0, "coding",
+ "mode",
+ "Define the coding of the non alphanumeric characters for BASE64:"
+ " STANDARD (+/=, default), URL (-_=), STAR (-_*) or XML (.-*)."
+ },
+
{ OPT_ROUND, false, false, false, false, false, 0, "round",
0,
"Print additional lines with rounded values (to 3 and 2 bytes for"
@@ -365,7 +393,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"Print in machine readable sections and parameter lines."
},
- {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 37
+ {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 41
//----- global options -----
@@ -421,8 +449,8 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_MAX_WIDTH, false, false, false, true, false, 0, "max-width",
"maxwidth",
"Define the maximum terminal width (number of columns) for help and"
- " some other messages and disable the automatic detection of the"
- " terminal width. This option is ignored if --width is set."
+ " some other messages. The default is 120. This option is ignored if"
+ " --width is set."
},
{ OPT_QUIET, false, false, false, false, false, 'q', "quiet",
@@ -443,6 +471,16 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"This debug option enables the logging of internal lists and maps."
},
+ { OPT_WARN, false, false, false, false, false, 'W', "warn",
+ "list",
+ "Enable or disable warnings. Parameter 'list' is a comma separated"
+ " list of keywords. A minus sign before a keyword disables a warning."
+ " Each occurrence of the option will only change entered warning and"
+ " all other warnings are untouched.\n"
+ " Keyword DEFAULT resets the default settings, OFF disables and ALL"
+ " enables all. The other allowed keywords are: INVALID-OFFSET."
+ },
+
{ OPT_DE, false, false, false, false, false, 0, "de",
0,
"Use german track and arena names."
@@ -642,7 +680,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" helper option."
},
- {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 72
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 77
};
@@ -773,6 +811,12 @@ static const InfoOption_t option_cmd_CFF_BRIEF =
"Suppress the comments with the alternative expression formats."
};
+static const InfoOption_t option_cmd_TYPES_BRIEF =
+ { OPT_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ "Print only the resulting flag."
+ };
+
static const InfoOption_t option_cmd_FLAGS_BRIEF =
{ OPT_BRIEF, false, false, false, false, false, 'B', "brief",
0,
@@ -851,6 +895,12 @@ static const InfoOption_t option_cmd_CHECK_QUIET =
"Be quiet until the first warning or hint is found."
};
+static const InfoOption_t option_cmd_SHA1_BRIEF =
+ { OPT_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ "Suppress output of the filename."
+ };
+
//
///////////////////////////////////////////////////////////////////////////////
@@ -880,6 +930,7 @@ static const KeywordTab_t CommandTab[] =
{ CMD_ENCODE, "ENCODE", "ENC", 0 },
{ CMD_COPY, "COPY", "CP", 0 },
{ CMD_CFF, "CFF", 0, 0 },
+ { CMD_TYPES, "TYPES", 0, 0 },
{ CMD_FLAGS, "FLAGS", "F", 0 },
{ CMD_DUMP, "DUMP", "D", 0 },
{ CMD_DBRIEF, "DBRIEF", "DB", 0 },
@@ -888,6 +939,7 @@ static const KeywordTab_t CommandTab[] =
{ CMD_TRAVERSE, "TRAVERSE", 0, 0 },
{ CMD_FALL, "FALL", 0, 0 },
{ CMD_CHECK, "CHECK", "CHK", 0 },
+ { CMD_SHA1, "SHA1", 0, 0 },
{ CMD_ANALYZE, "ANALYZE", 0, 0 },
{ CMD_BLOW, "BLOW", 0, 0 },
@@ -899,7 +951,7 @@ static const KeywordTab_t CommandTab[] =
/////////////// OptionShort & OptionLong ///////////////
///////////////////////////////////////////////////////////////////////////////
-static const char OptionShort[] = "VhqvLc:lHBPNM:T:A:td:D:E:orupi";
+static const char OptionShort[] = "VhqvLW:c:lHBPNM:T:A:td:D:E:orupi";
static const struct option OptionLong[] =
{
@@ -916,6 +968,7 @@ static const struct option OptionLong[] =
{ "quiet", 0, 0, 'q' },
{ "verbose", 0, 0, 'v' },
{ "logging", 0, 0, 'L' },
+ { "warn", 1, 0, 'W' },
{ "de", 0, 0, GO_DE },
{ "colors", 2, 0, GO_COLORS },
{ "no-colors", 0, 0, GO_NO_COLORS },
@@ -961,6 +1014,10 @@ static const struct option OptionLong[] =
{ "xtridata", 2, 0, GO_XTRIDATA },
{ "xtri", 2, 0, GO_XTRIDATA },
{ "slot", 1, 0, GO_SLOT },
+ { "id", 0, 0, GO_ID },
+ { "base64", 2, 0, GO_BASE64 },
+ { "db64", 2, 0, GO_DB64 },
+ { "coding", 1, 0, GO_CODING },
{ "round", 0, 0, GO_ROUND },
{ "long", 0, 0, 'l' },
{ "no-header", 0, 0, 'H' },
@@ -1040,7 +1097,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x054 T */ OPT_TRACKS,
/* 0x055 */ 0,
/* 0x056 V */ OPT_VERSION,
- /* 0x057 */ 0,0,0,0, 0,0,0,0, 0,0,0,0,
+ /* 0x057 W */ OPT_WARN,
+ /* 0x058 */ 0,0,0,0, 0,0,0,0, 0,0,0,
/* 0x063 c */ OPT_CONST,
/* 0x064 d */ OPT_DEST,
/* 0x065 */ 0,0,0,
@@ -1093,20 +1151,24 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x0a0 */ OPT_FLAG_FILE,
/* 0x0a1 */ OPT_XTRIDATA,
/* 0x0a2 */ OPT_SLOT,
- /* 0x0a3 */ OPT_ROUND,
- /* 0x0a4 */ OPT_NO_ECHO,
- /* 0x0a5 */ OPT_UTF_8,
- /* 0x0a6 */ OPT_NO_UTF_8,
- /* 0x0a7 */ OPT_FORCE,
- /* 0x0a8 */ OPT_REPAIR_MAGICS,
- /* 0x0a9 */ OPT_TINY,
- /* 0x0aa */ OPT_OLD,
- /* 0x0ab */ OPT_STD,
- /* 0x0ac */ OPT_NEW,
- /* 0x0ad */ OPT_EXTRACT,
- /* 0x0ae */ OPT_NUMBER,
- /* 0x0af */ OPT_SECTIONS,
- /* 0x0b0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
+ /* 0x0a3 */ OPT_ID,
+ /* 0x0a4 */ OPT_BASE64,
+ /* 0x0a5 */ OPT_DB64,
+ /* 0x0a6 */ OPT_CODING,
+ /* 0x0a7 */ OPT_ROUND,
+ /* 0x0a8 */ OPT_NO_ECHO,
+ /* 0x0a9 */ OPT_UTF_8,
+ /* 0x0aa */ OPT_NO_UTF_8,
+ /* 0x0ab */ OPT_FORCE,
+ /* 0x0ac */ OPT_REPAIR_MAGICS,
+ /* 0x0ad */ OPT_TINY,
+ /* 0x0ae */ OPT_OLD,
+ /* 0x0af */ OPT_STD,
+ /* 0x0b0 */ OPT_NEW,
+ /* 0x0b1 */ OPT_EXTRACT,
+ /* 0x0b2 */ OPT_NUMBER,
+ /* 0x0b3 */ OPT_SECTIONS,
+ /* 0x0b4 */ 0,0,0,0, 0,0,0,0, 0,0,0,0,
/* 0x0c0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
/* 0x0d0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
/* 0x0e0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
@@ -1122,184 +1184,196 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/////////////// opt_allowed_cmd_* ///////////////
///////////////////////////////////////////////////////////////////////////////
-static u8 option_allowed_cmd_VERSION[37] = // cmd #1
+static u8 option_allowed_cmd_VERSION[41] = // cmd #1
{
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,1,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,1
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 1
};
-static u8 option_allowed_cmd_HELP[37] = // cmd #2
+static u8 option_allowed_cmd_HELP[41] = // cmd #2
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1
+ 1,1,1,1,1, 1,1,1,1,1, 1
};
-static u8 option_allowed_cmd_CONFIG[37] = // cmd #3
+static u8 option_allowed_cmd_CONFIG[41] = // cmd #3
{
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,1,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_ARGTEST[37] = // cmd #4
+static u8 option_allowed_cmd_ARGTEST[41] = // cmd #4
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1
+ 1,1,1,1,1, 1,1,1,1,1, 1
};
-static u8 option_allowed_cmd_TEST[37] = // cmd #5
+static u8 option_allowed_cmd_TEST[41] = // cmd #5
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1
+ 1,1,1,1,1, 1,1,1,1,1, 1
};
-static u8 option_allowed_cmd_COLORS[37] = // cmd #6
+static u8 option_allowed_cmd_COLORS[41] = // cmd #6
{
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,1,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_ERROR[37] = // cmd #7
+static u8 option_allowed_cmd_ERROR[41] = // cmd #7
{
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,1
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 1
};
-static u8 option_allowed_cmd_FILETYPE[37] = // cmd #8
+static u8 option_allowed_cmd_FILETYPE[41] = // cmd #8
{
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,1, 0
};
-static u8 option_allowed_cmd_FILEATTRIB[37] = // cmd #9
+static u8 option_allowed_cmd_FILEATTRIB[41] = // cmd #9
{
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_SYMBOLS[37] = // cmd #10
+static u8 option_allowed_cmd_SYMBOLS[41] = // cmd #10
{
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_FUNCTIONS[37] = // cmd #11
+static u8 option_allowed_cmd_FUNCTIONS[41] = // cmd #11
{
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_CALCULATE[37] = // cmd #12
+static u8 option_allowed_cmd_CALCULATE[41] = // cmd #12
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_MATRIX[37] = // cmd #13
+static u8 option_allowed_cmd_MATRIX[41] = // cmd #13
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,1,0,1,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_FLOAT[37] = // cmd #14
+static u8 option_allowed_cmd_FLOAT[41] = // cmd #14
{
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_EXPORT[37] = // cmd #15
+static u8 option_allowed_cmd_EXPORT[41] = // cmd #15
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0
+};
+
+static u8 option_allowed_cmd_CAT[41] = // cmd #16
+{
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,1,
+ 1,0,0,0,0, 0,0,0,0,1, 0
};
-static u8 option_allowed_cmd_CAT[37] = // cmd #16
+static u8 option_allowed_cmd_DECODE[41] = // cmd #17
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,1,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,1,
+ 1,1,1,1,1, 1,1,1,1,1, 0
};
-static u8 option_allowed_cmd_DECODE[37] = // cmd #17
+static u8 option_allowed_cmd_ENCODE[41] = // cmd #18
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,1,1,1,1,
- 1,1,1,1,1, 1,0
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,1,
+ 1,1,1,1,1, 1,1,1,1,1, 0
};
-static u8 option_allowed_cmd_ENCODE[37] = // cmd #18
+static u8 option_allowed_cmd_COPY[41] = // cmd #19
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,1,1,1,1,
- 1,1,1,1,1, 1,0
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,1,
+ 1,1,1,1,1, 1,1,1,1,1, 0
};
-static u8 option_allowed_cmd_COPY[37] = // cmd #19
+static u8 option_allowed_cmd_CFF[41] = // cmd #20
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,1,1,1,1,
- 1,1,1,1,1, 1,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 1,0,1,0,1,
+ 1,1,1,1,1, 1,1,1,1,1, 0
};
-static u8 option_allowed_cmd_CFF[37] = // cmd #20
+static u8 option_allowed_cmd_TYPES[41] = // cmd #21
{
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,1,0,1,0, 1,1,1,1,1,
- 1,1,1,1,1, 1,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_FLAGS[37] = // cmd #21
+static u8 option_allowed_cmd_FLAGS[41] = // cmd #22
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,1,1,0, 0,1,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,1,1,0,0,
+ 1,0,0,0,0, 0,0,0,0,1, 0
};
-static u8 option_allowed_cmd_DUMP[37] = // cmd #22
+static u8 option_allowed_cmd_DUMP[41] = // cmd #23
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,1,0,1,0, 0,1,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,0,0,
+ 1,0,0,0,0, 0,0,0,0,1, 0
};
-static u8 option_allowed_cmd_DBRIEF[37] = // cmd #23
+static u8 option_allowed_cmd_DBRIEF[41] = // cmd #24
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,1,0,1,0, 0,1,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,0,0,
+ 1,0,0,0,0, 0,0,0,0,1, 0
};
-static u8 option_allowed_cmd_LIST[37] = // cmd #24
+static u8 option_allowed_cmd_LIST[41] = // cmd #25
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,1,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,0,
+ 1,0,0,0,0, 0,0,0,0,1, 0
};
-static u8 option_allowed_cmd_TRIANGLES[37] = // cmd #25
+static u8 option_allowed_cmd_TRIANGLES[41] = // cmd #26
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,1,0,1,0, 0,1,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,0,0,
+ 1,0,0,0,0, 0,0,0,0,1, 0
};
-static u8 option_allowed_cmd_TRAVERSE[37] = // cmd #26
+static u8 option_allowed_cmd_TRAVERSE[41] = // cmd #27
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,1,0,1,0, 0,1,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,0,0,
+ 1,0,0,0,0, 0,0,0,0,1, 0
};
-static u8 option_allowed_cmd_FALL[37] = // cmd #27
+static u8 option_allowed_cmd_FALL[41] = // cmd #28
{
- 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,1,0,1,0, 0,1,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,0,0,
+ 1,0,0,0,0, 0,0,0,0,1, 0
};
-static u8 option_allowed_cmd_CHECK[37] = // cmd #28
+static u8 option_allowed_cmd_CHECK[41] = // cmd #29
{
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,1,0, 1,1,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,1,0,1,
+ 1,0,0,0,0, 0,0,0,0,1, 0
};
-static u8 option_allowed_cmd_ANALYZE[37] = // cmd #29
+static u8 option_allowed_cmd_SHA1[41] = // cmd #30
+{
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,1, 0
+};
+
+static u8 option_allowed_cmd_ANALYZE[41] = // cmd #31
{
0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,0,0,0,0, 0,0,0,0,1, 0
};
-static u8 option_allowed_cmd_BLOW[37] = // cmd #30
+static u8 option_allowed_cmd_BLOW[41] = // cmd #32
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 1,0
+ 0,0,0,0,0, 0,0,0,0,1, 0
};
@@ -1321,6 +1395,7 @@ static const InfoOption_t * option_tab_tool[] =
OptionInfo + OPT_QUIET,
OptionInfo + OPT_VERBOSE,
OptionInfo + OPT_LOGGING,
+ OptionInfo + OPT_WARN,
OptionInfo + OPT_DE,
OptionInfo + OPT_COLORS,
OptionInfo + OPT_NO_COLORS,
@@ -1688,6 +1763,14 @@ static const InfoOption_t * option_tab_cmd_CFF[] =
0
};
+static const InfoOption_t * option_tab_cmd_TYPES[] =
+{
+ OptionInfo + OPT_NO_HEADER,
+ &option_cmd_TYPES_BRIEF,
+
+ 0
+};
+
static const InfoOption_t * option_tab_cmd_FLAGS[] =
{
OptionInfo + OPT_NO_HEADER,
@@ -1952,6 +2035,44 @@ static const InfoOption_t * option_tab_cmd_CHECK[] =
0
};
+static const InfoOption_t * option_tab_cmd_SHA1[] =
+{
+ OptionInfo + OPT_IGNORE,
+ OptionInfo + OPT_ID,
+ OptionInfo + OPT_BASE64,
+ OptionInfo + OPT_DB64,
+ OptionInfo + OPT_CODING,
+ &option_cmd_SHA1_BRIEF,
+
+ OptionInfo + OPT_NONE, // separator
+
+ OptionInfo + OPT_CONST,
+ OptionInfo + OPT_SCALE,
+ OptionInfo + OPT_SHIFT,
+ OptionInfo + OPT_XSS,
+ OptionInfo + OPT_YSS,
+ OptionInfo + OPT_ZSS,
+ OptionInfo + OPT_ROT,
+ OptionInfo + OPT_XROT,
+ OptionInfo + OPT_YROT,
+ OptionInfo + OPT_ZROT,
+ OptionInfo + OPT_TRANSLATE,
+ OptionInfo + OPT_NULL,
+ OptionInfo + OPT_NEXT,
+ OptionInfo + OPT_ASCALE,
+ OptionInfo + OPT_AROT,
+ OptionInfo + OPT_TFORM_SCRIPT,
+ OptionInfo + OPT_KCL,
+ OptionInfo + OPT_KCL_FLAG,
+ OptionInfo + OPT_KCL_SCRIPT,
+ OptionInfo + OPT_TRI_AREA,
+ OptionInfo + OPT_TRI_HEIGHT,
+ OptionInfo + OPT_FLAG_FILE,
+ OptionInfo + OPT_SLOT,
+
+ 0
+};
+
static const InfoOption_t * option_tab_cmd_ANALYZE[] =
{
OptionInfo + OPT_IGNORE,
@@ -2010,7 +2131,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"Wiimms KCL Tool : Analyze, modify, export and create KCL and OBJ"
" files.",
0,
- 26,
+ 27,
option_tab_tool,
0
},
@@ -2358,6 +2479,26 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
option_allowed_cmd_CFF
},
+ { CMD_TYPES,
+ true,
+ false,
+ false,
+ "TYPES",
+ 0,
+ "wkclt TYPES arg...",
+ "Print a line with KCL flag details for each argument. ARG is a comma"
+ " or space separated list of a optional BASEVAL and a list of TERMS."
+ " BASEVAL can be any hexa-decimal number. The format of TERMS is"
+ " X[=]VALUE. So a TERM begin with letter T (Type), V (Value) or a"
+ " group identifier (W, X,Y or Z), followed by an optional equal sign"
+ " and finished by a decimal number. It overrides the related part of"
+ " BASEVAL.",
+ 0,
+ 2,
+ option_tab_cmd_TYPES,
+ option_allowed_cmd_TYPES
+ },
+
{ CMD_FLAGS,
false,
false,
@@ -2491,6 +2632,21 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
option_allowed_cmd_CHECK
},
+ { CMD_SHA1,
+ false,
+ false,
+ false,
+ "SHA1",
+ 0,
+ "wszst SHA1 [source]...",
+ "Print a SHA1 checksum of the KCL for each source. The checksum is"
+ " calculated after patching.",
+ 0,
+ 29,
+ option_tab_cmd_SHA1,
+ option_allowed_cmd_SHA1
+ },
+
{ CMD_ANALYZE,
true,
false,
diff --git a/project/src/ui/ui-wkclt.h b/project/src/ui/ui-wkclt.h
index a23e0d9..50c89ca 100644
--- a/project/src/ui/ui-wkclt.h
+++ b/project/src/ui/ui-wkclt.h
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -75,6 +75,10 @@ typedef enum enumOptions
OPT_KCL_SCRIPT,
OPT_FLAG_FILE,
OPT_SLOT,
+ OPT_ID,
+ OPT_BASE64,
+ OPT_DB64,
+ OPT_CODING,
OPT_ROUND,
OPT_LONG,
OPT_NO_HEADER,
@@ -93,7 +97,7 @@ typedef enum enumOptions
OPT_IGNORE,
OPT_SECTIONS,
- OPT__N_SPECIFIC, // == 37
+ OPT__N_SPECIFIC, // == 41
//----- global options -----
@@ -108,6 +112,7 @@ typedef enum enumOptions
OPT_QUIET,
OPT_VERBOSE,
OPT_LOGGING,
+ OPT_WARN,
OPT_DE,
OPT_COLORS,
OPT_NO_COLORS,
@@ -133,7 +138,7 @@ typedef enum enumOptions
OPT_NEW,
OPT_EXTRACT,
- OPT__N_TOTAL // == 72
+ OPT__N_TOTAL // == 77
} enumOptions;
@@ -167,6 +172,10 @@ typedef enum enumOptions
// OB_KCL_SCRIPT = 1llu << OPT_KCL_SCRIPT,
// OB_FLAG_FILE = 1llu << OPT_FLAG_FILE,
// OB_SLOT = 1llu << OPT_SLOT,
+// OB_ID = 1llu << OPT_ID,
+// OB_BASE64 = 1llu << OPT_BASE64,
+// OB_DB64 = 1llu << OPT_DB64,
+// OB_CODING = 1llu << OPT_CODING,
// OB_ROUND = 1llu << OPT_ROUND,
// OB_LONG = 1llu << OPT_LONG,
// OB_NO_HEADER = 1llu << OPT_NO_HEADER,
@@ -285,6 +294,9 @@ typedef enum enumOptions
// | OB_IGNORE
// | OB_FLAG_FILE,
//
+// OB_CMD_TYPES = OB_NO_HEADER
+// | OB_BRIEF,
+//
// OB_CMD_FLAGS = OB_NO_HEADER
// | OB_NO_CHECK
// | OB_IGNORE
@@ -327,6 +339,14 @@ typedef enum enumOptions
// | OB_NO_CHECK
// | OB_IGNORE,
//
+// OB_CMD_SHA1 = OB_IGNORE
+// | OB_ID
+// | OB_BASE64
+// | OB_DB64
+// | OB_CODING
+// | OB_BRIEF
+// | OB_GRP_TRANSFORM,
+//
// OB_CMD_ANALYZE = OB_IGNORE
// | OB_GRP_TRANSFORM,
//
@@ -364,6 +384,7 @@ typedef enum enumCommands
CMD_ENCODE,
CMD_COPY,
CMD_CFF,
+ CMD_TYPES,
CMD_FLAGS,
CMD_DUMP,
CMD_DBRIEF,
@@ -372,11 +393,12 @@ typedef enum enumCommands
CMD_TRAVERSE,
CMD_FALL,
CMD_CHECK,
+ CMD_SHA1,
CMD_ANALYZE,
CMD_BLOW,
- CMD__N // == 31
+ CMD__N // == 33
} enumCommands;
@@ -400,6 +422,7 @@ typedef enum enumGetOpt
GO_NO_PARAM = 'P',
GO_TRACKS = 'T',
GO_VERSION = 'V',
+ GO_WARN = 'W',
GO_CONST = 'c',
GO_DEST = 'd',
@@ -449,6 +472,10 @@ typedef enum enumGetOpt
GO_FLAG_FILE,
GO_XTRIDATA,
GO_SLOT,
+ GO_ID,
+ GO_BASE64,
+ GO_DB64,
+ GO_CODING,
GO_ROUND,
GO_NO_ECHO,
GO_UTF_8,
diff --git a/project/src/ui/ui-wkmpt.c b/project/src/ui/ui-wkmpt.c
index 3227bcd..3d566eb 100644
--- a/project/src/ui/ui-wkmpt.c
+++ b/project/src/ui/ui-wkmpt.c
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -541,8 +541,8 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_MAX_WIDTH, false, false, false, true, false, 0, "max-width",
"maxwidth",
"Define the maximum terminal width (number of columns) for help and"
- " some other messages and disable the automatic detection of the"
- " terminal width. This option is ignored if --width is set."
+ " some other messages. The default is 120. This option is ignored if"
+ " --width is set."
},
{ OPT_QUIET, false, false, false, false, false, 'q', "quiet",
@@ -563,6 +563,16 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"This debug option enables the logging of internal lists and maps."
},
+ { OPT_WARN, false, false, false, false, false, 'W', "warn",
+ "list",
+ "Enable or disable warnings. Parameter 'list' is a comma separated"
+ " list of keywords. A minus sign before a keyword disables a warning."
+ " Each occurrence of the option will only change entered warning and"
+ " all other warnings are untouched.\n"
+ " Keyword DEFAULT resets the default settings, OFF disables and ALL"
+ " enables all. The other allowed keywords are: INVALID-OFFSET."
+ },
+
{ OPT_DE, false, false, false, false, false, 0, "de",
0,
"Use german track and arena names."
@@ -622,7 +632,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_BATTLE, true, false, false, false, false, 0, "battle",
"[=mode]",
"MODE is either OFF, AUTO (default) or ON. Without value, ON is used.\n"
- " If mode is ON, assume a battle arena and enable a spüecial battle"
+ " If mode is ON, assume a battle arena and enable a special battle"
" support. If mode is OFF, disable special battle arena support. If"
" mode is AUTO, analyse the KMP and estimate, if it is a battle"
" areana. Modes ON and OFF override KMP parameter BATTLE-MODE."
@@ -867,7 +877,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" helper option."
},
- {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 93
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 94
};
@@ -1151,7 +1161,7 @@ static const KeywordTab_t CommandTab[] =
/////////////// OptionShort & OptionLong ///////////////
///////////////////////////////////////////////////////////////////////////////
-static const char OptionShort[] = "VhqvLc:w:lHBXPGNM:T:A:td:D:E:orupi";
+static const char OptionShort[] = "VhqvLW:c:w:lHBXPGNM:T:A:td:D:E:orupi";
static const struct option OptionLong[] =
{
@@ -1168,6 +1178,7 @@ static const struct option OptionLong[] =
{ "quiet", 0, 0, 'q' },
{ "verbose", 0, 0, 'v' },
{ "logging", 0, 0, 'L' },
+ { "warn", 1, 0, 'W' },
{ "de", 0, 0, GO_DE },
{ "colors", 2, 0, GO_COLORS },
{ "no-colors", 0, 0, GO_NO_COLORS },
@@ -1328,7 +1339,7 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x054 T */ OPT_TRACKS,
/* 0x055 */ 0,
/* 0x056 V */ OPT_VERSION,
- /* 0x057 */ 0,
+ /* 0x057 W */ OPT_WARN,
/* 0x058 X */ OPT_EXPORT,
/* 0x059 */ 0,0,0,0, 0,0,0,0, 0,0,
/* 0x063 c */ OPT_CONST,
@@ -1629,6 +1640,7 @@ static const InfoOption_t * option_tab_tool[] =
OptionInfo + OPT_QUIET,
OptionInfo + OPT_VERBOSE,
OptionInfo + OPT_LOGGING,
+ OptionInfo + OPT_WARN,
OptionInfo + OPT_DE,
OptionInfo + OPT_COLORS,
OptionInfo + OPT_NO_COLORS,
@@ -2184,7 +2196,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"Wiimms KMP Tool : Analyze, modify, export and create (compile) KMP"
" files.",
0,
- 35,
+ 36,
option_tab_tool,
0
},
diff --git a/project/src/ui/ui-wkmpt.h b/project/src/ui/ui-wkmpt.h
index 7c0fbe2..a40d695 100644
--- a/project/src/ui/ui-wkmpt.h
+++ b/project/src/ui/ui-wkmpt.h
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -120,6 +120,7 @@ typedef enum enumOptions
OPT_QUIET,
OPT_VERBOSE,
OPT_LOGGING,
+ OPT_WARN,
OPT_DE,
OPT_COLORS,
OPT_NO_COLORS,
@@ -154,7 +155,7 @@ typedef enum enumOptions
OPT_NEW,
OPT_EXTRACT,
- OPT__N_TOTAL // == 93
+ OPT__N_TOTAL // == 94
} enumOptions;
@@ -435,6 +436,7 @@ typedef enum enumGetOpt
GO_NO_PARAM = 'P',
GO_TRACKS = 'T',
GO_VERSION = 'V',
+ GO_WARN = 'W',
GO_EXPORT = 'X',
GO_CONST = 'c',
diff --git a/project/src/ui/ui-wlect.c b/project/src/ui/ui-wlect.c
index ef0a3e4..1c67b0d 100644
--- a/project/src/ui/ui-wlect.c
+++ b/project/src/ui/ui-wlect.c
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -117,6 +117,13 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" CT-TEXT)."
},
+ { OPT_LE_ARENA, false, true, false, false, false, 0, "le-arena",
+ "file",
+ "Use this file to define property and music defaults for arenas. The"
+ " file format can be an text file. Option --le-define may override"
+ " these defaults."
+ },
+
{ OPT_LPAR, false, false, false, false, false, 0, "lpar",
"file",
"Read a LPAR file to overwrite settings of LE-CODE section LPAR."
@@ -351,7 +358,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"Print in machine readable sections and parameter lines."
},
- {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 43
+ {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 44
//----- global options -----
@@ -407,8 +414,8 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_MAX_WIDTH, false, false, false, true, false, 0, "max-width",
"maxwidth",
"Define the maximum terminal width (number of columns) for help and"
- " some other messages and disable the automatic detection of the"
- " terminal width. This option is ignored if --width is set."
+ " some other messages. The default is 120. This option is ignored if"
+ " --width is set."
},
{ OPT_QUIET, false, false, false, false, false, 'q', "quiet",
@@ -429,6 +436,16 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"This debug option enables the logging of internal lists and maps."
},
+ { OPT_WARN, false, false, false, false, false, 'W', "warn",
+ "list",
+ "Enable or disable warnings. Parameter 'list' is a comma separated"
+ " list of keywords. A minus sign before a keyword disables a warning."
+ " Each occurrence of the option will only change entered warning and"
+ " all other warnings are untouched.\n"
+ " Keyword DEFAULT resets the default settings, OFF disables and ALL"
+ " enables all. The other allowed keywords are: INVALID-OFFSET."
+ },
+
{ OPT_DE, false, false, false, false, false, 0, "de",
0,
"Use german track and arena names."
@@ -595,7 +612,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" helper option."
},
- {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 77
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 79
};
@@ -756,7 +773,7 @@ static const KeywordTab_t CommandTab[] =
/////////////// OptionShort & OptionLong ///////////////
///////////////////////////////////////////////////////////////////////////////
-static const char OptionShort[] = "VhqvLc:lHBXPM:tCd:D:E:orupi";
+static const char OptionShort[] = "VhqvLW:c:lHBXPM:tCd:D:E:orupi";
static const struct option OptionLong[] =
{
@@ -773,6 +790,7 @@ static const struct option OptionLong[] =
{ "quiet", 0, 0, 'q' },
{ "verbose", 0, 0, 'v' },
{ "logging", 0, 0, 'L' },
+ { "warn", 1, 0, 'W' },
{ "de", 0, 0, GO_DE },
{ "colors", 2, 0, GO_COLORS },
{ "no-colors", 0, 0, GO_NO_COLORS },
@@ -833,6 +851,8 @@ static const struct option OptionLong[] =
{ "EXTRACT", 0, 0, GO_EXTRACT },
{ "le-define", 1, 0, GO_LE_DEFINE },
{ "ledefine", 1, 0, GO_LE_DEFINE },
+ { "le-arena", 1, 0, GO_LE_ARENA },
+ { "learena", 1, 0, GO_LE_ARENA },
{ "lpar", 1, 0, GO_LPAR },
{ "alias", 1, 0, GO_ALIAS },
{ "engine", 1, 0, GO_ENGINE },
@@ -916,7 +936,7 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x050 P */ OPT_NO_PARAM,
/* 0x051 */ 0,0,0,0, 0,
/* 0x056 V */ OPT_VERSION,
- /* 0x057 */ 0,
+ /* 0x057 W */ OPT_WARN,
/* 0x058 X */ OPT_EXPORT,
/* 0x059 */ 0,0,0,0, 0,0,0,0, 0,0,
/* 0x063 c */ OPT_CONST,
@@ -968,29 +988,30 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x09d */ OPT_NEW,
/* 0x09e */ OPT_EXTRACT,
/* 0x09f */ OPT_LE_DEFINE,
- /* 0x0a0 */ OPT_LPAR,
- /* 0x0a1 */ OPT_ALIAS,
- /* 0x0a2 */ OPT_ENGINE,
- /* 0x0a3 */ OPT_200CC,
- /* 0x0a4 */ OPT_PERFMON,
- /* 0x0a5 */ OPT_CUSTOM_TT,
- /* 0x0a6 */ OPT_XPFLAGS,
- /* 0x0a7 */ OPT_SPEEDOMETER,
- /* 0x0a8 */ OPT_DEBUG,
- /* 0x0a9 */ OPT_TRACK_DIR,
- /* 0x0aa */ OPT_COPY_TRACKS,
- /* 0x0ab */ OPT_MOVE_TRACKS,
- /* 0x0ac */ OPT_MOVE1_TRACKS,
- /* 0x0ad */ OPT_LINK_TRACKS,
- /* 0x0ae */ OPT_LOAD_BMG,
- /* 0x0af */ OPT_PATCH_BMG,
- /* 0x0b0 */ OPT_MACRO_BMG,
- /* 0x0b1 */ OPT_PATCH_NAMES,
- /* 0x0b2 */ OPT_ORDER_BY,
- /* 0x0b3 */ OPT_ORDER_ALL,
- /* 0x0b4 */ OPT_NUMBER,
- /* 0x0b5 */ OPT_SECTIONS,
- /* 0x0b6 */ 0,0,0,0, 0,0,0,0, 0,0,
+ /* 0x0a0 */ OPT_LE_ARENA,
+ /* 0x0a1 */ OPT_LPAR,
+ /* 0x0a2 */ OPT_ALIAS,
+ /* 0x0a3 */ OPT_ENGINE,
+ /* 0x0a4 */ OPT_200CC,
+ /* 0x0a5 */ OPT_PERFMON,
+ /* 0x0a6 */ OPT_CUSTOM_TT,
+ /* 0x0a7 */ OPT_XPFLAGS,
+ /* 0x0a8 */ OPT_SPEEDOMETER,
+ /* 0x0a9 */ OPT_DEBUG,
+ /* 0x0aa */ OPT_TRACK_DIR,
+ /* 0x0ab */ OPT_COPY_TRACKS,
+ /* 0x0ac */ OPT_MOVE_TRACKS,
+ /* 0x0ad */ OPT_MOVE1_TRACKS,
+ /* 0x0ae */ OPT_LINK_TRACKS,
+ /* 0x0af */ OPT_LOAD_BMG,
+ /* 0x0b0 */ OPT_PATCH_BMG,
+ /* 0x0b1 */ OPT_MACRO_BMG,
+ /* 0x0b2 */ OPT_PATCH_NAMES,
+ /* 0x0b3 */ OPT_ORDER_BY,
+ /* 0x0b4 */ OPT_ORDER_ALL,
+ /* 0x0b5 */ OPT_NUMBER,
+ /* 0x0b6 */ OPT_SECTIONS,
+ /* 0x0b7 */ 0,0,0,0, 0,0,0,0, 0,
/* 0x0c0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
/* 0x0d0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
/* 0x0e0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
@@ -1006,154 +1027,154 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/////////////// opt_allowed_cmd_* ///////////////
///////////////////////////////////////////////////////////////////////////////
-static u8 option_allowed_cmd_VERSION[43] = // cmd #1
+static u8 option_allowed_cmd_VERSION[44] = // cmd #1
{
0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,1
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1
};
-static u8 option_allowed_cmd_HELP[43] = // cmd #2
+static u8 option_allowed_cmd_HELP[44] = // cmd #2
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1
+ 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1
};
-static u8 option_allowed_cmd_CONFIG[43] = // cmd #3
+static u8 option_allowed_cmd_CONFIG[44] = // cmd #3
{
0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_ARGTEST[43] = // cmd #4
+static u8 option_allowed_cmd_ARGTEST[44] = // cmd #4
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1
+ 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1
};
-static u8 option_allowed_cmd_TEST[43] = // cmd #5
+static u8 option_allowed_cmd_TEST[44] = // cmd #5
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1
+ 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1
};
-static u8 option_allowed_cmd_COLORS[43] = // cmd #6
+static u8 option_allowed_cmd_COLORS[44] = // cmd #6
{
0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_ERROR[43] = // cmd #7
+static u8 option_allowed_cmd_ERROR[44] = // cmd #7
{
0,0,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,1
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1
};
-static u8 option_allowed_cmd_FILETYPE[43] = // cmd #8
+static u8 option_allowed_cmd_FILETYPE[44] = // cmd #8
{
0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,1,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0
};
-static u8 option_allowed_cmd_FILEATTRIB[43] = // cmd #9
+static u8 option_allowed_cmd_FILEATTRIB[44] = // cmd #9
{
0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_SYMBOLS[43] = // cmd #10
+static u8 option_allowed_cmd_SYMBOLS[44] = // cmd #10
{
0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_FUNCTIONS[43] = // cmd #11
+static u8 option_allowed_cmd_FUNCTIONS[44] = // cmd #11
{
0,0,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_CALCULATE[43] = // cmd #12
+static u8 option_allowed_cmd_CALCULATE[44] = // cmd #12
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_FLOAT[43] = // cmd #13
+static u8 option_allowed_cmd_FLOAT[44] = // cmd #13
{
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_EXPORT[43] = // cmd #14
+static u8 option_allowed_cmd_EXPORT[44] = // cmd #14
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_DPAD[43] = // cmd #15
+static u8 option_allowed_cmd_DPAD[44] = // cmd #15
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_DUMP[43] = // cmd #16
+static u8 option_allowed_cmd_DUMP[44] = // cmd #16
{
- 0,0,1,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, 1,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,1,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_DL[43] = // cmd #17
+static u8 option_allowed_cmd_DL[44] = // cmd #17
{
- 0,0,1,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, 1,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,1,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_DLL[43] = // cmd #18
+static u8 option_allowed_cmd_DLL[44] = // cmd #18
{
- 0,0,1,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, 1,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,1,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_BIN_DIFF[43] = // cmd #19
+static u8 option_allowed_cmd_BIN_DIFF[44] = // cmd #19
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
};
-static u8 option_allowed_cmd_PATCH[43] = // cmd #20
+static u8 option_allowed_cmd_PATCH[44] = // cmd #20
{
- 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,0,
- 0,0,0,1,1, 1,1,1,1,1, 1,1,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0,
+ 0,0,0,0,1, 1,1,1,1,1, 1,1,1,0
};
-static u8 option_allowed_cmd_LPAR[43] = // cmd #21
+static u8 option_allowed_cmd_LPAR[44] = // cmd #21
{
- 0,0,0,1,1, 1,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, 1,0,0,0,0, 0,0,0,0,0,
- 0,0,0,1,1, 1,1,1,1,1, 1,1,0
+ 0,0,0,1,1, 1,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,1, 1,1,1,1,1, 1,1,1,0
};
-static u8 option_allowed_cmd_CREATE[43] = // cmd #22
+static u8 option_allowed_cmd_CREATE[44] = // cmd #22
{
- 0,0,0,1,1, 1,0,1,1,1, 1,0,1,0,1, 1,1,1,1,1, 1,0,0,0,0, 0,0,0,0,0,
- 0,0,0,1,1, 1,1,1,1,1, 1,1,0
+ 0,0,0,1,1, 1,0,1,1,1, 1,0,0,1,0, 1,1,1,1,1, 1,1,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,1, 1,1,1,1,1, 1,1,1,0
};
-static u8 option_allowed_cmd_CAT[43] = // cmd #23
+static u8 option_allowed_cmd_CAT[44] = // cmd #23
{
- 0,0,0,1,1, 1,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,1,0
+ 0,0,0,1,1, 1,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0
};
-static u8 option_allowed_cmd_DECODE[43] = // cmd #24
+static u8 option_allowed_cmd_DECODE[44] = // cmd #24
{
- 0,0,0,1,1, 1,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0,
- 0,0,0,1,1, 1,1,1,1,1, 1,1,0
+ 0,0,0,1,1, 1,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,1, 1,1,1,1,1, 1,1,1,0
};
-static u8 option_allowed_cmd_ENCODE[43] = // cmd #25
+static u8 option_allowed_cmd_ENCODE[44] = // cmd #25
{
- 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0,
- 0,0,0,1,1, 1,1,1,1,1, 1,1,0
+ 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,1, 1,1,1,1,1, 1,1,1,0
};
@@ -1175,6 +1196,7 @@ static const InfoOption_t * option_tab_tool[] =
OptionInfo + OPT_QUIET,
OptionInfo + OPT_VERBOSE,
OptionInfo + OPT_LOGGING,
+ OptionInfo + OPT_WARN,
OptionInfo + OPT_DE,
OptionInfo + OPT_COLORS,
OptionInfo + OPT_NO_COLORS,
@@ -1573,7 +1595,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"wlect [option]... command [option|parameter|file]...",
"Wiimms LE-CODE Tool : Manage the LE-CODE and LEX extensions.",
0,
- 27,
+ 28,
option_tab_tool,
0
},
diff --git a/project/src/ui/ui-wlect.h b/project/src/ui/ui-wlect.h
index 15ffb62..4e6198e 100644
--- a/project/src/ui/ui-wlect.h
+++ b/project/src/ui/ui-wlect.h
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -67,6 +67,7 @@ typedef enum enumOptions
OPT_LT_ONLINE,
OPT_LT_N_PLAYERS,
OPT_LE_DEFINE,
+ OPT_LE_ARENA,
OPT_LPAR,
OPT_ALIAS,
OPT_ENGINE,
@@ -99,7 +100,7 @@ typedef enum enumOptions
OPT_IGNORE,
OPT_SECTIONS,
- OPT__N_SPECIFIC, // == 43
+ OPT__N_SPECIFIC, // == 44
//----- global options -----
@@ -114,6 +115,7 @@ typedef enum enumOptions
OPT_QUIET,
OPT_VERBOSE,
OPT_LOGGING,
+ OPT_WARN,
OPT_DE,
OPT_COLORS,
OPT_NO_COLORS,
@@ -138,7 +140,7 @@ typedef enum enumOptions
OPT_NEW,
OPT_EXTRACT,
- OPT__N_TOTAL // == 77
+ OPT__N_TOTAL // == 79
} enumOptions;
@@ -164,6 +166,7 @@ typedef enum enumOptions
// OB_LT_ONLINE = 1llu << OPT_LT_ONLINE,
// OB_LT_N_PLAYERS = 1llu << OPT_LT_N_PLAYERS,
// OB_LE_DEFINE = 1llu << OPT_LE_DEFINE,
+// OB_LE_ARENA = 1llu << OPT_LE_ARENA,
// OB_LPAR = 1llu << OPT_LPAR,
// OB_ALIAS = 1llu << OPT_ALIAS,
// OB_ENGINE = 1llu << OPT_ENGINE,
@@ -216,6 +219,7 @@ typedef enum enumOptions
// | OB_DEBUG,
//
// OB_GRP_PATCH = OB_LE_DEFINE
+// | OB_LE_ARENA
// | OB_LPAR
// | OB_ALIAS
// | OB_GRP_PARAM,
@@ -379,6 +383,7 @@ typedef enum enumGetOpt
GO_MAX_FILE_SIZE = 'M',
GO_NO_PARAM = 'P',
GO_VERSION = 'V',
+ GO_WARN = 'W',
GO_EXPORT = 'X',
GO_CONST = 'c',
@@ -426,6 +431,7 @@ typedef enum enumGetOpt
GO_NEW,
GO_EXTRACT,
GO_LE_DEFINE,
+ GO_LE_ARENA,
GO_LPAR,
GO_ALIAS,
GO_ENGINE,
diff --git a/project/src/ui/ui-wmdlt.c b/project/src/ui/ui-wmdlt.c
index 712ab1e..14d0016 100644
--- a/project/src/ui/ui-wmdlt.c
+++ b/project/src/ui/ui-wmdlt.c
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -371,8 +371,8 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_MAX_WIDTH, false, false, false, true, false, 0, "max-width",
"maxwidth",
"Define the maximum terminal width (number of columns) for help and"
- " some other messages and disable the automatic detection of the"
- " terminal width. This option is ignored if --width is set."
+ " some other messages. The default is 120. This option is ignored if"
+ " --width is set."
},
{ OPT_QUIET, false, false, false, false, false, 'q', "quiet",
@@ -393,6 +393,16 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"This debug option enables the logging of internal lists and maps."
},
+ { OPT_WARN, false, false, false, false, false, 'W', "warn",
+ "list",
+ "Enable or disable warnings. Parameter 'list' is a comma separated"
+ " list of keywords. A minus sign before a keyword disables a warning."
+ " Each occurrence of the option will only change entered warning and"
+ " all other warnings are untouched.\n"
+ " Keyword DEFAULT resets the default settings, OFF disables and ALL"
+ " enables all. The other allowed keywords are: INVALID-OFFSET."
+ },
+
{ OPT_DE, false, false, false, false, false, 0, "de",
0,
"Use german track and arena names."
@@ -562,7 +572,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" helper option."
},
- {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 65
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 66
};
@@ -719,7 +729,7 @@ static const KeywordTab_t CommandTab[] =
/////////////// OptionShort & OptionLong ///////////////
///////////////////////////////////////////////////////////////////////////////
-static const char OptionShort[] = "VhqvLc:lHBPNM:T:A:td:D:E:orupi";
+static const char OptionShort[] = "VhqvLW:c:lHBPNM:T:A:td:D:E:orupi";
static const struct option OptionLong[] =
{
@@ -736,6 +746,7 @@ static const struct option OptionLong[] =
{ "quiet", 0, 0, 'q' },
{ "verbose", 0, 0, 'v' },
{ "logging", 0, 0, 'L' },
+ { "warn", 1, 0, 'W' },
{ "de", 0, 0, GO_DE },
{ "colors", 2, 0, GO_COLORS },
{ "no-colors", 0, 0, GO_NO_COLORS },
@@ -843,7 +854,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x054 T */ OPT_TRACKS,
/* 0x055 */ 0,
/* 0x056 V */ OPT_VERSION,
- /* 0x057 */ 0,0,0,0, 0,0,0,0, 0,0,0,0,
+ /* 0x057 W */ OPT_WARN,
+ /* 0x058 */ 0,0,0,0, 0,0,0,0, 0,0,0,
/* 0x063 c */ OPT_CONST,
/* 0x064 d */ OPT_DEST,
/* 0x065 */ 0,0,0,
@@ -1064,6 +1076,7 @@ static const InfoOption_t * option_tab_tool[] =
OptionInfo + OPT_QUIET,
OptionInfo + OPT_VERBOSE,
OptionInfo + OPT_LOGGING,
+ OptionInfo + OPT_WARN,
OptionInfo + OPT_DE,
OptionInfo + OPT_COLORS,
OptionInfo + OPT_NO_COLORS,
@@ -1439,7 +1452,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"wmdlt [option]... command [option|parameter|file]...",
"Wiimms MDL Tool : Decode raw MDL and encode text MDL files.",
0,
- 24,
+ 25,
option_tab_tool,
0
},
diff --git a/project/src/ui/ui-wmdlt.h b/project/src/ui/ui-wmdlt.h
index 80b7b9b..54e94e3 100644
--- a/project/src/ui/ui-wmdlt.h
+++ b/project/src/ui/ui-wmdlt.h
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -104,6 +104,7 @@ typedef enum enumOptions
OPT_QUIET,
OPT_VERBOSE,
OPT_LOGGING,
+ OPT_WARN,
OPT_DE,
OPT_COLORS,
OPT_NO_COLORS,
@@ -126,7 +127,7 @@ typedef enum enumOptions
OPT_NEW,
OPT_EXTRACT,
- OPT__N_TOTAL // == 65
+ OPT__N_TOTAL // == 66
} enumOptions;
@@ -343,6 +344,7 @@ typedef enum enumGetOpt
GO_NO_PARAM = 'P',
GO_TRACKS = 'T',
GO_VERSION = 'V',
+ GO_WARN = 'W',
GO_CONST = 'c',
GO_DEST = 'd',
diff --git a/project/src/ui/ui-wpatt.c b/project/src/ui/ui-wpatt.c
index 3e4d23a..b0df846 100644
--- a/project/src/ui/ui-wpatt.c
+++ b/project/src/ui/ui-wpatt.c
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -213,8 +213,8 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_MAX_WIDTH, false, false, false, true, false, 0, "max-width",
"maxwidth",
"Define the maximum terminal width (number of columns) for help and"
- " some other messages and disable the automatic detection of the"
- " terminal width. This option is ignored if --width is set."
+ " some other messages. The default is 120. This option is ignored if"
+ " --width is set."
},
{ OPT_QUIET, false, false, false, false, false, 'q', "quiet",
@@ -235,6 +235,16 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"This debug option enables the logging of internal lists and maps."
},
+ { OPT_WARN, false, false, false, false, false, 'W', "warn",
+ "list",
+ "Enable or disable warnings. Parameter 'list' is a comma separated"
+ " list of keywords. A minus sign before a keyword disables a warning."
+ " Each occurrence of the option will only change entered warning and"
+ " all other warnings are untouched.\n"
+ " Keyword DEFAULT resets the default settings, OFF disables and ALL"
+ " enables all. The other allowed keywords are: INVALID-OFFSET."
+ },
+
{ OPT_DE, false, false, false, false, false, 0, "de",
0,
"Use german track and arena names."
@@ -393,7 +403,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" helper option."
},
- {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 49
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 50
};
@@ -516,7 +526,7 @@ static const KeywordTab_t CommandTab[] =
/////////////// OptionShort & OptionLong ///////////////
///////////////////////////////////////////////////////////////////////////////
-static const char OptionShort[] = "VhqvLc:lHBPNM:T:A:td:D:E:orupi";
+static const char OptionShort[] = "VhqvLW:c:lHBPNM:T:A:td:D:E:orupi";
static const struct option OptionLong[] =
{
@@ -533,6 +543,7 @@ static const struct option OptionLong[] =
{ "quiet", 0, 0, 'q' },
{ "verbose", 0, 0, 'v' },
{ "logging", 0, 0, 'L' },
+ { "warn", 1, 0, 'W' },
{ "de", 0, 0, GO_DE },
{ "colors", 2, 0, GO_COLORS },
{ "no-colors", 0, 0, GO_NO_COLORS },
@@ -622,7 +633,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x054 T */ OPT_TRACKS,
/* 0x055 */ 0,
/* 0x056 V */ OPT_VERSION,
- /* 0x057 */ 0,0,0,0, 0,0,0,0, 0,0,0,0,
+ /* 0x057 W */ OPT_WARN,
+ /* 0x058 */ 0,0,0,0, 0,0,0,0, 0,0,0,
/* 0x063 c */ OPT_CONST,
/* 0x064 d */ OPT_DEST,
/* 0x065 */ 0,0,0,
@@ -787,6 +799,7 @@ static const InfoOption_t * option_tab_tool[] =
OptionInfo + OPT_QUIET,
OptionInfo + OPT_VERBOSE,
OptionInfo + OPT_LOGGING,
+ OptionInfo + OPT_WARN,
OptionInfo + OPT_DE,
OptionInfo + OPT_COLORS,
OptionInfo + OPT_NO_COLORS,
@@ -987,7 +1000,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"wpatt [option]... command [option|parameter|file]...",
"Wiimms PAT Tool : Decode raw PAT and encode text PAT files.",
0,
- 23,
+ 24,
option_tab_tool,
0
},
diff --git a/project/src/ui/ui-wpatt.h b/project/src/ui/ui-wpatt.h
index 06cf1ed..414f0a8 100644
--- a/project/src/ui/ui-wpatt.h
+++ b/project/src/ui/ui-wpatt.h
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -89,6 +89,7 @@ typedef enum enumOptions
OPT_QUIET,
OPT_VERBOSE,
OPT_LOGGING,
+ OPT_WARN,
OPT_DE,
OPT_COLORS,
OPT_NO_COLORS,
@@ -110,7 +111,7 @@ typedef enum enumOptions
OPT_NEW,
OPT_EXTRACT,
- OPT__N_TOTAL // == 49
+ OPT__N_TOTAL // == 50
} enumOptions;
@@ -266,6 +267,7 @@ typedef enum enumGetOpt
GO_NO_PARAM = 'P',
GO_TRACKS = 'T',
GO_VERSION = 'V',
+ GO_WARN = 'W',
GO_CONST = 'c',
GO_DEST = 'd',
diff --git a/project/src/ui/ui-wstrt.c b/project/src/ui/ui-wstrt.c
index 32cace8..b82ca2a 100644
--- a/project/src/ui/ui-wstrt.c
+++ b/project/src/ui/ui-wstrt.c
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -306,7 +306,14 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_NO_0X, false, false, false, false, false, '0', "no-0x",
0,
- "Suppress 0x prefix of hex numbers."
+ "Suppress 0x prefix of hex numbers. This is the default for cheat"
+ " codes."
+ },
+
+ { OPT_UPPER, false, false, false, false, false, 'U', "upper",
+ 0,
+ "Print digits A-F of hex numbers in upper case. This is the default"
+ " for cheat codes."
},
{ OPT_VADDR, false, false, false, false, true, 0, "vaddr",
@@ -479,7 +486,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" dependent (multiple of format size)."
},
- {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 65
+ {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 66
//----- global options -----
@@ -540,8 +547,8 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_MAX_WIDTH, false, false, false, true, false, 0, "max-width",
"maxwidth",
"Define the maximum terminal width (number of columns) for help and"
- " some other messages and disable the automatic detection of the"
- " terminal width. This option is ignored if --width is set."
+ " some other messages. The default is 120. This option is ignored if"
+ " --width is set."
},
{ OPT_QUIET, false, false, false, false, false, 'q', "quiet",
@@ -562,6 +569,16 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"This debug option enables the logging of internal lists and maps."
},
+ { OPT_WARN, false, false, false, false, false, 'W', "warn",
+ "list",
+ "Enable or disable warnings. Parameter 'list' is a comma separated"
+ " list of keywords. A minus sign before a keyword disables a warning."
+ " Each occurrence of the option will only change entered warning and"
+ " all other warnings are untouched.\n"
+ " Keyword DEFAULT resets the default settings, OFF disables and ALL"
+ " enables all. The other allowed keywords are: INVALID-OFFSET."
+ },
+
{ OPT_DE, false, false, false, false, false, 0, "de",
0,
"Use german track and arena names."
@@ -869,7 +886,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" directory."
},
- {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 116
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 118
};
@@ -1079,7 +1096,7 @@ static const KeywordTab_t CommandTab[] =
/////////////// OptionShort & OptionLong ///////////////
///////////////////////////////////////////////////////////////////////////////
-static const char OptionShort[] = "Vh@qvLc:lBHT:A:R:td:D:E:orupi0";
+static const char OptionShort[] = "Vh@qvLW:c:lBHT:A:R:td:D:E:orupi0U";
static const struct option OptionLong[] =
{
@@ -1097,6 +1114,7 @@ static const struct option OptionLong[] =
{ "quiet", 0, 0, 'q' },
{ "verbose", 0, 0, 'v' },
{ "logging", 0, 0, 'L' },
+ { "warn", 1, 0, 'W' },
{ "de", 0, 0, GO_DE },
{ "colors", 2, 0, GO_COLORS },
{ "no-colors", 0, 0, GO_NO_COLORS },
@@ -1210,6 +1228,7 @@ static const struct option OptionLong[] =
{ "order", 1, 0, GO_ORDER },
{ "no-0x", 0, 0, '0' },
{ "no0x", 0, 0, '0' },
+ { "upper", 0, 0, 'U' },
{ "vaddr", 1, 0, GO_VADDR },
{ "va", 1, 0, GO_VADDR },
{ "faddr", 1, 0, GO_FADDR },
@@ -1281,9 +1300,10 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x052 R */ OPT_REGION,
/* 0x053 */ 0,
/* 0x054 T */ OPT_TRACKS,
- /* 0x055 */ 0,
+ /* 0x055 U */ OPT_UPPER,
/* 0x056 V */ OPT_VERSION,
- /* 0x057 */ 0,0,0,0, 0,0,0,0, 0,0,0,0,
+ /* 0x057 W */ OPT_WARN,
+ /* 0x058 */ 0,0,0,0, 0,0,0,0, 0,0,0,
/* 0x063 c */ OPT_CONST,
/* 0x064 d */ OPT_DEST,
/* 0x065 */ 0,0,0,
@@ -1407,172 +1427,172 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/////////////// opt_allowed_cmd_* ///////////////
///////////////////////////////////////////////////////////////////////////////
-static u8 option_allowed_cmd_VERSION[65] = // cmd #1
+static u8 option_allowed_cmd_VERSION[66] = // cmd #1
{
0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_HELP[65] = // cmd #2
+static u8 option_allowed_cmd_HELP[66] = // cmd #2
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1
+ 1,1,1,1,1, 1
};
-static u8 option_allowed_cmd_CONFIG[65] = // cmd #3
+static u8 option_allowed_cmd_CONFIG[66] = // cmd #3
{
0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_ARGTEST[65] = // cmd #4
+static u8 option_allowed_cmd_ARGTEST[66] = // cmd #4
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1
+ 1,1,1,1,1, 1
};
-static u8 option_allowed_cmd_TEST[65] = // cmd #5
+static u8 option_allowed_cmd_TEST[66] = // cmd #5
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1
+ 1,1,1,1,1, 1
};
-static u8 option_allowed_cmd_COLORS[65] = // cmd #6
+static u8 option_allowed_cmd_COLORS[66] = // cmd #6
{
0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_ERROR[65] = // cmd #7
+static u8 option_allowed_cmd_ERROR[66] = // cmd #7
{
0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_FILETYPE[65] = // cmd #8
+static u8 option_allowed_cmd_FILETYPE[66] = // cmd #8
{
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_FILEATTRIB[65] = // cmd #9
+static u8 option_allowed_cmd_FILEATTRIB[66] = // cmd #9
{
0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_RAWDUMP[65] = // cmd #10
+static u8 option_allowed_cmd_RAWDUMP[66] = // cmd #10
{
0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_DUMP[65] = // cmd #11
+static u8 option_allowed_cmd_DUMP[66] = // cmd #11
{
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_CDUMP[65] = // cmd #12
+static u8 option_allowed_cmd_CDUMP[66] = // cmd #12
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_HEXDUMP[65] = // cmd #13
+static u8 option_allowed_cmd_HEXDUMP[66] = // cmd #13
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1
+ 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
+ 1,1,1,1,1, 1
};
-static u8 option_allowed_cmd_PORT[65] = // cmd #14
+static u8 option_allowed_cmd_PORT[66] = // cmd #14
{
0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,1,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_WHERE[65] = // cmd #15
+static u8 option_allowed_cmd_WHERE[66] = // cmd #15
{
0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_HTTPS[65] = // cmd #16
+static u8 option_allowed_cmd_HTTPS[66] = // cmd #16
{
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_EXTRACT[65] = // cmd #17
+static u8 option_allowed_cmd_EXTRACT[66] = // cmd #17
{
0,0,0,0,0, 0,1,1,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_TRACKS[65] = // cmd #18
+static u8 option_allowed_cmd_TRACKS[66] = // cmd #18
{
0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_ARENAS[65] = // cmd #19
+static u8 option_allowed_cmd_ARENAS[66] = // cmd #19
{
0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_FILES[65] = // cmd #20
+static u8 option_allowed_cmd_FILES[66] = // cmd #20
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_FIND[65] = // cmd #21
+static u8 option_allowed_cmd_FIND[66] = // cmd #21
{
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_POINTS[65] = // cmd #22
+static u8 option_allowed_cmd_POINTS[66] = // cmd #22
{
0,1,1,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_ANALYZE[65] = // cmd #23
+static u8 option_allowed_cmd_ANALYZE[66] = // cmd #23
{
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
-static u8 option_allowed_cmd_PATCH[65] = // cmd #24
+static u8 option_allowed_cmd_PATCH[66] = // cmd #24
{
0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0
+ 0,0,0,0,0, 0
};
@@ -1594,6 +1614,7 @@ static const InfoOption_t * option_tab_tool[] =
OptionInfo + OPT_QUIET,
OptionInfo + OPT_VERBOSE,
OptionInfo + OPT_LOGGING,
+ OptionInfo + OPT_WARN,
OptionInfo + OPT_DE,
OptionInfo + OPT_COLORS,
OptionInfo + OPT_NO_COLORS,
@@ -1772,6 +1793,7 @@ static const InfoOption_t * option_tab_cmd_PORT[] =
OptionInfo + OPT_PORT_DB,
OptionInfo + OPT_ORDER,
OptionInfo + OPT_NO_0X,
+ OptionInfo + OPT_UPPER,
&option_cmd_PORT_NO_HEADER,
&option_cmd_PORT_BRIEF,
&option_cmd_PORT_LONG,
@@ -1783,6 +1805,7 @@ static const InfoOption_t * option_tab_cmd_WHERE[] =
{
OptionInfo + OPT_ORDER,
OptionInfo + OPT_NO_0X,
+ OptionInfo + OPT_UPPER,
&option_cmd_WHERE_NO_HEADER,
&option_cmd_WHERE_BRIEF,
&option_cmd_WHERE_LONG,
@@ -1997,7 +2020,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"Wiimms StaticR Tool : Manipulate the 'main.dol' and 'StaticR.rel'"
" files of Mario Kart Wii.",
0,
- 39,
+ 40,
option_tab_tool,
0
},
@@ -2218,12 +2241,13 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"The command expects a list of keywords or hex numbers. Keywords are"
" PAL (default), USA, JAPAN, KOREA, or any abbreviation of them. They"
" select the region for the following addresses. The hex numbers (with"
- " or without 0x prefix) are interpreted as addresses. If possible,"
- " they are ported to all other regions. The result is printed as"
- " colorized table.\n"
- " This address porting is EXPERIMENTAL!",
+ " or without 0x prefix) are interpreted as addresses. If an address"
+ " begins with m or s, then it is interpreted as a file offset for"
+ " main.dol or staticr.rel. All addresses are ported to all other"
+ " regions. The result is printed as colorized table. See"
+ " https://szs.wiimm.de/cmd/wstrt/port for more details.",
0,
- 6,
+ 7,
option_tab_cmd_PORT,
option_allowed_cmd_PORT
},
@@ -2239,9 +2263,10 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
" in which the specified addresses are located is calculated for each"
" region. The result is output as a human and machine readable table.\n"
" This command is well suited to converting addresses into file"
- " offsets and vice versa.",
+ " offsets and vice versa. See https://szs.wiimm.de/cmd/wstrt/where for"
+ " more details.",
0,
- 5,
+ 6,
option_tab_cmd_WHERE,
option_allowed_cmd_WHERE
},
diff --git a/project/src/ui/ui-wstrt.h b/project/src/ui/ui-wstrt.h
index f3ca5e2..31ecfe0 100644
--- a/project/src/ui/ui-wstrt.h
+++ b/project/src/ui/ui-wstrt.h
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -89,6 +89,7 @@ typedef enum enumOptions
OPT_PORT_DB,
OPT_ORDER,
OPT_NO_0X,
+ OPT_UPPER,
OPT_VADDR,
OPT_FADDR,
OPT_SNAME,
@@ -121,7 +122,7 @@ typedef enum enumOptions
OPT_WIDE,
OPT_BYTES,
- OPT__N_SPECIFIC, // == 65
+ OPT__N_SPECIFIC, // == 66
//----- global options -----
@@ -137,6 +138,7 @@ typedef enum enumOptions
OPT_QUIET,
OPT_VERBOSE,
OPT_LOGGING,
+ OPT_WARN,
OPT_DE,
OPT_COLORS,
OPT_NO_COLORS,
@@ -177,7 +179,7 @@ typedef enum enumOptions
OPT_CLEAN_DOL,
OPT_CT_DIR,
- OPT__N_TOTAL // == 116
+ OPT__N_TOTAL // == 118
} enumOptions;
@@ -225,6 +227,7 @@ typedef enum enumOptions
// OB_PORT_DB = 1llu << OPT_PORT_DB,
// OB_ORDER = 1llu << OPT_ORDER,
// OB_NO_0X = 1llu << OPT_NO_0X,
+// OB_UPPER = 1llu << OPT_UPPER,
// OB_VADDR = 1llu << OPT_VADDR,
// OB_FADDR = 1llu << OPT_FADDR,
// OB_SNAME = 1llu << OPT_SNAME,
@@ -340,12 +343,14 @@ typedef enum enumOptions
// OB_CMD_PORT = OB_PORT_DB
// | OB_ORDER
// | OB_NO_0X
+// | OB_UPPER
// | OB_NO_HEADER
// | OB_BRIEF
// | OB_LONG,
//
// OB_CMD_WHERE = OB_ORDER
// | OB_NO_0X
+// | OB_UPPER
// | OB_NO_HEADER
// | OB_BRIEF
// | OB_LONG,
@@ -459,7 +464,9 @@ typedef enum enumGetOpt
GO_LOGGING = 'L',
GO_REGION = 'R',
GO_TRACKS = 'T',
+ GO_UPPER = 'U',
GO_VERSION = 'V',
+ GO_WARN = 'W',
GO_CONST = 'c',
GO_DEST = 'd',
diff --git a/project/src/ui/ui-wszst.c b/project/src/ui/ui-wszst.c
index 124c1ea..1d62e8e 100644
--- a/project/src/ui/ui-wszst.c
+++ b/project/src/ui/ui-wszst.c
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -466,7 +466,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_CODING, false, false, false, false, false, 0, "coding",
"mode",
"Define the coding of the non alphanumeric characters for BASE64:"
- " STANDART (+/=, default), URL (-_=), STAR (-_*) or XML (.-*)."
+ " STANDARD (+/=, default), URL (-_=), STAR (-_*) or XML (.-*)."
},
{ OPT_VERIFY, false, false, false, false, false, 0, "verify",
@@ -720,6 +720,11 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" https://szs.wiimm.de/opt/source for more details."
},
+ { OPT_REFERENCE, false, false, false, false, false, 0, "ref",
+ "path",
+ "Define a reference SZS."
+ },
+
{ OPT_DEST, false, false, false, false, false, 'd', "dest",
"path",
"Define a destination path (directory/file). The destination - means:"
@@ -1127,7 +1132,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"Print in machine readable sections and parameter lines."
},
- {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 134
+ {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 135
//----- global options -----
@@ -1183,8 +1188,8 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_MAX_WIDTH, false, false, false, true, false, 0, "max-width",
"maxwidth",
"Define the maximum terminal width (number of columns) for help and"
- " some other messages and disable the automatic detection of the"
- " terminal width. This option is ignored if --width is set."
+ " some other messages. The default is 120. This option is ignored if"
+ " --width is set."
},
{ OPT_QUIET, false, false, false, false, false, 'q', "quiet",
@@ -1205,6 +1210,16 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"This debug option enables the logging of internal lists and maps."
},
+ { OPT_WARN, false, false, false, false, false, 'W', "warn",
+ "list",
+ "Enable or disable warnings. Parameter 'list' is a comma separated"
+ " list of keywords. A minus sign before a keyword disables a warning."
+ " Each occurrence of the option will only change entered warning and"
+ " all other warnings are untouched.\n"
+ " Keyword DEFAULT resets the default settings, OFF disables and ALL"
+ " enables all. The other allowed keywords are: INVALID-OFFSET."
+ },
+
{ OPT_DE, false, false, false, false, false, 0, "de",
0,
"Use german track and arena names."
@@ -1264,7 +1279,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
{ OPT_BATTLE, true, false, false, false, false, 0, "battle",
"[=mode]",
"MODE is either OFF, AUTO (default) or ON. Without value, ON is used.\n"
- " If mode is ON, assume a battle arena and enable a spüecial battle"
+ " If mode is ON, assume a battle arena and enable a special battle"
" support. If mode is OFF, disable special battle arena support. If"
" mode is AUTO, analyse the KMP and estimate, if it is a battle"
" areana. Modes ON and OFF override KMP parameter BATTLE-MODE."
@@ -1753,7 +1768,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" helper option."
},
- {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 209
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 211
};
@@ -1964,6 +1979,18 @@ static const InfoOption_t option_cmd_TRACKS_LONG =
" old BRRES sub file formats too."
};
+static const InfoOption_t option_cmd_SIZEOF_SORT =
+ { OPT_SORT, false, false, false, false, false, 'S', "sort",
+ "mode",
+ "Define a sort mode. Keywords are: NONE (default), NAME end SIZE."
+ };
+
+static const InfoOption_t option_cmd_SIZEOF_BRIEF =
+ { OPT_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ "Limit output to SZS specific data."
+ };
+
static const InfoOption_t option_cmd_LIST_LONG =
{ OPT_LONG, false, false, false, false, false, 'l', "long",
0,
@@ -2058,6 +2085,12 @@ static const InfoOption_t option_cmd_ANALYZE_QUIET =
"Suppress logging of input and output files."
};
+static const InfoOption_t option_cmd_IS_TEXTURE_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "Append a colon and the filename after each status."
+ };
+
static const InfoOption_t option_cmd_FEATURES_BRIEF =
{ OPT_BRIEF, false, false, false, false, false, 'B', "brief",
0,
@@ -2068,7 +2101,7 @@ static const InfoOption_t option_cmd_FEATURES_BRIEF =
static const InfoOption_t option_cmd_FEATURES_LONG =
{ OPT_LONG, false, false, false, false, false, 'l', "long",
0,
- "Print additnal comments."
+ "Print additional comments."
};
static const InfoOption_t option_cmd_FEATURES_QUIET =
@@ -2258,6 +2291,7 @@ static const KeywordTab_t CommandTab[] =
{ CMD_TRACKS, "TRACKS", 0, 0 },
{ CMD_SCANCACHE, "SCANCACHE", 0, 0 },
{ CMD_EXPORT, "_EXPORT", 0, 0 },
+ { CMD_SIZEOF, "SIZEOF", 0, 0 },
{ CMD_CODE, "_CODE", 0, 0 },
{ CMD_RECODE, "_RECODE", 0, 0 },
{ CMD_SUBFILE, "_SUBFILE", 0, 0 },
@@ -2288,6 +2322,7 @@ static const KeywordTab_t CommandTab[] =
{ CMD_SHA1, "SHA1", 0, 0 },
{ CMD_ANALYZE, "ANALYZE", "ANA", 0 },
{ CMD_ANALYZE, "ANALYSE", 0, 0 },
+ { CMD_IS_TEXTURE, "IS-TEXTURE", "ISTEXTURE", 0 },
{ CMD_FEATURES, "FEATURES", 0, 0 },
{ CMD_DISTRIBUTION, "DISTRIBUTION", "DIST", 0 },
{ CMD_DIFF, "DIFF", "CMP", 0 },
@@ -2330,7 +2365,7 @@ static const KeywordTab_t CommandTab[] =
/////////////// OptionShort & OptionLong ///////////////
///////////////////////////////////////////////////////////////////////////////
-static const char OptionShort[] = "VhqvLc:lHB1XPS:M:T:A:x:ts:d:D:E:orupiNC:nRea";
+static const char OptionShort[] = "VhqvLW:c:lHB1XPS:M:T:A:x:ts:d:D:E:orupiNC:nRea";
static const struct option OptionLong[] =
{
@@ -2347,6 +2382,7 @@ static const struct option OptionLong[] =
{ "quiet", 0, 0, 'q' },
{ "verbose", 0, 0, 'v' },
{ "logging", 0, 0, 'L' },
+ { "warn", 1, 0, 'W' },
{ "de", 0, 0, GO_DE },
{ "colors", 2, 0, GO_COLORS },
{ "no-colors", 0, 0, GO_NO_COLORS },
@@ -2575,6 +2611,8 @@ static const struct option OptionLong[] =
{ "EXTRACT", 1, 0, GO_EXTRACT },
{ "source", 1, 0, 's' },
{ "src", 1, 0, 's' },
+ { "ref", 1, 0, GO_REFERENCE },
+ { "reference", 1, 0, GO_REFERENCE },
{ "dest", 1, 0, 'd' },
{ "DEST", 1, 0, 'D' },
{ "esc", 1, 0, 'E' },
@@ -2721,7 +2759,7 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x054 T */ OPT_TRACKS,
/* 0x055 */ 0,
/* 0x056 V */ OPT_VERSION,
- /* 0x057 */ 0,
+ /* 0x057 W */ OPT_WARN,
/* 0x058 X */ OPT_EXPORT,
/* 0x059 */ 0,0,0,0, 0,0,0,0,
/* 0x061 a */ OPT_ALL,
@@ -2880,49 +2918,50 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x102 */ OPT_STD,
/* 0x103 */ OPT_NEW,
/* 0x104 */ OPT_EXTRACT,
- /* 0x105 */ OPT_NUMBER,
- /* 0x106 */ OPT_REMOVE_SRC,
- /* 0x107 */ OPT_IGNORE_SETUP,
- /* 0x108 */ OPT_PURGE,
- /* 0x109 */ OPT_ALIGN_U8,
- /* 0x10a */ OPT_ALIGN_PACK,
- /* 0x10b */ OPT_ALIGN_BRRES,
- /* 0x10c */ OPT_ALIGN_BREFF,
- /* 0x10d */ OPT_ALIGN_BREFT,
- /* 0x10e */ OPT_ALIGN,
- /* 0x10f */ OPT_ENCODE_ALL,
- /* 0x110 */ OPT_ENCODE_IMG,
- /* 0x111 */ OPT_NO_ENCODE,
- /* 0x112 */ OPT_NO_RECURSE,
- /* 0x113 */ OPT_AUTO_ADD,
- /* 0x114 */ OPT_NO_ECHO,
- /* 0x115 */ OPT_PT_DIR,
- /* 0x116 */ OPT_RM_AIPARAM,
- /* 0x117 */ OPT_U8,
- /* 0x118 */ OPT_SZS,
- /* 0x119 */ OPT_WU8,
- /* 0x11a */ OPT_XWU8,
- /* 0x11b */ OPT_WBZ,
- /* 0x11c */ OPT_PACK,
- /* 0x11d */ OPT_BRRES,
- /* 0x11e */ OPT_BREFF,
- /* 0x11f */ OPT_BREFT,
- /* 0x120 */ OPT_NO_COMPRESS,
- /* 0x121 */ OPT_FAST,
- /* 0x122 */ OPT_LINKS,
- /* 0x123 */ OPT_BASEDIR,
- /* 0x124 */ OPT_DECODE,
- /* 0x125 */ OPT_MIPMAPS,
- /* 0x126 */ OPT_NO_MIPMAPS,
- /* 0x127 */ OPT_N_MIPMAPS,
- /* 0x128 */ OPT_MAX_MIPMAPS,
- /* 0x129 */ OPT_MIPMAP_SIZE,
- /* 0x12a */ OPT_FAST_MIPMAPS,
- /* 0x12b */ OPT_CMPR_DEFAULT,
- /* 0x12c */ OPT_CUT,
- /* 0x12d */ OPT_RAW,
- /* 0x12e */ OPT_SECTIONS,
- /* 0x12f */ 0,0,0,0, 0,0,0,
+ /* 0x105 */ OPT_REFERENCE,
+ /* 0x106 */ OPT_NUMBER,
+ /* 0x107 */ OPT_REMOVE_SRC,
+ /* 0x108 */ OPT_IGNORE_SETUP,
+ /* 0x109 */ OPT_PURGE,
+ /* 0x10a */ OPT_ALIGN_U8,
+ /* 0x10b */ OPT_ALIGN_PACK,
+ /* 0x10c */ OPT_ALIGN_BRRES,
+ /* 0x10d */ OPT_ALIGN_BREFF,
+ /* 0x10e */ OPT_ALIGN_BREFT,
+ /* 0x10f */ OPT_ALIGN,
+ /* 0x110 */ OPT_ENCODE_ALL,
+ /* 0x111 */ OPT_ENCODE_IMG,
+ /* 0x112 */ OPT_NO_ENCODE,
+ /* 0x113 */ OPT_NO_RECURSE,
+ /* 0x114 */ OPT_AUTO_ADD,
+ /* 0x115 */ OPT_NO_ECHO,
+ /* 0x116 */ OPT_PT_DIR,
+ /* 0x117 */ OPT_RM_AIPARAM,
+ /* 0x118 */ OPT_U8,
+ /* 0x119 */ OPT_SZS,
+ /* 0x11a */ OPT_WU8,
+ /* 0x11b */ OPT_XWU8,
+ /* 0x11c */ OPT_WBZ,
+ /* 0x11d */ OPT_PACK,
+ /* 0x11e */ OPT_BRRES,
+ /* 0x11f */ OPT_BREFF,
+ /* 0x120 */ OPT_BREFT,
+ /* 0x121 */ OPT_NO_COMPRESS,
+ /* 0x122 */ OPT_FAST,
+ /* 0x123 */ OPT_LINKS,
+ /* 0x124 */ OPT_BASEDIR,
+ /* 0x125 */ OPT_DECODE,
+ /* 0x126 */ OPT_MIPMAPS,
+ /* 0x127 */ OPT_NO_MIPMAPS,
+ /* 0x128 */ OPT_N_MIPMAPS,
+ /* 0x129 */ OPT_MAX_MIPMAPS,
+ /* 0x12a */ OPT_MIPMAP_SIZE,
+ /* 0x12b */ OPT_FAST_MIPMAPS,
+ /* 0x12c */ OPT_CMPR_DEFAULT,
+ /* 0x12d */ OPT_CUT,
+ /* 0x12e */ OPT_RAW,
+ /* 0x12f */ OPT_SECTIONS,
+ /* 0x130 */ 0,0,0,0, 0,0,
};
//
@@ -2930,688 +2969,706 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/////////////// opt_allowed_cmd_* ///////////////
///////////////////////////////////////////////////////////////////////////////
-static u8 option_allowed_cmd_VERSION[134] = // cmd #1
+static u8 option_allowed_cmd_VERSION[135] = // cmd #1
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1
};
-static u8 option_allowed_cmd_HELP[134] = // cmd #2
+static u8 option_allowed_cmd_HELP[135] = // cmd #2
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1
+ 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1
};
-static u8 option_allowed_cmd_CONFIG[134] = // cmd #3
+static u8 option_allowed_cmd_CONFIG[135] = // cmd #3
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1
};
-static u8 option_allowed_cmd_INSTALL[134] = // cmd #4
+static u8 option_allowed_cmd_INSTALL[135] = // cmd #4
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_ARGTEST[134] = // cmd #5
+static u8 option_allowed_cmd_ARGTEST[135] = // cmd #5
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1
+ 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1
};
-static u8 option_allowed_cmd_TEST[134] = // cmd #6
+static u8 option_allowed_cmd_TEST[135] = // cmd #6
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1
+ 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1
};
-static u8 option_allowed_cmd_COLORS[134] = // cmd #7
+static u8 option_allowed_cmd_COLORS[135] = // cmd #7
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_ERROR[134] = // cmd #8
+static u8 option_allowed_cmd_ERROR[135] = // cmd #8
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,1, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1
};
-static u8 option_allowed_cmd_FILETYPE[134] = // cmd #9
+static u8 option_allowed_cmd_FILETYPE[135] = // cmd #9
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_FILEATTRIB[134] = // cmd #10
+static u8 option_allowed_cmd_FILEATTRIB[135] = // cmd #10
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_BRSUB[134] = // cmd #11
+static u8 option_allowed_cmd_BRSUB[135] = // cmd #11
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_SYMBOLS[134] = // cmd #12
+static u8 option_allowed_cmd_SYMBOLS[135] = // cmd #12
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_FUNCTIONS[134] = // cmd #13
+static u8 option_allowed_cmd_FUNCTIONS[135] = // cmd #13
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,1, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_CALCULATE[134] = // cmd #14
+static u8 option_allowed_cmd_CALCULATE[135] = // cmd #14
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_MATRIX[134] = // cmd #15
+static u8 option_allowed_cmd_MATRIX[135] = // cmd #15
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_FLOAT[134] = // cmd #16
+static u8 option_allowed_cmd_FLOAT[135] = // cmd #16
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_VR_CALC[134] = // cmd #17
+static u8 option_allowed_cmd_VR_CALC[135] = // cmd #17
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_VR_RACE[134] = // cmd #18
+static u8 option_allowed_cmd_VR_RACE[135] = // cmd #18
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_AUTOADD[134] = // cmd #19
+static u8 option_allowed_cmd_AUTOADD[135] = // cmd #19
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,0,0,1, 0,1,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,1,0,0, 1,0,1,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_TRACKS[134] = // cmd #20
+static u8 option_allowed_cmd_TRACKS[135] = // cmd #20
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,1,0,0, 1,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0
};
-static u8 option_allowed_cmd_SCANCACHE[134] = // cmd #21
+static u8 option_allowed_cmd_SCANCACHE[135] = // cmd #21
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_EXPORT[134] = // cmd #22
+static u8 option_allowed_cmd_EXPORT[135] = // cmd #22
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_CODE[134] = // cmd #23
+static u8 option_allowed_cmd_SIZEOF[135] = // cmd #23
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
+};
+
+static u8 option_allowed_cmd_CODE[135] = // cmd #24
+{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_RECODE[134] = // cmd #24
+static u8 option_allowed_cmd_RECODE[135] = // cmd #25
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_SUBFILE[134] = // cmd #25
+static u8 option_allowed_cmd_SUBFILE[135] = // cmd #26
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,0,1, 1,1,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,0, 1,1,1,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_TESTNORM[134] = // cmd #26
+static u8 option_allowed_cmd_TESTNORM[135] = // cmd #27
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_LIST[134] = // cmd #27
+static u8 option_allowed_cmd_LIST[135] = // cmd #28
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,1,0,1,1, 1,1,1,1,1, 1,1,0,0
+ 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,1,0,1, 1,1,1,1,1, 1,1,1,0,0
};
-static u8 option_allowed_cmd_LIST_L[134] = // cmd #28
+static u8 option_allowed_cmd_LIST_L[135] = // cmd #29
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,1,0,1,1, 1,1,1,1,1, 1,1,0,0
+ 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,1,0,1, 1,1,1,1,1, 1,1,1,0,0
};
-static u8 option_allowed_cmd_LIST_LL[134] = // cmd #29
+static u8 option_allowed_cmd_LIST_LL[135] = // cmd #30
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,1,0,1,1, 1,1,1,1,1, 1,1,0,0
+ 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,1,0,1, 1,1,1,1,1, 1,1,1,0,0
};
-static u8 option_allowed_cmd_LIST_LLL[134] = // cmd #30
+static u8 option_allowed_cmd_LIST_LLL[135] = // cmd #31
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,1,0,1,1, 1,1,1,1,1, 1,1,0,0
+ 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,1,0,1, 1,1,1,1,1, 1,1,1,0,0
};
-static u8 option_allowed_cmd_LIST_A[134] = // cmd #31
+static u8 option_allowed_cmd_LIST_A[135] = // cmd #32
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,1,0,1,1, 1,1,1,1,1, 1,1,0,0
+ 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,1,0,1, 1,1,1,1,1, 1,1,1,0,0
};
-static u8 option_allowed_cmd_LIST_LA[134] = // cmd #32
+static u8 option_allowed_cmd_LIST_LA[135] = // cmd #33
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,1,0,1,1, 1,1,1,1,1, 1,1,0,0
+ 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,1,0,1, 1,1,1,1,1, 1,1,1,0,0
};
-static u8 option_allowed_cmd_NAME_REF[134] = // cmd #33
+static u8 option_allowed_cmd_NAME_REF[135] = // cmd #34
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_ILIST[134] = // cmd #34
+static u8 option_allowed_cmd_ILIST[135] = // cmd #35
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,0,0,1, 1,1,1,1,1, 1,0,1,0,0
};
-static u8 option_allowed_cmd_ILIST_L[134] = // cmd #35
+static u8 option_allowed_cmd_ILIST_L[135] = // cmd #36
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,0,0,1, 1,1,1,1,1, 1,0,1,0,0
};
-static u8 option_allowed_cmd_ILIST_LL[134] = // cmd #36
+static u8 option_allowed_cmd_ILIST_LL[135] = // cmd #37
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,0,0,1, 1,1,1,1,1, 1,0,1,0,0
};
-static u8 option_allowed_cmd_ILIST_A[134] = // cmd #37
+static u8 option_allowed_cmd_ILIST_A[135] = // cmd #38
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,0,0,1, 1,1,1,1,1, 1,0,1,0,0
};
-static u8 option_allowed_cmd_ILIST_LA[134] = // cmd #38
+static u8 option_allowed_cmd_ILIST_LA[135] = // cmd #39
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,0,0,1, 1,1,1,1,1, 1,0,1,0,0
};
-static u8 option_allowed_cmd_MEMORY[134] = // cmd #39
+static u8 option_allowed_cmd_MEMORY[135] = // cmd #40
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,0,0
};
-static u8 option_allowed_cmd_MEMORY_A[134] = // cmd #40
+static u8 option_allowed_cmd_MEMORY_A[135] = // cmd #41
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,0,0
};
-static u8 option_allowed_cmd_DUMP[134] = // cmd #41
+static u8 option_allowed_cmd_DUMP[135] = // cmd #42
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 0,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,0,0,0,1, 1,1,1,1,1, 1,0,1,0,0
};
-static u8 option_allowed_cmd_SHA1[134] = // cmd #42
+static u8 option_allowed_cmd_SHA1[135] = // cmd #43
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 0,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,0,0,0,1, 1,1,1,1,1, 1,0,1,0,0
+};
+
+static u8 option_allowed_cmd_ANALYZE[135] = // cmd #44
+{
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,0,0,0,0, 0,0,0,1,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1
};
-static u8 option_allowed_cmd_ANALYZE[134] = // cmd #43
+static u8 option_allowed_cmd_IS_TEXTURE[135] = // cmd #45
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_FEATURES[134] = // cmd #44
+static u8 option_allowed_cmd_FEATURES[135] = // cmd #46
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1
};
-static u8 option_allowed_cmd_DISTRIBUTION[134] = // cmd #45
+static u8 option_allowed_cmd_DISTRIBUTION[135] = // cmd #47
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,1,1,0,
- 0,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1,
+ 0,0,0,0,1, 1,1,1,1,1, 1,0,1,0,0
};
-static u8 option_allowed_cmd_DIFF[134] = // cmd #46
+static u8 option_allowed_cmd_DIFF[135] = // cmd #48
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 1,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,1,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 1,0,0,0,0, 0,0,0,0,0, 1,1,0,0
+ 0,1,0,0,0, 0,0,0,0,0, 0,1,1,0,0
};
-static u8 option_allowed_cmd_CHECK[134] = // cmd #47
+static u8 option_allowed_cmd_CHECK[135] = // cmd #49
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,0,1,0,
- 0,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,1,
+ 0,0,0,0,1, 1,1,1,1,1, 1,0,1,0,0
};
-static u8 option_allowed_cmd_SLOTS[134] = // cmd #48
+static u8 option_allowed_cmd_SLOTS[135] = // cmd #50
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,0,1,0,
- 0,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,1,
+ 0,0,0,0,1, 1,1,1,1,1, 1,0,1,0,0
};
-static u8 option_allowed_cmd_STGI[134] = // cmd #49
+static u8 option_allowed_cmd_STGI[135] = // cmd #51
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_ISARENA[134] = // cmd #50
+static u8 option_allowed_cmd_ISARENA[135] = // cmd #52
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_NORMALIZE[134] = // cmd #51
+static u8 option_allowed_cmd_NORMALIZE[135] = // cmd #53
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,0,0,
- 1,1,1,1,1, 1,0,0,0,0, 1,0,0,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,1,1,1,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0,
+ 0,1,1,1,1, 1,1,0,0,0, 0,1,0,0,1, 1,1,1,1,1, 1,0,0,0,0, 0,0,1,1,1,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_PATCH[134] = // cmd #52
+static u8 option_allowed_cmd_PATCH[135] = // cmd #54
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,0,0,
- 1,1,1,1,1, 1,0,0,0,0, 1,0,0,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,1,1,1,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0,
+ 0,1,1,1,1, 1,1,0,0,0, 0,1,0,0,1, 1,1,1,1,1, 1,0,0,0,0, 0,1,1,1,1,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_COPY[134] = // cmd #53
+static u8 option_allowed_cmd_COPY[135] = // cmd #55
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,0,0,
- 1,1,1,1,1, 1,0,0,0,0, 1,0,0,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,1,1,1,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0,
+ 0,1,1,1,1, 1,1,0,0,0, 0,1,0,0,1, 1,1,1,1,1, 1,0,0,0,0, 0,1,1,1,1,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_DUPLICATE[134] = // cmd #54
+static u8 option_allowed_cmd_DUPLICATE[135] = // cmd #56
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,1,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,0,0,
- 1,1,1,1,1, 1,0,0,0,0, 1,0,0,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,1,1,1,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0,
+ 0,1,1,1,1, 1,1,0,0,0, 0,1,0,0,1, 1,1,1,1,1, 1,0,0,0,0, 0,1,1,1,1,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_MINIMAP[134] = // cmd #55
+static u8 option_allowed_cmd_MINIMAP[135] = // cmd #57
{
0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,1,1,0,0,
- 1,1,1,1,1, 1,0,0,0,0, 1,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,1,1,0,
+ 0,1,1,1,1, 1,1,0,0,0, 0,1,0,0,1, 1,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_COMPRESS[134] = // cmd #56
+static u8 option_allowed_cmd_COMPRESS[135] = // cmd #58
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,0,0,
- 1,1,1,1,1, 1,0,0,0,0, 1,0,0,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,1,1,1,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0,
+ 0,1,1,1,1, 1,1,0,0,0, 0,1,0,0,1, 1,1,1,1,1, 1,0,0,0,0, 0,1,1,1,1,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_DECOMPRESS[134] = // cmd #57
+static u8 option_allowed_cmd_DECOMPRESS[135] = // cmd #59
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,0,0,
- 1,1,1,1,1, 1,0,0,0,0, 1,0,0,1,1, 1,0,1,0,0, 0,0,0,0,0, 0,0,1,1,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0,
+ 0,1,1,1,1, 1,1,0,0,0, 0,1,0,0,1, 1,1,0,1,0, 0,0,0,0,0, 0,0,0,1,1,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_ENCODE[134] = // cmd #58
+static u8 option_allowed_cmd_ENCODE[135] = // cmd #60
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,1, 1,1,1,1,1, 1,0,1,0,0
};
-static u8 option_allowed_cmd_CREATE[134] = // cmd #59
+static u8 option_allowed_cmd_CREATE[135] = // cmd #61
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,1,1, 1,1,1,0,1, 1,1,0,1,0,
- 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,1,0,
- 0,0,0,1,1, 1,1,1,1,1, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,1, 1,1,1,1,0, 1,1,1,0,1,
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,0,1,
+ 0,0,0,0,1, 1,1,1,1,1, 1,0,1,0,0
};
-static u8 option_allowed_cmd_UPDATE[134] = // cmd #60
+static u8 option_allowed_cmd_UPDATE[135] = // cmd #62
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,1,1,1, 1,1,1,0,1, 1,1,1,0,0,
- 0,0,0,0,0, 0,1,1,1,1, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0,
- 1,0,0,0,0, 0,0,0,0,0, 0,1,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,1,0,1, 1,1,1,1,0, 1,1,1,1,0,
+ 0,0,0,0,0, 0,0,1,1,1, 1,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0,
+ 0,1,0,0,0, 0,0,0,0,0, 0,0,1,0,0
};
-static u8 option_allowed_cmd_EXTRACT[134] = // cmd #61
+static u8 option_allowed_cmd_EXTRACT[135] = // cmd #63
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,1,1,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 1,1,0,1,1, 1,1,1,0,1, 1,1,1,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
- 1,1,1,1,1, 0,0,0,1,1, 1,1,1,0
+ 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 1,1,0,0,1, 1,1,1,1,0, 1,1,1,1,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1,
+ 1,1,1,1,1, 1,0,0,0,1, 1,1,1,1,0
};
-static u8 option_allowed_cmd_XDECODE[134] = // cmd #62
+static u8 option_allowed_cmd_XDECODE[135] = // cmd #64
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,1,1,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 1,1,0,1,1, 1,1,1,0,1, 1,1,1,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
- 1,1,1,1,1, 0,0,0,1,1, 1,1,1,0
+ 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 1,1,0,0,1, 1,1,1,1,0, 1,1,1,1,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1,
+ 1,1,1,1,1, 1,0,0,0,1, 1,1,1,1,0
};
-static u8 option_allowed_cmd_XEXPORT[134] = // cmd #63
+static u8 option_allowed_cmd_XEXPORT[135] = // cmd #65
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,1,1,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 1,1,0,1,1, 1,1,1,0,1, 1,1,1,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
- 1,1,1,1,1, 0,0,0,1,1, 1,1,1,0
+ 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 1,1,0,0,1, 1,1,1,1,0, 1,1,1,1,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1,
+ 1,1,1,1,1, 1,0,0,0,1, 1,1,1,1,0
};
-static u8 option_allowed_cmd_XALL[134] = // cmd #64
+static u8 option_allowed_cmd_XALL[135] = // cmd #66
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,1,1,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 1,1,0,1,1, 1,1,1,0,1, 1,1,1,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1,
- 1,1,1,1,1, 0,0,0,1,1, 1,1,1,0
+ 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 1,1,0,0,1, 1,1,1,1,0, 1,1,1,1,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1,
+ 1,1,1,1,1, 1,0,0,0,1, 1,1,1,1,0
};
-static u8 option_allowed_cmd_XCOMMON[134] = // cmd #65
+static u8 option_allowed_cmd_XCOMMON[135] = // cmd #67
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,0,1, 1,1,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,0, 1,1,1,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_BINARY[134] = // cmd #66
+static u8 option_allowed_cmd_BINARY[135] = // cmd #68
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,0,1, 1,1,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,0, 1,1,1,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_TEXT[134] = // cmd #67
+static u8 option_allowed_cmd_TEXT[135] = // cmd #69
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,1, 0,1,1,0,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1,1,1,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,0,1, 1,1,1,0,0,
+ 1,1,1,1,1, 1,1,1,1,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,0, 1,1,1,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_CAT[134] = // cmd #68
+static u8 option_allowed_cmd_CAT[135] = // cmd #70
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,1, 0,1,1,0,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
+ 1,1,1,1,1, 1,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_BMG[134] = // cmd #69
+static u8 option_allowed_cmd_BMG[135] = // cmd #71
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,1, 0,0,0,0,1, 1,1,1,1,1,
- 1,1,1,1,1, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
+ 1,1,1,1,1, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_KCL[134] = // cmd #70
+static u8 option_allowed_cmd_KCL[135] = // cmd #72
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_KMP[134] = // cmd #71
+static u8 option_allowed_cmd_KMP[135] = // cmd #73
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_LEX[134] = // cmd #72
+static u8 option_allowed_cmd_LEX[135] = // cmd #74
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_INFO[134] = // cmd #73
+static u8 option_allowed_cmd_INFO[135] = // cmd #75
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_GHOST[134] = // cmd #74
+static u8 option_allowed_cmd_GHOST[135] = // cmd #76
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,1,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,1,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1
};
-static u8 option_allowed_cmd_YAZDUMP[134] = // cmd #75
+static u8 option_allowed_cmd_YAZDUMP[135] = // cmd #77
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,0,1, 1,1,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,0, 1,1,1,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
-static u8 option_allowed_cmd_VEHICLE[134] = // cmd #76
+static u8 option_allowed_cmd_VEHICLE[135] = // cmd #78
{
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,1, 0,1,0,0,0, 0,0,0,0,0,
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,1, 1,0,1,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0
};
@@ -3633,6 +3690,7 @@ static const InfoOption_t * option_tab_tool[] =
OptionInfo + OPT_QUIET,
OptionInfo + OPT_VERBOSE,
OptionInfo + OPT_LOGGING,
+ OptionInfo + OPT_WARN,
OptionInfo + OPT_DE,
OptionInfo + OPT_COLORS,
OptionInfo + OPT_NO_COLORS,
@@ -3916,6 +3974,15 @@ static const InfoOption_t * option_tab_cmd_EXPORT[] =
0
};
+static const InfoOption_t * option_tab_cmd_SIZEOF[] =
+{
+ &option_cmd_SIZEOF_SORT,
+ &option_cmd_SIZEOF_BRIEF,
+ OptionInfo + OPT_LOGGING,
+
+ 0
+};
+
static const InfoOption_t * option_tab_cmd_CODE[] =
{
@@ -4908,12 +4975,23 @@ static const InfoOption_t * option_tab_cmd_ANALYZE[] =
OptionInfo + OPT_NONE, // separator
+ OptionInfo + OPT_REFERENCE,
OptionInfo + OPT_DEST,
OptionInfo + OPT_DEST2,
0
};
+static const InfoOption_t * option_tab_cmd_IS_TEXTURE[] =
+{
+ OptionInfo + OPT_IGNORE,
+ OptionInfo + OPT_REFERENCE,
+ OptionInfo + OPT_BATTLE,
+ &option_cmd_IS_TEXTURE_LONG,
+
+ 0
+};
+
static const InfoOption_t * option_tab_cmd_FEATURES[] =
{
&option_cmd_FEATURES_BRIEF,
@@ -6825,7 +6903,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
" SZS, U8, PACK, BRRES, BREFF and BREFT archives. Additonally, RARC"
" archive can be extracted. It is also a wrapper to all other tools.",
0,
- 66,
+ 67,
option_tab_tool,
0
},
@@ -7204,6 +7282,21 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
option_allowed_cmd_EXPORT
},
+ { CMD_SIZEOF,
+ true,
+ false,
+ false,
+ "SIZEOF",
+ 0,
+ "wszst SIZEOF key...",
+ "This hidden command prints a list with the size of data structures"
+ " and variables.",
+ 0,
+ 3,
+ option_tab_cmd_SIZEOF,
+ option_allowed_cmd_SIZEOF
+ },
+
{ CMD_CODE,
true,
false,
@@ -7503,7 +7596,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
0,
"wszst SHA1 [source]...",
"Print a SHA1 checksum for each source. The checksum is calculated by"
- " using the uncompressed data.",
+ " using the uncompressed data and after patching.",
0,
48,
option_tab_cmd_SHA1,
@@ -7519,11 +7612,31 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"wszst ANALYZE [source]...",
"Analyse track files and print results in machine readable format.",
0,
- 15,
+ 16,
option_tab_cmd_ANALYZE,
option_allowed_cmd_ANALYZE
},
+ { CMD_IS_TEXTURE,
+ false,
+ false,
+ false,
+ "IS-TEXTURE",
+ "ISTEXTURE",
+ "wszst IS-TEXTURE --reference reference [source]...",
+ "Test each source to see if it's a texture hack versus a reference"
+ " file. For each source, one human and machine readable status line is"
+ " printed. It is either »-1=err« on error, »1=yes« for a texture"
+ " hack, or »0=no LIST« with a comma separated list of reasons.\n"
+ " At the moment KCL, KMP (see notes) and LEX are checked. KMP section"
+ " CAME has been intentionally left out. Section ENPT is only checked"
+ " if KCL contains a least one face of type force-recalculation.",
+ 0,
+ 4,
+ option_tab_cmd_IS_TEXTURE,
+ option_allowed_cmd_IS_TEXTURE
+ },
+
{ CMD_FEATURES,
true,
false,
@@ -7531,7 +7644,8 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
"FEATURES",
0,
"wszst FEATURES [source]...",
- "Analyse track files and a feature list in machine readable format.",
+ "Analyse track files and create a feature list in machine readable"
+ " format.",
0,
18,
option_tab_cmd_FEATURES,
diff --git a/project/src/ui/ui-wszst.h b/project/src/ui/ui-wszst.h
index 997abfe..161aa7e 100644
--- a/project/src/ui/ui-wszst.h
+++ b/project/src/ui/ui-wszst.h
@@ -16,7 +16,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -133,6 +133,7 @@ typedef enum enumOptions
OPT_ANALYZE,
OPT_ANALYZE_MODE,
OPT_SOURCE,
+ OPT_REFERENCE,
OPT_DEST,
OPT_DEST2,
OPT_ESC,
@@ -190,7 +191,7 @@ typedef enum enumOptions
OPT_RAW,
OPT_SECTIONS,
- OPT__N_SPECIFIC, // == 134
+ OPT__N_SPECIFIC, // == 135
//----- global options -----
@@ -205,6 +206,7 @@ typedef enum enumOptions
OPT_QUIET,
OPT_VERBOSE,
OPT_LOGGING,
+ OPT_WARN,
OPT_DE,
OPT_COLORS,
OPT_NO_COLORS,
@@ -270,7 +272,7 @@ typedef enum enumOptions
OPT_NEW,
OPT_EXTRACT,
- OPT__N_TOTAL // == 209
+ OPT__N_TOTAL // == 211
} enumOptions;
@@ -362,6 +364,7 @@ typedef enum enumOptions
// OB_ANALYZE = 1llu << OPT_ANALYZE,
// OB_ANALYZE_MODE = 1llu << OPT_ANALYZE_MODE,
// OB_SOURCE = 1llu << OPT_SOURCE,
+// OB_REFERENCE = 1llu << OPT_REFERENCE,
// OB_DEST = 1llu << OPT_DEST,
// OB_DEST2 = 1llu << OPT_DEST2,
// OB_ESC = 1llu << OPT_ESC,
@@ -625,6 +628,9 @@ typedef enum enumOptions
//
// OB_CMD_EXPORT = 0,
//
+// OB_CMD_SIZEOF = OB_SORT
+// | OB_BRIEF,
+//
// OB_CMD_CODE = 0,
//
// OB_CMD_RECODE = 0,
@@ -713,9 +719,14 @@ typedef enum enumOptions
// OB_CMD_ANALYZE = OB_LONG
// | OB_IGNORE
// | OB_GRP_SCRIPT
+// | OB_REFERENCE
// | OB_DEST
// | OB_DEST2,
//
+// OB_CMD_IS_TEXTURE = OB_IGNORE
+// | OB_REFERENCE
+// | OB_LONG,
+//
// OB_CMD_FEATURES = OB_BRIEF
// | OB_LONG
// | OB_IGNORE
@@ -955,6 +966,7 @@ typedef enum enumCommands
CMD_TRACKS,
CMD_SCANCACHE,
CMD_EXPORT,
+ CMD_SIZEOF,
CMD_CODE,
CMD_RECODE,
CMD_SUBFILE,
@@ -980,6 +992,7 @@ typedef enum enumCommands
CMD_SHA1,
CMD_ANALYZE,
+ CMD_IS_TEXTURE,
CMD_FEATURES,
CMD_DISTRIBUTION,
@@ -1018,7 +1031,7 @@ typedef enum enumCommands
CMD_VEHICLE,
- CMD__N // == 77
+ CMD__N // == 79
} enumCommands;
@@ -1047,6 +1060,7 @@ typedef enum enumGetOpt
GO_SORT = 'S',
GO_TRACKS = 'T',
GO_VERSION = 'V',
+ GO_WARN = 'W',
GO_EXPORT = 'X',
GO_ALL = 'a',
@@ -1200,6 +1214,7 @@ typedef enum enumGetOpt
GO_STD,
GO_NEW,
GO_EXTRACT,
+ GO_REFERENCE,
GO_NUMBER,
GO_REMOVE_SRC,
GO_IGNORE_SETUP,
diff --git a/project/src/ui/ui.def b/project/src/ui/ui.def
index 4631580..8e47764 100644
--- a/project/src/ui/ui.def
+++ b/project/src/ui/ui.def
@@ -246,12 +246,22 @@
#:def_cmd( "SHA1", "SHA1", \
"wszst SHA1 [source]...", \
"Print a SHA1 checksum for each source. The checksum is calculated by" \
- " using the uncompressed data." )
+ " using the uncompressed data and after patching." )
#:def_cmd( "ANALYZE", "ANALYZE|ANA|ANALYSE", \
"wszst ANALYZE [source]...", \
"Analyse track files and print results in machine readable format." )
+#:def_cmd( "IS_TEXTURE", "IS-TEXTURE|ISTEXTURE", \
+ "wszst IS-TEXTURE --reference reference [source]...", \
+ "Test each source to see if it's a texture hack versus a reference" \
+ " file. For each source, one human and machine readable status line is" \
+ " printed. It is either »-1=err« on error, »1=yes« for a texture" \
+ " hack, or »0=no LIST« with a comma separated list of reasons.\n" \
+ " At the moment KCL, KMP (see notes) and LEX are checked. KMP section" \
+ " CAME has been intentionally left out. Section ENPT is only checked" \
+ " if KCL contains a least one face of type force-recalculation." )
+
#:def_cmd( "DISTRIBUTION", "DISTRIBUTION|DIST", \
"wszst DISTRIBUTION result source...\n" \
"wszst DISTRIBUTION directory [source]...", \
@@ -524,8 +534,8 @@
#:def_opt( "MAX_WIDTH", "max-width|maxwidth", "GP", \
"maxwidth", \
"Define the maximum terminal width (number of columns) for help and" \
- " some other messages and disable the automatic detection of the" \
- " terminal width. This option is ignored if {--width} is set." )
+ " some other messages. The default is 120. This option is ignored if" \
+ " --width is set." )
#:def_opt( "QUIET", "q|quiet", "GM", \
"", \
@@ -542,6 +552,15 @@
"", \
"This debug option enables the logging of internal lists and maps." )
+#:def_opt( "WARN", "W|warn", "GP", \
+ "list", \
+ "Enable or disable warnings. Parameter @'list'@ is a comma separated" \
+ " list of keywords. A minus sign before a keyword disables a warning." \
+ " Each occurrence of the option will only change entered warning and" \
+ " all other warnings are untouched.\n" \
+ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and" \
+ " @ALL@ enables all. The other allowed keywords are: @INVALID-OFFSET@." )
+
#:def_opt( "DE", "de", "G", \
"", \
"Use german track and arena names." )
@@ -825,11 +844,10 @@
"[=mode]", \
"@MODE@ is either @OFF@, @AUTO@ (default) or @ON@. Without value, @ON@" \
" is used.\n" \
- " If mode is @ON@, assume a battle arena and enable a spüecial" \
- " battle support. If mode is @OFF@, disable special battle arena" \
- " support. If mode is @AUTO@, analyse the KMP and estimate, if it is a" \
- " battle areana. Modes @ON@ and @OFF@ override KMP parameter" \
- " @BATTLE-MODE@." )
+ " If mode is @ON@, assume a battle arena and enable a special battle" \
+ " support. If mode is @OFF@, disable special battle arena support. If" \
+ " mode is @AUTO@, analyse the KMP and estimate, if it is a battle" \
+ " areana. Modes @ON@ and @OFF@ override KMP parameter @BATTLE-MODE@." )
#:def_opt( "EXPORT_FLAGS", "export-flags|exportflags|exflags", "GO", \
"[=mode]", \
@@ -1224,7 +1242,7 @@
#:def_opt( "CODING", "coding", "CP", \
"mode", \
"Define the coding of the non alphanumeric characters for BASE64:" \
- " STANDART (+/=, default), URL (-_=), STAR (-_*) or XML (.-*)." )
+ " STANDARD (+/=, default), URL (-_=), STAR (-_*) or XML (.-*)." )
#:def_opt( "VERIFY", "verify", "C", \
"", \
@@ -1538,6 +1556,10 @@
" A @'?'@ direct behind @'%'@ in @%E@ and @%T@ conversions avoid that" \
" the same extension is used twice in row." )
+#:def_opt( "REFERENCE", "ref|reference", "CP", \
+ "path", \
+ "Define a reference SZS." )
+
#:def_opt( "DEST", "d|dest", "CP", \
"path", \
"Define a destination path (directory/file). The destination @-@" \
@@ -2229,6 +2251,19 @@
"", \
"" )
+#:def_cmd_opt( "SIZEOF", "SORT", \
+ "", \
+ "Define a sort mode. Keywords are: @NONE@ (default), @NAME@ end" \
+ " @SIZE@." )
+
+#:def_cmd_opt( "SIZEOF", "BRIEF", \
+ "", \
+ "Limit output to SZS specific data." )
+
+#:def_cmd_opt( "SIZEOF", "LOGGING", \
+ "", \
+ "" )
+
#:def_cmd_opt( "SUBFILE", "DEST", \
"", \
"" )
@@ -5138,6 +5173,10 @@
"", \
"" )
+#:def_cmd_opt( "ANALYZE", "REFERENCE", \
+ "", \
+ "" )
+
#:def_cmd_opt( "ANALYZE", "DEST", \
"", \
"" )
@@ -5146,6 +5185,22 @@
"", \
"" )
+#:def_cmd_opt( "IS_TEXTURE", "IGNORE", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "IS_TEXTURE", "REFERENCE", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "IS_TEXTURE", "BATTLE", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "IS_TEXTURE", "LONG", \
+ "", \
+ "Append a colon and the filename after each status." )
+
#:def_cmd_opt( "FEATURES", "BRIEF", \
"", \
"Suppres any comments at all. If set twice, suppress empty lines (for" \
@@ -5153,7 +5208,7 @@
#:def_cmd_opt( "FEATURES", "LONG", \
"", \
- "Print additnal comments." )
+ "Print additional comments." )
#:def_cmd_opt( "FEATURES", "IGNORE", \
"", \
@@ -11349,8 +11404,8 @@
#:def_opt( "MAX_WIDTH", "max-width|maxwidth", "GP", \
"maxwidth", \
"Define the maximum terminal width (number of columns) for help and" \
- " some other messages and disable the automatic detection of the" \
- " terminal width. This option is ignored if {--width} is set." )
+ " some other messages. The default is 120. This option is ignored if" \
+ " --width is set." )
#:def_opt( "QUIET", "q|quiet", "GM", \
"", \
@@ -11367,6 +11422,15 @@
"", \
"This debug option enables the logging of internal lists and maps." )
+#:def_opt( "WARN", "W|warn", "GP", \
+ "list", \
+ "Enable or disable warnings. Parameter @'list'@ is a comma separated" \
+ " list of keywords. A minus sign before a keyword disables a warning." \
+ " Each occurrence of the option will only change entered warning and" \
+ " all other warnings are untouched.\n" \
+ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and" \
+ " @ALL@ enables all. The other allowed keywords are: @INVALID-OFFSET@." )
+
#:def_opt( "DE", "de", "G", \
"", \
"Use german track and arena names." )
@@ -12601,8 +12665,8 @@
#:def_opt( "MAX_WIDTH", "max-width|maxwidth", "GP", \
"maxwidth", \
"Define the maximum terminal width (number of columns) for help and" \
- " some other messages and disable the automatic detection of the" \
- " terminal width. This option is ignored if {--width} is set." )
+ " some other messages. The default is 120. This option is ignored if" \
+ " --width is set." )
#:def_opt( "QUIET", "q|quiet", "GM", \
"", \
@@ -12619,6 +12683,15 @@
"", \
"This debug option enables the logging of internal lists and maps." )
+#:def_opt( "WARN", "W|warn", "GP", \
+ "list", \
+ "Enable or disable warnings. Parameter @'list'@ is a comma separated" \
+ " list of keywords. A minus sign before a keyword disables a warning." \
+ " Each occurrence of the option will only change entered warning and" \
+ " all other warnings are untouched.\n" \
+ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and" \
+ " @ALL@ enables all. The other allowed keywords are: @INVALID-OFFSET@." )
+
#:def_opt( "DE", "de", "G", \
"", \
"Use german track and arena names." )
@@ -13954,8 +14027,8 @@
#:def_opt( "MAX_WIDTH", "max-width|maxwidth", "GP", \
"maxwidth", \
"Define the maximum terminal width (number of columns) for help and" \
- " some other messages and disable the automatic detection of the" \
- " terminal width. This option is ignored if {--width} is set." )
+ " some other messages. The default is 120. This option is ignored if" \
+ " --width is set." )
#:def_opt( "QUIET", "q|quiet", "GM", \
"", \
@@ -13972,6 +14045,15 @@
"", \
"This debug option enables the logging of internal lists and maps." )
+#:def_opt( "WARN", "W|warn", "GP", \
+ "list", \
+ "Enable or disable warnings. Parameter @'list'@ is a comma separated" \
+ " list of keywords. A minus sign before a keyword disables a warning." \
+ " Each occurrence of the option will only change entered warning and" \
+ " all other warnings are untouched.\n" \
+ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and" \
+ " @ALL@ enables all. The other allowed keywords are: @INVALID-OFFSET@." )
+
#:def_opt( "DE", "de", "G", \
"", \
"Use german track and arena names." )
@@ -14894,6 +14976,11 @@
" output. The exit status is @'DIFFER'@ if at least one KMP warning" \
" found." )
+#:def_cmd( "SHA1", "SHA1", \
+ "wszst SHA1 [source]...", \
+ "Print a SHA1 checksum of the KCL for each source. The checksum is" \
+ " calculated after patching." )
+
#:def_cmd( "BLOW", "BLOW", \
"wkclt BLOW source...", \
"Try to calculate the used blow size (KCL_BLOW) of a KCL. Print one" \
@@ -14945,8 +15032,8 @@
#:def_opt( "MAX_WIDTH", "max-width|maxwidth", "GP", \
"maxwidth", \
"Define the maximum terminal width (number of columns) for help and" \
- " some other messages and disable the automatic detection of the" \
- " terminal width. This option is ignored if {--width} is set." )
+ " some other messages. The default is 120. This option is ignored if" \
+ " --width is set." )
#:def_opt( "QUIET", "q|quiet", "GM", \
"", \
@@ -14963,6 +15050,15 @@
"", \
"This debug option enables the logging of internal lists and maps." )
+#:def_opt( "WARN", "W|warn", "GP", \
+ "list", \
+ "Enable or disable warnings. Parameter @'list'@ is a comma separated" \
+ " list of keywords. A minus sign before a keyword disables a warning." \
+ " Each occurrence of the option will only change entered warning and" \
+ " all other warnings are untouched.\n" \
+ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and" \
+ " @ALL@ enables all. The other allowed keywords are: @INVALID-OFFSET@." )
+
#:def_opt( "DE", "de", "G", \
"", \
"Use german track and arena names." )
@@ -15237,6 +15333,30 @@
" are also accepted. For some conversions, the auto-add library is" \
" needed." )
+#:def_opt( "ID", "id", "C", \
+ "", \
+ "Print an ID with 8 characters instead of a SHA-1 sum with 40" \
+ " characters. The SHA-1 sum is used to calculate the ID. The ID" \
+ " consists of '0'-'9' and 'a'-'w' (32 characters)." )
+
+#:def_opt( "BASE64", "base64", "CO", \
+ "[=mode]", \
+ "Encode the the checksum string as BASE64 with 27 characters instead" \
+ " of hex. If a parameter is set, it acts like {--coding=mode}." )
+
+#:def_opt( "DB64", "db64", "CO", \
+ "[=mode]", \
+ "Encode the the checksum string and some length as BASE64 with 32" \
+ " characters instead of hex for database searches. This options" \
+ " implies {--coding=URL} if no other coding is defined. If a parameter" \
+ " is set, it acts like {--coding=mode}. Option {--db64} has priority" \
+ " over {--base64}." )
+
+#:def_opt( "CODING", "coding", "CP", \
+ "mode", \
+ "Define the coding of the non alphanumeric characters for BASE64:" \
+ " STANDARD (+/=, default), URL (-_=), STAR (-_*) or XML (.-*)." )
+
#:def_opt( "ROUND", "round", "C", \
"", \
"Print additional lines with rounded values (to 3 and 2 bytes for" \
@@ -16152,6 +16272,14 @@
"", \
"" )
+#:def_cmd_opt( "TYPES", "NO_HEADER", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "TYPES", "BRIEF", \
+ "", \
+ "Print only the resulting flag." )
+
#:def_cmd_opt( "FLAGS", "NO_HEADER", \
"", \
"" )
@@ -16940,6 +17068,122 @@
"", \
"" )
+#:def_cmd_opt( "SHA1", "IGNORE", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "ID", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "BASE64", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "DB64", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "CODING", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "BRIEF", \
+ "", \
+ "Suppress output of the filename." )
+
+#:def_cmd_opt( "SHA1", "CONST", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "SCALE", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "SHIFT", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "XSS", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "YSS", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "ZSS", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "ROT", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "XROT", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "YROT", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "ZROT", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "TRANSLATE", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "NULL", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "NEXT", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "ASCALE", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "AROT", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "TFORM_SCRIPT", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "KCL", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "KCL_FLAG", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "KCL_SCRIPT", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "TRI_AREA", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "TRI_HEIGHT", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "FLAG_FILE", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "SHA1", "SLOT", \
+ "", \
+ "" )
+
#:def_cmd_opt( "ANALYZE", "IGNORE", \
"", \
"" )
@@ -17295,8 +17539,8 @@
#:def_opt( "MAX_WIDTH", "max-width|maxwidth", "GP", \
"maxwidth", \
"Define the maximum terminal width (number of columns) for help and" \
- " some other messages and disable the automatic detection of the" \
- " terminal width. This option is ignored if {--width} is set." )
+ " some other messages. The default is 120. This option is ignored if" \
+ " --width is set." )
#:def_opt( "QUIET", "q|quiet", "GM", \
"", \
@@ -17313,6 +17557,15 @@
"", \
"This debug option enables the logging of internal lists and maps." )
+#:def_opt( "WARN", "W|warn", "GP", \
+ "list", \
+ "Enable or disable warnings. Parameter @'list'@ is a comma separated" \
+ " list of keywords. A minus sign before a keyword disables a warning." \
+ " Each occurrence of the option will only change entered warning and" \
+ " all other warnings are untouched.\n" \
+ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and" \
+ " @ALL@ enables all. The other allowed keywords are: @INVALID-OFFSET@." )
+
#:def_opt( "DE", "de", "G", \
"", \
"Use german track and arena names." )
@@ -17524,11 +17777,10 @@
"[=mode]", \
"@MODE@ is either @OFF@, @AUTO@ (default) or @ON@. Without value, @ON@" \
" is used.\n" \
- " If mode is @ON@, assume a battle arena and enable a spüecial" \
- " battle support. If mode is @OFF@, disable special battle arena" \
- " support. If mode is @AUTO@, analyse the KMP and estimate, if it is a" \
- " battle areana. Modes @ON@ and @OFF@ override KMP parameter" \
- " @BATTLE-MODE@." )
+ " If mode is @ON@, assume a battle arena and enable a special battle" \
+ " support. If mode is @OFF@, disable special battle arena support. If" \
+ " mode is @AUTO@, analyse the KMP and estimate, if it is a battle" \
+ " areana. Modes @ON@ and @OFF@ override KMP parameter @BATTLE-MODE@." )
#:def_opt( "EXPORT_FLAGS", "export-flags|exportflags|exflags", "GO", \
"[=mode]", \
@@ -19356,8 +19608,8 @@
#:def_opt( "MAX_WIDTH", "max-width|maxwidth", "GP", \
"maxwidth", \
"Define the maximum terminal width (number of columns) for help and" \
- " some other messages and disable the automatic detection of the" \
- " terminal width. This option is ignored if {--width} is set." )
+ " some other messages. The default is 120. This option is ignored if" \
+ " --width is set." )
#:def_opt( "QUIET", "q|quiet", "GM", \
"", \
@@ -19374,6 +19626,15 @@
"", \
"This debug option enables the logging of internal lists and maps." )
+#:def_opt( "WARN", "W|warn", "GP", \
+ "list", \
+ "Enable or disable warnings. Parameter @'list'@ is a comma separated" \
+ " list of keywords. A minus sign before a keyword disables a warning." \
+ " Each occurrence of the option will only change entered warning and" \
+ " all other warnings are untouched.\n" \
+ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and" \
+ " @ALL@ enables all. The other allowed keywords are: @INVALID-OFFSET@." )
+
#:def_opt( "DE", "de", "G", \
"", \
"Use german track and arena names." )
@@ -20618,8 +20879,8 @@
#:def_opt( "MAX_WIDTH", "max-width|maxwidth", "GP", \
"maxwidth", \
"Define the maximum terminal width (number of columns) for help and" \
- " some other messages and disable the automatic detection of the" \
- " terminal width. This option is ignored if {--width} is set." )
+ " some other messages. The default is 120. This option is ignored if" \
+ " --width is set." )
#:def_opt( "QUIET", "q|quiet", "GM", \
"", \
@@ -20636,6 +20897,15 @@
"", \
"This debug option enables the logging of internal lists and maps." )
+#:def_opt( "WARN", "W|warn", "GP", \
+ "list", \
+ "Enable or disable warnings. Parameter @'list'@ is a comma separated" \
+ " list of keywords. A minus sign before a keyword disables a warning." \
+ " Each occurrence of the option will only change entered warning and" \
+ " all other warnings are untouched.\n" \
+ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and" \
+ " @ALL@ enables all. The other allowed keywords are: @INVALID-OFFSET@." )
+
#:def_opt( "DE", "de", "G", \
"", \
"Use german track and arena names." )
@@ -21874,8 +22144,8 @@
#:def_opt( "MAX_WIDTH", "max-width|maxwidth", "GP", \
"maxwidth", \
"Define the maximum terminal width (number of columns) for help and" \
- " some other messages and disable the automatic detection of the" \
- " terminal width. This option is ignored if {--width} is set." )
+ " some other messages. The default is 120. This option is ignored if" \
+ " --width is set." )
#:def_opt( "QUIET", "q|quiet", "GM", \
"", \
@@ -21892,6 +22162,15 @@
"", \
"This debug option enables the logging of internal lists and maps." )
+#:def_opt( "WARN", "W|warn", "GP", \
+ "list", \
+ "Enable or disable warnings. Parameter @'list'@ is a comma separated" \
+ " list of keywords. A minus sign before a keyword disables a warning." \
+ " Each occurrence of the option will only change entered warning and" \
+ " all other warnings are untouched.\n" \
+ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and" \
+ " @ALL@ enables all. The other allowed keywords are: @INVALID-OFFSET@." )
+
#:def_opt( "DE", "de", "G", \
"", \
"Use german track and arena names." )
@@ -22384,9 +22663,10 @@
" @PAL@ (default), @USA@, @JAPAN@, @KOREA@, or any abbreviation of" \
" them. They select the region for the following addresses. The hex" \
" numbers (with or without @0x@ prefix) are interpreted as addresses." \
- " If possible, they are ported to all other regions. The result is" \
- " printed as colorized table.\n" \
- " This address porting is EXPERIMENTAL!" )
+ " If an address begins with @m@ or @s@, then it is interpreted as a" \
+ " file offset for @main.dol@ or @staticr.rel@. All addresses are" \
+ " ported to all other regions. The result is printed as colorized" \
+ " table." )
#:def_cmd( "WHERE", "WHERE", \
"wstrt WHERE address...", \
@@ -22489,8 +22769,8 @@
#:def_opt( "MAX_WIDTH", "max-width|maxwidth", "GP", \
"maxwidth", \
"Define the maximum terminal width (number of columns) for help and" \
- " some other messages and disable the automatic detection of the" \
- " terminal width. This option is ignored if {--width} is set." )
+ " some other messages. The default is 120. This option is ignored if" \
+ " --width is set." )
#:def_opt( "QUIET", "q|quiet", "GM", \
"", \
@@ -22507,6 +22787,15 @@
"", \
"This debug option enables the logging of internal lists and maps." )
+#:def_opt( "WARN", "W|warn", "GP", \
+ "list", \
+ "Enable or disable warnings. Parameter @'list'@ is a comma separated" \
+ " list of keywords. A minus sign before a keyword disables a warning." \
+ " Each occurrence of the option will only change entered warning and" \
+ " all other warnings are untouched.\n" \
+ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and" \
+ " @ALL@ enables all. The other allowed keywords are: @INVALID-OFFSET@." )
+
#:def_opt( "DE", "de", "G", \
"", \
"Use german track and arena names." )
@@ -22867,7 +23156,13 @@
#:def_opt( "NO_0X", "0|no-0x|no0x", "C", \
"", \
- "Suppress 0x prefix of hex numbers." )
+ "Suppress 0x prefix of hex numbers. This is the default for cheat" \
+ " codes." )
+
+#:def_opt( "UPPER", "U|upper", "C", \
+ "", \
+ "Print digits A-F of hex numbers in upper case. This is the default" \
+ " for cheat codes." )
#:def_opt( "VADDR", "vaddr|va", "CP", \
"RANGE", \
@@ -23243,6 +23538,10 @@
"", \
"" )
+#:def_cmd_opt( "PORT", "UPPER", \
+ "", \
+ "" )
+
#:def_cmd_opt( "PORT", "NO_HEADER", \
"", \
"Suppress the table header and footer and output exactly 1 line for" \
@@ -23264,6 +23563,10 @@
"", \
"" )
+#:def_cmd_opt( "WHERE", "UPPER", \
+ "", \
+ "" )
+
#:def_cmd_opt( "WHERE", "NO_HEADER", \
"", \
"Suppress the table header and footer and output exactly 1 line for" \
diff --git a/project/src/ui/ui.h b/project/src/ui/ui.h
index 72b5a90..409b8fd 100644
--- a/project/src/ui/ui.h
+++ b/project/src/ui/ui.h
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
diff --git a/project/src/wbmgt.c b/project/src/wbmgt.c
index 8c9ac2e..58ca368 100644
--- a/project/src/wbmgt.c
+++ b/project/src/wbmgt.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -68,6 +68,7 @@
static void help_exit ( bool xmode )
{
+ SetupPager();
fputs( TITLE "\n", stdout );
if (xmode)
@@ -79,6 +80,7 @@ static void help_exit ( bool xmode )
else
PrintHelpCmd(&InfoUI_wbmgt,stdout,0,0,"HELP",0,URI_HOME);
+ ClosePager();
exit(ERR_OK);
}
@@ -772,6 +774,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break;
case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break;
case GO_LOGGING: logging++; break;
+ case GO_WARN: err += ScanOptWarn(optarg); break;
case GO_DE: use_de = true; break;
case GO_CT_CODE: ctcode_enabled = true; break;
case GO_LE_CODE: lecode_enabled = true; break;
@@ -887,8 +890,7 @@ static enumError CheckCommand ( int argc, char ** argv )
switch ((enumCommands)cmd_ct->id)
{
case CMD_VERSION: version_exit();
- case CMD_HELP: PrintHelp(&InfoUI_wbmgt,stdout,0,"HELP",0,URI_HOME,
- first_param ? first_param->arg : 0 ); break;
+ case CMD_HELP: PrintHelpColor(&InfoUI_wbmgt); break;
case CMD_CONFIG: err = cmd_config(); break;
case CMD_ARGTEST: err = cmd_argtest(argc,argv); break;
case CMD_TEST: err = cmd_test(); break;
diff --git a/project/src/wctct.c b/project/src/wctct.c
index b81066f..82bd675 100644
--- a/project/src/wctct.c
+++ b/project/src/wctct.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -58,6 +58,7 @@
static void help_exit ( bool xmode )
{
+ SetupPager();
fputs( TITLE "\n", stdout );
if (xmode)
@@ -69,6 +70,7 @@ static void help_exit ( bool xmode )
else
PrintHelpCmd(&InfoUI_wctct,stdout,0,0,"HELP",0,URI_HOME);
+ ClosePager();
exit(ERR_OK);
}
@@ -749,6 +751,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break;
case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break;
case GO_LOGGING: logging++; break;
+ case GO_WARN: err += ScanOptWarn(optarg); break;
case GO_DE: use_de = true; break;
case GO_COLORS: err += ScanOptColorize(0,optarg,0); break;
case GO_NO_COLORS: opt_colorize = COLMD_OFF; break;
@@ -892,8 +895,7 @@ static enumError CheckCommand ( int argc, char ** argv )
switch ((enumCommands)cmd_ct->id)
{
case CMD_VERSION: version_exit();
- case CMD_HELP: PrintHelp(&InfoUI_wctct,stdout,0,"HELP",0,URI_HOME,
- first_param ? first_param->arg : 0 ); break;
+ case CMD_HELP: PrintHelpColor(&InfoUI_wctct); break;
case CMD_CONFIG: err = cmd_config(); break;
case CMD_ARGTEST: err = cmd_argtest(argc,argv); break;
case CMD_TEST: err = cmd_test(); break;
diff --git a/project/src/wimgt.c b/project/src/wimgt.c
index 61ef456..835e34e 100644
--- a/project/src/wimgt.c
+++ b/project/src/wimgt.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -64,6 +64,7 @@
static void help_exit ( bool xmode )
{
+ SetupPager();
fputs( TITLE "\n", stdout );
if (xmode)
@@ -75,6 +76,7 @@ static void help_exit ( bool xmode )
else
PrintHelpCmd(&InfoUI_wimgt,stdout,0,0,"HELP",0,URI_HOME);
+ ClosePager();
exit(ERR_OK);
}
@@ -585,6 +587,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break;
case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break;
case GO_LOGGING: logging++; break;
+ case GO_WARN: err += ScanOptWarn(optarg); break;
case GO_DE: use_de = true; break;
case GO_CT_CODE: ctcode_enabled = true; break;
case GO_LE_CODE: lecode_enabled = true; break;
@@ -692,8 +695,7 @@ static enumError CheckCommand ( int argc, char ** argv )
switch ((enumCommands)cmd_ct->id)
{
case CMD_VERSION: version_exit();
- case CMD_HELP: PrintHelp(&InfoUI_wimgt,stdout,0,"HELP",0,URI_HOME,
- first_param ? first_param->arg : 0 ); break;
+ case CMD_HELP: PrintHelpColor(&InfoUI_wimgt); break;
case CMD_CONFIG: err = cmd_config(); break;
case CMD_ARGTEST: err = cmd_argtest(argc,argv); break;
case CMD_TEST: err = cmd_test(); break;
diff --git a/project/src/wkclt.c b/project/src/wkclt.c
index fd55727..5538ecd 100644
--- a/project/src/wkclt.c
+++ b/project/src/wkclt.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -37,6 +37,8 @@
#include "lib-kcl.h"
#include "lib-szs.h"
+#include "crypt.h"
+#include "lib-checksum.h"
#include "ui.h" // [[dclib]] wrapper
#include "ui-wkclt.c"
#include <math.h>
@@ -58,6 +60,7 @@ extern const char text_kcl_flag_template_cr[];
static void help_exit ( bool xmode )
{
+ SetupPager();
fputs( TITLE "\n", stdout );
if (xmode)
@@ -69,6 +72,7 @@ static void help_exit ( bool xmode )
else
PrintHelpCmd(&InfoUI_wkclt,stdout,0,0,"HELP",0,URI_HOME);
+ ClosePager();
exit(ERR_OK);
}
@@ -655,6 +659,80 @@ static enumError cmd_cff()
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// command types ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static enumError cmd_types()
+{
+ stdlog = stderr;
+
+ if (print_header)
+ {
+ if (brief_count)
+ printf("\n flag\n"
+ "-------\n");
+ else
+ printf("\n flag = type | variant : W X Y Z Ty\n"
+ "-----------------------------------------\n");
+ }
+
+ enumError cmd_err = ERR_OK;
+ ParamList_t *param;
+ for ( param = first_param; param; param = param->next )
+ {
+ char *arg = param->arg;
+ u16 value = str2ul(arg,&arg,16);
+ for(;;)
+ {
+ while ( *arg > 0 && *arg <= ' ' || *arg == ',' )
+ arg++;
+ if (!*arg)
+ break;
+ char ch = tolower((int)*arg++);
+ if ( *arg == '=' )
+ arg++;
+ u16 mask = 0, par = str2ul(arg,&arg,10);
+ int shift = 0;
+ switch (ch)
+ {
+ case 't': mask = 0x001f; break;
+ case 'v': mask = 0xffe0; shift = 5; break;
+ case 'w': mask = 0xe000; shift = 13; break;
+ case 'x': mask = 0x1800; shift = 11; break;
+ case 'y': mask = 0x0700; shift = 8; break;
+ case 'z': mask = 0x00e0; shift = 5; break;
+ }
+ if (!mask)
+ break;
+ value = value & ~mask | (par<<shift) & mask;
+ }
+
+ if (brief_count)
+ printf("0x%04x\n",value);
+ else
+ {
+ const int w = value >> 13 & 7;
+ const int x = value >> 11 & 3;
+ const int y = value >> 8 & 7;
+ const int z = value >> 5 & 7;
+
+ printf(
+ " 0x%04x = 0x%02x | 0x%03x << 5 : %c %c %c %c %2d\n",
+ value, value & 0x1f, value >> 5,
+ w ? '0'+w : '-',
+ x ? '0'+x : '-',
+ y ? '0'+y : '-',
+ z ? '0'+z : '-',
+ value & 0x1f );
+ }
+ }
+ if (print_header)
+ putchar('\n');
+ return cmd_err;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// command flags ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -695,8 +773,8 @@ static enumError cmd_flags()
memset(tcount,0,sizeof(tcount));
if ( print_header && !brief_count )
- printf("\n flag type variant triangle count\n"
- "-----------------------------------------------\n");
+ printf("\n flag = type | variant : W X Y Z Ty : triangle count\n"
+ "------------------------------------------------------------\n");
uint i, j;
for ( i = 0; i < N_KCL_TYPE; i++ )
@@ -709,8 +787,21 @@ static enumError cmd_flags()
if (!brief_count)
{
done++;
- printf(" 0x%04x = 0x%02x | 0x%03x << 5 :%7u = %6.2f%%\n",
+ const int w = j >> 13 & 7;
+ const int x = j >> 11 & 3;
+ const int y = j >> 8 & 7;
+ const int z = j >> 5 & 7;
+
+ printf(
+ " 0x%04x = 0x%02x | 0x%03x << 5"
+ " : %c %c %c %c %2d"
+ " :%7u = %6.2f%%\n",
j, j & 0x1f, j >> 5,
+ w ? '0'+w : '-',
+ x ? '0'+x : '-',
+ y ? '0'+y : '-',
+ z ? '0'+z : '-',
+ j & 0x1f,
count[j], 100.0 * count[j] / n );
}
}
@@ -720,12 +811,12 @@ static enumError cmd_flags()
if (print_header)
printf( "\n"
- " type triangle count type description\n"
- "--------------------------------------------------\n");
+ " type : triangle count : type description\n"
+ "---------------------------------------------------\n");
for ( i = 0; i < N_KCL_TYPE; i++ )
if (tcount[i])
- printf(" T 0x%02x :%7u = %6.2f%% %s\n",
+ printf(" T 0x%02x :%7u = %6.2f%% : %s\n",
i, tcount[i], 100.0 * tcount[i] / n,
kcl_type[i].info );
putchar('\n');
@@ -946,6 +1037,74 @@ static enumError cmd_check()
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// command sha1 ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static enumError cmd_sha1()
+{
+ stdlog = stderr;
+ enumError max_err = ERR_OK;
+ SetPatchFileModeReadonly();
+ SetupCoding64( opt_coding64, opt_db64 ? ENCODE_BASE64URL : ENCODE_BASE64 );
+
+ raw_data_t raw;
+ InitializeRawData(&raw);
+
+ ParamList_t *param;
+ for ( param = first_param; param; param = param->next )
+ {
+ NORMALIZE_FILENAME_PARAM(param);
+ enumError err = LoadRawData(&raw,false,param->arg,autoname,opt_ignore>0,FF_KCL);
+
+ if ( max_err < err )
+ max_err = err;
+
+ if ( err > ERR_WARNING || err == ERR_NOT_EXISTS )
+ {
+ if ( opt_db64 )
+ {
+ putchar('-');
+ if (long_count)
+ fputs(" -1 -1 0.000 -",stdout);
+ if (brief_count)
+ putchar('\n');
+ else
+ printf(" %s\n",param->arg);
+ }
+
+ if ( err == ERR_NOT_EXISTS || opt_ignore )
+ continue;
+ return err;
+ }
+
+ kcl_t kcl;
+ err = ScanRawDataKCL(&kcl,true,&raw,true,0);
+ if ( err > ERR_WARNING )
+ return err;
+
+ err = CreateRawKCL(&kcl,false);
+ if ( err > ERR_WARNING )
+ return err;
+
+ sha1_size_t info;
+ SHA1(kcl.raw_data,kcl.raw_data_size,info.hash);
+ info.size = htonl(kcl.raw_data_size);
+ char checksum[100];
+ CreateSSChecksum(checksum,sizeof(checksum),&info);
+
+ if (brief_count)
+ printf("%s\n",checksum);
+ else
+ printf("%s %s\n",checksum,kcl.fname);
+ ResetKCL(&kcl);
+ }
+
+ ResetRawData(&raw);
+ return max_err;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// command analyze ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -1022,6 +1181,7 @@ static void analyze_kcl ( kcl_t *kcl )
static enumError cmd_analyze()
{
stdlog = stderr;
+ patch_action_log_disabled++;
raw_data_t raw;
InitializeRawData(&raw);
@@ -1125,6 +1285,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break;
case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break;
case GO_LOGGING: logging++; break;
+ case GO_WARN: err += ScanOptWarn(optarg); break;
case GO_DE: use_de = true; break;
case GO_CT_CODE: ctcode_enabled = true; break;
case GO_LE_CODE: lecode_enabled = true; break;
@@ -1186,6 +1347,11 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_TRACKS: err += ScanOptTracks(optarg); break;
case GO_ARENAS: err += ScanOptArenas(optarg); break;
+ case GO_ID: opt_id = true; break;
+ case GO_BASE64: opt_base64 = true; err += ScanOptCoding64(optarg); break;
+ case GO_DB64: opt_db64 = true; err += ScanOptCoding64(optarg); break;
+ case GO_CODING: err += ScanOptCoding64(optarg); break;
+
case GO_ROUND: opt_round = true; break;
case GO_LONG: long_count++; break;
case GO_NO_HEADER: print_header = false; break;
@@ -1249,8 +1415,7 @@ static enumError CheckCommand ( int argc, char ** argv )
switch ((enumCommands)cmd_ct->id)
{
case CMD_VERSION: version_exit();
- case CMD_HELP: PrintHelp(&InfoUI_wkclt,stdout,0,"HELP",0,URI_HOME,
- first_param ? first_param->arg : 0 ); break;
+ case CMD_HELP: PrintHelpColor(&InfoUI_wkclt); break;
case CMD_CONFIG: err = cmd_config(); break;
case CMD_ARGTEST: err = cmd_argtest(argc,argv); break;
case CMD_TEST: err = cmd_test(); break;
@@ -1271,6 +1436,7 @@ static enumError CheckCommand ( int argc, char ** argv )
case CMD_ENCODE: err = cmd_convert(cmd_ct->id,"ENCODE","\1P/\1N\1?T"); break;
case CMD_COPY: err = cmd_copy(); break;
case CMD_CFF: err = cmd_cff(); break;
+ case CMD_TYPES: err = cmd_types(); break;
case CMD_FLAGS: err = cmd_flags(); break;
case CMD_DUMP: err = cmd_dump(0,CMD_DUMP); break;
case CMD_DBRIEF: err = cmd_dump(1,CMD_DUMP); break;
@@ -1279,6 +1445,7 @@ static enumError CheckCommand ( int argc, char ** argv )
case CMD_TRAVERSE: err = cmd_traverse(false); break;
case CMD_FALL: err = cmd_traverse(true); break;
case CMD_CHECK: err = cmd_check(); break;
+ case CMD_SHA1: err = cmd_sha1(); break;
case CMD_ANALYZE: err = cmd_analyze(); break;
case CMD_BLOW: err = cmd_blow(); break;
diff --git a/project/src/wkmpt.c b/project/src/wkmpt.c
index 60ffafb..9c5b341 100644
--- a/project/src/wkmpt.c
+++ b/project/src/wkmpt.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -59,6 +59,7 @@ static const char autoname[] = "/course.kmp";
static void help_exit ( bool xmode )
{
+ SetupPager();
fputs( TITLE "\n", stdout );
if (xmode)
@@ -70,6 +71,7 @@ static void help_exit ( bool xmode )
else
PrintHelpCmd(&InfoUI_wkmpt,stdout,0,0,"HELP",0,URI_HOME);
+ ClosePager();
exit(ERR_OK);
}
@@ -385,7 +387,7 @@ static enumError cmd_xexport()
if ( strlen(cr->info) >= sizeof(cr->info) )
printf("ERR: STRLEN(INFO,%#x): %zd >= %zd : %s\n",
cr->ref_id, strlen(cr->info), sizeof(cr->info), cr->info );
-
+
if (!(cr->ref_id&1))
{
const gobj_cond_ref_t *next = cr+1;
@@ -1581,6 +1583,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break;
case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break;
case GO_LOGGING: logging++; break;
+ case GO_WARN: err += ScanOptWarn(optarg); break;
case GO_DE: use_de = true; break;
case GO_CT_CODE: ctcode_enabled = true; break;
case GO_LE_CODE: lecode_enabled = true; break;
@@ -1728,8 +1731,7 @@ static enumError CheckCommand ( int argc, char ** argv )
switch ((enumCommands)cmd_ct->id)
{
case CMD_VERSION: version_exit();
- case CMD_HELP: PrintHelp(&InfoUI_wkmpt,stdout,0,"HELP",0,URI_HOME,
- first_param ? first_param->arg : 0 ); break;
+ case CMD_HELP: PrintHelpColor(&InfoUI_wkmpt); break;
case CMD_CONFIG: err = cmd_config(); break;
case CMD_ARGTEST: err = cmd_argtest(argc,argv); break;
case CMD_TEST: err = cmd_test(); break;
diff --git a/project/src/wlect.c b/project/src/wlect.c
index 2fc1bea..3ea7ea5 100644
--- a/project/src/wlect.c
+++ b/project/src/wlect.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -60,6 +60,7 @@ static const char autoname[] = "/course.lex";
static void help_exit ( bool xmode )
{
+ SetupPager();
fputs( TITLE "\n", stdout );
if (xmode)
@@ -71,6 +72,7 @@ static void help_exit ( bool xmode )
else
PrintHelpCmd(&InfoUI_wlect,stdout,0,0,"HELP",0,URI_HOME);
+ ClosePager();
exit(ERR_OK);
}
@@ -251,11 +253,19 @@ static enumError cmd_dpad()
ccp arg = param->arg;
while ( *arg && (uint)*arg <= ' ' )
arg++;
+
+ bool hex_scanned = false;
u32 num = 0;
if ( *arg >= '0' && *arg <= '9' || *arg >= 'a' && *arg <= 'f' || *arg >= 'A' && *arg <= 'F' )
- num = str2l(arg,0,16);
- else
{
+ char *end;
+ num = str2ul(arg,&end,16);
+ hex_scanned = num && !*end;
+ }
+
+ if (!hex_scanned)
+ {
+ num = 0;
while (*arg)
{
switch (*arg++)
@@ -959,6 +969,7 @@ static enumError cmd_cat()
if (!testmode)
{
InitializeOutputMode(&output_mode);
+ output_mode.lecode = true;
err = SaveTextCTCODE(&ctcode,"-",false,&output_mode);
fflush(stdout);
if ( err > ERR_WARNING )
@@ -1117,6 +1128,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break;
case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break;
case GO_LOGGING: logging++; break;
+ case GO_WARN: err += ScanOptWarn(optarg); break;
case GO_DE: use_de = true; break;
case GO_CT_CODE: ctcode_enabled = true; break;
case GO_LE_CODE: lecode_enabled = true; break;
@@ -1159,6 +1171,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_ORDER_ALL: opt_order_all = true; break;
case GO_LE_DEFINE: opt_le_define = optarg; break;
+ case GO_LE_ARENA: opt_le_arena = optarg; break;
case GO_LPAR: opt_lpar = optarg; break;
case GO_ALIAS: err += ScanOptAlias(optarg); break;
case GO_ENGINE: err += ScanOptEngine(optarg); break;
@@ -1270,8 +1283,7 @@ static enumError CheckCommand ( int argc, char ** argv )
switch ((enumCommands)cmd_ct->id)
{
case CMD_VERSION: version_exit();
- case CMD_HELP: PrintHelp(&InfoUI_wlect,stdout,0,"HELP",0,URI_HOME,
- first_param ? first_param->arg : 0 ); break;
+ case CMD_HELP: PrintHelpColor(&InfoUI_wlect); break;
case CMD_CONFIG: err = cmd_config(); break;
case CMD_ARGTEST: err = cmd_argtest(argc,argv); break;
case CMD_TEST: err = cmd_test(); break;
diff --git a/project/src/wmdlt.c b/project/src/wmdlt.c
index 77bc384..b78ea83 100644
--- a/project/src/wmdlt.c
+++ b/project/src/wmdlt.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -53,6 +53,7 @@
static void help_exit ( bool xmode )
{
+ SetupPager();
fputs( TITLE "\n", stdout );
if (xmode)
@@ -64,6 +65,7 @@ static void help_exit ( bool xmode )
else
PrintHelpCmd(&InfoUI_wmdlt,stdout,0,0,"HELP",0,URI_HOME);
+ ClosePager();
exit(ERR_OK);
}
@@ -542,6 +544,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break;
case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break;
case GO_LOGGING: logging++; break;
+ case GO_WARN: err += ScanOptWarn(optarg); break;
case GO_DE: use_de = true; break;
case GO_CT_CODE: ctcode_enabled = true; break;
case GO_LE_CODE: lecode_enabled = true; break;
@@ -659,8 +662,7 @@ static enumError CheckCommand ( int argc, char ** argv )
switch ((enumCommands)cmd_ct->id)
{
case CMD_VERSION: version_exit();
- case CMD_HELP: PrintHelp(&InfoUI_wmdlt,stdout,0,"HELP",0,URI_HOME,
- first_param ? first_param->arg : 0 ); break;
+ case CMD_HELP: PrintHelpColor(&InfoUI_wmdlt); break;
case CMD_CONFIG: err = cmd_config(); break;
case CMD_ARGTEST: err = cmd_argtest(argc,argv); break;
case CMD_TEST: err = cmd_test(); break;
diff --git a/project/src/wpatt.c b/project/src/wpatt.c
index 0cfb061..47107a5 100644
--- a/project/src/wpatt.c
+++ b/project/src/wpatt.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -53,6 +53,7 @@
static void help_exit ( bool xmode )
{
+ SetupPager();
fputs( TITLE "\n", stdout );
if (xmode)
@@ -64,6 +65,7 @@ static void help_exit ( bool xmode )
else
PrintHelpCmd(&InfoUI_wpatt,stdout,0,0,"HELP",0,URI_HOME);
+ ClosePager();
exit(ERR_OK);
}
@@ -351,6 +353,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break;
case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break;
case GO_LOGGING: logging++; break;
+ case GO_WARN: err += ScanOptWarn(optarg); break;
case GO_DE: use_de = true; break;
case GO_CT_CODE: ctcode_enabled = true; break;
case GO_LE_CODE: lecode_enabled = true; break;
@@ -453,8 +456,7 @@ static enumError CheckCommand ( int argc, char ** argv )
switch ((enumCommands)cmd_ct->id)
{
case CMD_VERSION: version_exit();
- case CMD_HELP: PrintHelp(&InfoUI_wpatt,stdout,0,"HELP",0,URI_HOME,
- first_param ? first_param->arg : 0 ); break;
+ case CMD_HELP: PrintHelpColor(&InfoUI_wpatt); break;
case CMD_CONFIG: err = cmd_config(); break;
case CMD_ARGTEST: err = cmd_argtest(argc,argv); break;
case CMD_TEST: err = cmd_test(); break;
diff --git a/project/src/wstrt.c b/project/src/wstrt.c
index 8bdcf39..7708f78 100644
--- a/project/src/wstrt.c
+++ b/project/src/wstrt.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -65,6 +65,7 @@
static void help_exit ( bool xmode )
{
+ SetupPager();
fputs( TITLE "\n", stdout );
if (xmode)
@@ -76,6 +77,7 @@ static void help_exit ( bool xmode )
else
PrintHelpCmd(&InfoUI_wstrt,stdout,0,0,"HELP",0,URI_HOME);
+ ClosePager();
exit(ERR_OK);
}
@@ -419,6 +421,7 @@ static void setup_order ( int index[STR_ZBI_N], int delta )
switch(*ptr++)
{
case 'p': case 'P': idx = STR_M_PAL - STR_ZBI_FIRST; break;
+ case 'e': case 'E':
case 'u': case 'U': idx = STR_M_USA - STR_ZBI_FIRST; break;
case 'j': case 'J': idx = STR_M_JAP - STR_ZBI_FIRST; break;
case 'k': case 'K': idx = STR_M_KOR - STR_ZBI_FIRST; break;
@@ -453,7 +456,7 @@ typedef struct hex_in_t
u32 cheat; // if is_cheat: highest 7 bits
bool is_dol_offset; // true: prefix 'M' used
bool is_rel_offset; // true: prefix 'S' used
- bool is_cheat; // if a cheat code, where only lowest 25 bits are relevant
+ bool is_cheat; // it's a cheat code, where only lowest 25 bits are relevant
bool is_6hex; // hex number with exact 6 hex digits
}
hex_in_t;
@@ -462,7 +465,7 @@ hex_in_t;
static hex_in_t scan_hex ( str_mode_t mode, ccp arg )
{
- hex_in_t hex = {0};
+ hex_in_t hex = { .cheat = ~0 };
hex.is_dol_offset = *arg == 'm' || *arg == 'M';
hex.is_rel_offset = *arg == 's' || *arg == 'S';
@@ -495,20 +498,32 @@ static hex_in_t scan_hex ( str_mode_t mode, ccp arg )
static void print_address ( u32 addr, bool highlight, u32 cheat_code )
{
- if (cheat_code)
+ const bool is_cheat_code = cheat_code != ~0;
+ if (is_cheat_code)
addr = addr & 0x01ffffff | cheat_code;
+ ccp col1, col2;
if (highlight)
{
+ col1 = colout->value;
+ col2 = colout->reset;
+ }
+ else
+ col1 = col2 = "";
+
+ if ( opt_upper || is_cheat_code )
+ {
if (opt_no_0x)
- printf(" %s%08x%s",colout->value,addr,colout->reset);
+ printf(" %s%08X%s",col1,addr,col2);
+ else if (is_cheat_code)
+ printf(" %s%08X%s",col1,addr,col2);
else
- printf(" %s%#010x%s",colout->value,addr,colout->reset);
+ printf(" %s%#010X%s",col1,addr,col2);
}
else if (opt_no_0x)
- printf(" %08x",addr);
+ printf(" %s%08x%s",col1,addr,col2);
else
- printf(" %#010x",addr);
+ printf(" %s%#010x%s",col1,addr,col2);
}
///////////////////////////////////////////////////////////////////////////////
@@ -519,17 +534,29 @@ static void print_offset ( str_mode_t mode, u32 addr, bool highlight )
if ( aoff < 0 )
printf(" %s-", opt_no_0x ? "": " " );
- else if ( highlight )
+ else
{
- if (opt_no_0x)
- printf(" %s%6x%s",colout->value,aoff,colout->reset);
+ ccp col1, col2;
+ if (highlight)
+ {
+ col1 = colout->value;
+ col2 = colout->reset;
+ }
else
- printf(" %s%#8x%s",colout->value,aoff,colout->reset);
+ col1 = col2 = "";
+
+ if ( opt_upper )
+ {
+ if (opt_no_0x)
+ printf(" %s%6X%s",col1,aoff,col2);
+ else
+ printf(" %s%#8X%s",col1,aoff,col2);
+ }
+ else if (opt_no_0x)
+ printf(" %s%6x%s",col1,aoff,col2);
+ else
+ printf(" %s%#8x%s",col1,aoff,col2);
}
- else if (opt_no_0x)
- printf(" %6x",aoff);
- else
- printf(" %#8x",aoff);
}
//
@@ -547,12 +574,14 @@ static enumError cmd_port()
SetupAddrPortDB();
const addr_port_version_t *vers = GetAddrPortVersion();
printf("\nAddress Porting Database:\n"
- " Time stamp: %s\n"
+ " File: %s\n"
+ " Timestamp: %s\n"
" DB version: %5u\n"
" Revision: %5u\n"
" N(records): %5u\n"
" Size: %5s\n"
- ,PrintTimeByFormat("%F %T",vers->timestamp)
+ ,addr_port_file
+ ,PrintTimeByFormat("%F %T %Z",vers->timestamp)
,vers->db_version
,vers->revision
,vers->n_records
@@ -1557,6 +1586,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break;
case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break;
case GO_LOGGING: logging++; break;
+ case GO_WARN: err += ScanOptWarn(optarg); break;
case GO_DE: use_de = true; break;
case GO_CT_CODE: ctcode_enabled = true; break;
case GO_LE_CODE: lecode_enabled = true; break;
@@ -1641,6 +1671,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_PORT_DB: opt_port_db = optarg; break;
case GO_ORDER: opt_order = optarg; break;
case GO_NO_0X: opt_no_0x = true; break;
+ case GO_UPPER: opt_upper = true; break;
case GO_VADDR: InsertAddressMemMap(&vaddr,true,optarg,16); break;
case GO_FADDR: InsertAddressMemMap(&faddr,true,optarg,16); break;
@@ -1754,8 +1785,7 @@ static enumError CheckCommand ( int argc, char ** argv )
switch ((enumCommands)cmd_ct->id)
{
case CMD_VERSION: version_exit();
- case CMD_HELP: PrintHelp(&InfoUI_wstrt,stdout,0,"HELP",0,URI_HOME,
- first_param ? first_param->arg : 0 ); break;
+ case CMD_HELP: PrintHelpColor(&InfoUI_wstrt); break;
case CMD_CONFIG: err = cmd_config(); break;
case CMD_ARGTEST: err = cmd_argtest(argc,argv); break;
case CMD_TEST: err = cmd_test(); break;
diff --git a/project/src/wszst.c b/project/src/wszst.c
index 4171de9..f39bd59 100644
--- a/project/src/wszst.c
+++ b/project/src/wszst.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -51,6 +51,12 @@
#include "lib-image.h"
#include "lib-common.h"
#include "lib-rkg.h"
+#include "lib-bzip2.h"
+#include "lib-pack.h"
+#include "lib-rarc.h"
+#include "lib-rkc.h"
+#include "lib-staticr.h"
+#include "db-dol.h"
#include "crypt.h"
#include "ui.h" // [[dclib]] wrapper
#include "ui-wszst.c"
@@ -81,6 +87,7 @@
static void help_exit ( bool xmode )
{
+ SetupPager();
fputs( TITLE "\n", stdout );
if (xmode)
@@ -92,6 +99,7 @@ static void help_exit ( bool xmode )
else
PrintHelpCmd(&InfoUI_wszst,stdout,0,0,"HELP",0,URI_HOME);
+ ClosePager();
exit(ERR_OK);
}
@@ -245,6 +253,344 @@ static void set_all ( bool force_cut )
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// sizeof data ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static const sizeof_info_t sizeof_info_szs_list[] =
+{
+ SIZEOF_INFO_TITLE("SZS basics")
+ SIZEOF_INFO_ENTRY(compatible_info_t)
+ SIZEOF_INFO_ENTRY(SubFile_t)
+ SIZEOF_INFO_ENTRY(SubFileList_t)
+ SIZEOF_INFO_ENTRY(SubDirList_t)
+ SIZEOF_INFO_ENTRY(SubDir_t)
+ SIZEOF_INFO_ENTRY(SubFileIterator_t)
+ SIZEOF_INFO_ENTRY(DataContainer_t)
+ SIZEOF_INFO_ENTRY(search_filter_t)
+ SIZEOF_INFO_ENTRY(SubstString_t)
+ SIZEOF_INFO_ENTRY(repair_ff_t)
+ SIZEOF_INFO_ENTRY(slot_info_t)
+ SIZEOF_INFO_ENTRY(FormatFieldItem_t)
+ SIZEOF_INFO_ENTRY(FormatField_t)
+ SIZEOF_INFO_ENTRY(tiny_param_t)
+ SIZEOF_INFO_ENTRY(ParamList_t)
+ SIZEOF_INFO_ENTRY(List_t)
+ SIZEOF_INFO_ENTRY(MemItem_t)
+ SIZEOF_INFO_ENTRY(SetupDef_t)
+ SIZEOF_INFO_ENTRY(ListDef_t)
+ SIZEOF_INFO_ENTRY(SetupParam_t)
+ SIZEOF_INFO_ENTRY(config_t)
+ SIZEOF_INFO_ENTRY(data_tab_t)
+ SIZEOF_INFO_ENTRY(output_mode_t)
+
+ SIZEOF_INFO_TITLE("SZS basics: numeric")
+ SIZEOF_INFO_ENTRY(tri_metrics_t)
+ SIZEOF_INFO_ENTRY(octahedron_t)
+ SIZEOF_INFO_ENTRY(cuboid_t)
+ SIZEOF_INFO_ENTRY(IndexList_t)
+ SIZEOF_INFO_ENTRY(FuncParam_t)
+ SIZEOF_INFO_ENTRY(FuncTable_t)
+ SIZEOF_INFO_ENTRY(FuncInfo_t)
+ SIZEOF_INFO_ENTRY(Var_t)
+ SIZEOF_INFO_ENTRY(VarMap_t)
+ SIZEOF_INFO_ENTRY(ScanLoop_t)
+ SIZEOF_INFO_ENTRY(ScanMacro_t)
+ SIZEOF_INFO_ENTRY(ScanFile_t)
+ SIZEOF_INFO_ENTRY(ScanInfo_t)
+ SIZEOF_INFO_ENTRY(ScanParam_t)
+ SIZEOF_INFO_ENTRY(Line_t)
+
+ SIZEOF_INFO_TITLE("Archives and packing")
+ SIZEOF_INFO_ENTRY(BZIP2_t)
+ SIZEOF_INFO_ENTRY(BZ2Manager_t)
+ SIZEOF_INFO_ENTRY(BZ2Source_t)
+ SIZEOF_INFO_ENTRY(sha1_size_t)
+ SIZEOF_INFO_ENTRY(sha1_type_t)
+ SIZEOF_INFO_ENTRY(sha1_db_t)
+ SIZEOF_INFO_ENTRY(DistributionInfo_t)
+ SIZEOF_INFO_ENTRY(pack_header_t)
+ SIZEOF_INFO_ENTRY(pack_metric_t)
+
+ SIZEOF_INFO_TITLE("BREFF & BREFT")
+ SIZEOF_INFO_ENTRY(breff_root_head_t)
+ SIZEOF_INFO_ENTRY(breff_root_t)
+ SIZEOF_INFO_ENTRY(breff_item_name_t)
+ SIZEOF_INFO_ENTRY(breff_item_data_t)
+ SIZEOF_INFO_ENTRY(breff_item_list_t)
+ SIZEOF_INFO_ENTRY(breft_image_t)
+
+ SIZEOF_INFO_TITLE("BRRES")
+ SIZEOF_INFO_ENTRY(brres_info_t)
+ SIZEOF_INFO_ENTRY(brsub_list_t)
+ SIZEOF_INFO_ENTRY(brsub_info_t)
+ SIZEOF_INFO_ENTRY(brsub_iterator_t)
+ SIZEOF_INFO_ENTRY(brres_t)
+ SIZEOF_INFO_ENTRY(tex_info_t)
+ SIZEOF_INFO_ENTRY(name_ref_elem_t)
+ SIZEOF_INFO_ENTRY(name_ref_var_t)
+ SIZEOF_INFO_ENTRY(name_ref_t)
+
+ SIZEOF_INFO_TITLE("Common files")
+ SIZEOF_INFO_ENTRY(object_type_t)
+ SIZEOF_INFO_ENTRY(object_mgr_t)
+ SIZEOF_INFO_ENTRY(itemslot_bin_t)
+ SIZEOF_INFO_ENTRY(itemslot_t)
+ SIZEOF_INFO_ENTRY(minigame_kmg_head_t)
+ SIZEOF_INFO_ENTRY(minigame_kmg_t)
+ SIZEOF_INFO_ENTRY(minigame_t)
+ SIZEOF_INFO_ENTRY(objflow_bin_t)
+ SIZEOF_INFO_ENTRY(objflow_t)
+ SIZEOF_INFO_ENTRY(geohit_bin_t)
+ SIZEOF_INFO_ENTRY(geohit_t)
+
+ SIZEOF_INFO_TITLE("CT-CODE")
+ SIZEOF_INFO_ENTRY(ctcode_sect_info_t)
+ SIZEOF_INFO_ENTRY(ctcode_header_t)
+ SIZEOF_INFO_ENTRY(ctcode_cup1_data_t)
+ SIZEOF_INFO_ENTRY(ctcode_cup1_head_t)
+ SIZEOF_INFO_ENTRY(ctcode_crs1_data_t)
+ SIZEOF_INFO_ENTRY(ctcode_crs1_head_t)
+ SIZEOF_INFO_ENTRY(ctcode_cupref_t)
+ SIZEOF_INFO_ENTRY(ctcode_arena_t)
+ SIZEOF_INFO_ENTRY(ctcode_t)
+
+ SIZEOF_INFO_TITLE("DOL")
+ SIZEOF_INFO_ENTRY(DolSectionMap_t)
+ SIZEOF_INFO_ENTRY(DolAddressMap_t)
+
+ SIZEOF_INFO_TITLE("File DB")
+ SIZEOF_INFO_ENTRY(DbFile_t)
+ SIZEOF_INFO_ENTRY(DbFileSZS_t)
+ SIZEOF_INFO_ENTRY(DbFileSHA1_t)
+ SIZEOF_INFO_ENTRY(DbFileFILE_t)
+ SIZEOF_INFO_ENTRY(DbFileGROUP_t)
+
+ SIZEOF_INFO_TITLE("Images")
+ SIZEOF_INFO_ENTRY(MipmapOptions_t)
+ SIZEOF_INFO_ENTRY(ImageGeometry_t)
+ SIZEOF_INFO_ENTRY(Image_t)
+ SIZEOF_INFO_ENTRY(cmpr_info_t)
+ SIZEOF_INFO_ENTRY(tpl_header_t)
+ SIZEOF_INFO_ENTRY(tpl_imgtab_t)
+ SIZEOF_INFO_ENTRY(tpl_pal_header_t)
+ SIZEOF_INFO_ENTRY(tpl_img_header_t)
+ SIZEOF_INFO_ENTRY(bti_header_t)
+
+ SIZEOF_INFO_TITLE("KCL")
+ SIZEOF_INFO_ENTRY(kcl_attrib_name_t)
+ SIZEOF_INFO_ENTRY(kcl_class_t)
+ SIZEOF_INFO_ENTRY(kcl_type_t)
+ SIZEOF_INFO_ENTRY(kcl_analyze_t)
+ SIZEOF_INFO_ENTRY(kcl_head_t)
+ SIZEOF_INFO_ENTRY(kcl_triangle_t)
+ SIZEOF_INFO_ENTRY(kcl_tridata_flt_t)
+ SIZEOF_INFO_ENTRY(kcl_tridata_dbl_t)
+ SIZEOF_INFO_ENTRY(kcl_tridata0_t)
+ SIZEOF_INFO_ENTRY(kcl_tridata1_t)
+ SIZEOF_INFO_ENTRY(kcl_t)
+ SIZEOF_INFO_ENTRY(kcl_tri_param_t)
+ SIZEOF_INFO_ENTRY(kcl_cube_t)
+ #if SUPPORT_KCL_CUBE
+ SIZEOF_INFO_ENTRY(kcl_cube_list_t)
+ #endif
+ SIZEOF_INFO_ENTRY(kcl_tri_t)
+
+ SIZEOF_INFO_TITLE("KMP basics")
+ SIZEOF_INFO_ENTRY(kmp_file_gen_t)
+ SIZEOF_INFO_ENTRY(kmp_file_mkw_t)
+ SIZEOF_INFO_ENTRY(kmp_file_wim0_t)
+ SIZEOF_INFO_ENTRY(kmp_head_info_t)
+ SIZEOF_INFO_ENTRY(kmp_list_head_t)
+ SIZEOF_INFO_ENTRY(kmp_ktpt_entry_t)
+ SIZEOF_INFO_ENTRY(kmp_enpt_entry_t)
+ SIZEOF_INFO_ENTRY(kmp_enph_entry_t)
+ SIZEOF_INFO_ENTRY(kmp_ckpt_entry_t)
+ SIZEOF_INFO_ENTRY(kmp_gobj_entry_t)
+ SIZEOF_INFO_ENTRY(kmp_poti_group_t)
+ SIZEOF_INFO_ENTRY(kmp_poti_point_t)
+ SIZEOF_INFO_ENTRY(kmp_area_entry_t)
+ SIZEOF_INFO_ENTRY(kmp_came_entry_t)
+ SIZEOF_INFO_ENTRY(kmp_jgpt_entry_t)
+ SIZEOF_INFO_ENTRY(kmp_stgi_entry_t)
+ SIZEOF_INFO_ENTRY(kmp_wim0_t)
+ SIZEOF_INFO_ENTRY(kmp_wim0_sect_t)
+ SIZEOF_INFO_ENTRY(kmp_wim0_info_t)
+ SIZEOF_INFO_ENTRY(kmp_section_t)
+ SIZEOF_INFO_ENTRY(kmp_rtype_info_t)
+ SIZEOF_INFO_ENTRY(kmp_gopt_t)
+ SIZEOF_INFO_ENTRY(kmp_gopt2_t)
+ SIZEOF_INFO_ENTRY(kmp_group_elem_t)
+ SIZEOF_INFO_ENTRY(kmp_group_t)
+ SIZEOF_INFO_ENTRY(kmp_group_list_t)
+ SIZEOF_INFO_ENTRY(kmp_rtobj_t)
+ SIZEOF_INFO_ENTRY(kmp_rtobj_list_t)
+ SIZEOF_INFO_ENTRY(kmp_ph_t)
+ SIZEOF_INFO_ENTRY(kmp_flag_t)
+ SIZEOF_INFO_ENTRY(kmp_t)
+ SIZEOF_INFO_ENTRY(Itembox_t)
+ SIZEOF_INFO_ENTRY(DrawKCL_t)
+ SIZEOF_INFO_ENTRY(pos_param_t)
+ SIZEOF_INFO_ENTRY(pos_file_t)
+ SIZEOF_INFO_ENTRY(kmp_obj_info_t)
+
+ SIZEOF_INFO_TITLE("KMP analysis")
+ SIZEOF_INFO_ENTRY(kmp_linfo_t)
+ SIZEOF_INFO_ENTRY(kmp_finish_t)
+ SIZEOF_INFO_ENTRY(kmp_usedpos_obj_t)
+ SIZEOF_INFO_ENTRY(kmp_usedpos_t)
+ SIZEOF_INFO_ENTRY(kmp_pflags_t)
+ SIZEOF_INFO_ENTRY(gobj_cond_ref_t)
+ SIZEOF_INFO_ENTRY(gobj_cond_mask_t)
+ SIZEOF_INFO_ENTRY(cond_ref_info_t)
+ SIZEOF_INFO_ENTRY(kmp_ana_defobj_t)
+ SIZEOF_INFO_ENTRY(kmp_ana_ref_t)
+ SIZEOF_INFO_ENTRY(gobj_condition_t)
+ SIZEOF_INFO_ENTRY(gobj_condition_set_t)
+ SIZEOF_INFO_ENTRY(kmp_gobj_info_t)
+ SIZEOF_INFO_ENTRY(kmp_ana_gobj_t)
+ SIZEOF_INFO_ENTRY(kmp_ana_pflag_res_t)
+ SIZEOF_INFO_ENTRY(kmp_ana_pflag_t)
+
+ SIZEOF_INFO_TITLE("LE-CODE")
+ SIZEOF_INFO_ENTRY(lecode_debug_info_t)
+ SIZEOF_INFO_ENTRY(lecode_debug_ex_t)
+ SIZEOF_INFO_ENTRY(le_lpar_t)
+ SIZEOF_INFO_ENTRY(le_binary_head_t)
+ SIZEOF_INFO_ENTRY(le_binary_head_v4_t)
+ SIZEOF_INFO_ENTRY(le_binary_param_t)
+ SIZEOF_INFO_ENTRY(le_binpar_v1_35_t)
+ SIZEOF_INFO_ENTRY(le_binpar_v1_37_t)
+ SIZEOF_INFO_ENTRY(le_binpar_v1_f8_t)
+ SIZEOF_INFO_ENTRY(le_binpar_v1_1b8_t)
+ SIZEOF_INFO_ENTRY(le_binpar_v1_1bc_t)
+ SIZEOF_INFO_ENTRY(le_binpar_v1_260_t)
+ SIZEOF_INFO_ENTRY(le_binpar_v1_264_t)
+ SIZEOF_INFO_ENTRY(le_binpar_v1_t)
+ SIZEOF_INFO_ENTRY(le_cup_par_t)
+ SIZEOF_INFO_ENTRY(le_course_par_t)
+ SIZEOF_INFO_ENTRY(le_analyse_t)
+
+ SIZEOF_INFO_TITLE("LEX")
+ SIZEOF_INFO_ENTRY(features_szs_t)
+ SIZEOF_INFO_ENTRY(check_features_szs_t)
+ SIZEOF_INFO_ENTRY(have_lex_info_t)
+ SIZEOF_INFO_ENTRY(lex_header_t)
+ SIZEOF_INFO_ENTRY(lex_element_t)
+ SIZEOF_INFO_ENTRY(lex_set1_t)
+ SIZEOF_INFO_ENTRY(lex_hipt_rule_t)
+ SIZEOF_INFO_ENTRY(lex_test_t)
+ SIZEOF_INFO_ENTRY(lex_item_t)
+ SIZEOF_INFO_ENTRY(lex_t)
+ SIZEOF_INFO_ENTRY(lex_info_t)
+
+ SIZEOF_INFO_TITLE("MDL")
+ SIZEOF_INFO_ENTRY(mdl_head_t)
+ SIZEOF_INFO_ENTRY(mdl_t)
+ SIZEOF_INFO_ENTRY(mdl_sect0_t)
+ SIZEOF_INFO_ENTRY(mdl_sect1_t)
+ SIZEOF_INFO_ENTRY(mdl_sect2_t)
+ SIZEOF_INFO_ENTRY(mdl_sect8_t)
+ SIZEOF_INFO_ENTRY(mdl_sect8_layer_t)
+ SIZEOF_INFO_ENTRY(Slot42MaterialInfo_t)
+ SIZEOF_INFO_ENTRY(Slot42MaterialStat_t)
+ SIZEOF_INFO_ENTRY(mdl_sect10_t)
+ SIZEOF_INFO_ENTRY(mdl_minimap_t)
+ SIZEOF_INFO_ENTRY(StringIteratorMDL_t)
+
+ SIZEOF_INFO_TITLE("MKW")
+ SIZEOF_INFO_ENTRY(TrackInfo_t)
+ SIZEOF_INFO_ENTRY(MusicInfo_t)
+
+ SIZEOF_INFO_TITLE("Object DB")
+ SIZEOF_INFO_ENTRY(ObjSettingFormat_t)
+ SIZEOF_INFO_ENTRY(ObjectInfo_t)
+ SIZEOF_INFO_ENTRY(ObjSpec_t)
+ SIZEOF_INFO_ENTRY(UsedObject_t)
+ SIZEOF_INFO_ENTRY(UsedFile_t)
+ SIZEOF_INFO_ENTRY(UsedFileSZS_t)
+ SIZEOF_INFO_ENTRY(UsedFileSHA1_t)
+ SIZEOF_INFO_ENTRY(UsedFileFILE_t)
+ SIZEOF_INFO_ENTRY(UsedFileGROUP_t)
+
+ SIZEOF_INFO_TITLE("PAT")
+ SIZEOF_INFO_ENTRY(pat_head_t)
+ SIZEOF_INFO_ENTRY(pat_s0_belem_t)
+ SIZEOF_INFO_ENTRY(pat_s0_bhead_t)
+ SIZEOF_INFO_ENTRY(pat_s0_sref_t)
+ SIZEOF_INFO_ENTRY(pat_s0_selem_t)
+ SIZEOF_INFO_ENTRY(pat_s0_shead_t)
+ SIZEOF_INFO_ENTRY(pat_analyse_t)
+ SIZEOF_INFO_ENTRY(pat_element_t)
+ SIZEOF_INFO_ENTRY(pat_t)
+
+ SIZEOF_INFO_TITLE("RARC")
+ SIZEOF_INFO_ENTRY(rarc_file_header_t)
+ SIZEOF_INFO_ENTRY(rarc_header_t)
+ SIZEOF_INFO_ENTRY(rarc_node_t)
+ SIZEOF_INFO_ENTRY(rarc_entry_t)
+
+ SIZEOF_INFO_TITLE("RKC")
+ SIZEOF_INFO_ENTRY(rkco_t)
+ SIZEOF_INFO_ENTRY(rkct_t)
+
+ SIZEOF_INFO_TITLE("RKG")
+ SIZEOF_INFO_ENTRY(rkg_head_t)
+ SIZEOF_INFO_ENTRY(rkg_info_t)
+
+ SIZEOF_INFO_TITLE("StaticR")
+ SIZEOF_INFO_ENTRY(str_server_list_t)
+ SIZEOF_INFO_ENTRY(str_server_patch_t)
+ SIZEOF_INFO_ENTRY(staticr_t)
+ SIZEOF_INFO_ENTRY(VersusPointsInfo_t)
+ SIZEOF_INFO_ENTRY(rel_header_t)
+ SIZEOF_INFO_ENTRY(rel_sect_info_t)
+ SIZEOF_INFO_ENTRY(rel_imp_t)
+ SIZEOF_INFO_ENTRY(rel_data_t)
+ SIZEOF_INFO_ENTRY(rel_info_t)
+ SIZEOF_INFO_ENTRY(wpf_t)
+ SIZEOF_INFO_ENTRY(wpf_head_t)
+ SIZEOF_INFO_ENTRY(addr_port_t)
+ SIZEOF_INFO_ENTRY(addr_port_version_t)
+
+ SIZEOF_INFO_TITLE("SZS")
+ SIZEOF_INFO_ENTRY(yaz0_header_t)
+ SIZEOF_INFO_ENTRY(u8_header_t)
+ SIZEOF_INFO_ENTRY(u8_node_t)
+ SIZEOF_INFO_ENTRY(string_pool_t)
+ SIZEOF_INFO_ENTRY(szs_subfile_t)
+ SIZEOF_INFO_ENTRY(szs_subfile_list_t)
+ SIZEOF_INFO_ENTRY(szs_have_t)
+ SIZEOF_INFO_ENTRY(szs_file_t)
+ SIZEOF_INFO_ENTRY(szs_norm_t)
+// SIZEOF_INFO_ENTRY(check_szs_t)
+ SIZEOF_INFO_ENTRY(slot_ana_t)
+ SIZEOF_INFO_ENTRY(iterator_param_t)
+ SIZEOF_INFO_ENTRY(szs_iterator_t)
+ SIZEOF_INFO_ENTRY(brres_header_t)
+ SIZEOF_INFO_ENTRY(brres_entry_t)
+ SIZEOF_INFO_ENTRY(brres_group_t)
+ SIZEOF_INFO_ENTRY(brres_root_t)
+ SIZEOF_INFO_ENTRY(brsub_header_t)
+ SIZEOF_INFO_ENTRY(brsub_cut_t)
+ SIZEOF_INFO_ENTRY(szs_extract_t)
+ SIZEOF_INFO_ENTRY(raw_data_t)
+ SIZEOF_INFO_ENTRY(wbz_header_t)
+ SIZEOF_INFO_ENTRY(analyse_szs_t)
+ SIZEOF_INFO_ENTRY(file_type_t)
+
+ SIZEOF_INFO_TERM()
+};
+
+//-----------------------------------------------------------------------------
+
+static const sizeof_info_t *sizeof_info_szs[] =
+{
+ sizeof_info_szs_list,
+ 0
+};
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// command test ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -254,6 +600,7 @@ static enumError cmd_test_options()
printf(" test: %16x = %12d\n",testmode,testmode);
printf(" verbose: %16x = %12d\n",verbose,verbose);
+ printf(" warn modes: %16llx = \"%s\"\n",(u64)WARN_MODE,GetWarnMode());
printf(" force: %16x = %12d (kmp=%d)\n",force_count,force_count,force_kmp);
printf(" sort: %16x = %12d\n",opt_sort,opt_sort);
printf(" width: %16x = %12d\n",opt_width,opt_width);
@@ -844,6 +1191,42 @@ static enumError cmd_export()
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// command sizeof ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static enumError cmd_sizeof()
+{
+ sizeof_info_order_t order;
+ switch (GetSortMode(opt_sort,0,SORT_NONE))
+ {
+ case SORT_INAME: order = SIZEOF_ORDER_NAME; break;
+ case SORT_SIZE: order = SIZEOF_ORDER_SIZE; break;
+ default: order = SIZEOF_ORDER_NONE; break;
+ }
+
+ SetupPager();
+ PrintMode_t pm = { .fout = stdout, .cout = colout, .debug = logging };
+ ArgManager_t am = { .force_case = LOUP_LOWER };
+ for ( ParamList_t *param = first_param; param; param = param->next )
+ AppendArgManager(&am,param->arg,0,false);
+
+ const sizeof_info_t **si_list;
+ if (brief_count)
+ si_list = sizeof_info_szs;
+ else
+ {
+ AddListToSizeofInfoMgr(sizeof_info_szs);
+ si_list = GetSizeofInfoMgrList();
+ }
+
+ ListSizeofInfo(&pm,si_list,&am,order);
+
+ ClosePager();
+ return ERR_OK;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// command _CODE ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -985,7 +1368,7 @@ void PrintNorm ( const szs_norm_t *norm )
if ( !norm || !norm->f )
return;
-
+
}
///////////////////////////////////////////////////////////////////////////////
@@ -1907,6 +2290,9 @@ static enumError cmd_analyze()
PrintScript_t ps;
SetupPrintScriptByOptions(&ps);
+ patch_action_log_disabled++;
+ CheckTextureRefSZS(&szs,0);
+
ParamList_t *param;
for ( param = first_param; param; param = param->next )
{
@@ -1939,6 +2325,7 @@ static enumError cmd_analyze()
//--- analyse szs
+ const u_usec_t start_usec = GetTimerUSec();
AnalyseSZS(&as,false,&szs,param->arg);
@@ -1975,12 +2362,42 @@ static enumError cmd_analyze()
name_attrib++;
ccp end = strrchr(name_attrib,']');
if (end)
+ {
name_attrib_len = end - name_attrib;
+ for ( ccp ptr = name_attrib; ptr < end; )
+ {
+ ccp sep = strchr(ptr,',');
+ if (!sep)
+ sep = end;
+ switch ( sep-ptr )
+ {
+ case 4:
+ if (!memcmp(ptr,"edit",4)) szs.have.attrib |= 1 << HAVEATT_EDIT;
+ break;
+
+ case 5:
+ if (!memcmp(ptr,"cheat",5)) szs.have.attrib |= 1 << HAVEATT_CHEAT;
+ break;
+
+ case 7:
+ if (!memcmp(ptr,"reverse",7)) szs.have.attrib |= 1 << HAVEATT_REVERSE;
+ break;
+ }
+ ptr = sep + 1;
+ }
+ }
}
else
name_attrib = EmptyString;
+ ccp texture_info = 0;
+ PrepareCheckTextureSZS(&szs);
+ CheckTextureRefSZS(&szs,&texture_info);
+
+ const u_usec_t duration_usec = GetTimerUSec() - start_usec;
+
+
//--- print result
PrintScriptVars(&ps,1,
@@ -1995,6 +2412,10 @@ static enumError cmd_analyze()
"sha1_course=\"%s\"\n"
"sha1_vrcorn=\"%s\"\n"
"sha1_minimap=\"%s\"\n"
+ "sha1_kcl_slot=%u\n"
+ "sha1_kmp_slot=%u\n"
+ "sha1_kmp_norm_slot=%u\n"
+ "sha1_minimap_slot=%u\n"
"valid_track=%u\n"
"is_arena=\"%u %s\"\n"
"n_ckpt0=%d\n"
@@ -2015,13 +2436,14 @@ static enumError cmd_analyze()
"special_files=\"%s\"\n"
"original_files=\"%s\"\n"
"modified_files=\"%s\"\n"
+ "special_attrib=\"%s\"\n"
"special_kmp=\"%s\"\n"
"lex_sections=\"%s\"\n"
"lex_features=\"%s\"\n"
"warn=\"%u=%s\"\n"
"ct_attributes=\"%s\"\n"
"name_attributes=\"%.*s\"\n"
- "duration_usec=%llu\n"
+
,dest
,szs.size
,as.db64
@@ -2033,6 +2455,10 @@ static enumError cmd_analyze()
,as.sha1_course
,as.sha1_vrcorn
,as.sha1_minimap
+ ,as.sha1_kcl_slot
+ ,as.sha1_kmp_slot
+ ,as.sha1_kmp_norm_slot
+ ,as.sha1_minimap_slot
,as.valid_track
,szs.is_arena
,is_arena_name[szs.is_arena]
@@ -2066,15 +2492,18 @@ static enumError cmd_analyze()
,CreateSpecialFileInfo(&szs,~(1<<HFM_NONE),true,"")
,CreateSpecialFileInfo(&szs,1<<HFM_ORIGINAL,true,"")
,CreateSpecialFileInfo(&szs,1<<HFM_MODIFIED,true,"")
+ ,CreateSpecialInfoAttrib(szs.have.attrib,true,"")
,CreateSpecialInfoKMP(szs.have.kmp,true,"")
,CreateSectionInfoLEX(szs.have.lex_sect,true,"")
,CreateFeatureInfoLEX(szs.have.lex_feat,true,"")
,szs.warn_bits,GetWarnSZSNames(szs.warn_bits,' ')
,as.ct_attrib+1
,name_attrib_len,name_attrib
- ,as.duration_usec
);
+ if (texture_info)
+ PrintScriptVars(&ps,0,"texture_hack=\"%s\"\n",texture_info);
+
if ( long_count > 0 )
{
const uint n = szs.special_file ? szs.special_file->used : 0;
@@ -2091,6 +2520,7 @@ static enumError cmd_analyze()
}
}
+ PrintScriptVars(&ps,0,"duration_usec=%llu\n",duration_usec);
PutScriptVars(&ps,2,0);
if (!script_array)
@@ -2111,6 +2541,74 @@ static enumError cmd_analyze()
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// command is-texture ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static enumError cmd_is_texture()
+{
+ disable_checks++;
+
+ int max_err = 0;
+ szs_file_t szs;
+ InitializeSZS(&szs);
+ patch_action_log_disabled++;
+
+ uint max_fw = 0;
+ struct { FastBuf_t b; char space[500]; } fbuf;
+ if (long_count)
+ InitializeFastBuf(&fbuf,sizeof(fbuf));
+
+ for ( ParamList_t *param = first_param; param; param = param->next )
+ {
+ NORMALIZE_FILENAME_PARAM(param);
+
+ ResetSZS(&szs);
+ enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ if ( err > ERR_WARNING )
+ {
+ if (long_count)
+ {
+ AppendFastBuf(&fbuf.b,"-1=err",7);
+ if ( max_fw < 7 )
+ max_fw = 7;
+ }
+ if ( max_err < err )
+ max_err = err;
+ continue;
+ }
+
+ ccp texture_info = 0;
+ PrepareCheckTextureSZS(&szs);
+ CheckTextureRefSZS(&szs,&texture_info);
+
+ if (long_count)
+ {
+ ccp x = texture_info ? texture_info : "-1";
+ const int len = strlen(x);
+ AppendFastBuf(&fbuf.b,x,len+1);
+ if ( max_fw < len )
+ max_fw = len;
+ }
+ else
+ printf("%s\n", texture_info ? texture_info : "-1" );
+ }
+
+ if (long_count)
+ {
+ ccp par = fbuf.b.buf;
+ for ( ParamList_t *param = first_param; param; param = param->next )
+ {
+ printf("%-*s : %s\n",max_fw,par,param->arg);
+ par += strlen(par) + 1;
+ }
+ ResetFastBuf(&fbuf.b);
+ }
+
+ return max_err;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// command features ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -5089,6 +5587,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break;
case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break;
case GO_LOGGING: logging++; break;
+ case GO_WARN: err += ScanOptWarn(optarg); break;
case GO_DE: use_de = true; break;
case GO_CT_CODE: ctcode_enabled = true; break;
case GO_LE_CODE: lecode_enabled = true; break;
@@ -5185,6 +5684,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_ESC: err += ScanEscapeChar(optarg) < 0; break;
case GO_SOURCE: SetSource(optarg); break;
+ case GO_REFERENCE: SetReference(optarg); break;
case GO_DEST: SetDest(optarg,false); break;
case GO_DEST2: SetDest(optarg,true); break;
case GO_OVERWRITE: opt_overwrite = true; break;
@@ -5383,14 +5883,12 @@ static enumError CheckCommand ( int argc, char ** argv )
switch ((enumCommands)cmd_ct->id)
{
case CMD_VERSION: version_exit();
- case CMD_HELP: PrintHelp(&InfoUI_wszst,stdout,0,"HELP",0,URI_HOME,
- first_param ? first_param->arg : 0 ); break;
+ case CMD_HELP: PrintHelpColor(&InfoUI_wszst); break;
case CMD_CONFIG: err = cmd_config(); break;
case CMD_INSTALL: err = cmd_install(); break;
case CMD_ARGTEST: err = cmd_argtest(argc,argv); break;
case CMD_TEST: err = cmd_test(); break;
- case CMD_COLORS: err = Command_COLORS(brief_count?-brief_count:long_count,0,0);
- break;
+ case CMD_COLORS: err = Command_COLORS(brief_count?-brief_count:long_count,0,0); break;
case CMD_ERROR: err = cmd_error(); break;
case CMD_FILETYPE: err = cmd_filetype(); break;
case CMD_FILEATTRIB: err = cmd_fileattrib(); break;
@@ -5408,6 +5906,7 @@ static enumError CheckCommand ( int argc, char ** argv )
case CMD_TRACKS: err = cmd_tracks(); break;
case CMD_SCANCACHE: err = cmd_scancache(); break;
case CMD_EXPORT: err = cmd_export(); break;
+ case CMD_SIZEOF: err = cmd_sizeof(); break;
case CMD_CODE: err = cmd_code(); break;
case CMD_RECODE: err = cmd_recode(); break;
case CMD_SUBFILE: err = cmd_subfile(); break;
@@ -5433,6 +5932,7 @@ static enumError CheckCommand ( int argc, char ** argv )
case CMD_MEMORY_A: set_all(1); err = cmd_memory(); break;
case CMD_SHA1: err = cmd_sha1(); break;
case CMD_ANALYZE: err = cmd_analyze(); break;
+ case CMD_IS_TEXTURE: err = cmd_is_texture(); break;
case CMD_FEATURES: err = cmd_features(); break;
case CMD_DISTRIBUTION: err = cmd_distribution(); break;
case CMD_DIFF: err = cmd_diff(); break;
diff --git a/project/src/wtest.c b/project/src/wtest.c
index bf4a6a3..2283dd8 100644
--- a/project/src/wtest.c
+++ b/project/src/wtest.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2022 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -41,10 +41,13 @@
#include <dirent.h>
#include <stddef.h>
#include <time.h>
+#include <locale.h>
//#include <sys/stat.h>
//#include <fcntl.h>
+#include "dclib-utf8.h"
#include "dclib-debug.h"
+
#include "version.h"
#include "lib-std.h"
#include "lib-image.h"
@@ -3886,7 +3889,7 @@ static enumError test_eml ( int argc, char ** argv )
exmem_t data = ExMemByString(eq?eq:arg);
if ( *arg == '-' )
- RemoveEML(&eml,arg+1);
+ RemoveByKeyEML(&eml,arg+1);
else if ( *arg == '+' )
ReplaceEML(&eml,arg+1,CPM_COPY,&data,CPM_COPY);
else if ( *arg == '%' )
@@ -3922,8 +3925,7 @@ static enumError test_eml ( int argc, char ** argv )
static enumError test_cygpath ( int argc, char ** argv )
{
- int i;
- for ( i = 1; i < argc; i++ )
+ for ( int i = 1; i < argc; i++ )
{
ccp arg = argv[i];
bool try_circ = *arg != '-';
@@ -3950,6 +3952,104 @@ static enumError test_cygpath ( int argc, char ** argv )
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// test_utf8() ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static enumError test_utf8 ( int argc, char ** argv )
+{
+ setlocale(LC_ALL,"C.utf8");
+ printf("|%6s|\n|%6ls|\n","abc",L"äöü");
+
+ static ccp text[] = { "aousA", "äöüßÄ", "├─┼─┤","12345", 0 };
+ for ( ccp *ptr = text; *ptr; ptr++ )
+ {
+ mem_t src = MemByString(*ptr);
+ mem_t mid = MidMem8(src,1,2);
+ mem_t left = LeftMem8(src,-3);
+ mem_t right = RightMem8(src,-3);
+
+ printf(" | %.*s | %.*s | %.*s | ~~ |%s|%s|%s|%s|\n",
+ mid.len, mid.ptr,
+ left.len, left.ptr,
+ right.len, right.ptr,
+ AlignUTF8ToCircBuf(*ptr,10,-1),
+ AlignUTF8ToCircBuf(*ptr,-10,-1),
+ AlignUTF8ToCircBuf(*ptr,-10,2),
+ *ptr );
+ }
+ return 0;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// test_nice() ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static enumError test_nice ( int argc, char ** argv )
+{
+ putchar('\n');
+ for ( int i = 1; i < argc; i++ )
+ {
+ ccp arg = argv[i], end;
+ int nice4, nice5, nice6;
+
+ if (!strcmp(arg,"-"))
+ {
+ putchar('\n');
+ continue;
+ }
+
+ end = ScanNiceID4(&nice4,arg);
+ if ( !*end && nice4 >= 0 )
+ printf("%20s => %8d : %s\n",arg,nice4,PrintNiceID4(nice4));
+
+ end = ScanNiceID5(&nice5,arg);
+ if ( !*end && nice5 >= 0 )
+ printf("%20s => %8d : %s\n",arg,nice5,PrintNiceID5(nice5));
+
+ end = ScanNiceID6(&nice6,arg);
+ if ( !*end && nice6 >= 0 )
+ printf("%20s => %8d : %s\n",arg,nice6,PrintNiceID6(nice6));
+
+ uint num = str2ul(arg,0,10);
+ if ( num > 0 || *arg == '0' )
+ printf("%20s => %8d : %s %s %s\n",
+ arg, num,
+ PrintNiceID4(num),
+ PrintNiceID5(num),
+ PrintNiceID6(num));
+ }
+ putchar('\n');
+ return 0;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// test_arg_manager() ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static enumError test_arg_manager ( int argc, char ** argv )
+{
+ putchar('\n');
+ for ( int i = 1; i < argc; i++ )
+ {
+ ccp arg = argv[i];
+ printf("\n|%s|\n",arg);
+ ArgManager_t am = {0};
+ ScanSimpleArgManager(&am,arg);
+ AppendArgManager(&am,"----------",0,false);
+ ScanQuotedArgManager(&am,arg,true);
+
+ for ( int i = 0; i < am.argc; i++ )
+ printf(" [%02u] |%s|\n",i,am.argv[i]);
+ ResetArgManager(&am);
+ }
+ putchar('\n');
+ return 0;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// develop() ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -3973,6 +4073,7 @@ const gobj_cond_ref_t * FindConditionRef2 ( u16 ref_id )
}
///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
static enumError develop ( int argc, char ** argv )
{
@@ -4225,6 +4326,9 @@ enum
CMD_QUOTE, // test_quote(argc,argv)
CMD_EML, // test_eml(argc,argv)
CMD_CYGPATH, // test_cygpath(argc,argv)
+ CMD_UTF8, // test_utf8(argc,argv)
+ CMD_NICE, // test_nice(argc,argv)
+ CMD_ARG_MANAGER, // test_arg_manager(argc,argv)
#ifdef HAVE_WIIMM_EXT
CMD_WIIMM, // test_wiimm(argc,argv)
@@ -4294,6 +4398,9 @@ static const KeywordTab_t CommandTab[] =
{ CMD_QUOTE, "QUOTE", "Q", 0 },
{ CMD_EML, "EML", 0, 0 },
{ CMD_CYGPATH, "CYGPATH", 0, 0 },
+ { CMD_UTF8, "UTF8", 0, 0 },
+ { CMD_NICE, "NICE", 0, 0 },
+ { CMD_ARG_MANAGER, "ARG-MANAGER", "AM", 0 },
#ifdef HAVE_WIIMM_EXT
{ CMD_WIIMM, "WIIMM", "W", 0 },
@@ -4313,6 +4420,8 @@ static const KeywordTab_t CommandTab[] =
void help_exit()
{
+ SetupPager();
+
printf("\nCommands:\n\n");
const KeywordTab_t * cmd;
for ( cmd = CommandTab; cmd->name1; cmd++ )
@@ -4324,6 +4433,8 @@ void help_exit()
#ifdef HAVE_WIIMM_EXT
wiimm_help_exit(false);
#endif
+
+ ClosePager();
exit(ERR_SYNTAX);
};
@@ -4348,8 +4459,7 @@ int main ( int argc, char ** argv )
print_title_func = print_title;
SetupLib(argc,argv,NAME,VERSION,TITLE);
- if (1)
- printf("ADDRT_*: mem-beg:%x, mem-end:%x, mir-beg:%x, mir-end:%x, N:%x,%x\n",
+ PRINT0("ADDRT_*: mem-beg:%x, mem-end:%x, mir-beg:%x, mir-end:%x, N:%x,%x\n",
ADDRT_MEMORY_BEGIN, ADDRT_MEMORY_END,
ADDRT_MIRROR_BEGIN, ADDRT_MIRROR_END,
ADDRT__N, ADDRT__NN );
@@ -4451,6 +4561,9 @@ int main ( int argc, char ** argv )
case CMD_QUOTE: test_quote(argc,argv); break;
case CMD_EML: test_eml(argc,argv); break;
case CMD_CYGPATH: test_cygpath(argc,argv); break;
+ case CMD_UTF8: test_utf8(argc,argv); break;
+ case CMD_NICE: test_nice(argc,argv); break;
+ case CMD_ARG_MANAGER: test_arg_manager(argc,argv); break;
#ifdef HAVE_WIIMM_EXT
case CMD_WIIMM: test_wiimm(argc,argv); break;