diff --git a/src/game/interaction.c b/src/game/interaction.c index 2404a48a0..a371751ca 100644 --- a/src/game/interaction.c +++ b/src/game/interaction.c @@ -631,7 +631,7 @@ u32 determine_knockback_action(struct MarioState *m, UNUSED s32 arg) { // set knockback very high when dealing with player attacks if (m->interactObj != NULL && (m->interactObj->oInteractType & INTERACT_PLAYER) && terrainIndex != 2) { - f32 mag = m->interactObj->oDamageOrCoinValue * 25.0f * sign; + f32 mag = m->interactObj->oDamageOrCoinValue * (f32)gServerSettings.playerKnockbackStrength * sign; m->forwardVel = mag; if (sign > 0 && terrainIndex == 1) { mag *= -1.0f; } m->vel[0] = mag * sins(angleToObject); diff --git a/src/pc/configfile.c b/src/pc/configfile.c index e04e15dc6..f692fc9ed 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -101,6 +101,7 @@ unsigned int configJoinPort = DEFAULT_PORT; unsigned int configHostPort = DEFAULT_PORT; unsigned int configHostSaveSlot = 1; unsigned int configPlayerInteraction = 1; +unsigned int configPlayerKnockbackStrength = 25; static const struct ConfigOption options[] = { {.name = "fullscreen", .type = CONFIG_TYPE_BOOL, .boolValue = &configWindow.fullscreen}, @@ -150,11 +151,12 @@ static const struct ConfigOption options[] = { {.name = "discordrpc_enable", .type = CONFIG_TYPE_BOOL, .boolValue = &configDiscordRPC}, #endif // coop-specific - {.name = "coop_join_ip", .type = CONFIG_TYPE_STRING, .stringValue = (char*)&configJoinIp}, - {.name = "coop_join_port", .type = CONFIG_TYPE_UINT , .uintValue = &configJoinPort}, - {.name = "coop_host_port", .type = CONFIG_TYPE_UINT , .uintValue = &configHostPort}, - {.name = "coop_host_save_slot", .type = CONFIG_TYPE_UINT , .uintValue = &configHostSaveSlot}, - {.name = "coop_player_interaction", .type = CONFIG_TYPE_UINT , .uintValue = &configPlayerInteraction}, + {.name = "coop_join_ip", .type = CONFIG_TYPE_STRING, .stringValue = (char*)&configJoinIp}, + {.name = "coop_join_port", .type = CONFIG_TYPE_UINT , .uintValue = &configJoinPort}, + {.name = "coop_host_port", .type = CONFIG_TYPE_UINT , .uintValue = &configHostPort}, + {.name = "coop_host_save_slot", .type = CONFIG_TYPE_UINT , .uintValue = &configHostSaveSlot}, + {.name = "coop_player_interaction", .type = CONFIG_TYPE_UINT , .uintValue = &configPlayerInteraction}, + {.name = "coop_player_knockback_strength", .type = CONFIG_TYPE_UINT , .uintValue = &configPlayerKnockbackStrength}, }; // Reads an entire line from a file (excluding the newline character) and returns an allocated string diff --git a/src/pc/configfile.h b/src/pc/configfile.h index b5f30e7a7..45275985f 100644 --- a/src/pc/configfile.h +++ b/src/pc/configfile.h @@ -67,6 +67,7 @@ extern unsigned int configJoinPort; extern unsigned int configHostPort; extern unsigned int configHostSaveSlot; extern unsigned int configPlayerInteraction; +extern unsigned int configPlayerKnockbackStrength; void configfile_load(const char *filename); void configfile_save(const char *filename); diff --git a/src/pc/network/network.c b/src/pc/network/network.c index 443023152..fbf25cd5b 100644 --- a/src/pc/network/network.c +++ b/src/pc/network/network.c @@ -19,6 +19,7 @@ bool gNetworkLevelLoaded = false; struct ServerSettings gServerSettings = { .playerInteractions = PLAYER_INTERACTIONS_SOLID, + .playerKnockbackStrength = 25, }; void network_init(enum NetworkType inNetworkType, char* ip, unsigned int port) { @@ -35,6 +36,7 @@ void network_init(enum NetworkType inNetworkType, char* ip, unsigned int port) { // set server settings if (gNetworkType == NT_SERVER) { gServerSettings.playerInteractions = configPlayerInteraction; + gServerSettings.playerKnockbackStrength = configPlayerKnockbackStrength; } // create a receiver socket to receive datagrams diff --git a/src/pc/network/network.h b/src/pc/network/network.h index 14b1d529b..e65d61d4b 100644 --- a/src/pc/network/network.h +++ b/src/pc/network/network.h @@ -73,6 +73,7 @@ enum PlayerInteractions { struct ServerSettings { enum PlayerInteractions playerInteractions; + u8 playerKnockbackStrength; }; // Networking-specific externs diff --git a/src/pc/network/packets/packet_save_file.c b/src/pc/network/packets/packet_save_file.c index 843a40f7a..91591cc66 100644 --- a/src/pc/network/packets/packet_save_file.c +++ b/src/pc/network/packets/packet_save_file.c @@ -42,6 +42,7 @@ void network_send_save_file(void) { packet_init(&p, PACKET_SAVE_FILE, true); packet_write(&p, &gCurrSaveFileNum, sizeof(s16)); packet_write(&p, &gServerSettings.playerInteractions, sizeof(u8)); + packet_write(&p, &gServerSettings.playerKnockbackStrength, sizeof(u8)); packet_write(&p, eeprom, sizeof(u8) * 512); network_send(&p); } @@ -54,6 +55,7 @@ void network_receive_save_file(struct Packet* p) { // find all reserved objects packet_read(p, &gCurrSaveFileNum, sizeof(s16)); packet_read(p, &gServerSettings.playerInteractions, sizeof(u8)); + packet_read(p, &gServerSettings.playerKnockbackStrength, sizeof(u8)); packet_read(p, eeprom, sizeof(u8) * 512); save_file_load_all(TRUE);