Pretty Speedometer [stebler]
#76
Due to recent demand on Discord and DMs, here is a customizable XYZ/XZ configuration of Version 1.1

V = Velocity Config (0 = XYZ Speed, 1 = XZ Speed)
XXXX = Widescreen X Position
xxxx = 4:3 X Position
YYYY = Y Position
WWWW = Scale (use 3F80 if unsure)
r = Number of Decimals
tt = Text Config (00 = omit km/h text, 20 = km/h text to right, 0A = km/h text underneath)
kk = Color (30 = Yellow, 31 = Blue, 32 = Red, 33 = Green, 34 = White)

X,x, Y, and W values are left-half single precision float values. (i.e. 3F80 = 3F800000 = 1)

Example XXXX xxxx YYYY values:
Bottom Right, kmh underneath - 42F0 41F0 C35C
Bottom Left, kmh underneath - C3FA C3CD C35C
Bottom Left, kmh to right - C3FA C3CD C36E

NTSC-U
c25ddb7c 00000008
80a30004 2c05000c
41820028 2c05000e
41820020 2c050012
41820018 2c050040
41820010 2c050042
41820008 48000008
38840001 7c852378
60000000 00000000
c2836a48 00000007
560004e7 40820030
806f0004 2c03000c
41820020 2c03000e
41820018 2c030012
41820010 2c030040
41820008 2c030042
4c421042 00000000
c25c1214 00000009
2c040000 4082003c
3d004330 91010070
91010078 7c721b78
3a600000 3f008089
3b18eed0 90a10020
38a00001 90a10010
3ca0805c 60a512e8
7ca803a6 4e800020
80040000 00000000
C2590FFC 0000003A
3980000V 3F40XXXX
3F60xxxx 3FC0YYYY
3FE0WWWW 807C0000
80630000 88630010
3C80809C 80848F68
88840B84 7C032000
40A20194 3C60809C
8063D508 80630000
83A30038 2C1D0000
40820040 83A3003C
2C1D0000 40820034
83A30040 2C1D0000
40820028 83A30050
2C1D0000 4082001C
83A30108 2C1D0000
40820010 83A30110
2C1D0000 41820140
48000021 001A0800
000100kk 0025002E
003r0066 00tt006B
006D002F 00680000
807C0000 80630008
80630090 80830004
E0630018 C0830020
E0240068 C0440070
2C0C0000 41820010
EC000028 10210460
10630460 10211828
EC422028 10210072
10210854 EC2208BA
FC200834 EC200830
3821FF00 4CC63242
38610008 38800100
7CA802A6 3D808001
618C6CB4 7D8903A6
4E800421 38A10008
3881000E A4640002
2C030000 41820040
2C03002D 41820024
2C03002E 41820024
28030030 41A0FFE0
28030039 41A1FFD8
38632430 48000010
3860246D 48000008
3860246B B0640000
4BFFFFBC 807D005C
3CC08038 80C61C80
80C60058 2C060001
93C30050 93E30058
41A2000C 9363004C
48000008 9343004C
38800000 98830080
38C00002 80630114
80E30000 98C70100
3D80805C 618C11E0
7D8903A6 4E800421
38210100 39610100
60000000 00000000

PAL
c260245c 00000008
80a30004 2c05000c
41820028 2c05000e
41820020 2c050012
41820018 2c050040
41820010 2c050042
41820008 48000008
38840001 7c852378
60000000 00000000
c28584d8 00000007
560004e7 40820030
806f0004 2c03000c
41820020 2c03000e
41820018 2c030012
41820010 2c030040
41820008 2c030042
4c421042 00000000
c25cdd34 00000009
2c040000 4082003c
3d004330 91010070
91010078 7c721b78
3a600000 3f008089
3b183e70 90a10020
38a00001 90a10010
3ca0805c 60a5de08
7ca803a6 4e800020
80040000 00000000
C2597820 0000003A
3980000V 3F40XXXX
3F60xxxx 3FC0YYYY
3FE0WWWW 807C0000
80630000 88630010
3C80809C 8084D728
88840B84 7C032000
40A20194 3C60809C
80631E38 80630000
83A30038 2C1D0000
40820040 83A3003C
2C1D0000 40820034
83A30040 2C1D0000
40820028 83A30050
2C1D0000 4082001C
83A30108 2C1D0000
40820010 83A30110
2C1D0000 41820140
48000021 001A0800
000100kk 0025002E
003r0066 00tt006B
006D002F 00680000
807C0000 80630008
80630090 80830004
E0630018 C0830020
E0240068 C0440070
2C0C0000 41820010
EC000028 10210460
10630460 10211828
EC422028 10210072
10210854 EC2208BA
FC200834 EC200830
3821FF00 4CC63242
38610008 38800100
7CA802A6 3D808001
618C7814 7D8903A6
4E800421 38A10008
3881000E A4640002
2C030000 41820040
2C03002D 41820024
2C03002E 41820024
28030030 41A0FFE0
28030039 41A1FFD8
38632430 48000010
3860246D 48000008
3860246B B0640000
4BFFFFBC 807D005C
3CC08038 80C66000
80C60058 2C060001
93C30050 93E30058
41A2000C 9363004C
48000008 9343004C
38800000 98830080
38C00002 80630114
80E30000 98C70100
3D80805C 618CDD00
7D8903A6 4E800421
38210100 39610100
60000000 00000000

