mirror of
https://github.com/pret/pokefirered.git
synced 2026-05-11 06:25:23 -05:00
through sub_80C438C
This commit is contained in:
parent
e34c1fd3d6
commit
e4d869bfc6
293
asm/region_map.s
293
asm/region_map.s
|
|
@ -5,299 +5,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_80C4164
|
||||
sub_80C4164: @ 80C4164
|
||||
push {r4,r5,lr}
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
adds r5, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r4, r1, 24
|
||||
lsls r2, 16
|
||||
lsrs r2, 16
|
||||
lsls r3, 16
|
||||
lsrs r1, r3, 16
|
||||
cmp r0, 0x1
|
||||
beq _080C4198
|
||||
cmp r0, 0x1
|
||||
bgt _080C4186
|
||||
cmp r0, 0
|
||||
beq _080C4190
|
||||
b _080C41D0
|
||||
_080C4186:
|
||||
cmp r5, 0x2
|
||||
beq _080C41A0
|
||||
cmp r5, 0x3
|
||||
beq _080C41A8
|
||||
b _080C41D0
|
||||
_080C4190:
|
||||
ldr r3, _080C4194 @ =gUnknown_83F2490
|
||||
b _080C41AA
|
||||
.align 2, 0
|
||||
_080C4194: .4byte gUnknown_83F2490
|
||||
_080C4198:
|
||||
ldr r3, _080C419C @ =gUnknown_83F2724
|
||||
b _080C41AA
|
||||
.align 2, 0
|
||||
_080C419C: .4byte gUnknown_83F2724
|
||||
_080C41A0:
|
||||
ldr r3, _080C41A4 @ =gUnknown_83F29B8
|
||||
b _080C41AA
|
||||
.align 2, 0
|
||||
_080C41A4: .4byte gUnknown_83F29B8
|
||||
_080C41A8:
|
||||
ldr r3, _080C41CC @ =gUnknown_83F2C4C
|
||||
_080C41AA:
|
||||
lsls r1, 16
|
||||
asrs r1, 16
|
||||
lsls r0, r2, 16
|
||||
asrs r0, 16
|
||||
movs r2, 0x16
|
||||
muls r0, r2
|
||||
adds r1, r0
|
||||
lsls r0, r4, 2
|
||||
adds r0, r4
|
||||
lsls r2, r0, 5
|
||||
adds r0, r2
|
||||
lsls r0, 1
|
||||
adds r1, r0
|
||||
adds r1, r3
|
||||
ldrb r0, [r1]
|
||||
b _080C41D2
|
||||
.align 2, 0
|
||||
_080C41CC: .4byte gUnknown_83F2C4C
|
||||
_080C41D0:
|
||||
movs r0, 0xC5
|
||||
_080C41D2:
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80C4164
|
||||
|
||||
thumb_func_start sub_80C41D8
|
||||
sub_80C41D8: @ 80C41D8
|
||||
push {r4-r6,lr}
|
||||
lsls r0, 16
|
||||
lsrs r6, r0, 16
|
||||
lsls r1, 16
|
||||
lsrs r5, r1, 16
|
||||
ldr r4, _080C4204 @ =gUnknown_20399E8
|
||||
movs r0, 0x8C
|
||||
bl AllocZeroed
|
||||
adds r1, r0, 0
|
||||
str r1, [r4]
|
||||
ldr r0, _080C4208 @ =gSaveBlock2Ptr
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, 0x8]
|
||||
cmp r0, 0x1
|
||||
bne _080C4210
|
||||
ldr r0, _080C420C @ =gUnknown_83EF59C
|
||||
adds r1, 0xC
|
||||
bl LZ77UnCompWram
|
||||
b _080C4218
|
||||
.align 2, 0
|
||||
_080C4204: .4byte gUnknown_20399E8
|
||||
_080C4208: .4byte gSaveBlock2Ptr
|
||||
_080C420C: .4byte gUnknown_83EF59C
|
||||
_080C4210:
|
||||
ldr r0, _080C423C @ =gUnknown_83EF524
|
||||
adds r1, 0xC
|
||||
bl LZ77UnCompWram
|
||||
_080C4218:
|
||||
ldr r4, _080C4240 @ =gUnknown_20399E8
|
||||
ldr r0, [r4]
|
||||
strh r6, [r0, 0x8]
|
||||
strh r5, [r0, 0xA]
|
||||
bl sub_80C3508
|
||||
ldr r1, [r4]
|
||||
strh r0, [r1]
|
||||
bl sub_80C3514
|
||||
ldr r1, [r4]
|
||||
strh r0, [r1, 0x2]
|
||||
bl sub_80C4244
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080C423C: .4byte gUnknown_83EF524
|
||||
_080C4240: .4byte gUnknown_20399E8
|
||||
thumb_func_end sub_80C41D8
|
||||
|
||||
thumb_func_start sub_80C4244
|
||||
sub_80C4244: @ 80C4244
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x40
|
||||
ldr r6, _080C42FC @ =gUnknown_20399E8
|
||||
ldr r2, [r6]
|
||||
adds r0, r2, 0
|
||||
adds r0, 0xC
|
||||
str r0, [sp, 0x30]
|
||||
movs r1, 0x80
|
||||
add r5, sp, 0x30
|
||||
str r1, [r5, 0x4]
|
||||
ldrh r0, [r2, 0x8]
|
||||
lsls r0, 16
|
||||
orrs r0, r1
|
||||
str r0, [r5, 0x4]
|
||||
ldr r0, _080C4300 @ =gUnknown_83EF27C
|
||||
str r0, [sp, 0x38]
|
||||
ldrh r3, [r2, 0xA]
|
||||
ldr r1, _080C4304 @ =0xffff0000
|
||||
add r4, sp, 0x38
|
||||
ldr r0, [r4, 0x4]
|
||||
ands r0, r1
|
||||
orrs r0, r3
|
||||
str r0, [r4, 0x4]
|
||||
ldrh r0, [r2, 0x8]
|
||||
add r1, sp, 0x18
|
||||
movs r3, 0
|
||||
strh r0, [r1]
|
||||
ldrh r2, [r2, 0xA]
|
||||
mov r0, sp
|
||||
adds r0, 0x1A
|
||||
strh r2, [r0]
|
||||
ldr r0, _080C4308 @ =gUnknown_83F1C54
|
||||
str r0, [sp, 0x1C]
|
||||
ldr r0, _080C430C @ =gUnknown_83F1C64
|
||||
str r0, [sp, 0x20]
|
||||
str r3, [sp, 0x24]
|
||||
ldr r0, _080C4310 @ =gDummySpriteAffineAnimTable
|
||||
str r0, [sp, 0x28]
|
||||
ldr r0, _080C4314 @ =SpriteCallbackDummy
|
||||
str r0, [sp, 0x2C]
|
||||
mov r0, sp
|
||||
movs r2, 0x18
|
||||
bl memcpy
|
||||
ldr r0, _080C4318 @ =gSaveBlock2Ptr
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, 0x8]
|
||||
cmp r0, 0x1
|
||||
bne _080C42AA
|
||||
ldr r0, _080C431C @ =gUnknown_83EF29C
|
||||
str r0, [sp, 0x38]
|
||||
_080C42AA:
|
||||
adds r0, r5, 0
|
||||
bl LoadSpriteSheet
|
||||
adds r0, r4, 0
|
||||
bl LoadSpritePalette
|
||||
ldr r0, [r6]
|
||||
movs r2, 0
|
||||
ldrsh r1, [r0, r2]
|
||||
lsls r1, 19
|
||||
movs r3, 0x90
|
||||
lsls r3, 14
|
||||
adds r1, r3
|
||||
asrs r1, 16
|
||||
movs r3, 0x2
|
||||
ldrsh r2, [r0, r3]
|
||||
lsls r2, 19
|
||||
movs r0, 0x90
|
||||
lsls r0, 14
|
||||
adds r2, r0
|
||||
asrs r2, 16
|
||||
mov r0, sp
|
||||
movs r3, 0x2
|
||||
bl CreateSprite
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
ldr r2, [r6]
|
||||
lsls r1, r0, 4
|
||||
adds r1, r0
|
||||
lsls r1, 2
|
||||
ldr r0, _080C4320 @ =gSprites
|
||||
adds r1, r0
|
||||
str r1, [r2, 0x4]
|
||||
movs r0, 0x1
|
||||
bl sub_80C4324
|
||||
add sp, 0x40
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080C42FC: .4byte gUnknown_20399E8
|
||||
_080C4300: .4byte gUnknown_83EF27C
|
||||
_080C4304: .4byte 0xffff0000
|
||||
_080C4308: .4byte gUnknown_83F1C54
|
||||
_080C430C: .4byte gUnknown_83F1C64
|
||||
_080C4310: .4byte gDummySpriteAffineAnimTable
|
||||
_080C4314: .4byte SpriteCallbackDummy
|
||||
_080C4318: .4byte gSaveBlock2Ptr
|
||||
_080C431C: .4byte gUnknown_83EF29C
|
||||
_080C4320: .4byte gSprites
|
||||
thumb_func_end sub_80C4244
|
||||
|
||||
thumb_func_start sub_80C4324
|
||||
sub_80C4324: @ 80C4324
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
ldr r1, _080C4344 @ =gUnknown_20399E8
|
||||
ldr r1, [r1]
|
||||
ldr r2, [r1, 0x4]
|
||||
adds r2, 0x3E
|
||||
movs r1, 0x1
|
||||
ands r0, r1
|
||||
lsls r0, 2
|
||||
ldrb r3, [r2]
|
||||
movs r1, 0x5
|
||||
negs r1, r1
|
||||
ands r1, r3
|
||||
orrs r1, r0
|
||||
strb r1, [r2]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_080C4344: .4byte gUnknown_20399E8
|
||||
thumb_func_end sub_80C4324
|
||||
|
||||
thumb_func_start sub_80C4348
|
||||
sub_80C4348: @ 80C4348
|
||||
push {r4,lr}
|
||||
ldr r4, _080C437C @ =gUnknown_20399E8
|
||||
ldr r0, [r4]
|
||||
ldr r0, [r0, 0x4]
|
||||
cmp r0, 0
|
||||
beq _080C4368
|
||||
bl DestroySprite
|
||||
ldr r0, [r4]
|
||||
ldrh r0, [r0, 0x8]
|
||||
bl FreeSpriteTilesByTag
|
||||
ldr r0, [r4]
|
||||
ldrh r0, [r0, 0xA]
|
||||
bl FreeSpritePaletteByTag
|
||||
_080C4368:
|
||||
ldr r0, [r4]
|
||||
cmp r0, 0
|
||||
beq _080C4376
|
||||
bl Free
|
||||
movs r0, 0
|
||||
str r0, [r4]
|
||||
_080C4376:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080C437C: .4byte gUnknown_20399E8
|
||||
thumb_func_end sub_80C4348
|
||||
|
||||
thumb_func_start sub_80C4380
|
||||
sub_80C4380: @ 80C4380
|
||||
ldr r0, _080C4388 @ =gUnknown_20399E8
|
||||
ldr r0, [r0]
|
||||
ldrh r0, [r0]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_080C4388: .4byte gUnknown_20399E8
|
||||
thumb_func_end sub_80C4380
|
||||
|
||||
thumb_func_start sub_80C438C
|
||||
sub_80C438C: @ 80C438C
|
||||
ldr r0, _080C4394 @ =gUnknown_20399E8
|
||||
ldr r0, [r0]
|
||||
ldrh r0, [r0, 0x2]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_080C4394: .4byte gUnknown_20399E8
|
||||
thumb_func_end sub_80C438C
|
||||
|
||||
thumb_func_start sub_80C4398
|
||||
sub_80C4398: @ 80C4398
|
||||
push {r4-r6,lr}
|
||||
|
|
|
|||
132
src/region_map.c
132
src/region_map.c
|
|
@ -163,12 +163,22 @@ struct UnkStruct_20399E4
|
|||
u16 field_024[0x080];
|
||||
};
|
||||
|
||||
struct UnkStruct_20399E8
|
||||
{
|
||||
s16 field_00;
|
||||
s16 field_02;
|
||||
struct Sprite * field_04;
|
||||
u16 field_08;
|
||||
u16 field_0A;
|
||||
u16 field_0C[0x40];
|
||||
};
|
||||
|
||||
EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL;
|
||||
EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL;
|
||||
EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL;
|
||||
EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL;
|
||||
EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL;
|
||||
EWRAM_DATA void * gUnknown_20399E8 = NULL;
|
||||
EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL;
|
||||
EWRAM_DATA void * gUnknown_20399EC = NULL;
|
||||
EWRAM_DATA void * gUnknown_20399F0[3] = {};
|
||||
EWRAM_DATA void * gUnknown_20399FC = NULL;
|
||||
|
|
@ -232,14 +242,18 @@ u8 sub_80C31C0(void);
|
|||
u8 sub_80C3348(void);
|
||||
u8 sub_80C3400(void);
|
||||
void sub_80C3418(void);
|
||||
u16 sub_80C3508(void);
|
||||
u16 sub_80C3514(void);
|
||||
u16 sub_80C3520(void);
|
||||
u16 sub_80C3580(void);
|
||||
u8 sub_80C35DC(u8 a0);
|
||||
u8 sub_80C3878(u8 a0);
|
||||
u8 sub_80C3AC8(u8 a0);
|
||||
void sub_80C3D40(void);
|
||||
u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3);
|
||||
void sub_80C41D8(u16 a0, u16 a1);
|
||||
void sub_80C4324(u8 a0);
|
||||
void sub_80C4244(void);
|
||||
void sub_80C4324(bool8 a0);
|
||||
void sub_80C4348(void);
|
||||
u16 sub_80C4380();
|
||||
u16 sub_80C438C();
|
||||
|
|
@ -262,19 +276,20 @@ void sub_80C4E18(const u8 *str);
|
|||
void sub_80C4E74(const u8 *str);
|
||||
void sub_80C4ED0(bool8 a0);
|
||||
void sub_80C4F08(u8 taskId);
|
||||
u16 sub_80C3508(void);
|
||||
u16 sub_80C3514(void);
|
||||
u16 sub_80C3580(void);
|
||||
|
||||
#include "data/text/map_section_names.h"
|
||||
extern const u16 gUnknown_83EF23C[];
|
||||
extern const u16 gUnknown_83EF25C[];
|
||||
extern const u16 gUnknown_83EF27C[];
|
||||
extern const u16 gUnknown_83EF29C[];
|
||||
extern const u16 gUnknown_83EF2DC[];
|
||||
extern const u16 gUnknown_83EF384[];
|
||||
extern const u16 gUnknown_83EF3A4[];
|
||||
extern const u32 gUnknown_83EF3C4[];
|
||||
extern const u32 gUnknown_83EF450[];
|
||||
extern const u32 gUnknown_83EF4E0[];
|
||||
extern const u32 gUnknown_83EF524[];
|
||||
extern const u32 gUnknown_83EF59C[];
|
||||
extern const u32 gUnknown_83EF61C[];
|
||||
extern const u32 gUnknown_83F0330[];
|
||||
extern const u32 gUnknown_83F0E0C[];
|
||||
|
|
@ -310,9 +325,15 @@ extern const union AnimCmd *const gUnknown_83F1C30[];
|
|||
extern const struct UnkStruct_80C4CF0 gUnknown_83F1C34;
|
||||
extern const struct OamData gUnknown_83F1C3C;
|
||||
extern const union AnimCmd *const gUnknown_83F1C50[];
|
||||
extern const struct OamData gUnknown_83F1C54;
|
||||
extern const union AnimCmd *const gUnknown_83F1C64[];
|
||||
extern const u8 *const gUnknown_83F1CAC[];
|
||||
extern const u16 gUnknown_83F1E60[][2];
|
||||
extern const u16 gUnknown_83F2178[][2];
|
||||
extern const u8 gUnknown_83F2490[][15][22];
|
||||
extern const u8 gUnknown_83F2724[][15][22];
|
||||
extern const u8 gUnknown_83F29B8[][15][22];
|
||||
extern const u8 gUnknown_83F2C4C[][15][22];
|
||||
|
||||
static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint)
|
||||
{
|
||||
|
|
@ -580,7 +601,7 @@ void sub_80C04E4(u8 taskId)
|
|||
sub_80C4E18(gUnknown_8418EB5);
|
||||
sub_80C4E74(gUnknown_8418E8B);
|
||||
sub_80C4ED0(FALSE);
|
||||
sub_80C4324(0);
|
||||
sub_80C4324(FALSE);
|
||||
sub_80C3154(FALSE);
|
||||
sub_80C48BC(sub_80C0E20(), 25, 0);
|
||||
sub_80C4960(sub_80C0E20(), 25, 0);
|
||||
|
|
@ -1054,7 +1075,7 @@ void sub_80C1098(u8 taskId)
|
|||
sub_80C0E48(gUnknown_20399D8->field_1CCA);
|
||||
if (sub_80C0E34() == gUnknown_20399D8->field_1CCA)
|
||||
{
|
||||
sub_80C4324(0);
|
||||
sub_80C4324(FALSE);
|
||||
sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, 0);
|
||||
sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0);
|
||||
}
|
||||
|
|
@ -1205,9 +1226,9 @@ bool8 sub_80C1478(void)
|
|||
sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0);
|
||||
}
|
||||
if (gUnknown_20399D8->field_1CCA != sub_80C0E34())
|
||||
sub_80C4324(1);
|
||||
sub_80C4324(TRUE);
|
||||
else
|
||||
sub_80C4324(0);
|
||||
sub_80C4324(FALSE);
|
||||
sub_80C4CF0(1, &data);
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -1766,7 +1787,7 @@ void sub_80C267C(u8 taskId)
|
|||
gUnknown_20399E0->field_CCC++;
|
||||
break;
|
||||
case 7:
|
||||
sub_80C4324(0);
|
||||
sub_80C4324(FALSE);
|
||||
sub_80C3154(FALSE);
|
||||
gUnknown_20399E0->field_CCC++;
|
||||
break;
|
||||
|
|
@ -1946,7 +1967,7 @@ void sub_80C2C7C(u8 taskId)
|
|||
break;
|
||||
case 3:
|
||||
sub_80C22C4(6, FALSE);
|
||||
sub_80C4324(1);
|
||||
sub_80C4324(TRUE);
|
||||
sub_80C3154(TRUE);
|
||||
sub_80C4960(255, 25, 1);
|
||||
sub_80C48BC(255, 25, 1);
|
||||
|
|
@ -2719,3 +2740,92 @@ void sub_80C3D40(void)
|
|||
}
|
||||
gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000);
|
||||
}
|
||||
|
||||
u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3)
|
||||
{
|
||||
switch (a0)
|
||||
{
|
||||
case 0:
|
||||
return gUnknown_83F2490[a1][a2][a3];
|
||||
case 1:
|
||||
return gUnknown_83F2724[a1][a2][a3];
|
||||
case 2:
|
||||
return gUnknown_83F29B8[a1][a2][a3];
|
||||
case 3:
|
||||
return gUnknown_83F2C4C[a1][a2][a3];
|
||||
default:
|
||||
return MAPSEC_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80C41D8(u16 a0, u16 a1)
|
||||
{
|
||||
gUnknown_20399E8 = AllocZeroed(sizeof(struct UnkStruct_20399E8));
|
||||
if (gSaveBlock2Ptr->playerGender == FEMALE)
|
||||
LZ77UnCompWram(gUnknown_83EF59C, gUnknown_20399E8->field_0C);
|
||||
else
|
||||
LZ77UnCompWram(gUnknown_83EF524, gUnknown_20399E8->field_0C);
|
||||
gUnknown_20399E8->field_08 = a0;
|
||||
gUnknown_20399E8->field_0A = a1;
|
||||
gUnknown_20399E8->field_00 = sub_80C3508();
|
||||
gUnknown_20399E8->field_02 = sub_80C3514();
|
||||
sub_80C4244();
|
||||
}
|
||||
|
||||
void sub_80C4244(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct SpriteSheet spriteSheet = {
|
||||
.data = gUnknown_20399E8->field_0C,
|
||||
.size = 0x80,
|
||||
.tag = gUnknown_20399E8->field_08
|
||||
};
|
||||
struct SpritePalette spritePalette = {
|
||||
.data = gUnknown_83EF27C,
|
||||
.tag = gUnknown_20399E8->field_0A
|
||||
};
|
||||
struct SpriteTemplate template = {
|
||||
.tileTag = gUnknown_20399E8->field_08,
|
||||
.paletteTag = gUnknown_20399E8->field_0A,
|
||||
.oam = &gUnknown_83F1C54,
|
||||
.anims = gUnknown_83F1C64,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy
|
||||
};
|
||||
|
||||
if (gSaveBlock2Ptr->playerGender == FEMALE)
|
||||
spritePalette.data = gUnknown_83EF29C;
|
||||
|
||||
LoadSpriteSheet(&spriteSheet);
|
||||
LoadSpritePalette(&spritePalette);
|
||||
spriteId = CreateSprite(&template, 8 * gUnknown_20399E8->field_00 + 36, 8 * gUnknown_20399E8->field_02 + 36, 2);
|
||||
gUnknown_20399E8->field_04 = &gSprites[spriteId];
|
||||
sub_80C4324(TRUE);
|
||||
}
|
||||
|
||||
void sub_80C4324(bool8 a0)
|
||||
{
|
||||
gUnknown_20399E8->field_04->invisible = a0;
|
||||
}
|
||||
|
||||
void sub_80C4348(void)
|
||||
{
|
||||
if (gUnknown_20399E8->field_04 != NULL)
|
||||
{
|
||||
DestroySprite(gUnknown_20399E8->field_04);
|
||||
FreeSpriteTilesByTag(gUnknown_20399E8->field_08);
|
||||
FreeSpritePaletteByTag(gUnknown_20399E8->field_0A);
|
||||
}
|
||||
FREE_IF_NOT_NULL(gUnknown_20399E8);
|
||||
}
|
||||
|
||||
u16 sub_80C4380(void)
|
||||
{
|
||||
return gUnknown_20399E8->field_00;
|
||||
}
|
||||
|
||||
u16 sub_80C438C(void)
|
||||
{
|
||||
return gUnknown_20399E8->field_02;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user