frauber
(Member)

Registration Date: 03-14-2019
Date of Birth: Not Specified
Local Time: 10-30-2026 at 07:54 AM
Status: Offline

frauber's Forum Info
Joined: 03-14-2019
Last Visit: 03-14-2019, 06:44 AM
Total Posts: 1 (0 posts per day | 0.17 percent of total posts)
(Find All Posts)
Total Threads: 0 (0 threads per day | 0 percent of total threads)
Members Referred: 0
  
frauber's Most Liked Post
Post Subject Post Date/Time Numbers of Likes
RE: Importing C Code Into SM64 Using n64chain and armips 03-14-2019, 06:39 AM 1
Thread Subject Forum Name
Importing C Code Into SM64 Using n64chain and armips Hacking
Super Mario 64
Post Message
old notes: Code: -- /* Constants - struct pointers */ #define M64_CURR_OBJ_PTR 0x80361160 /* Pointer to object being currectly processed */ #define M64_FIRST_OBJ_STRUCT 0x8033D488 /* Pointer to the first object (out of 240) in the circular linked list */ #define M64_MARIO_STRUCT 0x8033B170 /* you can read it from 0x8032d93c */ #define M64_MARIO_OBJ_PTR 0x80361158 /* Pointer to Mario OBJ struct in RAM */ #define M64_LEVEL_STRUCT 0x8033B90c /* Constants - misc pointers */ #define M64_DISPLAY_STATS_FLAGS 0x8032b26a #define M64_SEGMENT_TABLE 0x8033b400 #define M64_CURRENT_LEVEL_ID 0x8032ddf8 /* u16 */ #define M64_GEO_LAYOUT_PTR_TABLE 0x8032ddc4 /* Pointer to pointer */ #define DEBUG_FLAG1 0x8032d598 /* graph flags */ #define BILLBOARD 4 #define INVISIBLE 0 /* recheck */ #define VISIBLE 1 /* recheck */ //library function: extern int sprintf ( char * str, const char * format, ... ); /* Functions */ extern int CreateMessageBox(u16 flags, u16 rotate_to_mario, u16 type_of_dialog, u16 message_id); /* CreateMessageBox */ /* return value = 0x00 -> dialog is happening */ /* 0x01 -> dialog is over (choice #1) */ /* 0x02 -> dialog is over (choice #2) */ /* 0x03 -> normal dialog is over */ /* type of dialog = 0xA1 -> save related (wing blocks?) */ /* 0xA2 -> regular dialog */ /* 0xA3 -> two choices */ /* You may want to set an wrapper function for */ /* CreateMessageBox (check yoshi.c for an example) */ extern int CreateStar(float x, float y, float z); /* returns pointer for spawned object */ extern void CopyObjParams(u32 *dest, u32 *source); /* copies X,Y,Z + rotation from another object */ extern void CopyObjPosition(u32 *dest, u32 *source); extern void CopyObjRotation(u32 *dest, u32 *source); extern void CopyObjScaling(u32 *dest, u32 *source); extern int DeactivateObject(u32 obj_pointer); /* kills current object */ extern float DistanceFromObject(u32 object1, u32 object2); /* usually object 1 = (*Obj) and object 2 = Mario */ extern void DmaCopy(u32 dst, u32 bottom, u32 top); extern void ExplodeObject(u32 obj_ptr); extern void PlaySound(u32 argument); extern void HideObject(); /* hides current object by ORing 0x01 at offset 0x02 */ extern void UnHideObject(); /* ORs 0x10*/ extern int RotateTorwardsMario(int current_rotation, int rotation_speed, int arg2); extern void ScaleObject(float global_scaling_factor); extern void ScaleXYZ(u32 obj_pointer, float x, float y, float z); extern void SetModel(u16 model_ID); /* change how the object looks */ extern int SetObjAnimation(u16 animation_index); extern int ShakeScreen(u16 argument); /* argument = 1 to 4 (?) */ extern int SpawnObj(u32 obj_pointer, u16 model_id, u32 behavior); /* returns pointer for spawned object */ extern int CheckObjBehavior(u32 behavior_segmented_pointer); /* return 1 if behavior == arg, else 0 */ extern int CheckObjBehavior2(u32 obj_pointer, u32 behavior_segmented_pointer); /* return 1 if behavior == arg, else 0 */ extern void SetObjBehavior(u32 obj_pointer, u32 behavior_segmented_pointer); /* 0x802a14c4 */ extern int IsMarioStepping(); /* returns 1 if Mario is on TOP of a solid object, else 0 */ extern void ProcessCollision(); /* 0x803938cc, usually called from behaviors */ extern int SetMarioAction(u32 mario_struct_pointer, u32 action, u32 unk_arg); /* to Do: check return values */ extern int ProcessGeoLayout(u32 *dest, u32 segmented_address); /* 0x8037e0b4 */ /* Music Related */ extern int SetMusic(u32 layer, u16 song_index, u32 a2); /* possible layers = 0 (main bgmusic), 1 (other musics) or 2 (sfx) */ extern int SetInstrument(u32 *chan_ptr, u8 instrument_index); /* these functions need to be tested further */ extern void CreateTextBox(u16 msg_ID); extern int PrintText(u32 x_pos, char *text, u32 fade); /* used in Credits. a2 = a float value ? */ extern int PrintRegularText(u32 x, u32 y, char *table_text_pointer); /* needs to be tested */ extern int StopMario(u16 arg); /* 1 = stop mario 2 = do nothing?? /* print functions */ extern void PrintInt (u16 x, u16 y, char* text, u32 value); extern int PrintRegularText(u32 x, u32 y, char *table_text_pointer); /* needs to be tested more, used at credits?*/ extern void PrintXY(u16 x, u16 y, char* text); /* memory functions */ extern int SegmentedToVirtual(u32 segmented_pointer); /* returns RAM pointer of a segmented address*/ extern int GetSegmentBase(int segment); extern int SetSegmentBase(int segment, void *base); /* sets segment pointer table */ extern u8 *DynamicIndexCopy(u32 index, u32 begin, u32 end, u32 what); /* math stuff */ extern float sqrtf(float x); extern float sinf(float x); extern float cosf(float x); typedef struct anim /* unfinishied */ { u16 framecount; /* 0x08 */ u32 pointer; /* 0x0c */ u32 pointer2; /* 0x10 */ } Animation; typedef struct anim2 { u32 *AnimationDMATable; // 0xd1 items, each item 8 bytes in lenght u32 Current_DMA; // not sure u32 TargetAnimationPtr; // 0x80060030 - gets copied to MarioObj->animation (that's where's animation data is DMAed) u32 padding; } MarioAnimation; extern int SetMarioAnimation(MarioAnimation *AnimStruct, u16 index); /* returns 1 if animation has changed, 0 if its the same as before) */ typedef struct Music2 { u32 _0x00; u32 _0x04; u32 _0x08; u32 _0x0c; u32 _0x10; u32 _0x14; u32 _0x18; u32 _0x1c; f32 volume; /* 1 = 0x7f - 0x20 */ f32 _0x024_maybe_pan; f32 _0x028; f32 pitch_transposition; u32 _0x30; u32 _0x34; u32 _0x38; u32 instrument; /* pointer to instrument */ /* stuff missing here */ u32 Vibrato; /* 0x70 */ } ChannelStruct; typedef struct Music1 { u32 _0x00; u32 _0x04; u16 _0x08; u16 tempo; /* 0x0a */ u32 _0x0c; u32 _0x10; u32 pointer_seq_head; f32 volume; u32 _0x1c; f32 _0x20; f32 _0x24; u32 _0x28; ChannelStruct *Channel[15]; u32 _0x7c_sequence_pointer; } MusicController; /* Layer 0 = 0x80222618 */ typedef struct collision_triangle { u16 collision_type; /* check collision.txt */ u16 _0x02; u8 flag; u8 _0x05; s16 ymin; s16 ymax; s16 vertex1_x, vertex1_y, vertex1_z; /* 0x0a */ s16 vertex2_x, vertex2_y, vertex2_z; /* 0x10 */ s16 vertex3_x, vertex3_y, vertex3_z; /* 0x16 */ float normal_x; float normal_y; float normal_z; float negdot; u32 _0x2c; /* unused? */ } CollisionTriangle; typedef struct pad_struct /* from nagra */ { s16 stick_x; s16 stick_y; float x; float y; float z; u16 currentButton; /* 0x10 */ u16 previousButton; u32 *statusData; /* 0x14 */ u32 *controllerData; /* 0x18 */ } Pad; typedef struct camera_struct /* mario->camera (0x8033C520) */ { u32 mario_action; /* copied from mario->action */ float x; /* also copied from Mario struct */ float y; float z; s16 _0x10_mario_0x2c; /* 0x10 */ u16 rotation; /* again copied from Mario struct */ s16 _0x14_mario_0x30; s16 _0x16_mario_0x32; u32 _0x18; u16 _0x1c; u16 camera_setting; /* 0x06 = door opening 0x09 = triggers initial peach animation */ /* incomplete, many other members left ?? */ } Camera; typedef struct level_struct /* 0x8033B90c, from Cellar Dweller's notes */ { s16 _0x00; s16 terrain_type; u32 geo_layout_ptr; u32 collision_ptr; u32 _0x0c; u32 mini_objects_ptr; /* 0x10 pointer to an array of objects defined by command 0x39 */ u32 warp_links_head; u32 _0x18; u32 _0x1c; u32 *objects_head; /* 0x24 objects linked list head */ u32 LevelCameraPointer; /* Level Camera Pointer (generated at run-time) */ u32 _0x28; u32 _0x2c; u32 _0x30; u8 _0x34; /* set by level command 0x30 */ u8 _0x35; s16 music_param; /* 0x36 */ s16 music_param2; /* 0x38 title screen,etc) */ /* more? */ } Level; typedef struct object_struct /* Regular objects, Mario also has its own struct like this */ { u16 graph_node_type; /* 0x00 */ u16 graph_flags; struct object_struct *prev; /* previous linked list object */ struct object_struct *next; /* next linked list object */ u32 graph_parent; u32 graph_child; /* 0x10 */ u32 geo_layout_ptr; /* 0x14 */ u32 _0x18; u32 _0x1c; float _0x20; /* 0x20 */ float _0x24; float _0x28; float x_scaling; /* 0x2c */ float y_scaling; /* 0x30 */ float z_scaling; u16 _0x38; u16 _0x3a; u32 animation; /* 0x3c - current animation */ u16 anim_current_frame; /* 0x40 */ u16 anim_timer; /* timer, animation related? */ u16 anim_current_frame_copy; u16 _0x46; u32 _0x48; u32 _0x4c; u32 matrix_ptr; /* 0x50 */ float float_0x54; float float_0x58; float float_0x5c; struct object_struct *next_object_ptr; /* 0x60: re-check this */ u32 _0x64; struct object_struct *next_object_ptr2; /* 0x68: re-check this (child_obj) */ u32 _0x6c; u32 _0x70; /* 0x70 */ u16 active; /* 0x0000 = inactive, 0x0101 = active */ u16 _0x76; /* collision flag according to YE */ struct object_struct *collided_obj_ptr; /* according to YE, pointer to object collided with */ u32 _0x7c; u32 _0x80; /* 0x80 */ u32 _0x84; u32 _0x88; u32 obj_flags; u32 _0x90; /* 0x90 */ u32 _0x94; u32 _0x98; u32 _0x9c; float x_pos; /* 0xa0 */ float y_pos; float z_pos; float x_speed; /* x increment? */ float y_speed; /* 0xb0 */ float z_speed; /* z_increment? */ float speed; u32 _0xbc; u32 _0xc0; /* 0xc0 */ u32 x_rotation; /* 0xc4 - rotation triplet */ u32 y_rotation; /* 0xc8 */ u32 z_rotation; u32 x_rotation2; /* rotation copy (collision?) 0xd0 */ u32 y_rotation2; /* 0xd4 */ u32 z_rotation2; u32 _0xd8; u32 _0xe0; /* 0xe0 */ float _0xe4; /* gravity related? y_speed - 0xe4 ? */ u32 _0xe8; u32 _0xec; u32 _0xf0; /* 0xf0 */ u32 _0xf4; /* obj type for some behaviors (ie, ice bully), for AMPS, radius of rotation */ u32 _0xf8; u32 _0xfc; u32 _0x100; /* 0x100 */ u32 _0x104; u32 _0x108; u32 _0x10c; u32 _0x110; /* 0x110 */ u32 _0x114; u32 _0x118; u32 _0x11c; u32 animation_ptr; /* 0x120 = (set by 0x27 26 behavior command) entry for animation? */ u32 _0x124; /* in some behaviors, action related? */ float _0x128; float _0x12c; u32 interaction; /* 0x130 00 = Something Solid. Can't grab. Mario walks around, Can jump over. 01 = Crashed when jumping at it, Used by Hoot. 02 = Grabbing 04 = Going through door 08 = Knocks mario back and dissappears. No damage. 10 = Something Solid, Can't grab, Mario walks around, Can't jump over, Seems somewhat thin.. 40 = Climbing */ u32 _0x134; u32 _0x138; u32 _0x13c; u32 _0x140; /* 0x140 */ u32 behav_param; /* behav param */ u32 _0x148; u32 action; u32 _0x150; /* 0x150 = also reset when action changes */ u32 timer; /* always incremented. When action changes, it's set to 0 */ float _0x158; float distance_from_mario; u32 _0x160; /* 0x160 */ float _0x164_x; float _0x168_y; float _0x16c_z; float _0x170; /* 0x170 */ float _0x174; u32 _0x178; u32 transparency; u32 damage_to_mario; /* According to YE, "How many segments of damage to do to Mario for objects that cause him harm" */ u32 health; /* Health (ie, for King bob-omb and whomp */ u32 behav_param2; /* re-check */ u32 previous_action; /* used to reset the 0x154 timer */ u32 _0x190; /* 0x190 */ float collision_distance; /* NOTE: if collision_distance < disappear_distance then disappear_distance = collision_distance */ u32 _0x198; float drawing_distance; u32 _0x1a0; /* 0x1a0 */ u32 _0x1a4; u32 _0x1a8; u32 _0x1ac; u32 _0x1b0; /* 0x1b0 */ u32 _0x1b4; u32 _0x1b8; u32 _0x1bc; u32 _0x1c0; /* 0x1c0 */ u32 _0x1c4; u32 _0x1c8; u32 script_ptr; u32 stack_index; /* 0x1d0 */ u32 stack; u32 _0x1d8; u32 _0x1dc; u32 _0x1e0; /* 0x1e0 */ u32 _0x1e4; u32 _0x1e8; u32 _0x1ec; u32 _0x1f0; /* 0x1f0 */ u16 _0x1f4; u16 _0x1f6; float col_sphere_x; float col_sphere_y; float _0x200; /* 0x200 */ float _0x204; float _0x208; u32 behavior_script_entry; u32 _0x210; /* 0x210 */ u32 collide_obj_ptr; /* pointer to another object (collision happening)?. Can be used to detect if Mario is on top of the object by comparing value with Mario's pointer */ u32 collision_ptr; /* set by behavior script (0x2A command) */ u32 _0x21c; u32 _0x220; /* 0x220 */ u32 _0x224; u32 _0x228; u32 _0x22c; u32 _0x230; /* 0x230 */ u32 _0x234; u32 _0x238; u32 _0x23c; u32 _0x240; /* 0x240 */ u32 _0x244; u32 _0x248; u32 _0x24c; u32 _0x250; /* 0x250 */ u32 _0x254; u32 _0x258; u32 behav_param_copy_ptr; } Object; typedef struct mario_struct /* 8033b170 */ { u32 status; u32 flags; /* cap & other flags */ u32 _0x08; u32 action; /* see Romanian Girl list */ u32 previous_action; /* 0x10 */ u32 _0x14; u16 _0x18; u16 _0x1a; u32 _0x1c; float _0x20; /* 0x20 */ u16 _0x24; /* rotation related, if bit 1 of status is set, 0x24 is copied to 0x2e */ s16 hitstun; /* hitstun counter (how long Mario stays invencible after getting hit */ u32 _0x28; s16 _0x2c; u16 rotation; /* divide it by 180 to get the angle? */ s16 _0x30; /* 0x30 */ s16 _0x32; u32 _0x34; u32 _0x38; float x_pos; /* 0x3c */ float y_pos; /* 0x40 */ float z_pos; float x_speed; float y_speed; float z_speed; /* 0x50. The next four floats are related to speed/acelleration */ float speed; float _0x58; float _0x5c; u32 _0x60; /* 0x60 */ u32 _0x64; CollisionTriangle *curr_collision_triangle; /* current triangle mario is stepping in */ float _0x6c; float ground_y; /* 0x70 - ground Y */ u32 _0x74; u32 _0x78; u32 _0x7c; u32 _0x80; /* 0x80 */ u32 _0x84; Object *MarioObj; u32 _0x8c_ptr; u32 Mario_level_command; /* 0x90 = 8033b4b0 = Information read from the Level command that sets Mario*/ Camera *camera; u32 _0x98_ptr; /* 0x8033B3B0 */ Pad *pad; /* pointer to controller struct controller 1 = 8033AF90 controller2 = 8033AFAC*/ MarioAnimation *MarioAnimationStruct; /* 0x8033B080 */ u32 _0xa4; s16 coins; /* 0xa8 */ s16 stars; /* 0xaa */ s16 lifes; /* 0xac */ s16 power; /* 0xae */ u16 constant_ground_distance; /* usually 0xBD */ u16 misc_timer; /* on any value other than zero it will decrease until zero (also, drains mario energy?) */ u32 cap_timer; u32 _0xb8; float _0xbc; float _0xc0; /* 0xc0 */ } MarioStruct; -- [hr] Code: -- sprintf = 0x8032255c ; CreateMessageBox = 0x802A4BE4 ; CreateTextBox = 0x802d8d08 ; CreateStar = 0x802F2B88 ; CheckObjBehavior = 0x802a14fc; CheckObjBehavior2 = 0x802A1554; SetObjBehavior = 0x802a14c4; CopyObjParams = 0x8029F0E0 ; CopyObjPosition = 0x8029F120 ; CopyObjRotation = 0x8029F148 ; CopyObjScaling = 0x8029F3A4 ; DistanceFromObject = 0x8029e27c ; DeactivateObject = 0x802a0568 ; DmaCopy = 0x80278504 ; ExplodeObject = 0x802e6af8 ; GetSegmentBase = 0x80277f20 ; HideObject = 0x8029F620 ; UnHideObject = 0x8029f6bc ; PlaySound = 0x802ca190; PrintInt = 0x802d62d8 ; PrintXY = 0x802d66c0 ; RotateTorwardsMario = 0x8029e530 ; ScaleObject = 0x8029F430; ScaleXYZ = 0x8029F3D0; SegmentedToVirtual = 0x80277f50; SetModel = 0x802a04c0; SetSegmentBase = 0x80277ee0 ; SetObjAnimation = 0x8029f464; ShakeScreen = 0x802a50fc ; SpawnObj = 0x8029edcc ; SetMarioAction = 0x80252cf4; SetMarioAnimation = 0x80279084; IsMarioStepping = 0x802A3CFC ; DynamicIndexCopy = 0x8027868c ; ProcessGeoLayout = 0x8037e0b4; MoveRelated = 0x802a2320 ; PreMoveObj = 0x802a1308; MoveObj = 0x802A2348 ; MoveObj2 = 0x802A2644 ; UnknownMove = 0x8029E714 ; _8037a9a8 = 0x8037a9a8; StopMario = 0x8028bd34 ; PrintText = 0x802d8844; PrintRegularText = 0x802d7e88; sinf = 0x80325480; cosf = 0x80325310; sqrtf = 0x80323a50; ProcessCollision = 0x803839cc; SetMusic = 0x80320544; SetInstrument = 0x8031cfd4; --

frauber's Received and Given Likes
  Likes Received Likes Given
Last week 0 0
Last month 0 0
Last 3 months 0 0
Last 6 months 0 0
Last 12 months 0 0
All Time 1 0
 
Most liked by
[Deleted member] 1 100%
 
Most liked
frauber has not yet liked.