NTSC-J
c2601bd0 00000008
80a30004 2c05000c
41820028 2c05000e
41820020 2c050012
41820018 2c050040
41820010 2c050042
41820008 48000008
38840001 7c852378
60000000 00000000
c2857b44 00000007
560004e7 40820030
806f0004 2c03000c
41820020 2c03000e
41820018 2c030012
41820010 2c030040
41820008 2c030042
4c421042 00000000
c25cd610 00000009
2c040000 4082003c
3d004330 91010070
91010078 7c721b78
3a600000 3f008089
3b1834c0 90a10020
38a00001 90a10010
3ca0805c 60a5d6e4
7ca803a6 4e800020
80040000 00000000
C25971A0 0000003A
3980000V 3F40XXXX
3F60xxxx 3FC0YYYY
3FE0WWWW 807C0000
80630000 88630010
3C80809C 8084C788
88840B84 7C032000
40A20194 3C60809C
80630E98 80630000
83A30038 2C1D0000
40820040 83A3003C
2C1D0000 40820034
83A30040 2C1D0000
40820028 83A30050
2C1D0000 4082001C
83A30108 2C1D0000
40820010 83A30110
2C1D0000 41820140
48000021 001A0800
000100kk 0025002E
003r0066 00tt006B
006D002F 00680000
807C0000 80630008
80630090 80830004
E0630018 C0830020
E0240068 C0440070
2C0C0000 41820010
EC000028 10210460
10630460 10211828
EC422028 10210072
10210854 EC2208BA
FC200834 EC200830
3821FF00 4CC63242
38610008 38800100
7CA802A6 3D808001
618C7738 7D8903A6
4E800421 38A10008
3881000E A4640002
2C030000 41820040
2C03002D 41820024
2C03002E 41820024
28030030 41A0FFE0
28030039 41A1FFD8
38632430 48000010
3860246D 48000008
3860246B B0640000
4BFFFFBC 807D005C
3CC08038 80C65980
80C60058 2C060001
93C30050 93E30058
41A2000C 9363004C
48000008 9343004C
38800000 98830080
38C00002 80630114
80E30000 98C70100
3D80805C 618CD5DC
7D8903A6 4E800421
38210100 39610100
60000000 00000000

