Commit Graph

54 Commits (58eec0e19f82797b3bac8fcae6c40ddd48b6787b)

Author SHA1 Message Date
MysterD 58eec0e19f Removed old chat system 2021-07-01 21:14:11 -07:00
MysterD 1b1ed0038f DJUI: Added join panel 2021-07-01 21:03:14 -07:00
MysterD e424b9f9f3 DJUI: Started adding inputbox 2021-06-29 19:04:23 -07:00
MysterD 8b7ab3c35c DJUI: Added host menu
Added host message menu
Refactored how panel menus are constructed
Adjusted normal font's line height
Adjusted how text boxes detect max lines
2021-06-28 00:04:48 -07:00
MysterD 4504b2c21b DJUI: Added controls menu 2021-06-27 15:54:10 -07:00
MysterD 8b403d4509 DJUI: Added selectionbox 2021-06-26 14:20:39 -07:00
MysterD 28ce5e9cdf DJUI: Added sliders, made Sound menu work 2021-06-25 15:50:31 -07:00
MysterD 05c32ea73e DJUI: Wrote active panel system 2021-06-24 18:15:59 -07:00
MysterD 5131665be2 DJUI: Added 'Three Panel' component 2021-06-23 19:17:46 -07:00
MysterD 580f19dcc9 DJUI: Added keyboard/gamepad support 2021-06-22 20:01:16 -07:00
MysterD a3947b3800 DJUI: started adding options menu 2021-06-22 00:13:37 -07:00
MysterD dfef74e727 Added custom title font
Adjusted text system to have multiple fonts
Added color escape to text
2021-06-21 21:18:27 -07:00
MysterD 7aec232450 Added quit menu
create enabled switch to disable interactables
fixed djui_base_destroy()
added on_click() event
2021-06-21 03:11:53 -07:00
MysterD c0b093b11f DJUI: Created main menu panel
Added ability to make a DjuiBase keep its aspect ration
Added on_render_pre callback
Added ability to display 32b images
Added DjuiFlowLayout
Added logo
2021-06-20 23:34:14 -07:00
MysterD 6e23c952f9 DJUI: Rendering, interactable, and mouse adjustments
Made DJUI render at 60 fps
Added mouse cursor and hooks in SDL for capturing the window-relative mouse position
Started creating an interable system where elements can respond to events such as on_mouse_hover
2021-06-19 18:22:44 -07:00
MysterD 038c1135b3 Initial DJUI commit
The birth of a custom user interface system.

Has the ability to draw things to the screen at native resolution
regardless of window size.

Components can be nested within one another to an arbitrary depth.

Text rendering is completely rewritten.

Text and images can be clipped by their parent container.
2021-06-18 15:23:59 -07:00
MysterD ef2287a5d5 Resynchronized checkerboard elevators to use area timer 2021-06-14 20:29:08 -07:00
MysterD 7ae26b3ea0 Complete rewrite of entity ID reservation system
Now "syncId"s can only be reserved at ID 127+. This ensures that static level
objects and spawned reserved objects never clash. The server keeps track of
every player's list of reserved IDs, as well as when an ID is used, or when
an entity using that ID is destroyed. This is much more complicated than it
used to be, but this complication is required due to players being allowed to
be in different areas of the game.
2021-06-13 16:04:28 -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 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
fgsfds 843a8cd18f djoslin0's new warp code 2021-04-05 03:21:37 +03:00
MysterD 1564ac7c0f Translated Luigi sounds through new Character system 2020-10-16 23:33:41 -07:00
MysterD aaa7e65b65 Created character struct for mario/luigi asset differences
Removed multiple two-player hacks in the process
2020-10-13 18:33:51 -07:00
MysterD c0a30c8de6 Establish new versioning system (beta 1) 2020-10-11 15:49:24 -07:00
MysterD edc275b5e8 Enhancements to networked player infrastructure 2020-10-10 01:18:45 -07:00
MysterD b831acd59c Rewrote how RNG is synchronized
The old implementation was hacky and often returned desynchronized
results. This implementation gives a seed to each sync object, and
synchronizes that seed. Also allows for a seed to be saved temporarily
based on position and recycled for multiple calls.
2020-10-05 19:15:13 -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 9401a79cdc Fix chat so remote is filled-in and local is non-filled-in star 2020-09-28 20:13:44 -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 6d89ed5a9f Added warning when Discord isn't detected. Added missing sounds to buttons and events in menu 2020-09-15 09:47:26 -07:00
MysterD 5abd0ca1ab Complete rewrite of custom main menu
The vanilla main menu is an awful pile of code that is extremely painful
to make additions to. So I've side-stepped the problem by writing an
entiely new menu system without all of vanilla's quirks. I've separated
the custom menu system from the menus I want to make, which allows for
easy additions and a clear separation of responsibilities.

Along with this rewrite comes a host menu, adding the missing
configuration options in-game.

Fixes #29
2020-09-13 23:57:14 -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 284ab37406 Added debug level-warping for testing purposes 2020-09-11 20:10:29 -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 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 1289f863ca Removed 'int' from most of networking code
moved -Werror over to 'STRICT'
2020-09-04 11:43:12 -07:00
MysterD d2a2a80d56 Synchronized Big Boo's Haunt + major changes
Synchronized currentRoom per-player
Synchronized haunted bookshelf, and the bookshelf manager
Synchronized haunted chairs
Synchronized mad piano
Synchronized BBH's tilting trap, and made the physics multiple-player-aware
Synchronized scuttlebugs
Synchronized every variety of Boo
Synchronized elevators
Synchronized flamethrowers
Synchronized the various types of enemy books
Synchronized the book switches
Synchronized jumping box
Made coffins multiple-player-aware

Fixed everything that used gMarioState as an array instead of gMarioStates
Prevented some NPC-dialog softlocks
Prevented the remote player from messing up the local's camera settings
Possibly fixed the relatively rare chain chomp softlock
Possibly fixed the relatively rare chain hoot softlock
Fixed the first-person-camera softlock
Forced camera code to use the correct mario struct
2020-08-26 23:29:40 -07:00
MysterD 48f42d1873 Fixed visual bug when both players are sliding 2020-08-12 19:14:35 -07:00
MysterD 3b00aa9e42 Various synchronization enhancements 2020-08-11 23:00:13 -07:00
MysterD 1bef126df8 Synchronize area changes 2020-08-10 12:08: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 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 7f5dec337e Synchronized King Bobomb
Tried to synchronize dialog stuff, it's way too much of a mess to do
2020-08-08 17:13:11 -07:00
MysterD 444c1fdd3b Synchronized coin collection
Reimplemented how randomness is synchronized
2020-08-07 18:01:58 -07:00
MysterD 0a2c76c76e Fixed max sync distance issue, synced Koopas 2020-08-05 20:25:52 -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 716a924803 Synchronized held objects, made respawners keep their sync ID 2020-08-02 14:18:34 -07:00