Commit graph

151 commits

Author SHA1 Message Date
MysterD
6bfdcbcb7b Complete rewrite of level-change/area-change system
Now level changes and area changes are separated. Entity deletions are
properly tracked on level change or area change. Late entity
synchronization is now triggered on any area change.
2021-06-11 14:39:25 -07:00
MysterD
0b3a97d405 Improvements to late-join synchronization
Removed (slightly) old coin and static ent removal system
Resynchronized respawners
Added packet for macro deletions
    better than previous system since the entities don't need a sync id and we can synchronize deletion station across areas
    allows the synchronization of odd entities like lines of coins
Added packet for spawn info deletions
Split packet_location_request into multiple files
2021-06-09 22:35:34 -07:00
MysterD
5db1a9e827 Synchronize late-join coin collection 2021-06-08 02:26:35 -07:00
MysterD
4be00a2eb1 Late-join synchronized chain chomp and exclamation box 2021-06-08 01:29:21 -07:00
MysterD
050d940d53 Added ability for clients to send packets to each other skipping server
Added memory of last reliable packet about each sync object
2021-06-07 23:12:17 -07:00
MysterD
e593bedc77 Keep track of static level spawn removals and sync them on location response 2021-06-07 19:25:31 -07:00
MysterD
bbdc942501 Ripped out level synchronization/warp code
Began writing new system that synchronizes course/act/level/area per
player and 'ownership' of that location.
2021-06-07 12:19:59 -07:00
MegaMech
e447332cec
Added server settings: shared lives and skip intro
Adds button to the host menu to allow shared lives.
Resolves #37

Buttons are now resizeable. Use gButtonScale.<size> (large, medium, or small).
It could be argued that we don't need the small size. However, it may be beneficial for the future if the menu becomes more complex.

large is the normal default size. Or at least it was the size already being used by sm64ex-coop (0.11111111f)

Note: Buttons for changing menu's should be gButtonScale.large as the menu animation is made for large buttons. To keep consistency it's probably a good idea for buttons that transfer you to a new menu to always be set to large. As such, I didn't feel it necessary to extend this feature to these methods: bhv_menu_button_growing_from_custom and bhv_menu_button_shrinking_to_custom.

Resolves #60
2020-10-16 02:58:57 -07:00
MysterD
5d9d5ed9d7 Added ability for client to send a packet to server, and for the server to broadcast to all clients 2020-10-12 18:23:48 -07:00
MysterD
ed06b57649 Added mod registration system
Allows mods to register themselves so that mismatches don't occur. This
does not automagically detect when someone modified the game, so the
mods will have to insert a function like this into their patch:

static void __attribute__((constructor)) _register_this_mod() {
    network_register_mod("mod name here");
}
2020-10-04 16:41:55 -07:00
MysterD
356029abf6 Forget all reliable packets on network shutdown
Prevents strange case where one instance of a game could connect to
itself.
2020-09-29 23:30:51 -07:00
MysterD
09a1390d8d Allow players to join while server is waiting in level transition 2020-09-19 15:07:27 -07:00
MysterD
64732308f4 Prevent useless keep-alive packets 2020-09-19 01:56:45 -07:00
MysterD
4a7b9736b4 Added compile-time flag to disable Discord SDK
In order to support ARM/Mac, discord must be disabled.
To disable compile with:
make DISCORD_SDK=0

Fixes #62
2020-09-19 00:53:56 -07:00
MysterD
f8bffd3b2a Added player connected/disconnected events
Changed synchronizing text to be more descriptive
Added 'player connected', 'player disconnected', 'network shutdown' chat messages
Prevented someone from joining through Discord while in another lobby
Added the distinction of sending a packet to all vs to a specific player
Enforced lobby size of 2, multiple joiners in a direct connection will be booted
Stored network destination for each player
Detected network drops
2020-09-18 23:06:26 -07:00
MysterD
3a37b79286 Renamed packet_save_file to packet_join 2020-09-15 23:07:00 -07:00
MysterD
2a10cca29a Refactored packet code out of network.c/h 2020-09-15 22:58:16 -07:00
MysterD
9a0c07e53c Added in-game chat
Fixes #35
2020-09-14 22:05:20 -07:00
MysterD
3e1b193ea8 Add Discord Game SDK networking system
Allows players to host without forwarding their ports or using a program
like Hamachi.
2020-09-13 03:27:35 -07:00
MysterD
6c8050a564 Abstracted all socket code behind a NetworkSystem
In preparation for other forms of communication, I have abstracted all
of the socket code (which needs direct connections) behind a struct
whose calls can be swapped out for other systems if desired.
2020-09-12 17:56:42 -07:00
MysterD
3e5b08b487 Fixed small crimes against C 2020-09-10 09:43:32 -07:00
MysterD
1e6c734ced Completely rewrote level transition synchronization code
Should be snappier and less prone to crashes. I tested as many scenarios
as I could think of and it has been rock solid. But time will tell.

Also created a new debug log system, just so I could understand what the
hell was going on with this code.
2020-09-10 00:17:30 -07:00
MysterD
3b946eb5e1 Added stay-in-level-after-star server-side setting.
Configurable in the server's config file under:
coop_stay_in_level_after_star