NTSC-K
c25f087c 00000008
80a30004 2c05000c
41820028 2c05000e
41820020 2c050012
41820018 2c050040
41820010 2c050042
41820008 48000008
38840001 7c852378
60000000 00000000
c2846898 00000007
560004e7 40820030
806f0004 2c03000c
41820020 2c03000e
41820018 2c030012
41820010 2c030040
41820008 2c030042
4c421042 00000000
c25bbcf4 00000009
2c040000 4082003c
3d004330 91010070
91010078 7c721b78
3a600000 3f008088
3b182280 90a10020
38a00001 90a10010
3ca0805b 60a5bdc8
7ca803a6 4e800020
80040000 00000000
C2585878 0000003A
3980000V 3F40XXXX
3F60xxxx 3FC0YYYY
3FE0WWWW 807C0000
80630000 88630010
3C80809B 8084BD68
88840B84 7C032000
40A20194 3C60809B
80630478 80630000
83A30038 2C1D0000
40820040 83A3003C
2C1D0000 40820034
83A30040 2C1D0000
40820028 83A30050
2C1D0000 4082001C
83A30108 2C1D0000
40820010 83A30110
2C1D0000 41820140
48000021 001A0800
000100kk 0025002E
003r0066 00tt006B
006D002F 00680000
807C0000 80630008
80630090 80830004
E0630018 C0830020
E0240068 C0440070
2C0C0000 41820010
EC000028 10210460
10630460 10211828
EC422028 10210072
10210854 EC2208BA
FC200834 EC200830
3821FF00 4CC63242
38610008 38800100
7CA802A6 3D808001
618C787C 7D8903A6
4E800421 38A10008
3881000E A4640002
2C030000 41820040
2C03002D 41820024
2C03002E 41820024
28030030 41A0FFE0
28030039 41A1FFD8
38632430 48000010
3860246D 48000008
3860246B B0640000
4BFFFFBC 807D005C
3CC08037 80C64020
80C60058 2C060001
93C30050 93E30058
41A2000C 9363004C
48000008 9343004C
38800000 98830080
38C00002 80630114
80E30000 98C70100
3D80805B 618CBCC0
7D8903A6 4E800421
38210100 39610100
60000000 00000000

Here's the updated source for the Last ASM. Other ASM source's can be found in the OP.

Code:
#Address Ports
#Inject at 80597820 (PAL)
#Inject at 80590FFC (NTSC-U)
#Inject at 805971A0 (NTSC-J)
#Inject at 80585878 (NTSC-K)

#Region Compilation Setting & Assembler Directives
.set region, ''

.if (region == 'p')
        .set ptr_raceData, 0x809bd728
        .set ptr_menuData, 0x809c1e38
        .set swprintf, 0x80017814
        .set ptr_unk, 0x80386000
        .set ScreenElement_setTextSrc, 0x805cdd00
.elseif (region == 'e')
        .set ptr_raceData, 0x809b8f68
        .set ptr_menuData, 0x809bd508
        .set swprintf, 0x80016cb4
        .set ptr_unk, 0x80381c80
        .set ScreenElement_setTextSrc, 0x805c11e0
.elseif (region == 'j')
        .set ptr_raceData, 0x809bc788
        .set ptr_menuData, 0x809c0e98
        .set swprintf, 0x80017738
        .set ptr_unk, 0x80385980
        .set ScreenElement_setTextSrc, 0x805cd5dc
.elseif (region == 'k')
        .set ptr_raceData, 0x809abd68
        .set ptr_menuData, 0x809b0478
        .set swprintf, 0x8001787c
        .set ptr_unk, 0x80374020
        .set ScreenElement_setTextSrc, 0x805bbcc0
.else
        .err
.endif

#Register Safety Notes
#r0, r3 thru r12 safe, r26 thru r31 safe
#f0 thru 13, and f29 safe
#LR and CTR safe

#Set User config registers
li r12, 0 #0 = XYZ Speed, #1 = XY Speed
lis r26, 0x42F0 #Set widescreen X position
lis r27, 0x41F0 #Set 4:3 X position
lis r30, 0xC35C #Set Y position
lis r31, 0x3F80 #Set Scale

#Get Slot that code is currently hooked on. Then get your Slot value. Make sure they are equal
lwz r3, 0 (r28)
lwz r3, 0 (r3)
lbz r3, 0x10 (r3)
lis r4, ptr_raceData@ha
lwz r4, ptr_raceData@l (r4)
lbz r4, 0x0B84 (r4)
cmpw r3, r4 #If slots don't match, skip code
bne+ end

#Check if a single player gameplay screen is active, keep pointer in r29 for later use
lis r3, ptr_menuData@ha
lwz r3, ptr_menuData@l (r3)
lwz r3, 0 (r3)
lwz r29, 0x38 (r3) # grand prix
cmpwi r29, 0
bne- found
lwz r29, 0x3C (r3) # time trial
cmpwi r29, 0
bne- found
lwz r29, 0x40 (r3) # 1 player offline vs
cmpwi r29, 0
bne- found
lwz r29, 0x50 (r3) # 1 player battle
cmpwi r29, 0
bne- found
lwz r29, 0x108 (r3) # 1 player ww/regional vs
cmpwi r29, 0
bne- found
lwz r29, 0x110 (r3) # 1 player friend room vs
cmpwi r29, 0
beq- end

