Merge pull request #293 from PikalaxALT/easy_chat_2

Port easy_chat_2
This commit is contained in:
PikalaxALT
2020-03-08 14:37:34 -04:00
committed by GitHub
16 changed files with 3764 additions and 7971 deletions
-7654
View File
File diff suppressed because it is too large Load Diff
+5 -1
View File
@@ -13,7 +13,7 @@
.section .rodata
// berry_fix_program
// easy_chat_2
gUnknown_847A8D8::
.string "{CLEAR 11}A{CLEAR 6}B{CLEAR 6}C{CLEAR 26}D{CLEAR 6}E{CLEAR 6}F{CLEAR 26}others$"
@@ -27,6 +27,8 @@ gUnknown_847A913::
gUnknown_847A934::
.string "{CLEAR 11}T{CLEAR 6}U{CLEAR 6}V{CLEAR 26}W{CLEAR 6}X{CLEAR 6}Y{CLEAR 6}Z{CLEAR 26} $"
// naming_screen
gUnknown_847A955::
.string "{CLEAR 11}a{CLEAR 6}b{CLEAR 6}c{CLEAR 26}d{CLEAR 6}e{CLEAR 6}f{CLEAR 6} {CLEAR 26}.$"
@@ -63,6 +65,8 @@ gUnknown_847AA8F::
gUnknown_847AAA8::
.string "{CLEAR 11}{CLEAR 16}{CLEAR 16}{CLEAR 18}{CLEAR 18}'{CLEAR 18} $"
// union_room_chat
gText_UnionRoomChatKeyboard_ABCDE::
.string "ABCDE$"
-296
View File
@@ -1,296 +0,0 @@
#include "constants/region_map.h"
#include "constants/flags.h"
#include "constants/moves.h"
#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_843F29C:: @ 843F29C
.2byte 0x143a, 0x1817, 0x100b, 0x200f
gUnknown_843F2A4:: @ 843F2A4
.2byte 0x0209, 0x140b, 0x1030, 0x102a
gUnknown_843F2AC:: @ 843F2AC
.byte 0, 2, 2, 0
.4byte gUnknown_8418A2B
.4byte gUnknown_84186D1
.4byte gUnknown_84186EF
.4byte gUnknown_841880E
.4byte gUnknown_8418902
.byte 1, 2, 3, 1
.4byte gUnknown_8418A33
.4byte gUnknown_8418706
.4byte gUnknown_8418725
.4byte gUnknown_841881B
.4byte gUnknown_8418902
.byte 2, 2, 3, 1
.4byte gUnknown_8418A4A
.4byte gUnknown_8418706
.4byte gUnknown_8418725
.4byte gUnknown_841883E
.4byte gUnknown_8418902
.byte 3, 2, 3, 1
.4byte gUnknown_8418A61
.4byte gUnknown_8418706
.4byte gUnknown_8418725
.4byte gUnknown_841885F
.4byte gUnknown_8418902
.byte 4, 2, 5, 2
.4byte NULL
.4byte gUnknown_8418780
.4byte gUnknown_841879E
.4byte gUnknown_841888C
.4byte gUnknown_8418902
.byte 5, 2, 2, 0
.4byte NULL
.4byte gUnknown_8418780
.4byte gUnknown_841879E
.4byte NULL
.4byte NULL
.byte 6, 2, 3, 1
.4byte gUnknown_8418A77
.4byte gUnknown_84187B2
.4byte gUnknown_84187D1
.4byte gUnknown_84188AC
.4byte gUnknown_8418902
.byte 7, 2, 3, 1
.4byte gUnknown_8418AA1
.4byte gUnknown_8418745
.4byte gUnknown_8418763
.4byte gUnknown_8418881
.4byte gUnknown_8418902
.byte 9, 2, 1, 3
.4byte gUnknown_8418A87
.4byte gUnknown_84188B9
.4byte gUnknown_84188D6
.4byte gUnknown_84188F0
.4byte gUnknown_8418902
.byte 14, 2, 2, 0
.4byte gUnknown_8418AB2
.4byte gUnknown_84186D1
.4byte gUnknown_84187EE
.4byte gUnknown_8418881
.4byte gUnknown_8418902
gUnknown_843F39C:: @ 843F39C data8 4x7
.byte 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00
.byte 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x00
.byte 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13
.byte 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a
gUnknown_843F3B8:: @ 843F3B8 gbapal
.incbin "graphics/link_rfu/unk_843F3F8.gbapal"
gUnknown_843F3D8:: @ 843F3D8 gbapal
.incbin "graphics/link_rfu/unk_8E9BD28.gbapal"
gUnknown_843F3F8:: @ 843F3F8 4bpp
.incbin "graphics/link_rfu/unk_843F3F8.4bpp"
gUnknown_843F418:: @ 843F418 4bpp
.incbin "graphics/link_rfu/unk_843F418.4bpp"
gUnknown_843F518:: @ 843F518 4bpp
.incbin "graphics/link_rfu/unk_843F518.4bpp"
gUnknown_843F618:: @ 843F618 gbapal
.incbin "graphics/link_rfu/unk_843F638.gbapal"
gUnknown_843F638:: @ 843F638 4bpp.lz
.incbin "graphics/link_rfu/unk_843F638.4bpp.lz"
gUnknown_843F76C:: @ 843F76C gbapal
.incbin "graphics/link_rfu/unk_843F76C.gbapal"
gUnknown_843F78C:: @ 843F78C gbapal
.incbin "graphics/link_rfu/unk_843F78C.gbapal"
gUnknown_843F7AC:: @ 843F7AC 4bpp.lz
.incbin "graphics/link_rfu/unk_843F7AC.4bpp.lz"
gUnknown_843F874:: @ 843F874 gbapal
.2byte RGB(0, 0, 0)
.2byte RGB(0, 0, 0)
.2byte RGB(7, 25, 31)
.2byte RGB(21, 21, 29)
gUnknown_843F87C:: @ 843F87C gbapal
.2byte RGB(0, 0, 0)
.2byte RGB(31, 31, 31)
.2byte RGB(12, 12, 12)
.2byte RGB(27, 26, 27)
.2byte RGB(8, 17, 9)
.align 2
gUnknown_843F888:: @ 843F888 data8 6x4
.byte 0x03, 0x04, 0x18, 0x04
.byte 0x01, 0x04, 0x1b, 0x04
.byte 0x03, 0x00, 0x18, 0x0a
.byte 0x06, 0x06, 0x12, 0x04
.byte 0x10, 0x04, 0x09, 0x02
.byte 0x0e, 0x04, 0x12, 0x04
gUnknown_843F8A0:: @ 843F8A0 bg_template
.4byte 0x000001c0, 0x000011dd, 0x002021e2, 0x000031fb
gUnknown_843F8B0:: @ 843F8B0 window_template
.align 2
.byte 0x01, 0x07, 0x00, 0x10, 0x02, 0x0a
.2byte 0x0010
@ {0x01, 0x07, 0x00, 0x10, 0x02, 0x0a, 0x0010}
.align 2
.byte 0x00, 0x04, 0x0f, 0x16, 0x04, 0x0f
.2byte 0x000a
@ {0x00, 0x04, 0x0f, 0x16, 0x04, 0x0f, 0x000a}
.align 2
.byte 0x02, 0x01, 0x00, 0x1c, 0x20, 0x03
.2byte 0x0000
@ {0x02, 0x01, 0x00, 0x1c, 0x20, 0x03, 0x0000}
.align 2
.byte 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
.2byte 0x0000
@ {0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000}
gUnknown_843F8D0:: @ 843F8D0 window_template
.align 2
.byte 0x00, 0x16, 0x09, 0x05, 0x04, 0x0f
.2byte 0x0062
@ {0x00, 0x16, 0x09, 0x05, 0x04, 0x0f, 0x0062}
gUnknown_843F8D8:: @ 843F8D8 text
.string "{UNDERSCORE}$"
gUnknown_843F8DB:: @ 843F8DB text
.string "{CLEAR 17}$"
.align 2
gUnknown_843F8E0:: @ 843F8E0
.4byte gUnknown_847A8D8
.4byte gUnknown_847A8FA
.4byte gUnknown_847A913
.4byte gUnknown_847A934
gUnknown_843F8F0:: @ 843F8F0 sprite_sheet
obj_tiles gUnknown_843F3F8, 0x0020, 0
obj_tiles gUnknown_843F418, 0x0100, 2
obj_tiles gUnknown_843F518, 0x0100, 3
null_obj_tiles
gUnknown_843F910:: @ 843F910 sprite_palette
obj_pal gUnknown_843F3B8, 0
obj_pal gUnknown_843F3D8, 1
obj_pal gUnknown_8E99F24, 2
obj_pal gUnknown_843F618, 3
null_obj_pal
gUnknown_843F938:: @ 843F938 sprite_sheet
obj_tiles gUnknown_843F638, 0x0800, 5
obj_tiles gUnknown_8E9BD28, 0x1000, 1
obj_tiles gUnknown_8E99F44, 0x0800, 6
obj_tiles gUnknown_8E9A168, 0x1000, 4
gUnknown_843F958:: @ 843F958 data8
.byte 0x00, 0x0c, 0x18, 0x38, 0x44, 0x50, 0x5c, 0x00
gUnknown_843F960::
.4byte 0x00000000, 0x00000c00
gUnknown_843F968:: @ 843F968 sprite_template
spr_template 0, 0, gUnknown_843F960, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8101B20
gUnknown_843F980::
.4byte 0xc0004000, 0x00000400
gUnknown_843F988::
obj_image_anim_frame 0x0000, 0
obj_image_anim_end
gUnknown_843F990::
obj_image_anim_frame 0x0020, 0
obj_image_anim_end
gUnknown_843F998::
obj_image_anim_frame 0x0040, 0
obj_image_anim_end
gUnknown_843F9A0::
obj_image_anim_frame 0x0060, 0
obj_image_anim_end
gUnknown_843F9A8::
.4byte gUnknown_843F988
.4byte gUnknown_843F990
.4byte gUnknown_843F998
.4byte gUnknown_843F9A0
gUnknown_843F9B8:: @ 843F9B8 sprite_template
spr_template 1, 1, gUnknown_843F980, gUnknown_843F9A8, NULL, gDummySpriteAffineAnimTable, sub_8101B20
gUnknown_843F9D0::
.4byte 0xc0004000, 0x00000400
gUnknown_843F9D8::
obj_image_anim_frame 0x0060, 0
obj_image_anim_end
gUnknown_843F9E0::
obj_image_anim_frame 0x0040, 4
obj_image_anim_frame 0x0020, 4
obj_image_anim_end
gUnknown_843F9EC::
obj_image_anim_frame 0x0040, 4
obj_image_anim_frame 0x0000, 4
obj_image_anim_end
gUnknown_843F9F8::
obj_image_anim_frame 0x0040, 4
obj_image_anim_frame 0x0060, 0
obj_image_anim_end
gUnknown_843FA04::
obj_image_anim_frame 0x0040, 4
obj_image_anim_end
gUnknown_843FA0C::
.4byte gUnknown_843F9D8
.4byte gUnknown_843F9E0
.4byte gUnknown_843F9EC
.4byte gUnknown_843F9F8
.4byte gUnknown_843FA04
gUnknown_843FA20:: @ 843FA20 sprite_template
spr_template 4, 2, gUnknown_843F9D0, gUnknown_843FA0C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_843FA38::
.4byte 0xc0000000, 0x00000c00
gUnknown_843FA40:: @ 843FA40 sprite_template
spr_template 6, 2, gUnknown_843FA38, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_843FA58::
.4byte 0x40004000, 0x00000400
gUnknown_843FA60::
.4byte 0x40000000, 0x00000400
gUnknown_843FA68::
obj_image_anim_frame 0x0000, 0
obj_image_anim_end
gUnknown_843FA70::
obj_image_anim_frame 0x0004, 0
obj_image_anim_end
gUnknown_843FA78::
.4byte gUnknown_843FA68
.4byte gUnknown_843FA70
gUnknown_843FA80:: @ 843FA80 sprite_template
spr_template 3, 2, gUnknown_843FA58, gUnknown_843FA78, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_843FA98:: @ 843FA98 sprite_template
spr_template 2, 2, gUnknown_843FA60, gUnknown_843FA78, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+1 -1
View File
@@ -100,7 +100,7 @@ EventScript_GaveSpecialProfile: @ 81BEF3F
end
EventScript_GiveProfile: @ 81BEF5A
setvar VAR_0x8004, 0
setvar VAR_0x8004, EASY_CHAT_TYPE_PROFILE
call Common_ShowEasyChatScreen
lock
faceplayer
+4
View File
@@ -6,6 +6,10 @@
#define EASY_CHAT_TYPE_BATTLE_WON 2
#define EASY_CHAT_TYPE_BATTLE_LOST 3
#define EASY_CHAT_TYPE_MAIL 4
#define EASY_CHAT_TYPE_MAIL_NO_CONFIRM 5
#define EASY_CHAT_TYPE_BARD_SONG 6
#define EASY_CHAT_TYPE_INTERVIEW 7
#define EASY_CHAT_TYPE_TRENDY_PHRASE 9
#define EASY_CHAT_TYPE_QUESTIONNAIRE 14
#define EC_GROUP_POKEMON_2 0x0
+5
View File
@@ -32,4 +32,9 @@ extern const u8 gText_UnionRoomChatKeyboard_Emoji8[];
extern const u8 gText_UnionRoomChatKeyboard_Emoji9[];
extern const u8 gText_UnionRoomChatKeyboard_Emoji10[];
extern const u8 gUnknown_847A8D8[];
extern const u8 gUnknown_847A8FA[];
extern const u8 gUnknown_847A913[];
extern const u8 gUnknown_847A934[];
#endif //GUARD_DATA_8479668_H
+26 -1
View File
@@ -30,7 +30,6 @@ struct EasyChatWordsByLetter
int numWords;
};
void InitEasyChatPhrases(void);
u8 *CopyEasyChatWord(u8 *dest, u16 word);
u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 length1, u16 length2);
bool8 EC_DoesEasyChatStringFitOnLine(const u16 *easyChatWords, u8 columns, u8 rows, u16 maxLength);
@@ -46,5 +45,31 @@ u16 GetNumDisplayedWords(void);
const u8 *GetEasyChatWordGroupName(u8);
u8 *CopyEasyChatWordPadded(u8 *, u16, u16);
void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback);
u8 GetNumDisplayableGroups(void);
bool8 InitEasyChatGraphicsWork(void);
bool8 LoadEasyChatGraphics(void);
void DestroyEasyChatGraphicsResources(void);
void EasyChatInterfaceCommand_Setup(u16 id);
bool8 EasyChatInterfaceCommand_Run(void);
u8 GetEasyChatScreenFrameId(void);
const u8 *GetTitleText(void);
u16 *GetEasyChatWordBuffer(void);
u8 GetNumRows(void);
u8 GetNumColumns(void);
u8 GetMainCursorColumn(void);
u8 GetMainCursorRow(void);
void GetEasyChatInstructionsText(const u8 **str1, const u8 **str2);
void GetEasyChatConfirmText(const u8 **str1, const u8 **str2);
void GetEasyChatConfirmCancelText(const u8 **str1, const u8 **str2);
void GetEasyChatConfirmDeletionText(const u8 **str1, const u8 **str2);
void GetECSelectGroupCursorCoords(u8 *Xp, u8 *Yp);
bool8 IsEasyChatAlphaMode(void);
u8 GetECSelectGroupRowsAbove(void);
void GetECSelectWordCursorCoords(s8 *arg0, s8 *arg1);
u8 GetECSelectWordRowsAbove(void);
u8 GetECSelectWordNumRows(void);
u8 unref_sub_80FFE60(void);
bool32 ShouldDrawECUpArrow(void);
bool32 ShouldDrawECDownArrow(void);
#endif // GUARD_EASY_CHAT_H
+9
View File
@@ -4886,4 +4886,13 @@ extern const u16 gUnknown_8EAFEA0[];
extern const u32 gUnknown_8EAFFC0[];
extern const u32 gUnknown_8EB0ADC[];
// easy_chat_3
extern const u32 gEasyChatWindow_Gfx[];
extern const u32 gEasyChatWindow_Tilemap[];
extern const u32 gEasyChatMode_Pal[];
extern const u16 gUnknown_8E99F24[];
extern const u32 gEasyChatRedRectangularCursor_Tiles[];
extern const u32 gEasyChatSelectGroupHelp_Tiles[];
extern const u32 gEasyChatModeIcons_Tiles[];
#endif //GUARD_GRAPHICS_H
+1
View File
@@ -191,6 +191,7 @@ void sub_8057F70(void);
void sub_8057F48(void);
void SetMainCallback1(MainCallback cb);
void CB1_Overworld(void);
void sub_80568C4(void);
extern u16 gHeldKeyCodeToSend;
+37
View File
@@ -1313,4 +1313,41 @@ extern const u8 gText_QuestLog_CeruleanCave[];
extern const u8 gUnknown_841B69E[];
extern const u8 gUnknown_841B6B9[];
// easy_chat_2
extern const u8 gUnknown_84186D1[];
extern const u8 gUnknown_84186EF[];
extern const u8 gUnknown_8418706[];
extern const u8 gUnknown_8418725[];
extern const u8 gUnknown_8418745[];
extern const u8 gUnknown_8418763[];
extern const u8 gUnknown_8418780[];
extern const u8 gUnknown_841879E[];
extern const u8 gUnknown_84187B2[];
extern const u8 gUnknown_84187D1[];
extern const u8 gUnknown_84187EE[];
extern const u8 gUnknown_841880E[];
extern const u8 gUnknown_841881B[];
extern const u8 gUnknown_841883E[];
extern const u8 gUnknown_841885F[];
extern const u8 gUnknown_8418881[];
extern const u8 gUnknown_841888C[];
extern const u8 gUnknown_84188AC[];
extern const u8 gUnknown_84188B9[];
extern const u8 gUnknown_84188D6[];
extern const u8 gUnknown_84188F0[];
extern const u8 gUnknown_8418902[];
extern const u8 gUnknown_8418937[];
extern const u8 gUnknown_8418956[];
extern const u8 gUnknown_84189E0[];
extern const u8 gUnknown_84189EE[];
extern const u8 gUnknown_8418A2B[];
extern const u8 gUnknown_8418A33[];
extern const u8 gUnknown_8418A4A[];
extern const u8 gUnknown_8418A61[];
extern const u8 gUnknown_8418A77[];
extern const u8 gUnknown_8418A87[];
extern const u8 gUnknown_8418AA1[];
extern const u8 gUnknown_8418AB2[];
extern const u8 gUnknown_841EE2B[];
#endif //GUARD_STRINGS_H
+4 -2
View File
@@ -226,7 +226,8 @@ SECTIONS {
src/link_rfu_2.o(.text);
src/link_rfu_3.o(.text);
src/AgbRfu_LinkManager.o(.text);
asm/easy_chat_2.o(.text);
src/easy_chat_2.o(.text);
src/easy_chat_3.o(.text);
src/pokedex_screen.o(.text);
asm/pokedex_screen.o(.text);
src/list_menu.o(.text);
@@ -517,7 +518,8 @@ SECTIONS {
src/map_preview_screen.o(.rodata);
src/link_rfu_2.o(.rodata);
src/link_rfu_3.o(.rodata);
data/easy_chat_2.o(.rodata);
src/easy_chat_2.o(.rodata);
src/easy_chat_3.o(.rodata);
src/pokedex_screen.o(.rodata);
data/pokedex_screen.o(.rodata);
src/list_menu.o(.rodata);
+2 -2
View File
@@ -131,7 +131,7 @@ static void Task_HandleYesNoMenu(u8 taskId)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case -1:
case MENU_B_PRESSED:
case 1:
PlaySE(SE_SELECT);
break;
@@ -142,7 +142,7 @@ static void Task_HandleYesNoMenu(u8 taskId)
CopyWindowToVram(1, 3);
ClearSaveData();
break;
case -2:
case MENU_NOTHING_CHOSEN:
default:
return;
}
+1363
View File
File diff suppressed because it is too large Load Diff
+2298
View File
File diff suppressed because it is too large Load Diff
+6 -6
View File
@@ -1215,13 +1215,13 @@ const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp.
const u16 gHoennTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star_em.gbapal");
const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_em.4bpp.lz");
const u16 gUnknown_8E99D8C[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal");
const u32 gUnknown_8E99DAC[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz");
const u32 gUnknown_8E99E74[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz");
const u16 gEasyChatMode_Pal[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal");
const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz");
const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz");
const u16 gUnknown_8E99F24[] = INCBIN_U16("graphics/link_rfu/unk_8E9A168.gbapal");
const u32 gUnknown_8E99F44[] = INCBIN_U32("graphics/link_rfu/unk_8E99F44.4bpp.lz");
const u32 gUnknown_8E9A168[] = INCBIN_U32("graphics/link_rfu/unk_8E9A168.4bpp.lz");
const u32 gEasyChatSelectGroupHelp_Tiles[] = INCBIN_U32("graphics/link_rfu/unk_8E99F44.4bpp.lz");
const u32 gEasyChatModeIcons_Tiles[] = INCBIN_U32("graphics/link_rfu/unk_8E9A168.4bpp.lz");
const u32 gUnknown_8E9A460[] = INCBIN_U32("graphics/interface/trainer_memo.4bpp.lz");
const u32 gUnknown_8E9B310[] = INCBIN_U32("graphics/interface/trainer_memo_pal1.gbapal");
@@ -1240,7 +1240,7 @@ const u32 gUnknown_8E9BBCC[] = INCBIN_U32("graphics/interface/trainer_memo_5.bin
const u16 gUnknown_8E9BD08[] = INCBIN_U16("graphics/unknown/unknown_E9BD08.gbapal"); // might be an alternate unused palette of the link_rfu gfx below.
const u32 gUnknown_8E9BD28[] = INCBIN_U32("graphics/interface/link_rfu_frame.4bpp.lz");
const u32 gEasyChatRedRectangularCursor_Tiles[] = INCBIN_U32("graphics/interface/link_rfu_frame.4bpp.lz");
const u16 gUnknown_8E9BF28[] = INCBIN_U16("graphics/interface/link_rfu_frame.gbapal");
const u32 gUnknown_8E9BF48[] = INCBIN_U32("graphics/interface/link_rfu_status.4bpp.lz");
+3 -8
View File
@@ -314,14 +314,9 @@ gUnknown_203998C: @ 203998C
.align 2
.include "src/link_rfu_3.o"
.align 2
@ .include "src/easy_chat_2.o"
gUnknown_203ACE8: @ 203ACE8
.space 0x4
gUnknown_203ACEC: @ 203ACEC
.space 0x4
.include "src/easy_chat_2.o"
.align 2
.include "src/easy_chat_3.o"
.align 2
.include "src/pokedex_screen.o"
.align 2