Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
UDSoundRuntime.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "AudioRuntime.hpp"
4#include "DataBanks.hpp"
8
9#include <array>
10#include <cstddef>
11#include <cstdint>
12#include <expected>
13#include <optional>
14#include <string>
15
16namespace monopoly::udsound
17{
18 inline constexpr data::DataTag WarningTag = 0x0849;
19 inline constexpr data::DataTag ClickTag = 0x084A;
20 inline constexpr data::DataTag BuildTag = 0x084B;
21 inline constexpr data::DataTag CashUpTag = 0x084C;
22 inline constexpr data::DataTag CashDownTag = 0x084D;
23 inline constexpr data::DataTag CreditsTag = 0x084E;
24 inline constexpr data::DataTag MusicBaseTag = 0x084F;
25 inline constexpr data::DataTag SaveFailureTag = 0x0856;
26 inline constexpr data::DataTag UnbuildTag = 0x085B;
27 inline constexpr data::DataTag SirenBaseTag = 0x066B;
28 inline constexpr std::uint8_t SirenCount = 2;
29 inline constexpr std::uint8_t MusicTuneCount = 5;
30
32 {
33 bool skipped{};
34 bool started{};
35 bool queued{};
36 };
38 {
39 public:
40 [[nodiscard]] std::expected<void, std::string> warning(audio::Runtime& audio);
41 [[nodiscard]] std::expected<void, std::string> click(audio::Runtime& audio);
42 [[nodiscard]] std::expected<void, std::string> build(audio::Runtime& audio);
43 [[nodiscard]] std::expected<void, std::string> unbuild(audio::Runtime& audio);
44 [[nodiscard]] std::expected<void, std::string> saveFailure(audio::Runtime& audio);
45 [[nodiscard]] std::expected<void, std::string> siren(
46 audio::Runtime& audio, std::uint8_t variant);
47 [[nodiscard]] std::expected<void, std::string> cashUp(audio::Runtime& audio);
48 [[nodiscard]] std::expected<void, std::string> cashDown(audio::Runtime& audio);
49 [[nodiscard]] std::expected<void, std::string> syncMusic(
50 audio::Runtime& audio, bool gameInProgress, bool musicOn,
51 std::uint8_t tuneIndex, bool creditsActive = false);
52 [[nodiscard]] std::expected<void, std::string> syncCash(
54
55 [[nodiscard]] std::expected<TokenVoicePlayResult, std::string> tokenVoice(
56 audio::Runtime& audio, bool voicesOn, std::uint8_t token,
58 std::uint32_t randomValue);
59 [[nodiscard]] std::expected<TokenVoicePlayResult, std::string> pennybagsVoice(
61 TokenVoiceClipPolicy policy, std::uint32_t randomValue);
62 [[nodiscard]] std::expected<TokenVoicePlayResult, std::string> pennybagsSpecific(
65 [[nodiscard]] std::expected<bool, std::string> syncTokenVoices(
66 audio::Runtime& audio);
67 void watchTokenVoice(audio::Runtime& audio, std::uint8_t token) noexcept;
68 void watchPennybags(audio::Runtime& audio) noexcept;
70 const audio::Runtime& audio, std::uint8_t token) const noexcept;
71 [[nodiscard]] bool talkingQueueIdle(const audio::Runtime& audio) const noexcept;
73 { return !pendingTalkingVoice_; }
74
75 void reset(audio::Runtime* audio = nullptr) noexcept;
76 [[nodiscard]] std::optional<data::DataId> currentMusic() const noexcept
77 { return currentMusic_; }
78
79 private:
80 struct PendingTalkingVoice
81 {
82 std::optional<std::uint8_t> token;
83 data::DataId wave{};
84 float gain{1.0F};
85 };
86 [[nodiscard]] bool anyTalking(const audio::Runtime& audio) const noexcept;
87 void stopTalking(audio::Runtime& audio) noexcept;
88 void watchTalking(const audio::Runtime& audio) noexcept;
89 [[nodiscard]] std::expected<void, std::string> startTalkingVoice(
90 audio::Runtime& audio, const PendingTalkingVoice& voice);
91 [[nodiscard]] std::expected<TokenVoicePlayResult, std::string> playTalkingVoice(
92 audio::Runtime& audio, PendingTalkingVoice voice,
94
95 std::optional<data::DataId> currentMusic_;
96 std::uint8_t creditsMusicStatus_{};
97 std::optional<PendingTalkingVoice> pendingTalkingVoice_;
98 std::array<bool, TokenVoiceTokenCount> watchedTokenVoices_{};
99 bool watchedPennybags_{};
100 };
101}
unsigned index
int token
std::expected< void, std::string > saveFailure(audio::Runtime &audio)
std::expected< void, std::string > click(audio::Runtime &audio)
std::expected< void, std::string > syncCash(audio::Runtime &audio, ibar::ScoreCashChange change)
std::expected< void, std::string > syncMusic(audio::Runtime &audio, bool gameInProgress, bool musicOn, std::uint8_t tuneIndex, bool creditsActive=false)
std::expected< void, std::string > cashDown(audio::Runtime &audio)
void watchTokenVoice(audio::Runtime &audio, std::uint8_t token) noexcept
std::expected< void, std::string > build(audio::Runtime &audio)
void watchPennybags(audio::Runtime &audio) noexcept
bool talkingQueueIdle(const audio::Runtime &audio) const noexcept
std::expected< void, std::string > siren(audio::Runtime &audio, std::uint8_t variant)
std::expected< bool, std::string > syncTokenVoices(audio::Runtime &audio)
std::expected< TokenVoicePlayResult, std::string > pennybagsSpecific(audio::Runtime &audio, bool hostCommentsOn, data::DataId wave, TokenVoiceClipPolicy policy)
std::optional< data::DataId > currentMusic() const noexcept
std::expected< void, std::string > unbuild(audio::Runtime &audio)
bool postLockVoiceSlotEmpty() const noexcept
std::expected< TokenVoicePlayResult, std::string > pennybagsVoice(audio::Runtime &audio, bool hostCommentsOn, PennybagsVoice voice, TokenVoiceClipPolicy policy, std::uint32_t randomValue)
void reset(audio::Runtime *audio=nullptr) noexcept
std::expected< TokenVoicePlayResult, std::string > tokenVoice(audio::Runtime &audio, bool voicesOn, std::uint8_t token, TokenVoiceLine line, TokenVoiceClipPolicy policy, std::uint32_t randomValue)
bool tokenVoiceActive(const audio::Runtime &audio, std::uint8_t token) const noexcept
std::expected< void, std::string > cashUp(audio::Runtime &audio)
std::expected< void, std::string > warning(audio::Runtime &audio)
std::uint32_t DataId
Definition DataBanks.hpp:10
std::uint16_t DataTag
Definition DataBanks.hpp:11
constexpr data::DataTag SaveFailureTag
constexpr data::DataTag BuildTag
constexpr data::DataTag SirenBaseTag
constexpr std::uint8_t MusicTuneCount
constexpr data::DataTag UnbuildTag
constexpr std::uint8_t SirenCount
constexpr data::DataTag CreditsTag
constexpr data::DataTag WarningTag
constexpr data::DataTag MusicBaseTag
constexpr data::DataTag CashUpTag
constexpr data::DataTag CashDownTag
constexpr data::DataTag ClickTag