#Single Player screen is active!
#Create the string via BL Trick
found:
bl format

.short 0x001A, 0x0800, 0x0001, 0x0030 #Bmg escape sequence for yellow text
.short 0x0025, 0x002E, 0x0031, 0x0066 #16-bit ascii for %.1f
.short 0x000A, 0x006B, 0x006D, 0x002F #16-bit ascii for \nkm/h
.short 0x0068 #16-bit ascii for \nkm/h
.short 0
.align 2

format:

#Load current and previous XYZ values
lwz r3, 0 (r28)
lwz r3, 0x8 (r3)
lwz r3, 0x90 (r3) #r3 is base pointer nearby prev XYZ
lwz r4, 0x4 (r3) #r4 is base pointer nearby current XYZ
psq_l f3, 0x18 (r3), 0, 0 #old XY
lfs f4, 0x20 (r3) #old Z
psq_l f1, 0x68 (r4), 0, 0 #new XY
lfs f2, 0x70 (r4) #new Z

#Check for XYZ vs XZ
cmpwi r12, 0
beq- skip_xz_adjustments

#Null out both Y Values
#Merge old X with new Y values back together in their respective original FPRs
fsubs f0, f0, f0 #Subtract FPR by itself to make it Null
ps_merge01 f1, f1, f0 #Merge in nulled out Y value f1 ps1
ps_merge01 f3, f3, f0 #Merge in nulled out Y value to f3 ps1

#Do the formula: sqrt{[(x2 - x1)^2] + [(y2 - y1)^2] + [(z2 - z1)^2]}
#X2 = f1 ps0
#X1 = f3 ps0
#Y2 = f1 ps1
#Y1 = f3 ps1
#Z2 = f2 ps0
#Z1 = f2 ps0
skip_xz_adjustments:
ps_sub f1, f1, f3
fsubs f2, f2, f4
ps_mul f1, f1, f1
ps_sum0 f1, f1, f1, f1
fmadds f1, f2, f2, f1
frsqrte f1, f1
fres f1, f1

#Allocate stack memory, 0x100 should be enough, lol
#0x8 needed by swprintf
#rest for the formatted string
#Set non-float args of swprintf, call it
#f1 speed
#r3 where to dump (dest addr)
#r4 length
#r5 source addr (already set)
addi sp, sp, -0x100
crset 4*cr1+eq #Makes swprintf execute faster by providing an accurate branch route regarding float processing
addi r3, sp, 0x8
li r4, 0x100
mflr r5
lis r12, swprintf@h
ori r12, r12, swprintf@l
mtctr r12
bctrl

#Set r5 arg for last func call near end, and preset r4 for ascii conversion loop
addi r5, sp, 0x8 #Beginning of the formatted string
addi r4, sp, 0xE #We do not want to process the bmg escape sequence

#The Timer uses special 16-bit ascii symbols in place of typical 16-bit ascii symbols for digits, dashes, and dots. Adjust the symbols.
loop:
lhzu r3, 0x2 (r4)
cmpwi r3, 0
beq- out
cmpwi r3, 0x2D
beq- dash
cmpwi r3, 0x2E
beq- dot
cmplwi r3, 0x30
blt- loop
cmplwi r3, 0x39
bgt- loop
addi r3, r3, 0x2430 #Update digits (0 thru 9)
b write_new_ascii

dash:
li r3, 0x246D
b write_new_ascii

dot:
li r3, 0x246B

write_new_ascii:
sth r3, 0 (r4)
b loop

#Ascii symbol reformatting complete
out:
lwz r3, 0x5C (r29)

#Find out if widescreen or not, apply X and Y screen pos
lis r6, ptr_unk@ha
lwz r6, ptr_unk@l (r6)
lwz r6, 0x58 (r6)
cmpwi r6, 1
stw r30, 0x50 (r3) #Write Y pos
stw r31, 0x58 (r3) #Write Scale, fyi stmw is slow
beq+ widescreen
stw r27, 0x4C (r3) #Write 4:3 X pos
b make_visible
widescreen:
stw r26, 0x4C (r3) #Write 16:9 X pos

