mirror of
https://github.com/zeldaret/oot.git
synced 2025-06-07 17:11:50 +00:00
T() macro loose ends 2 (#2564)
* More T() in niw_girl, ossan, rr, ta, tana, wall_tubo, yabusame_mark
* Add and use LOG_STRING_T()
* include debug.h in translation.h
* Kyaaaaaa
* bss
* comment on Yabusame mato possible typo
* Revert "Kyaaaaaa"
This reverts commit 95097831fa
.
* (Kuzu)hara
* 原 -> "-Hara" from dev name, possibly
This commit is contained in:
parent
c903555e83
commit
e8b708a448
25 changed files with 87 additions and 77 deletions
|
@ -1,6 +1,8 @@
|
|||
#ifndef TRANSLATION_H
|
||||
#define TRANSLATION_H
|
||||
|
||||
#include "libu64/debug.h"
|
||||
|
||||
/**
|
||||
* The "T" macro holds translations in English for original debug strings written in Japanese.
|
||||
* The translated strings are only direct translations. Certain names or terms may not reflect
|
||||
|
@ -13,4 +15,6 @@
|
|||
*/
|
||||
#define T(jp, en) jp
|
||||
|
||||
#define LOG_STRING_T(stringJP, stringEN, file, line) LOG(#stringJP, stringJP, "%s", file, line)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include "z_lib.h"
|
||||
#include "z64math.h"
|
||||
|
||||
#pragma increment_block_number "gc-eu:77 gc-eu-mq:77 gc-jp:77 gc-jp-ce:77 gc-jp-mq:77 gc-us:77 gc-us-mq:77 ique-cn:67" \
|
||||
#pragma increment_block_number "gc-eu:76 gc-eu-mq:76 gc-jp:76 gc-jp-ce:76 gc-jp-mq:76 gc-us:76 gc-us-mq:76 ique-cn:66" \
|
||||
"ntsc-1.0:64 ntsc-1.1:64 ntsc-1.2:64 pal-1.0:64 pal-1.1:64"
|
||||
|
||||
s32 Math3D_LineVsLineClosestTwoPoints(Vec3f* lineAPointA, Vec3f* lineAPointB, Vec3f* lineBPointA, Vec3f* lineBPointB,
|
||||
|
|
|
@ -3661,7 +3661,7 @@ s32 Camera_KeepOn3(Camera* camera) {
|
|||
}
|
||||
|
||||
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
|
||||
"ique-cn:128 ntsc-1.0:83 ntsc-1.1:83 ntsc-1.2:83 pal-1.0:83 pal-1.1:83"
|
||||
"ique-cn:128 ntsc-1.0:82 ntsc-1.1:82 ntsc-1.2:82 pal-1.0:82 pal-1.1:82"
|
||||
|
||||
s32 Camera_KeepOn4(Camera* camera) {
|
||||
static Vec3f D_8015BD50;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#include "libu64/debug.h"
|
||||
#include "rand.h"
|
||||
#include "translation.h"
|
||||
#include "z64play.h"
|
||||
#include "z64player.h"
|
||||
#include "z64quest_hint.h"
|
||||
|
@ -73,7 +73,7 @@ u32 QuestHint_CheckCondition(QuestHintCmd* hintCmd) {
|
|||
}
|
||||
}
|
||||
|
||||
LOG_STRING("企画外 条件", "../z_elf_message.c", 156); // "Unplanned conditions"
|
||||
LOG_STRING_T("企画外 条件", "Unplanned conditions", "../z_elf_message.c", 156);
|
||||
ASSERT(0, "0", "../z_elf_message.c", 157);
|
||||
|
||||
return false;
|
||||
|
@ -170,7 +170,7 @@ u16 QuestHint_GetTextIdFromScript(QuestHintCmd* hintCmd) {
|
|||
return hintCmd->byte2 | 0x100;
|
||||
|
||||
default:
|
||||
LOG_STRING("企画外 条件", "../z_elf_message.c", 281); // "Unplanned conditions"
|
||||
LOG_STRING_T("企画外 条件", "Unplanned conditions", "../z_elf_message.c", 281);
|
||||
ASSERT(0, "0", "../z_elf_message.c", 282);
|
||||
}
|
||||
|
||||
|
|
|
@ -895,8 +895,8 @@ void Play_Update(PlayState* this) {
|
|||
this->envCtx.sandstormState = SANDSTORM_DISSIPATE;
|
||||
this->envCtx.sandstormPrimA = 255;
|
||||
this->envCtx.sandstormEnvA = 255;
|
||||
// "It's here!!!!!!!!!"
|
||||
LOG_STRING("来た!!!!!!!!!!!!!!!!!!!!!", "../z_play.c", 3471);
|
||||
LOG_STRING_T("来た!!!!!!!!!!!!!!!!!!!!!", "It's here!!!!!!!!!!!!!!!!!!!!!", "../z_play.c",
|
||||
3471);
|
||||
this->transitionMode = TRANS_MODE_SANDSTORM_END;
|
||||
} else {
|
||||
this->transitionMode = TRANS_MODE_SANDSTORM_INIT;
|
||||
|
|
|
@ -7,13 +7,13 @@
|
|||
#include "z_arrow_fire.h"
|
||||
#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
|
||||
|
||||
#include "libu64/debug.h"
|
||||
#include "gfx.h"
|
||||
#include "gfx_setupdl.h"
|
||||
#include "ichain.h"
|
||||
#include "sfx.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "tex_len.h"
|
||||
#include "translation.h"
|
||||
#include "z_lib.h"
|
||||
#include "z64play.h"
|
||||
|
||||
|
@ -87,7 +87,7 @@ void ArrowFire_Init(Actor* thisx, PlayState* play) {
|
|||
|
||||
void ArrowFire_Destroy(Actor* thisx, PlayState* play) {
|
||||
Magic_Reset(play);
|
||||
LOG_STRING("消滅", "../z_arrow_fire.c", 421); // "Disappearance"
|
||||
LOG_STRING_T("消滅", "Disappearance", "../z_arrow_fire.c", 421);
|
||||
}
|
||||
|
||||
void ArrowFire_Charge(ArrowFire* this, PlayState* play) {
|
||||
|
|
|
@ -7,13 +7,13 @@
|
|||
#include "z_arrow_ice.h"
|
||||
#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
|
||||
|
||||
#include "libu64/debug.h"
|
||||
#include "gfx.h"
|
||||
#include "gfx_setupdl.h"
|
||||
#include "ichain.h"
|
||||
#include "sfx.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "tex_len.h"
|
||||
#include "translation.h"
|
||||
#include "z_lib.h"
|
||||
#include "z64play.h"
|
||||
|
||||
|
@ -87,7 +87,7 @@ void ArrowIce_Init(Actor* thisx, PlayState* play) {
|
|||
|
||||
void ArrowIce_Destroy(Actor* thisx, PlayState* play) {
|
||||
Magic_Reset(play);
|
||||
LOG_STRING("消滅", "../z_arrow_ice.c", 415); // "Disappearance"
|
||||
LOG_STRING_T("消滅", "Disappearance", "../z_arrow_ice.c", 415);
|
||||
}
|
||||
|
||||
void ArrowIce_Charge(ArrowIce* this, PlayState* play) {
|
||||
|
|
|
@ -7,13 +7,13 @@
|
|||
#include "z_arrow_light.h"
|
||||
#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
|
||||
|
||||
#include "libu64/debug.h"
|
||||
#include "gfx.h"
|
||||
#include "gfx_setupdl.h"
|
||||
#include "ichain.h"
|
||||
#include "sfx.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "tex_len.h"
|
||||
#include "translation.h"
|
||||
#include "z_lib.h"
|
||||
#include "z64play.h"
|
||||
|
||||
|
@ -87,7 +87,7 @@ void ArrowLight_Init(Actor* thisx, PlayState* play) {
|
|||
|
||||
void ArrowLight_Destroy(Actor* thisx, PlayState* play) {
|
||||
Magic_Reset(play);
|
||||
LOG_STRING("消滅", "../z_arrow_light.c", 403); // "Disappearance"
|
||||
LOG_STRING_T("消滅", "Disappearance", "../z_arrow_light.c", 403);
|
||||
}
|
||||
|
||||
void ArrowLight_Charge(ArrowLight* this, PlayState* play) {
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include "z_demo_kekkai.h"
|
||||
|
||||
#include "libu64/debug.h"
|
||||
#include "gfx.h"
|
||||
#include "gfx_setupdl.h"
|
||||
#include "rand.h"
|
||||
|
@ -14,6 +13,7 @@
|
|||
#include "sequence.h"
|
||||
#include "sfx.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "translation.h"
|
||||
#include "z_lib.h"
|
||||
#include "z64audio.h"
|
||||
#include "z64effect.h"
|
||||
|
@ -267,8 +267,7 @@ void DemoKekkai_TrialBarrierIdle(Actor* thisx, PlayState* play) {
|
|||
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider1.base);
|
||||
if (this->collider2.base.acFlags & AC_HIT) {
|
||||
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
|
||||
// "I got it"
|
||||
LOG_STRING("当ったよ", "../z_demo_kekkai.c", 572);
|
||||
LOG_STRING_T("当ったよ", "I got it", "../z_demo_kekkai.c", 572);
|
||||
this->actor.update = DemoKekkai_TrialBarrierDispel;
|
||||
this->timer = 0;
|
||||
play->csCtx.script = SEGMENTED_TO_VIRTUAL(sSageCutscenes[this->actor.params]);
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include "z_elf_msg.h"
|
||||
|
||||
#include "libu64/debug.h"
|
||||
#include "gfx.h"
|
||||
#include "gfx_setupdl.h"
|
||||
#include "ichain.h"
|
||||
|
@ -64,14 +63,14 @@ void ElfMsg_SetupAction(ElfMsg* this, ElfMsgActionFunc actionFunc) {
|
|||
s32 ElfMsg_KillCheck(ElfMsg* this, PlayState* play) {
|
||||
if ((this->actor.world.rot.y > 0) && (this->actor.world.rot.y < 0x41) &&
|
||||
Flags_GetSwitch(play, this->actor.world.rot.y - 1)) {
|
||||
LOG_STRING("共倒れ", "../z_elf_msg.c", 161); // "Mutual destruction"
|
||||
LOG_STRING_T("共倒れ", "Mutual destruction", "../z_elf_msg.c", 161);
|
||||
if (PARAMS_GET_U(this->actor.params, 8, 6) != 0x3F) {
|
||||
Flags_SetSwitch(play, PARAMS_GET_U(this->actor.params, 8, 6));
|
||||
}
|
||||
Actor_Kill(&this->actor);
|
||||
return 1;
|
||||
} else if ((this->actor.world.rot.y == -1) && Flags_GetClear(play, this->actor.room)) {
|
||||
LOG_STRING("共倒れ", "../z_elf_msg.c", 172); // "Mutual destruction"
|
||||
LOG_STRING_T("共倒れ", "Mutual destruction", "../z_elf_msg.c", 172);
|
||||
if (PARAMS_GET_U(this->actor.params, 8, 6) != 0x3F) {
|
||||
Flags_SetSwitch(play, PARAMS_GET_U(this->actor.params, 8, 6));
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include "z_elf_msg2.h"
|
||||
|
||||
#include "libu64/debug.h"
|
||||
#include "gfx.h"
|
||||
#include "gfx_setupdl.h"
|
||||
#include "ichain.h"
|
||||
|
@ -14,6 +13,7 @@
|
|||
#include "regs.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "terminal.h"
|
||||
#include "translation.h"
|
||||
#include "z64play.h"
|
||||
|
||||
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
|
||||
|
@ -61,14 +61,14 @@ void ElfMsg2_SetupAction(ElfMsg2* this, ElfMsg2ActionFunc actionFunc) {
|
|||
s32 ElfMsg2_KillCheck(ElfMsg2* this, PlayState* play) {
|
||||
if ((this->actor.world.rot.y > 0) && (this->actor.world.rot.y < 0x41) &&
|
||||
Flags_GetSwitch(play, this->actor.world.rot.y - 1)) {
|
||||
LOG_STRING("共倒れ", "../z_elf_msg2.c", 171); // "Mutual destruction"
|
||||
LOG_STRING_T("共倒れ", "Mutual destruction", "../z_elf_msg2.c", 171);
|
||||
if (PARAMS_GET_U(this->actor.params, 8, 6) != 0x3F) {
|
||||
Flags_SetSwitch(play, PARAMS_GET_U(this->actor.params, 8, 6));
|
||||
}
|
||||
Actor_Kill(&this->actor);
|
||||
return 1;
|
||||
} else if ((this->actor.world.rot.y == -1) && Flags_GetClear(play, this->actor.room)) {
|
||||
LOG_STRING("共倒れ2", "../z_elf_msg2.c", 182); // "Mutual destruction 2"
|
||||
LOG_STRING_T("共倒れ2", "Mutual destruction 2", "../z_elf_msg2.c", 182);
|
||||
if (PARAMS_GET_U(this->actor.params, 8, 6) != 0x3F) {
|
||||
Flags_SetSwitch(play, PARAMS_GET_U(this->actor.params, 8, 6));
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ s32 ElfMsg2_KillCheck(ElfMsg2* this, PlayState* play) {
|
|||
} else if (PARAMS_GET_U(this->actor.params, 8, 6) == 0x3F) {
|
||||
return 0;
|
||||
} else if (Flags_GetSwitch(play, PARAMS_GET_U(this->actor.params, 8, 6))) {
|
||||
LOG_STRING("共倒れ", "../z_elf_msg2.c", 192); // "Mutual destruction"
|
||||
LOG_STRING_T("共倒れ", "Mutual destruction", "../z_elf_msg2.c", 192);
|
||||
Actor_Kill(&this->actor);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -107,7 +107,7 @@ void EnDivingGame_Init(Actor* thisx, PlayState* play) {
|
|||
this->actor.scale.y = 0.012999999f;
|
||||
this->actor.scale.z = 0.0139999995f;
|
||||
if (D_809EF0B0) {
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ もういてる原 ☆☆☆☆☆ \n", "☆☆☆☆☆ Original is already here ☆☆☆☆☆ \n") VT_RST);
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ もういてる原 ☆☆☆☆☆ \n", "☆☆☆☆☆ I'm already here -Hara ☆☆☆☆☆ \n") VT_RST);
|
||||
this->unk_31F = 1;
|
||||
Actor_Kill(&this->actor);
|
||||
} else {
|
||||
|
|
|
@ -155,7 +155,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
|
|||
if (sLowerRiverSpawned) {
|
||||
Actor_Kill(&this->actor);
|
||||
PRINTF(VT_FGCOL(YELLOW)
|
||||
T("☆☆☆☆☆ もういてる原 Ver.1 ☆☆☆☆☆ \n", "☆☆☆☆☆ Original is already here Ver.1 ☆☆☆☆☆ \n") VT_RST);
|
||||
T("☆☆☆☆☆ もういてる原 Ver.1 ☆☆☆☆☆ \n", "☆☆☆☆☆ I'm already here -Hara Ver.1 ☆☆☆☆☆ \n") VT_RST);
|
||||
return;
|
||||
}
|
||||
sLowerRiverSpawned = true;
|
||||
|
@ -167,7 +167,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
|
|||
if (sUpperRiverSpawned) {
|
||||
Actor_Kill(&this->actor);
|
||||
PRINTF(VT_FGCOL(YELLOW)
|
||||
T("☆☆☆☆☆ もういてる原 Ver.2 ☆☆☆☆☆ \n", "☆☆☆☆☆ Original is already here Ver.2 ☆☆☆☆☆ \n") VT_RST);
|
||||
T("☆☆☆☆☆ もういてる原 Ver.2 ☆☆☆☆☆ \n", "☆☆☆☆☆ I'm already here -Hara Ver.2 ☆☆☆☆☆ \n") VT_RST);
|
||||
return;
|
||||
}
|
||||
sUpperRiverSpawned = true;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "segmented_address.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "terminal.h"
|
||||
#include "translation.h"
|
||||
#include "z_lib.h"
|
||||
#include "z64play.h"
|
||||
#include "z64player.h"
|
||||
|
@ -90,15 +91,21 @@ void EnNiwGirl_Init(Actor* thisx, PlayState* play) {
|
|||
&play->actorCtx, &this->actor, play, ACTOR_EN_NIW, this->actor.world.pos.x + vec2.x,
|
||||
this->actor.world.pos.y + vec2.y, this->actor.world.pos.z + vec2.z, 0, this->actor.world.rot.y, 0, 0xA);
|
||||
if (this->chasedEnNiw != NULL) {
|
||||
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ シツレイしちゃうわね!プンプン ☆☆☆☆☆ %d\n" VT_RST, this->actor.params);
|
||||
PRINTF(VT_FGCOL(YELLOW) "☆☆☆☆☆ きゃははははは、まてー ☆☆☆☆☆ %d\n" VT_RST, this->path);
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ シツレイしちゃうわね!プンプン ☆☆☆☆☆ %d\n",
|
||||
"☆☆☆☆☆ That's so mean! Punpun ☆☆☆☆☆ %d\n") VT_RST,
|
||||
this->actor.params);
|
||||
PRINTF(VT_FGCOL(YELLOW) T("☆☆☆☆☆ きゃははははは、まてー ☆☆☆☆☆ %d\n", "☆☆☆☆☆ Kyahahahaha, wait ☆☆☆☆☆ %d\n")
|
||||
VT_RST,
|
||||
this->path);
|
||||
PRINTF("\n\n");
|
||||
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
|
||||
this->actionFunc = EnNiwGirl_Talk;
|
||||
} else {
|
||||
PRINTF("\n\n");
|
||||
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ なぜか、セットできむぅあせん ☆☆☆☆☆ %d\n" VT_RST, this->actor.params);
|
||||
PRINTF(VT_FGCOL(YELLOW) "☆☆☆☆☆ んんがくく ☆☆☆☆☆ %d\n" VT_RST, this->path);
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ なぜか、セットできむぅあせん ☆☆☆☆☆ %d\n",
|
||||
"☆☆☆☆☆ For some reason, I can't set it up ☆☆☆☆☆ %d\n") VT_RST,
|
||||
this->actor.params);
|
||||
PRINTF(VT_FGCOL(YELLOW) T("☆☆☆☆☆ んんがくく ☆☆☆☆☆ %d\n", "☆☆☆☆☆ Language ☆☆☆☆☆ %d\n") VT_RST, this->path);
|
||||
PRINTF("\n\n");
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
|
|
|
@ -229,7 +229,7 @@ void func_80ABF28C(EnOkarinaTag* this, PlayState* play) {
|
|||
break;
|
||||
default:
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ オカリナ透明君デモ開始チェックエラー原 ☆☆☆☆☆ %d\n",
|
||||
"☆☆☆☆☆ Ocarina Invisible-kun demo start check error source ☆☆☆☆☆ %d\n")
|
||||
"☆☆☆☆☆ Ocarina Invisible-kun demo start check error -Hara ☆☆☆☆☆ %d\n")
|
||||
VT_RST,
|
||||
this->type);
|
||||
Actor_Kill(&this->actor);
|
||||
|
|
|
@ -1203,7 +1203,7 @@ void EnOssan_State_BrowseLeftShelf(EnOssan* this, PlayState* play, Player* playe
|
|||
s32 d;
|
||||
|
||||
if (!EnOssan_ReturnItemToShelf(this)) {
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) "ズーム中!!" VT_RST "\n", "../z_en_oB1.c", 2152);
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) T("ズーム中!!", "Zooming!!") VT_RST "\n", "../z_en_oB1.c", 2152);
|
||||
this->delayTimer = 3;
|
||||
return;
|
||||
}
|
||||
|
@ -1262,7 +1262,7 @@ void EnOssan_State_BrowseRightShelf(EnOssan* this, PlayState* play, Player* play
|
|||
|
||||
prevIndex = this->cursorIndex;
|
||||
if (!EnOssan_ReturnItemToShelf(this)) {
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) "ズーム中!!" VT_RST "\n", "../z_en_oB1.c", 2244);
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) T("ズーム中!!", "Zooming!!") VT_RST "\n", "../z_en_oB1.c", 2244);
|
||||
this->delayTimer = 3;
|
||||
return;
|
||||
}
|
||||
|
@ -1327,7 +1327,7 @@ void EnOssan_State_LookFromShelfToShopkeeper(EnOssan* this, PlayState* play, Pla
|
|||
|
||||
void EnOssan_State_DisplayOnlyBombDialog(EnOssan* this, PlayState* play, Player* player) {
|
||||
if (!EnOssan_ReturnItemToShelf(this)) {
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) "ズーム中!!" VT_RST "\n", "../z_en_oB1.c", 2355);
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) T("ズーム中!!", "Zooming!!") VT_RST "\n", "../z_en_oB1.c", 2355);
|
||||
return;
|
||||
}
|
||||
Math_ApproachF(&this->cameraFaceAngle, 0.0f, 0.5f, 10.0f);
|
||||
|
@ -1344,7 +1344,7 @@ void EnOssan_State_DisplayOnlyBombDialog(EnOssan* this, PlayState* play, Player*
|
|||
void EnOssan_GiveItemWithFanfare(PlayState* play, EnOssan* this) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
|
||||
PRINTF("\n" VT_FGCOL(YELLOW) "初めて手にいれた!!" VT_RST "\n\n");
|
||||
PRINTF("\n" VT_FGCOL(YELLOW) T("初めて手にいれた!!", "I got it for the first time!!") VT_RST "\n\n");
|
||||
Actor_OfferGetItem(&this->actor, play, this->shelfSlots[this->cursorIndex]->getItemId, 120.0f, 120.0f);
|
||||
play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
|
||||
play->msgCtx.stateTimer = 4;
|
||||
|
@ -1354,7 +1354,7 @@ void EnOssan_GiveItemWithFanfare(PlayState* play, EnOssan* this) {
|
|||
this->drawCursor = 0;
|
||||
EnOssan_UpdateCameraDirection(this, play, 0.0f);
|
||||
this->stateFlag = OSSAN_STATE_GIVE_ITEM_FANFARE;
|
||||
PRINTF(VT_FGCOL(YELLOW) "持ち上げ開始!!" VT_RST "\n\n");
|
||||
PRINTF(VT_FGCOL(YELLOW) T("持ち上げ開始!!", "Start lifting!!") VT_RST "\n\n");
|
||||
}
|
||||
|
||||
void EnOssan_SetStateCantGetItem(PlayState* play, EnOssan* this, u16 textId) {
|
||||
|
@ -1506,7 +1506,7 @@ void EnOssan_State_ItemSelected(EnOssan* this, PlayState* play2, Player* player)
|
|||
PlayState* play = play2; // Necessary for OKs
|
||||
|
||||
if (!EnOssan_TakeItemOffShelf(this)) {
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) "ズーム中!!" VT_RST "\n", "../z_en_oB1.c", 2654);
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) T("ズーム中!!", "Zooming!!") VT_RST "\n", "../z_en_oB1.c", 2654);
|
||||
return;
|
||||
}
|
||||
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE &&
|
||||
|
@ -1527,7 +1527,7 @@ void EnOssan_State_SelectMilkBottle(EnOssan* this, PlayState* play2, Player* pla
|
|||
PlayState* play = play2; // Need for OK
|
||||
|
||||
if (!EnOssan_TakeItemOffShelf(this)) {
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) "ズーム中!!" VT_RST "\n", "../z_en_oB1.c", 2693);
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) T("ズーム中!!", "Zooming!!") VT_RST "\n", "../z_en_oB1.c", 2693);
|
||||
return;
|
||||
}
|
||||
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE &&
|
||||
|
@ -1548,7 +1548,7 @@ void EnOssan_State_SelectWeirdEgg(EnOssan* this, PlayState* play2, Player* playe
|
|||
PlayState* play = play2; // Needed for OK
|
||||
|
||||
if (!EnOssan_TakeItemOffShelf(this)) {
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) "ズーム中!!" VT_RST "\n", "../z_en_oB1.c", 2732);
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) T("ズーム中!!", "Zooming!!") VT_RST "\n", "../z_en_oB1.c", 2732);
|
||||
return;
|
||||
}
|
||||
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE &&
|
||||
|
@ -1567,7 +1567,7 @@ void EnOssan_State_SelectWeirdEgg(EnOssan* this, PlayState* play2, Player* playe
|
|||
|
||||
void EnOssan_State_SelectUnimplementedItem(EnOssan* this, PlayState* play, Player* player) {
|
||||
if (!EnOssan_TakeItemOffShelf(this)) {
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) "ズーム中!!" VT_RST "\n", "../z_en_oB1.c", 2771);
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) T("ズーム中!!", "Zooming!!") VT_RST "\n", "../z_en_oB1.c", 2771);
|
||||
return;
|
||||
}
|
||||
if (Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT && Message_ShouldAdvance(play)) {
|
||||
|
@ -1578,10 +1578,10 @@ void EnOssan_State_SelectUnimplementedItem(EnOssan* this, PlayState* play, Playe
|
|||
|
||||
void EnOssan_State_SelectBombs(EnOssan* this, PlayState* play, Player* player) {
|
||||
if (!EnOssan_TakeItemOffShelf(this)) {
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) "ズーム中!!" VT_RST "\n", "../z_en_oB1.c", 2798);
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) T("ズーム中!!", "Zooming!!") VT_RST "\n", "../z_en_oB1.c", 2798);
|
||||
return;
|
||||
}
|
||||
PRINTF("店主の依頼 ( %d )\n", GET_INFTABLE(INFTABLE_FC));
|
||||
PRINTF(T("店主の依頼 ( %d )\n", "Shopkeeper's request ( %d )\n"), GET_INFTABLE(INFTABLE_FC));
|
||||
if (this->actor.params != OSSAN_TYPE_GORON) {
|
||||
EnOssan_State_ItemSelected(this, play, player);
|
||||
return;
|
||||
|
@ -1605,7 +1605,7 @@ void EnOssan_State_SelectMaskItem(EnOssan* this, PlayState* play, Player* player
|
|||
EnGirlA* item = this->shelfSlots[this->cursorIndex];
|
||||
|
||||
if (!EnOssan_TakeItemOffShelf(this)) {
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) "ズーム中!!" VT_RST "\n", "../z_en_oB1.c", 2845);
|
||||
PRINTF("%s[%d]:" VT_FGCOL(GREEN) T("ズーム中!!", "Zooming!!") VT_RST "\n", "../z_en_oB1.c", 2845);
|
||||
return;
|
||||
}
|
||||
if (talkState == TEXT_STATE_EVENT) {
|
||||
|
@ -1722,7 +1722,7 @@ void EnOssan_State_ContinueShoppingPrompt(EnOssan* this, PlayState* play, Player
|
|||
|
||||
switch (play->msgCtx.choiceIndex) {
|
||||
case 0:
|
||||
PRINTF(VT_FGCOL(YELLOW) "★★★ 続けるよ!! ★★★" VT_RST "\n");
|
||||
PRINTF(VT_FGCOL(YELLOW) T("★★★ 続けるよ!! ★★★", "★★★ I will continue!! ★★★") VT_RST "\n");
|
||||
player->actor.shape.rot.y += 0x8000;
|
||||
player->stateFlags2 |= PLAYER_STATE2_29;
|
||||
Play_SetViewpoint(play, VIEWPOINT_PIVOT);
|
||||
|
@ -1732,7 +1732,7 @@ void EnOssan_State_ContinueShoppingPrompt(EnOssan* this, PlayState* play, Player
|
|||
break;
|
||||
case 1:
|
||||
default:
|
||||
PRINTF(VT_FGCOL(YELLOW) "★★★ やめるよ!! ★★★" VT_RST "\n");
|
||||
PRINTF(VT_FGCOL(YELLOW) T("★★★ やめるよ!! ★★★", "★★★ I'm quitting!! ★★★") VT_RST "\n");
|
||||
EnOssan_EndInteraction(play, this);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -99,8 +99,8 @@ ActorProfile En_Rr_Profile = {
|
|||
|
||||
#if DEBUG_FEATURES
|
||||
static char* sDropNames[] = {
|
||||
// "type 7", "small magic jar", "arrow", "fairy", "20 rupees", "50 rupees"
|
||||
"タイプ7 ", "魔法の壷小", "矢 ", "妖精 ", "20ルピー ", "50ルピー ",
|
||||
T("タイプ7 ", "Type 7 "), T("魔法の壷小", "Small magic jar"), T("矢 ", "Arrow "),
|
||||
T("妖精 ", "Fairy "), T("20ルピー ", "20 rupees "), T("50ルピー ", "50 rupees "),
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -438,8 +438,7 @@ void EnRr_CollisionCheck(EnRr* this, PlayState* play) {
|
|||
|
||||
if (this->collider2.base.acFlags & AC_HIT) {
|
||||
this->collider2.base.acFlags &= ~AC_HIT;
|
||||
// "Kakin" (not sure what this means)
|
||||
PRINTF(VT_FGCOL(GREEN) "カキン(%d)!!" VT_RST "\n", this->frameCount);
|
||||
PRINTF(VT_FGCOL(GREEN) T("カキン(%d)!!", "Kakin (%d)!!") VT_RST "\n", this->frameCount);
|
||||
hitPos.x = this->collider2.elem.acDmgInfo.hitPos.x;
|
||||
hitPos.y = this->collider2.elem.acDmgInfo.hitPos.y;
|
||||
hitPos.z = this->collider2.elem.acDmgInfo.hitPos.z;
|
||||
|
|
|
@ -86,7 +86,7 @@ void EnSyatekiItm_Init(Actor* thisx, PlayState* play2) {
|
|||
this->man = (EnSyatekiMan*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_SYATEKI_MAN, 140.0f,
|
||||
0.0f, 255.0f, 0, -0x4000, 0, 0);
|
||||
if (this->man == NULL) {
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ エラー原 ☆☆☆☆ \n", "☆☆☆☆☆ Spawn error ☆☆☆☆ \n") VT_RST);
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ エラー原 ☆☆☆☆ \n", "☆☆☆☆☆ Error -Hara ☆☆☆☆ \n") VT_RST);
|
||||
Actor_Kill(&this->actor);
|
||||
return;
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ void EnSyatekiItm_Init(Actor* thisx, PlayState* play2) {
|
|||
this->markers[i] = (EnExRuppy*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_EX_RUPPY,
|
||||
sRupeePos[i].x, sRupeePos[i].y, sRupeePos[i].z, 0, 0, 0, 4);
|
||||
if (this->markers[i] == NULL) {
|
||||
PRINTF(VT_FGCOL(YELLOW) T("☆☆☆☆☆ エラー原セカンド ☆☆☆☆ \n", "☆☆☆☆☆ Second spawn error ☆☆☆☆ \n") VT_RST);
|
||||
PRINTF(VT_FGCOL(YELLOW) T("☆☆☆☆☆ エラー原セカンド ☆☆☆☆ \n", "☆☆☆☆☆ Second error -Hara ☆☆☆☆ \n") VT_RST);
|
||||
Actor_Kill(&this->actor);
|
||||
return;
|
||||
}
|
||||
|
@ -245,7 +245,7 @@ void EnSyatekiItm_SpawnTargets(EnSyatekiItm* this, PlayState* play) {
|
|||
&play->actorCtx, &this->actor, play, ACTOR_EN_G_SWITCH, this->targetHome[i].x, this->targetHome[i].y,
|
||||
this->targetHome[i].z, 0, 0, 0, (ENGSWITCH_TARGET_RUPEE << 0xC) | 0x3F);
|
||||
if (this->targets[i] == NULL) {
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ ルピーでエラー原 ☆☆☆☆ \n", "☆☆☆☆☆ Rupee spawn error ☆☆☆☆ \n") VT_RST);
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ ルピーでエラー原 ☆☆☆☆ \n", "☆☆☆☆☆ Rupee error -Hara ☆☆☆☆ \n") VT_RST);
|
||||
Actor_Kill(&this->actor);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -231,7 +231,8 @@ void EnTa_Init(Actor* thisx, PlayState* play2) {
|
|||
this->actor.shape.shadowScale = 54.0f;
|
||||
}
|
||||
} else if (play->sceneId == SCENE_LON_LON_BUILDINGS) {
|
||||
PRINTF(VT_FGCOL(CYAN) " ロンロン牧場の倉庫 の タロン\n" VT_RST);
|
||||
PRINTF(VT_FGCOL(CYAN) T(" ロンロン牧場の倉庫 の タロン\n", " Talon in the warehouse at Lon Lon Ranch\n")
|
||||
VT_RST);
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
|
||||
Actor_Kill(&this->actor);
|
||||
} else if (LINK_IS_ADULT) {
|
||||
|
|
|
@ -57,7 +57,7 @@ void EnTakaraMan_Init(Actor* thisx, PlayState* play) {
|
|||
|
||||
if (sTakaraIsInitialized) {
|
||||
Actor_Kill(&this->actor);
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ もういてる原 ☆☆☆☆☆ \n", "☆☆☆☆☆ Original is already here ☆☆☆☆☆ \n") VT_RST);
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ もういてる原 ☆☆☆☆☆ \n", "☆☆☆☆☆ I'm already here -Hara ☆☆☆☆☆ \n") VT_RST);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "printf.h"
|
||||
#include "segmented_address.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "translation.h"
|
||||
#include "z64play.h"
|
||||
|
||||
#include "assets/objects/object_shop_dungen/object_shop_dungen.h"
|
||||
|
@ -40,8 +41,8 @@ ActorProfile En_Tana_Profile = {
|
|||
//! next data entry will be dereferenced and print garbage, stopping any future printing.
|
||||
//! In a non-matching context, this can cause a crash if the next item isn't a valid pointer.
|
||||
static const char* sShelfTypes[] = {
|
||||
"木の棚", // "Wooden Shelves"
|
||||
"石の棚", // "Stone Shelves"
|
||||
T("木の棚", "Wooden shelf"),
|
||||
T("石の棚", "Stone shelf"),
|
||||
#ifdef AVOID_UB
|
||||
"",
|
||||
#endif
|
||||
|
|
|
@ -135,12 +135,12 @@ void EnWallTubo_SetWallFall(EnWallTubo* this, PlayState* play) {
|
|||
|
||||
if ((wall != NULL) && (wall->dyna.actor.update != NULL)) {
|
||||
wall->isHit = true;
|
||||
// "You did it field!" (repeated 5 times)
|
||||
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆ やった原! ☆☆☆☆☆ \n" VT_RST);
|
||||
PRINTF(VT_FGCOL(YELLOW) "☆☆☆☆ やった原! ☆☆☆☆☆ \n" VT_RST);
|
||||
PRINTF(VT_FGCOL(BLUE) "☆☆☆☆ やった原! ☆☆☆☆☆ \n" VT_RST);
|
||||
PRINTF(VT_FGCOL(MAGENTA) "☆☆☆☆ やった原! ☆☆☆☆☆ \n" VT_RST);
|
||||
PRINTF(VT_FGCOL(CYAN) "☆☆☆☆ やった原! ☆☆☆☆☆ \n" VT_RST);
|
||||
// "Hara" may stand for the developer name Kuzuhara
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆ やった原! ☆☆☆☆☆ \n", "☆☆☆☆ I did it! -Hara ☆☆☆☆☆ \n") VT_RST);
|
||||
PRINTF(VT_FGCOL(YELLOW) T("☆☆☆☆ やった原! ☆☆☆☆☆ \n", "☆☆☆☆ I did it! -Hara ☆☆☆☆☆ \n") VT_RST);
|
||||
PRINTF(VT_FGCOL(BLUE) T("☆☆☆☆ やった原! ☆☆☆☆☆ \n", "☆☆☆☆ I did it! -Hara ☆☆☆☆☆ \n") VT_RST);
|
||||
PRINTF(VT_FGCOL(MAGENTA) T("☆☆☆☆ やった原! ☆☆☆☆☆ \n", "☆☆☆☆ I did it! -Hara ☆☆☆☆☆ \n") VT_RST);
|
||||
PRINTF(VT_FGCOL(CYAN) T("☆☆☆☆ やった原! ☆☆☆☆☆ \n", "☆☆☆☆ I did it! -Hara ☆☆☆☆☆ \n") VT_RST);
|
||||
}
|
||||
|
||||
Actor_Kill(&this->actor);
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "sequence.h"
|
||||
#include "sfx.h"
|
||||
#include "terminal.h"
|
||||
#include "translation.h"
|
||||
#include "z_lib.h"
|
||||
#include "z64audio.h"
|
||||
#include "z64debug_display.h"
|
||||
|
@ -90,11 +91,14 @@ void EnYabusameMark_Init(Actor* thisx, PlayState* play) {
|
|||
EnYabusameMark* this = (EnYabusameMark*)thisx;
|
||||
|
||||
PRINTF("\n\n");
|
||||
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ やぶさめまと ☆☆☆☆☆ %x\n" VT_RST, this->actor.params);
|
||||
// "まと" could be a typo for "まこ", in which case this could be "Yabusame mark"
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ やぶさめまと ☆☆☆☆☆ %x\n", "☆☆☆☆☆ Yabusame mato ☆☆☆☆☆ %x\n") VT_RST,
|
||||
this->actor.params);
|
||||
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
|
||||
this->typeIndex = this->actor.params;
|
||||
this->actor.attentionRangeType = ATTENTION_RANGE_5;
|
||||
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ 種類インデックス \t ☆☆☆☆☆ %d\n" VT_RST, this->typeIndex);
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆☆☆☆☆ 種類インデックス \t ☆☆☆☆☆ %d\n", "☆☆☆☆☆ Type index \t ☆☆☆☆☆ %d\n") VT_RST,
|
||||
this->typeIndex);
|
||||
switch (this->typeIndex) {
|
||||
case 0:
|
||||
this->subTypeIndex = 0;
|
||||
|
@ -120,8 +124,9 @@ void EnYabusameMark_Init(Actor* thisx, PlayState* play) {
|
|||
Actor_Kill(&this->actor);
|
||||
return;
|
||||
}
|
||||
PRINTF(VT_FGCOL(MAGENTA) "☆☆☆☆☆ 種類 ☆☆☆☆☆ %d\n" VT_RST, this->typeIndex);
|
||||
PRINTF(VT_FGCOL(CYAN) "☆☆☆☆☆ さらに分類 ☆☆☆☆☆ %d\n" VT_RST, this->subTypeIndex);
|
||||
PRINTF(VT_FGCOL(MAGENTA) T("☆☆☆☆☆ 種類 ☆☆☆☆☆ %d\n", "☆☆☆☆☆ Type ☆☆☆☆☆ %d\n") VT_RST, this->typeIndex);
|
||||
PRINTF(VT_FGCOL(CYAN) T("☆☆☆☆☆ さらに分類 ☆☆☆☆☆ %d\n", "☆☆☆☆☆ Further classification ☆☆☆☆☆ %d\n") VT_RST,
|
||||
this->subTypeIndex);
|
||||
this->actionFunc = func_80B42F74;
|
||||
}
|
||||
|
||||
|
@ -177,8 +182,8 @@ void func_80B42F74(EnYabusameMark* this, PlayState* play) {
|
|||
PRINTF(VT_FGCOL(YELLOW) "☆☆☆☆☆ hitX ☆☆☆☆☆ %f\n" VT_RST, sTargetPos[this->subTypeIndex].x);
|
||||
PRINTF(VT_FGCOL(YELLOW) "☆☆☆☆☆ hitY ☆☆☆☆☆ %f\n" VT_RST, sTargetPos[this->subTypeIndex].y);
|
||||
PRINTF(VT_FGCOL(YELLOW) "☆☆☆☆☆ hitZ ☆☆☆☆☆ %f\n" VT_RST, sTargetPos[this->subTypeIndex].z);
|
||||
PRINTF(VT_FGCOL(MAGENTA) "☆☆☆☆☆ 小 ☆☆☆☆☆ %f\n" VT_RST, scoreDistance100);
|
||||
PRINTF(VT_FGCOL(MAGENTA) "☆☆☆☆☆ 大 ☆☆☆☆☆ %f\n" VT_RST, scoreDistance60);
|
||||
PRINTF(VT_FGCOL(MAGENTA) T("☆☆☆☆☆ 小 ☆☆☆☆☆ %f\n", "☆☆☆☆☆ small ☆☆☆☆☆ %f\n") VT_RST, scoreDistance100);
|
||||
PRINTF(VT_FGCOL(MAGENTA) T("☆☆☆☆☆ 大 ☆☆☆☆☆ %f\n", "☆☆☆☆☆ large ☆☆☆☆☆ %f\n") VT_RST, scoreDistance60);
|
||||
PRINTF(VT_FGCOL(MAGENTA) "☆☆☆☆☆ point ☆☆☆☆☆ %d\n" VT_RST, scoreIndex);
|
||||
PRINTF("\n\n");
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include "z_magic_wind.h"
|
||||
|
||||
#include "libu64/debug.h"
|
||||
#include "array_count.h"
|
||||
#include "gfx.h"
|
||||
#include "gfx_setupdl.h"
|
||||
|
@ -69,8 +68,7 @@ void MagicWind_Init(Actor* thisx, PlayState* play) {
|
|||
case 1:
|
||||
SkelCurve_SetAnim(&this->skelCurve, &sAnim, 60.0f, 0.0f, 60.0f, -1.0f);
|
||||
MagicWind_SetupAction(this, MagicWind_Shrink);
|
||||
// "Means start"
|
||||
LOG_STRING("表示開始", "../z_magic_wind.c", 486);
|
||||
LOG_STRING_T("表示開始", "Start displaying", "../z_magic_wind.c", 486);
|
||||
Player_PlaySfx(player, NA_SE_PL_MAGIC_WIND_WARP);
|
||||
break;
|
||||
}
|
||||
|
@ -80,8 +78,7 @@ void MagicWind_Destroy(Actor* thisx, PlayState* play) {
|
|||
MagicWind* this = (MagicWind*)thisx;
|
||||
SkelCurve_Destroy(play, &this->skelCurve);
|
||||
Magic_Reset(play);
|
||||
// "wipe out"
|
||||
LOG_STRING("消滅", "../z_magic_wind.c", 505);
|
||||
LOG_STRING_T("消滅", "Disappearance", "../z_magic_wind.c", 505);
|
||||
}
|
||||
|
||||
void MagicWind_UpdateAlpha(f32 alpha) {
|
||||
|
@ -100,8 +97,7 @@ void MagicWind_WaitForTimer(MagicWind* this, PlayState* play) {
|
|||
return;
|
||||
}
|
||||
|
||||
// "Means start"
|
||||
LOG_STRING("表示開始", "../z_magic_wind.c", 539);
|
||||
LOG_STRING_T("表示開始", "Start displaying", "../z_magic_wind.c", 539);
|
||||
Player_PlaySfx(player, NA_SE_PL_MAGIC_WIND_NORMAL);
|
||||
MagicWind_UpdateAlpha(1.0f);
|
||||
MagicWind_SetupAction(this, MagicWind_Grow);
|
||||
|
|
|
@ -186,8 +186,7 @@ void MirRay_Init(Actor* thisx, PlayState* play) {
|
|||
LOG_NUM("this->actor.arg_data", this->actor.params, "../z_mir_ray.c", 518);
|
||||
|
||||
if (this->actor.params >= 0xA) {
|
||||
// "Reflected light generation failure"
|
||||
LOG_STRING("反射光 発生失敗", "../z_mir_ray.c", 521);
|
||||
LOG_STRING_T("反射光 発生失敗", "Reflected light generation failure", "../z_mir_ray.c", 521);
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue