AquaDX/docs/dev/sinmai_dev_notes.md

132 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# maimai2 dev notes
## Item types
| ItemKind | Name |
|----------|-------------------------|
| 1 | Nameplate |
| 2 | Title |
| 3 | Icon |
| 5 | Music Unlock |
| 6 | Music Master Unlock |
| 7 | Music Re:Master Unlock |
| 8 | Music Strong Unlock (?) |
| 9 | Character |
| 10 | Partner |
| 11 | Frame |
| 12 | Tickets |
| 13 | Mile |
| 14 | Intimate Item |
| 15 | Kaleidx Scope Key |
## Multiplayer
### Party Host/Client/Member
Manager.Party.Party/**Host.cs** : Host :
* TCP **Listen** 50100 (Accept into Member)
* UDP Broadcast 50100
* Send: StartRecruit, FinishRecruit
PartyLink/**Party.cs** : Party.Host : Exact same as Host.cs
Manager.Party.Party/**Member.cs** : Member :
* TCP Connect 50100
* Send: JoinResult, Kick, StartPlay, StartClientState, PartyMember{Info/State}, PartyPlayInfo, RequestMeasure
* Recv: RequestJoin, ClientState, ClientPlayInfo, UpdateMechaInfo, ResponseMeasure, FinishNews
PartyLink/**Party.cs** : Party.Member : Exact same as Member.cs
Manager.Party.Party/**Client.cs** : Client :
* UDP **Listen** 50100
* Recv: StartRecruit, FinishRecruit
* TCP Connect 50100
* Recv: JoinResult, Kick, StartPlay, StartClientStatePartyMember{Info/State}, PartyPlayInfo, RequestMeasure
* Send: RequestJoin, ClientState, ClientPlayInfo, UpdateMechaInfo, ResponseMeasure, FinishNews
PartyLink/**Party.cs** : Party.Client : Exact same as Client.cs
**Enums**
* **ClientStateID**: {Setup, Wait, Connect, Request, Joined, FinishSetting, ToReady, BeginPlay, AllBeginPlay, Ready, Sync, Play, FinishPlay, News, NewsEnd, Result, Disconnected, Finish, Error}
* **JoinResult**: {Success, Full, NoRecruit, Disconnect, AlreadyJoined, DifferentGroup, DifferentMusic, DifferentEventMode}
**Models**
* **MechaInfo**: IsJoin (bool), IP Address, MusicID, Entries[2], UserIDs[2], Rating[2], ...
* **RecruitInfo**: MechaInfo, MusicID, GroupID, EventModeID, JoinNumber, PartyStance, Start time, Recv time
* **MemberPlayInfo**: IP Address, Rankings[2], Achieves[2], Combos[2], Miss[2], ...
* **ChainHistory**: PacketNo (int), Chain (int)
**Commands**
* **StartRecruit/FinishRecruit**: RecruitInfo
* **JoinResult**: JoinResult (enum)
* **RequestJoin**: MechaInfo, GroupID, EventModeID
* **UpdateMechaInfo**: MechaInfo
* **Kick**: RecruitInfo, KickBy {Cancel, Start, Disconnect}
* **RequestMeasure/ResponseMeasure**: {} - Sync delay
* **StartPlay**: MaxMeasure (long), MyMeasure (long) - Sync delay
* **StartClientState**: ClientStateID (enum)
* **ClientState**: ClientStateID (enum)
* **PartyMemberInfo**: MechaInfo[2]
* **PartyMemberState**: ClientStateID[2]
* **PartyPlayInfo**: MemberPlayInfo[2], ChainHistory[10], Chain (int), ChainMiss (int), MaxChain (int), IsFullChain (bool), CalcStatus (int)
* **ClientPlayInfo**: IP Address, Count, IsValids[2], Achieves[2], Combos[2], Miss[2], ...
* **FinishNews**: IP Address, IsValids[2], GaugeClears[2], GaugeStockNums[2]
### Setting Host/Client/Member
> This might be for synchronizing event settings across different cabs,
> I'm not sure if this is relevant for multiplayer.
PartyLink/**Setting.cs** : Setting.**Host** :
* TCP **Listen** 50101 (Accept into Setting.Member)
* UDP Broadcast 50101
* Send: SettingHostAddress
* UDP **Listen** 50101
* Recv: SettingHostAddress (Check duplicate host)
PartyLink/**Setting.cs** : Setting.**Client** :
* TCP Connect 50101
* Send: SettingRequest
* Recv: SettingResponse, HeartBeat{}
* UDP **Listen** 50101
* Recv: SettingHostAddress
PartyLink/**Setting.cs** : Setting.**Member** :
* TCP Connect 50101
* Recv: SettingRequest, HeartBeat{}
* Send: SettingResponse, HeartBeat{}
**Models**
* **SettingHostAddress**: IP Address (u32), Group (int)
* **SettingRequest**: Group (int)
* **SettingResponse**: Group (int), Data (isEventMode, eventModeMusicCount, memberNumber)
### Advertise
> For finding IP addresses of other cabs and checking their latency.
PartyLink/**Advertise.cs** : Advertise.Manager :
* UDP **Listen** 50102
* Recv: AdvertiseRequest, AdvertiseResponse, AdvertiseGo
* UDP Broadcast 50102
* Send: AdvertiseRequest, AdvertiseResponse, AdvertiseGo
**Models**
* **AdvertiseRequest**: IP Address (u32), Group (int), Kind (int)
* **AdvertiseResponse**: IP Address (u32), Group (int), Kind (int)
* **AdvertiseGo**: IP Address (u32), Group (int), Kind (int), MaxUsec (long), MyUsec (long)
!! sendTo is not necessarily broadcast !!
### DeliveryChecker
PartyLink/**DeliveryChecker** : DeliveryChecker.Manager :
* UDP **Listen** 50103
* Recv: AdvocateDelivery
* UDP Broadcast 50103
* Send: AdvocateDelivery
**Models**
* **AdvocateDelivery**: IP Address (u32)