Defaults to off

Based on GateGuy's patch
2020-09-08 00:04:06 -07:00
MysterD
36e035984f Pausing the game no longer pauses, just brings up the menu
Fixes #19
2020-09-06 22:27:09 -07:00
MysterD
975c68ae1e Fix join issue when compiling without DEBUG 2020-09-06 12:46:02 -07:00
MysterD
7dafd081e1 Made player attack knockback configurable 2020-09-06 12:18:33 -07:00
MysterD
b9750057d5 General network code clean up
Marked globals, rearranged functions, added comments
2020-09-06 11:02:41 -07:00
MysterD
bed036bcfb Added coop settings to saved config file
Saves and loads last join IP/port attempt
Made host's port configurable in config file
Made host's save slot configurable in config file
Made host's player interaction setting configurable in config file

Indicated when the client was trying to connect on the join menu.
Fixed join menu display error where the port would disappear
2020-09-06 03:32:34 -07:00
MysterD
51940d6a82 Player interaction enhancements
Made water punch do an attack
Increased knockback significantly
Different types of attacks will have different knockback severity and damage (Stomp > kick > the rest)
Fixed rapid attack spam
Adjust radius for bouncing on players and popping bubbles

Made player interactions a synchronized server flag:
  None - Players are not solid
  Solid (Default) - Player can run into each other and stun each other
  PVP - Same as solid except friendly fire is on
Note: Not currently configurable due to a lack of a UI.
2020-09-06 10:05:58 -07:00
MysterD
4a2c218f11 Synchronized save files
Now when a client joins, it will request the entire 512 byte EEPROM from
the server and refuse to continue until the server replies with the
contents. Then the client will override all reads and writes to the
EEPROM/save file. Thus, a client will never overwrite their local save.

Fixes #21
2020-09-04 15:07:32 -07:00
MysterD
9512fde4a5 Added custom packets for mods-of-this-mod
Now a patch can choose to register callbacks for sending and receiving
packets. It's a bit tricky to use but at least it won't collide with
normal packets or other mod packets.
2020-09-04 02:04:37 -07:00
MysterD
68ad6bc15c Added host/join in-game GUI
Now people aren't forced to launch with command-line parameters,
instead they can host or join a server by selecting buttons in
the main menu.
2020-09-03 18:30:15 -07:00
MysterD
8c650a5b7d Created system to reserve sections of SyncIDs per client
This allows clients to spawn a new sync object after the level loads and synchronize it.
Changed how un-initialized sync objects are detected
Koopa shells are the first thing to use this new system

Removed network_object_settings() command, instead explicitly setting the sync object parameters
2020-08-24 18:33:53 -07:00
MysterD
7cd5dbb1a4 Added CLI options to specify ip/port 2020-08-13 19:38:15 -07:00
MysterD
2177094730 Synchronized wing cap and hidden trigger pickups 2020-08-10 23:38:58 -07:00
MysterD
6701b6096d Rewrote level synchronization
Synchronized exit course from pause menu
2020-08-10 09:33:40 -07:00
MysterD
9036336f42 Gave each BehaviorScript an ID
Created functions to trivially translate an ID to a Behavior and vice
versa. Sent ID over packets instead of Behavior pointer. This should
allow Linux and Windows to play together.
2020-08-09 16:21:12 -07:00
MysterD
a896713510 Made sockets platform-independent, supporting Linux 2020-08-09 13:23:27 -07:00
MysterD
d7a5a151d0 Added checksums to packets 2020-08-09 10:44:21 -07:00
MysterD
b07aa565d4 Synchronized 3 types of star spawning, adjusted star interactions 2020-08-08 18:57:04 -07:00
MysterD
199bd07bb3 Synchronized water bombs
Added packet system to spawn objects on remote
2020-08-07 20:34:12 -07:00
MysterD
444c1fdd3b Synchronized coin collection
Reimplemented how randomness is synchronized
2020-08-07 18:01:58 -07:00
MysterD
e0b86b7d59 Synchronized teleports (e.g. flowerbed) and star collection
Fixed infinite packet_level_warp sending
2020-08-06 20:28:21 -07:00
MysterD
e61b137160 Refactored entity death sync + reliable packets
Embedded an immediate packet send whenever a synced entity is unloaded
from the game.

Added reliable packet sending.
2020-08-05 01:01:50 -07:00
MysterD
4452b38848 Synchronized inside-painting state 2020-08-04 20:49:53 -07:00
MysterD
ec2199892f Force synchronizing of level changes 2020-08-02 23:02:29 -07:00
MysterD
9b5b5acf19 Synchronized goombas, synced randomness, added extra fields to object packets 2020-08-02 18:29:46 -07:00
MysterD
3d055255bc Added ability to sync multiple objects 2020-08-02 16:09:32 -07:00
MysterD
579415dca9 Started synchronizing objects, refactored networking 2020-08-02 01:43:12 -07:00
MysterD
42a52ad936 Fixed synced crawling/climbing animation speed 2020-08-01 21:35:38 -07:00