Pokemon Center | 口袋中心 以口袋妖怪为主题并带有其他动漫游戏的讨论

 找回密码
 加入口袋中心
搜索
查看: 8030|回复: 10

JZW 2016未发布的一些改版代码【原创】

[复制链接]

3369

回帖

552

现金

485

勋章券

超级版主

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
22136
QQ

时光印记Lv.3挥金如土勋章水中王者勋章Lv3Omega红宝石发售确认纪念章Alpha蓝宝石发售确认纪念章金银好CP-Ho-oh/LUGIA【里】金银好CP-Ho-oh/LUGIA【真·正常向】异化型LUGIA【M超梦版】

发表于 2018-11-16 16:33:31 | 显示全部楼层 |阅读模式
本帖最后由 jiangzhengwenjz 于 2018-11-18 06:08 编辑

时间过得真快,今天把2年前做的一些东西拿出来共享下,不过由于是从project里直接拉出来的所以很多不能编译。想要应用的朋友拿出你的实力吧,稍加改动或是添加素材即可。阅读需相当的ASM与C知识,以及改版经验!
禁止将代码用于你发布的ROM!    转载请注明原贴!

1. minihack: 道具型“训练师卡片”:
一个很有意思的程序,只需让道具数据指向它即可。火红的这个系统多次malloc后会crash,用init_malloc()来解决。不过现在看来也许是没有free()?也懒得去看了
  1. .thumb
  2. .global p_trainer_function
  3. p_trainer_function:
  4. push {r4, lr}
  5. mov r4, r0
  6. ldr r1, =0x3005090
  7. lsl r0, r4, #2
  8. add r0, r0, r4
  9. lsl r0, r0, #3
  10. add r0, r0, r1
  11. ldrh r0, [r0, #0xe]
  12. bl trainer_card_modified
  13. mov r0, r4
  14. ldr r1, =task_del
  15. bl bx_r1
  16. pop {r4, pc}

  17. trainer_card_modified:
  18. push {r4, lr}
  19. mov r4, r0
  20. ldr r0, =0x2037AB8
  21. ldrb r1, [r0, #7]
  22. mov r0, #0x80
  23. and r0, r1
  24. cmp r0, #0
  25. beq real
  26. mov r0, #0
  27. pop {r4, pc}

  28. real:
  29. ldr r1, =0x807B005
  30. bl bx_r1
  31. cmp r4, #0
  32. bne backtoow
  33. ldr r0, =backtobagfunc+1
  34. b mainhandler

  35. backtoow:
  36. ldr r0, =backtoowfunc+1

  37. mainhandler:
  38. ldr r1, =0x808B699
  39. bl bx_r1
  40. pop {r4, pc}
  41. .ltorg

  42. backtobagfunc:
  43. push {lr}
  44. ldr r0, =0x2000000
  45. ldr r1, =0x1c000
  46. ldr r2, =0x8002B81
  47. bl bx_r2
  48. ldr r1, =0x8107EB9
  49. bl bx_r1
  50. pop {pc}
  51. .ltorg

  52. backtoowfunc:
  53. push {lr}
  54. ldr r0, =0x2000000
  55. ldr r1, =0x1c000
  56. ldr r2, =0x8002B81
  57. bl bx_r2
  58. ldr r1, =0x80567DD
  59. bl bx_r1
  60. pop {pc}
  61. .ltorg

  62. bx_r1: bx r1
  63. bx_r2: bx r2
复制代码
2. 新型钓鱼系统:
挺复杂的一个连续回调系统,选择不同的钓饵,但是并没有做相应的遇怪系统(虽然很简单)。主逻辑用C解决
  1. ;fish hack
  2. .org 0x805D30C
  3. ldr r1, =ultrarod_task_hook|1
  4. bx r1
  5. .pool
  6. .org 0x805D350
  7. ldr r0, =ultrarod_chooser_hook|1
  8. bx r0
  9. .pool
复制代码
  1. /*hook via r1 at 0x805D30C*/
  2. .global ultrarod_task_hook
  3. .global ultrarod_chooser_hook
  4. ultrarod_task_hook:
  5. ldr r2, =0x3005090
  6. lsl r1, r0, #2
  7. add r1, r1, r0
  8. lsl r1, r1, #3
  9. add r4, r1, r2
  10. ldrh r0, [r4, #0x26]
  11. cmp r0, #3
  12. bne normal_fishing
  13. ldr r0, =task_bait_choose+1
  14. ldr r3, =task_find_id_by_funcptr
  15. bl bx_r3
  16. cmp r0, #0xFF
  17. bne bait_choosing

  18. normal_fishing:
  19. ldr r0, =0x805D317
  20. bx r0

  21. bait_choosing:
  22. pop {r4, r5, pc}
  23. .ltorg

  24. /*hook via r0 at 0x805D350*/
  25. ultrarod_chooser_hook:
  26. ldrh r0, [r4, #0x26]
  27. cmp r0, #3
  28. bne back
  29. ldr r0, =task_bait_choose+1
  30. mov r1, #0x50
  31. ldr r3, =task_add
  32. bl bx_r3
  33. mov r0, #0

  34. back:
  35. pop {r4, pc}
  36. .ltorg

  37. bx_r3: bx r3
复制代码
  1. #include <funcs.h>
  2. #define bait_index_start 0x63

  3. void stringnospecifiedbait_print(void);
  4. void baitpalfade(u8 mode);
  5. extern const unsigned int MugBoxTileTiles[72];
  6. extern const unsigned int MugBoxTilePal[8];
  7. extern struct oam oam32x32_prio0;
  8. extern struct image_frame* anim_null_ptr;
  9. extern struct image_frame* anim_flip_ptr;
  10. extern struct rotscale * rotscale_null_ptr;
  11. extern u16* char_name_rbox_draw_rectangle_around;
  12. extern u16* pal_rbox_draw_rectangle_around;
  13. extern void**image_buffer_ptr;
  14. extern void**image_buffer_ptr2;
  15. extern struct task *tasks;
  16. extern struct superstate*super;
  17. extern struct obj*objects;
  18. const struct rbox_short bait_boxes[] __attribute__((aligned(4))) = {
  19.         {0,3,5,3,3,0xF,0x38},
  20.         {0,10,5,3,3,0xF,0x38},
  21.         {0,17,5,3,3,0xF,0x38},
  22.         {0,24,5,3,3,0xF,0x38},
  23.         {0,3,0xD,24,4,0xF,0x41}
  24. };

  25. const struct objtemplate bait_templates[] __attribute__((aligned(4))) = {
  26.         {0x1600,0x1600,&oam32x32_prio0,&anim_null_ptr,(void*)0,&rotscale_null_ptr,objc_nullsub},
  27.         {0x1601,0x1601,&oam32x32_prio0,&anim_null_ptr,(void*)0,&rotscale_null_ptr,objc_nullsub},
  28.         {0x1602,0x1602,&oam32x32_prio0,&anim_null_ptr,(void*)0,&rotscale_null_ptr,objc_nullsub},
  29.         {0x1603,0x1603,&oam32x32_prio0,&anim_null_ptr,(void*)0,&rotscale_null_ptr,objc_nullsub}
  30. };

  31. const char stringchoosebait[] = {
  32.         0x0B, 0x0D, 0x0E, 0x8A, 0x10, 0x06, 0x0F, 0x0B, 0x10, 0xA7, 0x03, 0x3D, 0x03, 0xA1, 0x37, 0xFF
  33. };

  34. const char stringnospecifiedbait[] = {
  35.         0x09, 0x53, 0x0F, 0x7E, 0x10, 0x55, 0x10, 0xA7, 0x03, 0x3D, 0x03, 0xA1, 0x07, 0x7D, 0x02, 0x51, 0x0B, 0xF1, 0x03, 0x2A, 0x3B, 0xFE, 0x09, 0xD9, 0x10, 0x59, 0x0F, 0x24, 0x0D, 0x70, 0x07, 0xE3, 0x03, 0x3D, 0x04, 0x37, 0x07, 0x7D, 0x09, 0xD2, 0x03, 0x3D, 0x03, 0x04, 0x0F, 0x91, 0x08, 0x9E, 0x3D, 0xFF
  36. };
  37. extern u8 Bait1Tiles;
  38. extern u8 Bait2Tiles;
  39. extern u8 Bait3Tiles;
  40. extern u8 Bait4Tiles;
  41. extern u8 Bait1Pal;
  42. extern u8 Bait2Pal;
  43. extern u8 Bait3Pal;
  44. extern u8 Bait4Pal;
  45. const void* baitimagepointers[] __attribute__((aligned(4))) = {
  46.         &Bait1Tiles,
  47.         &Bait2Tiles,
  48.         &Bait3Tiles,
  49.         &Bait4Tiles
  50. };

  51. const struct pal_graphic baitpalette[] __attribute__((aligned(4))) = {
  52.         {&Bait1Pal,0x1600,0},
  53.         {&Bait2Pal,0x1601,0},
  54.         {&Bait3Pal,0x1602,0},
  55.         {&Bait4Pal,0x1603,0}
  56. };

  57. void task_bait_choose(u8 task_id)
  58. {
  59.         int i;
  60.         u8 rboxid;
  61.         struct graphic temp;
  62.         switch ((tasks+task_id)->priv[0])
  63.         {
  64.                 case 0:
  65.                 gpu_copy_to_tileset(0,MugBoxTileTiles,0x120,0x21D);
  66.                 gpu_pal_apply(MugBoxTilePal,0xD0,0x20);
  67.                 gpu_pal_apply((u16*)0x8471DEC,0xF0,0x20);
  68.                 for (i = 0; i < 4; i++)
  69.                 {
  70.                         rboxid = rbox_spawn(bait_boxes+i);
  71.                         (tasks+task_id)->priv[1+i] = rboxid;
  72.                         rboxid_bg_prepare(rboxid);
  73.                         *char_name_rbox_draw_rectangle_around = 0x21D;
  74.                         *pal_rbox_draw_rectangle_around = 0xD;
  75.                         rboxid_unpack_and_call(rboxid,rbox_draw_rectangle_around);
  76.                         rboxid_fill_pixels(rboxid,0x11);//white
  77.                         rboxid_bg_prepare(rboxid);
  78.                         rboxid_upload_and_tilemap_send(rboxid,3);
  79.                 }
  80.                 rboxid = rbox_spawn(bait_boxes+4);
  81.                 (tasks+task_id)->priv[5] = rboxid;
  82.                 rboxid_bg_prepare(rboxid);
  83.                 *char_name_rbox_draw_rectangle_around = 0x21D;
  84.                 *pal_rbox_draw_rectangle_around = 0xD;
  85.                 rboxid_unpack_and_call(rboxid,rbox_draw_rectangle_around);
  86.                 rboxid_fill_pixels(rboxid,0x11);//white
  87.                 rboxid_bg_prepare(rboxid);
  88.                 rboxid_upload_and_tilemap_send(rboxid,3);
  89.                 rboxid_print(rboxid,2,stringchoosebait,48,9,0,0);
  90.                 bgid_mark_for_sync(0);
  91.                 break;
  92.                 case 1:
  93.                 item_image_expand_buffer_malloc();
  94.                 for (i = 0; i < 4; ++i)
  95.                 {
  96.                         LZ77UnCompWram(baitimagepointers[i],*image_buffer_ptr);
  97.                         item_24x24_to_32x32(*image_buffer_ptr,*image_buffer_ptr2);
  98.                         temp.img = *image_buffer_ptr2;
  99.                         temp.size = 0x200;
  100.                         temp.tag = 0x1600+i;
  101.                         gpu_tile_obj_alloc_tag_and_upload(&temp);
  102.                         gpu_pal_obj_alloc_tag_and_apply_2(baitpalette+i);
  103.                         (tasks+task_id)->priv[6+i] = template_instanciate_forward_search(bait_templates+i,40+i*56,56,0);
  104.                 }
  105.                 free(*image_buffer_ptr);
  106.                 free(*image_buffer_ptr2);
  107.                 baitpalfade(0);
  108.                 break;
  109.                 case 2:
  110.                 if(super->buttons3_new_remapped != 1) //not A
  111.                 {
  112.                         if(super->buttons3_new_remapped == 0) //no buttons
  113.                                 return;
  114.                         if(super->buttons3_new_remapped == 0x10) //RIGHT
  115.                         {
  116.                                 if((tasks+task_id)->priv[10] == 3)
  117.                                         return;
  118.                                 else
  119.                                 {
  120.                                         ++(tasks+task_id)->priv[10];
  121.                                         baitpalfade((tasks+task_id)->priv[10]);
  122.                                         return;
  123.                                 }
  124.                         }
  125.                         else if(super->buttons3_new_remapped == 0x20) //LEFT
  126.                         {
  127.                                 if((tasks+task_id)->priv[10] == 0)
  128.                                         return;
  129.                                 else
  130.                                 {
  131.                                         --(tasks+task_id)->priv[10];
  132.                                         baitpalfade((tasks+task_id)->priv[10]);
  133.                                         return;
  134.                                 }
  135.                         }
  136.                         return;
  137.                 }
  138.                 else break;
  139.                 case 3:
  140.                 for (i=0; i<4; ++i)
  141.                 {       
  142.                         rboxid_80040B8((tasks+task_id)->priv[1+i]);
  143.                         pal_fade_1(0x100+(gpu_pal_tags_index_of(0x1600+i) << 4),16,0,0);
  144.                         obj_delete_and_free_associated_resources(objects+(tasks+task_id)->priv[6+i]);
  145.                         rboxid_flush((tasks+task_id)->priv[1+i],1);
  146.                         rboxid_upload_and_tilemap_send((tasks+task_id)->priv[1+i],2);
  147.                         rboxid_free((tasks+task_id)->priv[1+i]);
  148.                 }
  149.                 rboxid_80040B8((tasks+task_id)->priv[5]);
  150.                 rboxid_flush((tasks+task_id)->priv[5],1);
  151.                 rboxid_upload_and_tilemap_send((tasks+task_id)->priv[5],2);
  152.                 rboxid_free((tasks+task_id)->priv[5]);
  153.                 break;
  154.                 case 4:
  155.                 if(!check_item_2(bait_index_start+(tasks+task_id)->priv[10],1))
  156.                 {
  157.                         stringnospecifiedbait_print();
  158.                         break;
  159.                 }
  160.                 else
  161.                 {       
  162.                         bag_remove_item(bait_index_start+(tasks+task_id)->priv[10],1);
  163.                         task_del(task_id);
  164.                         return;
  165.                 }
  166.                 case 5:
  167.                 if(super->buttons3_new_remapped&1 || super->buttons3_new_remapped&2)
  168.                 {       
  169.                         (tasks+task_find_id_by_funcptr(0x805D305))->priv[0]=0xF;//goto fishF
  170.                         task_del(task_id);
  171.                 }
  172.                 else return;
  173.                 default:
  174.                 break;
  175.         }
  176.         ++(tasks+task_id)->priv[0];
  177.         return;
  178. }

  179. void stringnospecifiedbait_print()
  180. {
  181.         box_border_curve_load_tiles_and_pal(0,1);
  182.         rboxid_fill_pixels(0,0x11);
  183.         rboxid_print(0,2,stringnospecifiedbait,1,1,0,0);
  184.         return;
  185. }

  186. void baitpalfade(u8 mode)
  187. {
  188.         if(mode!=0)
  189.                 pal_fade_1(0x100+(gpu_pal_tags_index_of(0x1600) << 4),16,12,0);
  190.         else
  191.                 pal_fade_1(0x100+(gpu_pal_tags_index_of(0x1600) << 4),16,0,0);
  192.         if(mode!=1)
  193.                 pal_fade_1(0x100+(gpu_pal_tags_index_of(0x1601) << 4),16,12,0);
  194.         else
  195.                 pal_fade_1(0x100+(gpu_pal_tags_index_of(0x1601) << 4),16,0,0);
  196.         if(mode!=2)
  197.                 pal_fade_1(0x100+(gpu_pal_tags_index_of(0x1602) << 4),16,12,0);
  198.         else
  199.                 pal_fade_1(0x100+(gpu_pal_tags_index_of(0x1602) << 4),16,0,0);
  200.         if(mode!=3)
  201.                 pal_fade_1(0x100+(gpu_pal_tags_index_of(0x1603) << 4),16,12,0);
  202.         else
  203.                 pal_fade_1(0x100+(gpu_pal_tags_index_of(0x1603) << 4),16,0,0);
  204.         return;
  205. }
复制代码
3. 对战前动画,以及多向滑动背景
  1. .org 0x807FF90
  2. ldr r0, =pre_battle_anim_load_type+1
  3. bx r0
  4. .pool

  5. .org 0x80D0A58
  6. .word pre_battle_anim_type_functions

  7. .org 0x80D0A88
  8. .word pre_battle_anim_type_functions

  9. .org 0x80D09E8
  10. .word pre_battle_anim_fade_functions

  11. .org 0x80D0A20
  12. .word pre_battle_anim_fade_functions
复制代码
  1. #include <funcs.h>
  2. u16* char_name_rbox_draw_rectangle_around = (u16*)0x203ADF0;
  3. u16* pal_rbox_draw_rectangle_around = (u16*)0x203ADF2;
  4. void**image_buffer_ptr = (void**)0x2039884;
  5. void**image_buffer_ptr2 = (void**)0x2039888;
  6. struct task *tasks = (struct task*)0x3005090;
  7. struct superstate*super = (struct superstate*)0x30030F0;
  8. struct obj*objects = (struct obj*)0x202063C;
  9. vu16 *VCOUNT = (vu16*)0x4000006;
  10. vu16 *BG0HOFS = (vu16*)0x4000010;
  11. u16* var_8000 = (u16*)0x20370B8;
  12. u16* var_8001 = (u16*)0x20370BA;
  13. u16* var_8002 = (u16*)0x20370BC;
  14. u16* var_8003 = (u16*)0x20370BE;
  15. u16* var_8004 = (u16*)0x20370C0;
  16. u16* var_8005 = (u16*)0x20370C2;
  17. u16* var_8006 = (u16*)0x20370C4;
  18. u16* var_8007 = (u16*)0x20370C6;
  19. u16* var_800A = (u16*)0x20370CC;
  20. u16* var_800B = (u16*)0x20370CE;
复制代码
  1. /* Generated by BIN2S - please don't edit directly */
  2.         .section .rodata
  3.         .balign 4
  4.         .global x3tm_LZ_bin_size
  5.         .global x3tm_LZ_bin
  6. x3tm_LZ_bin:
  7.         .byte  16,  0,  5,  0, 63,  0,240,240,  1,240,  1,240,  1,240,  1,240
  8.         .byte   1,240,  1,224,240,  1,240,  1, 16,  1,  3,240,  4,240,  5,  0
  9.         .byte 240,  6,240,  6,244,  5,244,  4, 14,244,  3,244,  0, 80,  1,240
  10.         .byte  43,224,  1,  7,  2,240,  8,240,  9,240,  1, 48,  1,244,131, 16
  11.         .byte   1,  9,244,  8,244,  7,240, 63,240,  1,142,  0,  1, 10,240, 11
  12.         .byte  80, 59, 96, 63, 16,  1, 11, 51,244, 10,240, 63,240,  1,240, 13
  13.         .byte 144, 61,128, 63, 24,  1,244, 13,240, 63,224,  1, 14,240, 15,198
  14.         .byte 240, 63, 64,  1, 15,244, 14,240, 63,192,  1, 16,198,176, 61,160
  15.         .byte  63,  1,244, 16,240, 63,192,  1, 17,128,128, 59, 36,240, 37,240
  16.         .byte  37,244, 36,177,128, 63, 17,240, 63,192,  1, 18,240, 19, 96,  1
  17.         .byte   0, 38,240, 39,240, 39,244, 38,244, 88, 19, 96,  1, 18,240, 63
  18.         .byte 192,  1, 20,240, 21,128, 96,  1, 40,240, 41,240, 41,244, 40, 44
  19.         .byte 244, 21, 96,  1, 20,240, 63,192,  1, 22,240, 64,  2, 96,  1, 42
  20.         .byte 240, 43,240, 43,244, 22, 42,244,  2, 96,  1, 22,240, 63,192,  1
  21.         .byte  23,227,128, 63, 32,  1,128, 61,  2,244, 23,240, 63,192,  1, 24
  22.         .byte  24,240, 25,240, 63, 64,  1, 25,244, 24,219,240, 63,224,  1, 26
  23.         .byte 240, 63, 64,  1, 26,242, 63,240,  1, 12,240, 27,240, 28,240, 63
  24.         .byte   0,  1, 28,244,112, 27,240, 63,240,  1,  0,  1, 29,240, 30,240
  25.         .byte  65, 31,160, 63, 31,244, 30,244, 29,243,129,192,240,  1, 96,  1
  26.         .byte  32,240, 33,240, 34,240,  0, 35,240, 35,244, 34,244, 33,244,127
  27.         .byte  32,115,191,240, 63,240,  1,240,  1,240,  1,240,  1,240,  1,192
  28.         .byte 240,  1,240,  1,240,  0,  0,  0

  29.         .global x3tm_LZ_bin_end
  30. x3tm_LZ_bin_end:

  31.         .align
  32. x3tm_LZ_bin_size: .int 344
复制代码
  1. .global pre_battle_anim_type_x12_functions
  2. pre_battle_anim_type_x12_functions:
  3. .word pre_battle_anim_type_x12_func1+1
  4. .word pre_battle_anim_type_x12_func2+1
复制代码
  1. #include <funcs.h>
  2. extern u8 x3tm_LZ_bin;
  3. extern struct task *tasks;
  4. void pre_battle_anim_type_x12_hblank(void);
  5. void pre_battle_anim_type_x12_helper(u8 task_id);
  6. extern vu16 *VCOUNT;
  7. extern vu16 *BG0HOFS;
  8. u8 pre_battle_anim_type_x12_func1(struct task*task_addr)
  9. {
  10.         reg_ie_orr(2);
  11.         hblank_handler_set(pre_battle_anim_type_x12_hblank+1);
  12.         decompress_with_fallback(0,&x3tm_LZ_bin,0,0,1);
  13.         gpu_copy_to_tileset(0,0x83F87A0,0x580,0);
  14.         task_addr->priv[0]++;
  15.         gpu_pal_apply(0x83FA638,0xf0,0x20);
  16.         tasks[task_add(pre_battle_anim_type_x12_helper+1,0x50)].priv[0]=56;
  17.         return 0;
  18. }

  19. u8 pre_battle_anim_type_x12_func2(struct task*task_addr)
  20. {
  21.         u8 x;
  22.         x = task_find_id_by_funcptr(pre_battle_anim_type_x12_helper+1);
  23.         if (x != 0xFF)
  24.                 return 0;
  25.         else
  26.         {
  27.                 if(task_addr->priv[1] <= 0x10)
  28.                 {
  29.                         pal_fade_1(0xf0,16,task_addr->priv[1],0x7fff);
  30.                         task_addr->priv[1]+=2;
  31.                         return 0;
  32.                 }
  33.                 else
  34.                 {       
  35.                         if(task_addr->priv[1] <= 0x18)
  36.                         {
  37.                                 task_addr->priv[1]+=2;
  38.                                 return 0;
  39.                         }
  40.                         else
  41.                         {       
  42.                                 pal_0_fade(0xFFFFFFFF,0x10,0);
  43.                                 task_del(task_find_id_by_funcptr(task_addr->fptr));
  44.                         }
  45.                 }
  46.         }
  47.         return 0;
  48. }

  49. void pre_battle_anim_type_x12_hblank()
  50. {
  51.         u8 i;
  52.         u16 j,k;
  53.         i = task_find_id_by_funcptr(pre_battle_anim_type_x12_helper+1);
  54.         if (i == 0xFF)
  55.         {
  56.                 hblank_handler_set((void*)0);
  57.                 return;
  58.         }
  59.         else
  60.         {
  61.                 j = *VCOUNT;
  62.                 k = tasks[i].priv[0];
  63.                 if(j <= 49)
  64.                         *BG0HOFS = k;
  65.                 else
  66.                         if(j <= 79)
  67.                                 *BG0HOFS = 256-k;
  68.                         else
  69.                                 if(j <= 109)
  70.                                         *BG0HOFS = k;
  71.                                 else
  72.                                         *BG0HOFS = 256-k;
  73.         }
  74.         return;
  75. }

  76. void pre_battle_anim_type_x12_helper(u8 task_id)
  77. {
  78.         u16 i;
  79.         i = tasks[task_id].priv[0];
  80.         if(i)
  81.                 tasks[task_id].priv[0]-=4;
  82.         else
  83.                 task_del(task_id);
  84.         return;
  85. }
复制代码
  1. .thumb
  2. .global pre_battle_anim_type_x12
  3. pre_battle_anim_type_x12:
  4. push {lr}
  5. lsl r0, r0, #0x18
  6. lsr r0, r0, #0x18
  7. ldr r2, =0x3005090
  8. lsl r1, r0, #2
  9. add r1, r1, r0
  10. lsl r1, r1, #3
  11. add r1, r1, r2
  12. mov r2, #0
  13. strh r2, [r1, #0x26]
  14. bl mainsub_x12
  15. pop {pc}
  16. .ltorg

  17. mainsub_x12:
  18. push {r4, r5, lr}
  19. lsl r0, r0, #0x18
  20. lsr r0, r0, #0x18
  21. ldr r5, =pre_battle_anim_type_x12_functions
  22. ldr r2, =0x3005090
  23. lsl r1, r0, #2
  24. add r1, r1, r0
  25. lsl r1, r1, #3
  26. add r4, r1, r2

  27. loc_loop:
  28. mov r1, #8
  29. ldrsh r0, [r4, r1]
  30. lsl r0, r0, #2
  31. add r0, r0, r5
  32. ldr r1, [r0]
  33. mov r0, r4
  34. bl bx_r1
  35. lsl r0, r0, #0x18
  36. cmp r0, #0
  37. bne loc_loop
  38. pop {r4, r5, pc}

  39. bx_r1:
  40. bx r1
复制代码
  1. .thumb
  2. .global pre_battle_anim_load_type
  3. @hook via r0 at 0x807FF90
  4. pre_battle_anim_load_type:
  5. ldrb r2, [r4, #3]
  6. cmp r2, #0
  7. beq normal
  8. mov r0, r2
  9. pop {r4-r6, pc}

  10. normal:
  11. ldrh r2, [r4]
  12. lsl r0, r2, #2
  13. add r0, r0, r2
  14. lsl r0, r0, #3
  15. add r0, r0, r1
  16. ldr r1, =0x807ff9b
  17. bx r1
  18. .ltorg
复制代码
  1. .global pre_battle_anim_type_functions
  2. pre_battle_anim_type_functions:
  3. .word 0x080D0ADD

  4. .word 0x080D0BD5

  5. .word 0x080D0D55

  6. .word 0x080D0EE5

  7. .word 0x080D13C9

  8. .word 0x080D1639

  9. .word 0x080D1B59

  10. .word 0x080D1D2D

  11. .word 0x080D316D

  12. .word 0x080D33ED

  13. .word 0x080D3819

  14. .word 0x080D3929

  15. .word 0x080D2769

  16. .word 0x080D2789

  17. .word 0x080D27A9

  18. .word 0x080D27C9

  19. .word 0x080D27E9

  20. .word 0x080D1F2D

  21. .word pre_battle_anim_type_x12+1
复制代码
  1. .global pre_battle_anim_fade_functions
  2. pre_battle_anim_fade_functions:
  3. .word 0x080D0A8D

  4. .word 0x080D0A8D

  5. .word 0x080D0A8D

  6. .word 0x080D0A8D

  7. .word 0x080D0A8D

  8. .word 0x080D0A8D

  9. .word 0x080D0A8D

  10. .word 0x080D0A8D

  11. .word 0x080D0A8D

  12. .word 0x080D0A8D

  13. .word 0x080D0A8D

  14. .word 0x080D0A8D

  15. .word 0x080D0A8D

  16. .word 0x080D0A8D

  17. .word 0x080D0A8D

  18. .word 0x080D0A8D

  19. .word 0x080D0A8D

  20. .word 0x080D0A8D

  21. .word 0x080D0A8D
复制代码
回复

使用道具 举报

3369

回帖

552

现金

485

勋章券

超级版主

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
22136
QQ

时光印记Lv.3挥金如土勋章水中王者勋章Lv3Omega红宝石发售确认纪念章Alpha蓝宝石发售确认纪念章金银好CP-Ho-oh/LUGIA【里】金银好CP-Ho-oh/LUGIA【真·正常向】异化型LUGIA【M超梦版】

 楼主| 发表于 2018-11-16 16:43:26 | 显示全部楼层
本帖最后由 jiangzhengwenjz 于 2018-11-18 05:47 编辑

函数地址:
游客,如果您要查看本帖隐藏内容请回复


感谢knizz和strange_kid
回复 支持 反对

使用道具 举报

9

回帖

37

现金

0

勋章券

口袋学堂外的努力

Rank: 2Rank: 2

积分
19
发表于 2018-11-18 12:51:42 来自手机 | 显示全部楼层
不懂帮顶                  
回复 支持 反对

使用道具 举报

26

回帖

121

现金

0

勋章券

新伙伴的欢笑

Rank: 3

积分
69
发表于 2019-1-27 15:29:31 | 显示全部楼层
不动帮顶
回复 支持 反对

使用道具 举报

16

回帖

79

现金

0

勋章券

口袋学堂外的努力

Rank: 2Rank: 2

积分
45
发表于 2019-4-25 23:36:59 | 显示全部楼层
进来看看……
回复 支持 反对

使用道具 举报

73

回帖

31

现金

0

勋章券

离开家乡的彷徨

Rank: 4Rank: 4

积分
136

山男大叔No.283-284溜溜糖球一家

发表于 2019-5-4 16:24:17 来自手机 | 显示全部楼层
好高深……不懂帮顶
回复 支持 反对

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

发表于 2019-7-23 11:00:36 | 显示全部楼层
非常感谢聚聚分享!
想研究ASM也挺久了,奈何一直找不到源码参照
顺便查看一下隐藏的函数地址
业余改版爱好者
回复 支持 反对

使用道具 举报

8

回帖

32

现金

0

勋章券

口袋学堂外的努力

Rank: 2Rank: 2

积分
16
发表于 2020-6-3 07:45:00 来自手机 | 显示全部楼层
非常谢谢聚聚
回复 支持 反对

使用道具 举报

12

回帖

48

现金

0

勋章券

口袋学堂外的努力

Rank: 2Rank: 2

积分
24
发表于 2021-1-15 19:58:37 来自手机 | 显示全部楼层
好东西!看不懂……
回复 支持 反对

使用道具 举报

100

回帖

699

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
372

时光印记Lv.1

发表于 2021-2-11 19:02:42 来自手机 | 显示全部楼层
看看函数地址
回复 支持 反对

使用道具 举报

52

回帖

208

现金

0

勋章券

新伙伴的欢笑

Rank: 3

积分
94
发表于 2021-6-21 16:28:32 | 显示全部楼层
路过回复一下,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入口袋中心

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2024-11-21 23:54 , Processed in 0.124332 second(s), 73 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表