#Make the element visible, align text to right, call func to display it on screen
make_visible:
li r4, 0
stb r4, 0x80 (r3)
li r6, 2 #Side note: Use 0 to align left, be sure to update your X measurements correctly (neg/inverse them)
lwz r3, 0x114 (r3)
lwz r7, 0 (r3)
stb r6, 0x100 (r7)
lis r12, ScreenElement_setTextSrc@h
ori r12, r12, ScreenElement_setTextSrc@l
mtctr r12
bctrl

#Recover sp
addi sp, sp, 0x100

#The end (original instruction)
end:
addi r11, sp, 0x100
Reply


Messages In This Thread
Pretty Speedometer [stebler] - by stebler - 01-16-2021, 09:47 PM
RE: Pretty Speedometer [stebler] - by Melg - 01-16-2021, 09:58 PM
RE: Pretty Speedometer [stebler] - by Vega - 01-16-2021, 10:59 PM
RE: Pretty Speedometer [stebler] - by Jeffy/Wrath - 01-17-2021, 04:22 AM
RE: Pretty Speedometer [stebler] - by stebler - 01-17-2021, 05:12 PM
RE: Pretty Speedometer [stebler] - by Optllizer - 01-17-2021, 06:04 PM
RE: Pretty Speedometer [stebler] - by stebler - 01-17-2021, 07:25 PM
RE: Pretty Speedometer [stebler] - by Vega - 01-18-2021, 12:12 AM
RE: Pretty Speedometer [stebler] - by Again - 01-18-2021, 10:27 PM
RE: Pretty Speedometer [stebler] - by stebler - 01-18-2021, 11:27 PM
RE: Pretty Speedometer [stebler] - by Again - 01-18-2021, 11:31 PM
RE: Pretty Speedometer [stebler] - by Vega - 01-18-2021, 11:38 PM
RE: Pretty Speedometer [stebler] - by Joeblase - 01-20-2021, 01:20 AM
RE: Pretty Speedometer [stebler] - by stebler - 01-20-2021, 09:34 AM
RE: Pretty Speedometer [stebler] - by Mewmaster99 - 01-21-2021, 05:38 AM
RE: Pretty Speedometer [stebler] - by Zeraora - 01-21-2021, 12:04 PM
RE: Pretty Speedometer [stebler] - by stebler - 01-22-2021, 12:38 PM
RE: Pretty Speedometer [stebler] - by Hibyehello - 02-04-2021, 08:33 PM
RE: Pretty Speedometer [stebler] - by Mango Man - 01-25-2021, 06:35 PM
RE: Pretty Speedometer [stebler] - by WhatisLoaf - 01-26-2021, 09:34 PM
RE: Pretty Speedometer [stebler] - by JMM - 01-26-2021, 12:40 AM
RE: Pretty Speedometer [stebler] - by stebler - 01-27-2021, 10:21 PM
RE: Pretty Speedometer [stebler] - by NOKKY - 01-30-2021, 06:34 AM
RE: Pretty Speedometer [stebler] - by stebler - 02-04-2021, 03:19 PM
RE: Pretty Speedometer [stebler] - by Mango Man - 02-06-2021, 01:41 PM
RE: Pretty Speedometer [stebler] - by Renverse - 02-05-2021, 10:10 AM
RE: Pretty Speedometer [stebler] - by Again - 02-05-2021, 06:49 PM
RE: Pretty Speedometer [stebler] - by stebler - 02-06-2021, 11:37 AM
RE: Pretty Speedometer [stebler] - by NOKKY - 02-08-2021, 03:24 PM
RE: Pretty Speedometer [stebler] - by stebler - 02-08-2021, 09:07 PM
RE: Pretty Speedometer [stebler] - by NOKKY - 02-09-2021, 12:42 PM
RE: Pretty Speedometer [stebler] - by Zeraora - 02-09-2021, 04:07 PM
RE: Pretty Speedometer [stebler] - by Melg - 02-09-2021, 04:39 PM
RE: Pretty Speedometer [stebler] - by jawa - 10-12-2023, 06:34 PM
RE: Pretty Speedometer [stebler] - by Zeraora - 02-09-2021, 05:10 PM
RE: Pretty Speedometer [stebler] - by Melg - 02-09-2021, 05:43 PM
RE: Pretty Speedometer [stebler] - by Zeraora - 02-09-2021, 05:45 PM
RE: Pretty Speedometer [stebler] - by Melg - 02-09-2021, 06:30 PM
RE: Pretty Speedometer [stebler] - by Zeraora - 02-09-2021, 07:09 PM
RE: Pretty Speedometer [stebler] - by Leseratte10 - 02-10-2021, 02:25 PM
RE: Pretty Speedometer [stebler] - by stebler - 02-11-2021, 06:13 PM
RE: Pretty Speedometer [stebler] - by Lydeum - 03-13-2021, 12:51 PM
RE: Pretty Speedometer [stebler] - by 9Paran - 03-14-2021, 01:53 AM
RE: Pretty Speedometer [stebler] - by Lydeum - 03-14-2021, 03:46 AM
RE: Pretty Speedometer [stebler] - by Wiimm - 03-14-2021, 09:58 PM
RE: Pretty Speedometer [stebler] - by Hannna - 04-30-2021, 08:34 AM
RE: Pretty Speedometer [stebler] - by xMeap826 - 06-14-2021, 12:15 AM
RE: Pretty Speedometer [stebler] - by Vega - 06-20-2021, 11:53 PM
RE: Pretty Speedometer [stebler] - by xMeap826 - 06-22-2021, 08:43 AM
RE: Pretty Speedometer [stebler] - by Mewmaster99 - 06-22-2021, 10:00 AM
RE: Pretty Speedometer [stebler] - by xMeap826 - 06-22-2021, 08:38 PM
RE: Pretty Speedometer [stebler] - by Vega - 07-23-2021, 11:19 PM
RE: Pretty Speedometer [stebler] - by JMM - 08-04-2021, 06:08 PM
RE: Pretty Speedometer [stebler] - by Vega - 10-03-2021, 12:59 AM
RE: Pretty Speedometer [stebler] - by jawa - 11-10-2021, 03:18 PM
RE: Pretty Speedometer [stebler] - by Vega - 11-10-2021, 05:53 PM
RE: Pretty Speedometer [stebler] - by stebler - 11-20-2021, 04:33 PM
RE: Pretty Speedometer [stebler] - by Vega - 11-21-2021, 03:17 AM
RE: Pretty Speedometer [stebler] - by jawa - 11-21-2021, 03:46 PM
RE: Pretty Speedometer [stebler] - by Vega - 11-21-2021, 05:26 PM
RE: Pretty Speedometer [stebler] - by jawa - 11-21-2021, 05:39 PM
RE: Pretty Speedometer [stebler] - by Vega - 11-21-2021, 05:47 PM
RE: Pretty Speedometer [stebler] - by stebler - 11-21-2021, 06:05 PM
RE: Pretty Speedometer [stebler] - by jawa - 11-22-2021, 07:55 PM
RE: Pretty Speedometer [stebler] - by stebler - 11-23-2021, 07:03 AM
RE: Pretty Speedometer [stebler] - by jawa - 11-28-2021, 09:51 PM
RE: Pretty Speedometer [stebler] - by Vega - 11-29-2021, 01:06 AM
RE: Pretty Speedometer [stebler] - by stebler - 11-29-2021, 11:12 AM
RE: Pretty Speedometer [stebler] - by pakrett - 03-10-2022, 06:28 PM
RE: Pretty Speedometer [stebler] - by stebler - 03-14-2022, 10:29 PM
RE: Pretty Speedometer [stebler] - by pakrett - 03-16-2022, 01:54 PM
RE: Pretty Speedometer [stebler] - by fibes - 10-29-2022, 10:19 AM
RE: Pretty Speedometer [stebler] - by Vega - 11-01-2022, 01:07 AM
RE: Pretty Speedometer [stebler] - by fibes - 11-02-2022, 10:31 PM
RE: Pretty Speedometer [stebler] - by xMeap826 - 01-29-2023, 04:31 AM
RE: Pretty Speedometer [stebler] - by Vega - 07-14-2023, 08:52 PM
RE: Pretty Speedometer [stebler] - by xMeap826 - 07-15-2023, 07:11 AM
RE: Pretty Speedometer [stebler] - by Vega - 07-15-2023, 11:02 PM
extra colors for speedometer - by Fifty - 07-16-2023, 03:05 AM
RE: Pretty Speedometer [stebler] - by milky - 08-07-2023, 05:47 PM
RE: Pretty Speedometer [stebler] - by Cealgair - 10-13-2023, 08:57 AM

Forum Jump:


Users browsing this thread: 1 Guest(s)