Advertisement
blurose

master berry script command

Oct 26th, 2022
956
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.61 KB | None | 0 0
  1. // hooks:  arm9 ScrCmd_master_berry_command 080489CC 1
  2. // alternatively can use a routinepointers entry
  3.  
  4. u32 ScrCmd_master_berry_command(SCRIPTCONTEXT *ctx)
  5. {
  6.     //u16 *var_x800D = GetVarPointer(ctx->fsys, 0x800D); // grab the event id
  7.     u16 *var_x8004 = GetVarPointer(ctx->fsys, 0x8004);
  8.     u16 *var_x8005 = GetVarPointer(ctx->fsys, 0x8005);
  9.     u16 *var_x8006 = GetVarPointer(ctx->fsys, 0x8006);
  10.  
  11.     //LocalMapObject *object = GetMapObjectByID(ctx->fsys->mapObjectMan, *var_x800D);
  12.     //u16 tag = MapObject_GetGfxID(object);
  13.  
  14.     //u32 tag = ctx->fsys->map_events->object_events[*var_x800D].ovid;
  15.    
  16.     LocalMapObject **lastTalked = FieldSysGetAttrAddr(ctx->fsys, 10);
  17.     u32 tag = MapObject_GetGfxID(*lastTalked);
  18.  
  19. #ifdef DEBUG_BERRY_TREES
  20.     *((u32 *)(0x023DF00C)) = tag;
  21. #endif
  22.  
  23.     u32 sw = ScriptReadByte(ctx);
  24.     u32 arg0 = ScriptReadHalfword(ctx);
  25.  
  26.     if (tag < 0x8000) { return FALSE; }
  27.  
  28.     tag &= 0x3FFF;
  29.  
  30.     // so now tag is currently the berry spot id.  we grab the misc save data block, which has the berry spots:
  31.     void *saveData = SaveBlock2_get();
  32.     struct SAVE_MISC_DATA *saveMiscData = Sav2_Misc_get(saveData);
  33.  
  34.     switch(sw)
  35.     {
  36.     case SW_grab_berry_state: // store berry state in 0x800C
  37.     {
  38.         u32 berryID = saveMiscData->berry_tree_spots[tag].berryID;
  39.         if (berryID != NONE_BERRY_ID) {
  40.             *var_x8004 = BerryIDToItem(berryID);
  41.             *var_x8005 = saveMiscData->berry_tree_spots[tag].yield;
  42.             *var_x8006 = saveMiscData->berry_tree_spots[tag].growthstage;
  43.         } else {
  44.             *var_x8006 = NONE_BERRY_ID;
  45.         }
  46.        
  47.         break;
  48.     }
  49.     case SW_plant_berry: // var 0x8004 has chosen berry item.  convert to berry id, initialize plant
  50.         PlantBerry(&saveMiscData->berry_tree_spots[tag], *var_x8004);
  51. #ifdef DEBUG_BERRY_TREES
  52.         *((u32 *)(0x023DF010)) = *var_x8004;
  53. #endif
  54.         *var_x8004 = BerryIDToItem(*var_x8004);
  55.         break;
  56.     case SW_water_berry:
  57.         saveMiscData->berry_tree_spots[tag].moisturelevel = 100;
  58.         break;
  59.     case SW_reset_berry_tree:
  60.         ClearBerryTree(&saveMiscData->berry_tree_spots[tag]);
  61.         break;
  62.     case SW_swap_out_list_std:
  63.         toggle_std_list_swap ^= 1;
  64.         break;
  65.     case SW_convert_var_between_berry_ids:
  66.         {
  67.             u16 *idToConvert = GetVarPointer(ctx->fsys, arg0);
  68.             if (*idToConvert < ITEM_CHERI_BERRY)
  69.                 *idToConvert = BerryIDToItem(*idToConvert);
  70.             else
  71.                 *idToConvert = ItemToBerryID(*idToConvert);
  72.             break;
  73.         }
  74.     }
  75.    
  76.     return FALSE;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement