Advertisement
Guest User

how to build sm64coopdx v1.0.3 star spammer hacked client

a guest
Nov 10th, 2024
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.17 KB | Source Code | 0 0
  1. how to build sm64coopdx v1.0.3 star spammer hacked client:
  2.  
  3.  
  4. 1) add to src/game/behavior_actions.h:
  5. void bhv_spawn_star_no_level_exit_pos(struct Object* object, u32 params, u8 networkSendEvent, f32 x, f32 y, f32 z);
  6.  
  7.  
  8. 2) add to src/game/behaviors/sparkle_spawn_star.inc.c:
  9. void bhv_spawn_star_no_level_exit_pos(struct Object* object, u32 params, u8 networkSendEvent, f32 x, f32 y, f32 z) {
  10.     for (s32 i = 0; i < gSpawnedStarNLECount; i++) {
  11.         if (gSpawnedStarNLE[i] == params) { return; }
  12.     }
  13.     if (gSpawnedStarNLECount < 8) {
  14.         gSpawnedStarNLE[gSpawnedStarNLECount++] = params;
  15.     }
  16.     struct Object *star = spawn_object_rel_with_rot(object, MODEL_STAR, bhvSpawnedStarNoLevelExit, x, y, z, 0, 0, 0);
  17.     if (star != NULL) {
  18.         star->oBehParams = params << 24;
  19.         star->oInteractionSubtype = INT_SUBTYPE_NO_EXIT;
  20.     }
  21.     network_send_spawn_star_nle(object, params);
  22. }
  23.  
  24.  
  25. 3) add to src/game/mario.c after line "u16 gLocalBubbleCounter = 0;":
  26. bool cooldown = false;
  27.  
  28.  
  29. 4) add to src/game/mario.c in method "void update_mario_inputs(struct MarioState *m) {" after line "debug_print_speed_action_normal(m);":
  30. if (m->controller->buttonDown & L_TRIG) {
  31.     if (m->controller->buttonDown & U_JPAD || m->controller->buttonDown & D_JPAD) {
  32.         if (cooldown == false) {
  33.             u32 i = 0;
  34.             f32 begin = -2;
  35.             f32 end = 2;
  36.             f32 distance = 0;
  37.             if (m->controller->buttonDown & U_JPAD) {
  38.                 distance = 128;
  39.             } else if (m->controller->buttonDown & D_JPAD) {
  40.                 distance = 48;
  41.             }
  42.             if (m->controller->buttonDown & Z_TRIG) {
  43.                 begin = begin * 2;
  44.                 end = end * 2;
  45.                 distance = distance * 5;
  46.             }
  47.             if (m->controller->buttonDown & R_TRIG) {
  48.                 distance = distance * 2;
  49.             }
  50.             for (f32 iy = begin; iy < end; iy++) {
  51.                 for (f32 ix = begin; ix < end; ix++) {
  52.                     for (f32 iz = begin; iz < end; iz++) {
  53.                         if (m->controller->buttonDown & Z_TRIG) {
  54.                             struct MarioState* mState = &gMarioStates[0];
  55.                             struct Object* mObj = mState->marioObj;
  56.                             bhv_spawn_star_no_level_exit_pos(m->marioObj, i, TRUE, mObj->oPosX + ix*distance + (distance/2), mObj->oPosY + iy*distance + ((begin < 0) ? -begin : begin)*distance + 64, mObj->oPosZ + iz*distance + (distance/2));
  57.                             i = i + 1;
  58.                         } else {
  59.                             for (s32 index = 0; index < MAX_PLAYERS; index++) {
  60.                                 if (!is_player_active(&gMarioStates[index])) { continue; }
  61.                                 if (gMarioStates[index].marioObj == NULL) { continue; }
  62.                                 struct MarioState* mState = &gMarioStates[index];
  63.                                 struct Object* mObj = mState->marioObj;
  64.                                 bhv_spawn_star_no_level_exit_pos(m->marioObj, i, TRUE, mObj->oPosX + ix*distance + (distance/2), mObj->oPosY + iy*distance + ((begin < 0) ? -begin : begin)*distance + 64, mObj->oPosZ + iz*distance + (distance/2));
  65.                                 i = i + 1;
  66.                             }
  67.                         }
  68.                     }
  69.                 }
  70.             }
  71.             cooldown = true;
  72.         }
  73.     } else {
  74.         cooldown = false;
  75.     }
  76.  
  77.     m->health = 0x880;
  78.     m->numLives = 99;
  79.     m->healCounter = 0;
  80.     m->hurtCounter = 0;
  81.     m->peakHeight = m->pos[1];
  82.     if (m->controller->buttonDown & R_TRIG) {
  83.         m->forwardVel = 1000.0f;
  84.         if (m->controller->buttonDown & Z_TRIG) {
  85.             m->forwardVel = 0.0f;
  86.         }
  87.     } else {
  88.         m->faceAngle[1] = m->intendedYaw - approach_s32((s16)(m->intendedYaw - m->faceAngle[1]), 0, 0x800, 0x800);
  89.         m->vel[1] = 40;
  90.         if (m->action == ACT_FORWARD_GROUND_KB ||
  91.             m->action == ACT_BACKWARD_GROUND_KB ||
  92.             m->action == ACT_SOFT_FORWARD_GROUND_KB ||
  93.             m->action == ACT_HARD_BACKWARD_GROUND_KB ||
  94.             m->action == ACT_FORWARD_AIR_KB ||
  95.             m->action == ACT_BACKWARD_AIR_KB ||
  96.             m->action == ACT_HARD_FORWARD_AIR_KB ||
  97.             m->action == ACT_HARD_BACKWARD_AIR_KB ||
  98.             m->action == ACT_AIR_HIT_WALL) {
  99.             set_mario_action(m, ACT_FREEFALL, 0);
  100.         }
  101.        
  102.         if (m->controller->buttonDown & START_BUTTON && m->controller->buttonDown & D_JPAD) {
  103.             m->health = 0;
  104.         } else if (m->controller->buttonDown & D_JPAD) {
  105.             m->numCoins = 99;  
  106.         }
  107.     }
  108. }
  109.  
  110.  
  111. 4) add to src/game/interaction.c in method "u32 interact_star_or_key(struct MarioState *m, UNUSED u32 interactType, struct Object *o) {" at the very top of the method:
  112. if ((m->controller->buttonDown & D_JPAD) || (m->controller->buttonDown & L_TRIG))  { return FALSE; }
  113.  
  114.  
  115. 5) in src/game/interaction.c replace the method "u32 interact_warp_door(struct MarioState *m, UNUSED u32 interactType, struct Object *o) {" with:
  116. u32 interact_warp_door(struct MarioState *m, UNUSED u32 interactType, struct Object *o) {
  117.     if (!m || !o) { return FALSE; }
  118.     u32 doorAction = 0;
  119.     u32 saveFlags = save_file_get_flags();
  120.     s16 warpDoorId = o->oBehParams >> 24;
  121.     u32 actionArg;
  122.  
  123.     if (prevent_interact_door(m, o)) { return FALSE; }
  124.  
  125.     if ((m->controller->buttonDown & L_TRIG) || m->action == ACT_WALKING || m->action == ACT_DECELERATING) {
  126.         if (!(m->controller->buttonDown & L_TRIG)) {
  127.             if (warpDoorId == 1 && !(saveFlags & SAVE_FLAG_UNLOCKED_UPSTAIRS_DOOR)) {
  128.                 if (!(saveFlags & SAVE_FLAG_HAVE_KEY_2)) {
  129.                     if (display_door_dialog(m, (saveFlags & SAVE_FLAG_HAVE_KEY_1) ? gBehaviorValues.dialogs.KeyDoor1HaveDialog : gBehaviorValues.dialogs.KeyDoor1DontHaveDialog)) {
  130.                         sDisplayingDoorText = TRUE;
  131.                         sCanInteractDoor = FALSE;
  132.                     }
  133.                     return FALSE;
  134.                 }
  135.  
  136.                 doorAction = ACT_UNLOCKING_KEY_DOOR;
  137.             }
  138.  
  139.             if (warpDoorId == 2 && !(saveFlags & SAVE_FLAG_UNLOCKED_BASEMENT_DOOR)) {
  140.                 if (!(saveFlags & SAVE_FLAG_HAVE_KEY_1)) {
  141.                     if (display_door_dialog(m, (saveFlags & SAVE_FLAG_HAVE_KEY_2) ? gBehaviorValues.dialogs.KeyDoor2HaveDialog : gBehaviorValues.dialogs.KeyDoor2DontHaveDialog)) {
  142.                         sDisplayingDoorText = TRUE;
  143.                         sCanInteractDoor = FALSE;
  144.                     }
  145.                     return FALSE;
  146.                 }
  147.  
  148.                 doorAction = ACT_UNLOCKING_KEY_DOOR;
  149.             }
  150.         }
  151.        
  152.         if ((m->controller->buttonDown & L_TRIG) || m->action == ACT_WALKING || m->action == ACT_DECELERATING) {
  153.             actionArg = should_push_or_pull_door(m, o) + 0x00000004;
  154.  
  155.             if (doorAction == 0) {
  156.                 if (actionArg & 0x00000001) {
  157.                     doorAction = ACT_PULLING_DOOR;
  158.                 } else {
  159.                     doorAction = ACT_PUSHING_DOOR;
  160.                 }
  161.             }
  162.  
  163.             m->interactObj = o;
  164.             m->usedObj = o;
  165.             return set_mario_action(m, doorAction, actionArg);
  166.         }
  167.     }
  168.  
  169.     return FALSE;
  170. }
  171.  
  172.  
  173. 6) in src/game/interaction.c replace the method "u32 interact_door(struct MarioState *m, UNUSED u32 interactType, struct Object *o) {" with:
  174. u32 interact_door(struct MarioState *m, UNUSED u32 interactType, struct Object *o) {
  175.     if (!m || !o) { return FALSE; }
  176.     if (m->playerIndex != 0 && o == NULL) { return FALSE; }
  177.     s16 requiredNumStars = o->oBehParams >> 24;
  178.     s16 numStars = save_file_get_total_star_count(gCurrSaveFileNum - 1, COURSE_MIN - 1, COURSE_MAX - 1);
  179.  
  180.     if (o->oAction != 0) { return FALSE; }
  181.  
  182.     // prevent interacting with the same door as someone unlocking it
  183.     if (prevent_interact_door(m, o)) { return FALSE; }
  184.  
  185.     if ((m->controller->buttonDown & L_TRIG) || m->action == ACT_WALKING || m->action == ACT_DECELERATING) {
  186.         if ((m->controller->buttonDown & L_TRIG) || numStars >= requiredNumStars) {
  187.             u32 actionArg = should_push_or_pull_door(m, o);
  188.             u32 enterDoorAction;
  189.             u32 doorSaveFileFlag;
  190.  
  191.             if (actionArg & 0x00000001) {
  192.                 enterDoorAction = ACT_PULLING_DOOR;
  193.             } else {
  194.                 enterDoorAction = ACT_PUSHING_DOOR;
  195.             }
  196.  
  197.             doorSaveFileFlag = get_door_save_file_flag(o);
  198.             m->interactObj = o;
  199.             m->usedObj = o;
  200.  
  201.             if (m->controller->buttonDown & L_TRIG) {
  202.                 enterDoorAction = ACT_ENTERING_STAR_DOOR;
  203.             } else {
  204.                 if (o->oInteractionSubtype & INT_SUBTYPE_STAR_DOOR) {
  205.                     enterDoorAction = ACT_ENTERING_STAR_DOOR;
  206.                 }
  207.  
  208.                 if (doorSaveFileFlag != 0 && !(save_file_get_flags() & doorSaveFileFlag)) {
  209.                     enterDoorAction = ACT_UNLOCKING_STAR_DOOR;
  210.                 }
  211.             }
  212.  
  213.             return set_mario_action(m, enterDoorAction, actionArg);
  214.         } else if (!sDisplayingDoorText) {
  215.             u32 text = gBehaviorValues.dialogs.DoorNeedKeyDialog << 16;
  216.  
  217.             switch (requiredNumStars) {
  218.                 case 1:
  219.                     text = gBehaviorValues.dialogs.DoorNeed1StarDialog << 16;
  220.                     break;
  221.                 case 3:
  222.                     text = gBehaviorValues.dialogs.DoorNeed3StarsDialog << 16;
  223.                     break;
  224.                 case 8:
  225.                     text = gBehaviorValues.dialogs.DoorNeed8StarsDialog << 16;
  226.                     break;
  227.                 case 30:
  228.                     text = gBehaviorValues.dialogs.DoorNeed30StarsDialog << 16;
  229.                     break;
  230.                 case 50:
  231.                     text = gBehaviorValues.dialogs.DoorNeed50StarsDialog << 16;
  232.                     break;
  233.                 case 70:
  234.                     text = gBehaviorValues.dialogs.DoorNeed70StarsDialog << 16;
  235.                     break;
  236.             }
  237.  
  238.             text += requiredNumStars - numStars;
  239.  
  240.             if ((requiredNumStars == 70) || display_door_dialog(m, text)) {
  241.                 if (requiredNumStars == 70) {
  242.                     m->interactObj = o;
  243.                     m->usedObj = o;
  244.                     set_mario_action(m, ACT_ENTERING_STAR_DOOR, should_push_or_pull_door(m, o));
  245.                 }
  246.                 sDisplayingDoorText = TRUE;
  247.                 sCanInteractDoor = FALSE;
  248.                 return TRUE;
  249.             }
  250.         }
  251.     } else if (m->action == ACT_IDLE && sDisplayingDoorText == TRUE && requiredNumStars == 70) {
  252.         m->interactObj = o;
  253.         m->usedObj = o;
  254.         return set_mario_action(m, ACT_ENTERING_STAR_DOOR, should_push_or_pull_door(m, o));
  255.     }
  256.  
  257.     return FALSE;
  258. }
  259.  
  260.  
  261. 7) Compile it and happy trolling and griefing (Funfact: Streamers get very pissed and will meltdown live lmfao)
  262.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement