Go to file
HunterHeard 029aca6548 Co-op ripples (#118)
* First attempt

First attempt at having other Mario objects create ripples.

Works very inconsistently, the position of players not currently interacting with the painting seems to influence whether the ripples will work or not

* Moved nearest mario code from geo_painting_update

Instead of using the nearest mario object for geo_painting_update, I use it in painting.c functions that called for gPaintingMarioXYZPos, substituting the nearest Mario object's position instead, as well as using it for the last floor mario was over.

This method still isn't quite perfect and there's a few more things I'd like to fix/change.
1. If a Mario is closer to the painting (perhaps right against the middle) other Mario's can't trigger ripplings at all unless they get closer than the closest Mario
2. I would like for all Entry and Exit ripples to interrupt each other, meaning if multiple Marios jump in, each one triggers a ripple one after the other
3. I want to hear the other player's exit sounds

* Add currPositionValid

Sets currPositionValid to false for NetworkPlayers who are connected, who changed levels to a level different from the local player, and who are not the local player when the local player changes levels.

* Set currPositionValid

Sets currPositionValid to false for update packets that don't match local area.
Sets it to true for update packets that do match local area.

* Send change area/level immediately

Adds a function network_on_loaded_area2() which only sends a change level or area event and doesn't clear the sync ids.
Calls this function almost immediately as opposed to waiting for LOADING_LEVEL_THRESHOLD frames

* Add currPositionValid to NetworkPlayer

currPositionValid (which is used by painting.c to determine if a player should be considered for the closest player to the painting) is a variable that tells you if a network player's marioObj has a position which can be relied upon as a valid position for that player.

network_player_update_course_level sets it to false for a network player if the new location does not match the local player's location.
network_receive_player sets it to false if a network player's update is from a different location than the local player, but sets it to TRUE if the update is from the same location.
update_course does NOT set it to true, because the location is not sure to be valid until we've received a location from the player with the right location attached to it.

* Use currValidPosition correctly

Uses currValidPosition correctly, also add debug text for seeing closest player to painting.

* fix merge

* Fix merge

* Verboser logging and invpos on enter

* Multi collision arrays

* Removed nearest code, added comments

* Added simultaneous ripples on one painting

* Added commented Gamepad from Background line

* Removed debug logging

* renamed secondary network_on_loaded function

* Added early multiple paintings rippling at once

* Added multiple paintings rippling simultaneously

Co-authored-by: djoslin0 <djoslin0@users.noreply.github.com>
2022-08-07 01:08:00 -07:00
.github/ISSUE_TEMPLATE
actors Fix clang/mac compile 2022-05-19 19:42:07 -07:00
assets Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
autogen Add some more functions for use in LUA, And expose others. (#129) 2022-08-05 22:17:05 -07:00
bin 3-digits orange numbers; Fixed red coins and secrets bugs; Correct red coins display during pause (#82) 2022-05-07 19:09:37 -07:00
data Fix up includes for clang 2022-08-05 20:55:31 -07:00
developer Cleanup ; recursive descent fixes ; fixed behavior override comparisons 2022-06-02 19:07:43 -07:00
docs/lua Add some more functions for use in LUA, And expose others. (#129) 2022-08-05 22:17:05 -07:00
doxygen
include Added a full new custom behavior system (#124) 2022-06-02 12:19:54 -07:00
levels Sync setHome value in spawn object 2022-06-02 21:02:43 -07:00
lib Raspberry Pi Support (#117) 2022-06-05 19:40:21 -07:00
misc
mods Fix up camera overrides in sm74 2022-08-05 21:18:37 -07:00
res Add Icon to windows build (#96) 2022-05-19 16:33:17 -07:00
sound Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
src Co-op ripples (#118) 2022-08-07 01:08:00 -07:00
text Allow course names/acts to be changed from Lua 2022-04-09 23:28:36 -07:00
textures 3-digits orange numbers; Fixed red coins and secrets bugs; Correct red coins display during pause (#82) 2022-05-07 19:09:37 -07:00
tools Fix warnings/compile errors on Linux 2022-03-13 18:45:42 -07:00
.clang-format
.clang-tidy
.gitattributes
.gitignore Add gamepad number, background options (#122) 2022-06-05 19:16:24 -07:00
CHANGES Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
Dockerfile Fix compiling on Docker (#125) 2022-06-05 19:12:23 -07:00
Doxyfile
Jenkinsfile Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
Makefile DynOS Bin Compression (#131) 2022-06-25 00:52:53 -07:00
Makefile.split Fix up Makefile for coop-compiler 2022-03-21 16:46:31 -07:00
README.md Fix collision bug in dark world and edit readme.md (#134) 2022-06-25 00:59:48 -07:00
README_es_ES.md
README_pt_BR.md
README_zh_CN.md
SAVE_FORMAT.MD
asmdiff.jp.sh
assets.json Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
c2obj.py
charmap.txt
charmap_menu.txt
credits.txt Update credits 2022-04-06 01:31:58 -07:00
diff.py Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
diff_settings.py Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
dynos.mk
extract_assets.py Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
first-diff.py Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
format.sh
obj2c.py
pisetup.sh
rename_sym.sh Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
sm64.eu.sha1
sm64.jp.sha1
sm64.ld Added extended bounds 2022-04-06 08:40:22 -07:00
sm64.sh.sha1
sm64.us.sha1
undefined_syms.txt Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
util.mk Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00

README.md

sm64ex-coop

Online multiplayer mod for SM64 that synchronizes all entities and every level for multiple players. Fork of sm64pc/sm64ex.

Feel free to report bugs and contribute, but remember, there must be no upload of any copyrighted asset. Run ./extract_assets.py --clean && make clean or make distclean to remove ROM-originated content.

How to Play

Instructions on how to play are available on the wiki.

Goal (accomplished)

Create a mod for the PC port where multiple people can play online together.

Unlike previous online attempts, this one synchronized enemies and events. This allows players to be interacting with the same world at the same time.

Discord

https://discord.gg/TJVKHS4