Skip to content

Commit

Permalink
Merge pull request #29 from EnderdracheLP/feat/ppdm
Browse files Browse the repository at this point in the history
Add per player difficulty and modifier options
  • Loading branch information
michael-r-elp authored Aug 30, 2024
2 parents f4a90fa + b4b39fd commit 2578e54
Show file tree
Hide file tree
Showing 51 changed files with 1,226 additions and 202 deletions.
71 changes: 38 additions & 33 deletions .github/workflows/buildModPR.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ jobs:
submodules: true
lfs: true

- name: Get Version
shell: pwsh
run: |
$branchParts = '${{ github.ref_name }}'.Split('/'); $branchMain = $branchParts[0]; if ($branchParts[0] -match "^\d+$") { $branchMain = 'pr'; $branchSub = "$($branchParts[0])." } elseif ($branchParts.Length -eq 2) { $branchSub = "$($branchParts[1].Replace('.', '-'))." }; echo "version=$((Get-Content ./qpm.shared.json -Raw | ConvertFrom-Json).config.info.version.Split('-')[0])-$($branchMain).${{ github.run_number }}+$($branchSub)ra${{ github.run_attempt }}.$($env:GITHUB_SHA.Substring(0, 7))" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- uses: seanmiddleditch/gha-setup-ninja@v3

# - name: Install Powershell
Expand Down Expand Up @@ -50,60 +56,61 @@ jobs:


# extract branch name
- name: Extract branch name
if: github.event_name != 'pull_request'
shell: bash
run: echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV
id: extract_branch
# - name: Extract branch name
# if: github.event_name != 'pull_request'
# shell: bash
# run: echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV
# id: extract_branch

# extract branch name on pull request
- name: Print branch name
if: github.event_name == 'pull_request'
run: echo "BRANCH_NAME=$(echo ${GITHUB_HEAD_REF})" >> $GITHUB_ENV
# - name: Print branch name
# if: github.event_name == 'pull_request'
# run: echo "BRANCH_NAME=$(echo ${GITHUB_HEAD_REF})" >> $GITHUB_ENV

- name: Set version
run: echo "version=$(echo $version_num-$BRANCH_NAME.${{ github.run_number }})" >> $GITHUB_ENV
# - name: Set version
# run: echo "version=$(echo $version_num-$BRANCH_NAME.${{ github.run_number }})" >> $GITHUB_ENV

# print branch name and version
- name: Get branch name
run: |
echo 'The branch name is' $BRANCH_NAME
echo 'The version is' $version
# - name: Get branch name
# run: |
# echo 'The branch name is' $BRANCH_NAME
# echo 'The version is' $version

- name: Create ndkpath.txt
run: |
echo "$ANDROID_NDK_LATEST_HOME" > ${GITHUB_WORKSPACE}/ndkpath.txt
# - name: Create ndkpath.txt
# run: |
# echo "$ANDROID_NDK_LATEST_HOME" > ${GITHUB_WORKSPACE}/ndkpath.txt

- name: Get QPM
if: steps.cache-qpm.outputs.cache-hit != 'true'
uses: dawidd6/action-download-artifact@v2
with:
github_token: ${{secrets.GITHUB_TOKEN}}
workflow: cargo-build.yml
name: linux-qpm-rust
name: linux-qpm
path: QPM
repo: RedBrumbler/QuestPackageManager-Rust
repo: QuestPackageManager/QPM.CLI

- name: QPM Collapse
run: |
chmod +x ./QPM/qpm-rust
./QPM/qpm-rust collapse
chmod +x ./QPM/qpm
./QPM/qpm collapse
- name: QPM Dependencies Cache
id: cache-qpm-deps
uses: actions/cache@v3
uses: actions/cache@v2
env:
cache-name: cache-qpm-deps
with:
path: /home/runner/.local/share/QPM-Rust/cache
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('qpm.json', '.github/BuildQSounds.yml') }}
path: /home/runner/.local/share/QPM-RS/cache
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('qpm.shared.json') }}
restore-keys: |
${{ runner.os }}-${{ env.cache-name }}-
${{ runner.os }}-${{ env.cache-name }}
- name: QPM Restore
- name: QPM Set Version & Restore
run: |
./QPM/qpm-rust restore
./QPM/qpm package edit --version ${{ env.version }}
./QPM/qpm restore
- name: Check dependency Folders
run: |
Expand All @@ -113,16 +120,14 @@ jobs:
echo "Checking libs"
ls -lh ${GITHUB_WORKSPACE}/extern/libs
echo ""
echo "Checking QPM-Rust/cache Folder"
ls -lh $HOME/.local/share/QPM-Rust/cache
echo "Checking QPM/cache Folder"
ls -lh $HOME/.local/share/QPM-RS/cache
echo ""
- name: Build
run: |
cd ${GITHUB_WORKSPACE}
./QPM/qpm-rust package edit --version ${{ env.version }}
./QPM/qpm-rust qmod build
pwsh -Command ./build.ps1 --actions
pwsh -Command ./build.ps1 -actions
- name: Get Library Name
id: libname
Expand All @@ -135,7 +140,7 @@ jobs:
- name: Package QMOD
run: |
cd ${GITHUB_WORKSPACE}
pwsh -Command ./buildQMOD.ps1 -package
./QPM/qpm qmod zip -i ./build/ -i ./extern/libs/ ${module_id}_${version}.qmod
- name: Upload non-debug artifact
Expand All @@ -155,7 +160,7 @@ jobs:


- name: Upload QMOD
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ env.module_id }}-(UNZIP-for-QMOD).qmod
path: ./${{ env.module_id }}_${{ env.version }}.qmod
Expand Down
17 changes: 8 additions & 9 deletions .vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,25 @@
"${workspaceFolder}/shared",
"${workspaceFolder}/include",
"${workspaceFolder}/extern/includes/**",
"${workspaceFolder}/extern/includes/codegen/include",
"${workspaceFolder}/extern/includes/bs-cordl/include",
"${workspaceFolder}/extern/includes/libil2cpp/il2cpp/libil2cpp",
"${NdkPath}/**"
"${ANDROID_NDK_HOME}/**"
],
"name": "Quest",
"cStandard": "c17",
"cppStandard": "c++20",
"intelliSenseMode": "linux-clang-arm64",
"configurationProvider": "ms-vscode.cmake-tools",
"compilerPath": "${NdkPath}/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe",
"compilerPath": "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe",
"forcedInclude": [],
"browse": {
"path": [
"${NdkPath}/sources/cxx-stl/llvm-libc++/include",
"${NdkPath}/sources/cxx-stl/llvm-libc++abi/include",
"${NdkPath}/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include",
"${NdkPath}/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/local/include",
"${NdkPath}"
"${ANDROID_NDK_HOME}/sources/cxx-stl/system/include",
"${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include",
"${ANDROID_NDK_HOME}"
]
}
},
"mergeConfigurations": true
}
],
"version": 4
Expand Down
3 changes: 3 additions & 0 deletions assets/MpDifficultySelector.bsml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<vertical id='segmentVert' bg='panel-top' anchor-pos-y='-25' pref-width='60' min-height='10' vertical-fit='MinSize' pad='2' active='false'>
<text-segments id='difficultyControl' select-cell='SetSelectedDifficulty' />
</vertical>
8 changes: 8 additions & 0 deletions assets/MpPerPlayerToggles.bsml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<horizontal id="ppth">
<vertical min-width='45' horizontal-fit='MinSize'> </vertical>
<vertical min-width='45' horizontal-fit='MinSize'> </vertical>
<vertical min-width='45' horizontal-fit='MinSize'>
<toggle-setting id='ppdt' value='PerPlayerDifficulty' apply-on-change='true' text='Per Player Difficulty' hover-hint='Allows each player to select their own difficulty!' bind-value='true'/>
<toggle-setting id='ppmt' value='PerPlayerModifiers' apply-on-change='true' text='Per Player Modifiers' hover-hint="Allows each player to select their own modifiers!" bind-value='true'/>
</vertical>
</horizontal>
5 changes: 0 additions & 5 deletions cpp.hint

This file was deleted.

5 changes: 3 additions & 2 deletions include/Objects/MpPlayersDataModel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpPlayersDataModel, GlobalNamespace::LobbyPlayersDataModel,
DECLARE_INSTANCE_FIELD_PRIVATE(Networking::MpPacketSerializer*, _packetSerializer);
DECLARE_INSTANCE_FIELD_PRIVATE(Beatmaps::Providers::MpBeatmapLevelProvider*, _beatmapLevelProvider);
DECLARE_INSTANCE_FIELD(Beatmaps::Providers::MpBeatmapLevelProvider*, _beatmapLevelProvider);
using PacketDict = System::Collections::Generic::Dictionary_2<StringW, Beatmaps::Packets::MpBeatmapPacket*>;
DECLARE_INSTANCE_FIELD_PRIVATE(PacketDict*, _lastPlayerBeatmapPackets);

Expand All @@ -28,10 +28,11 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpPlayersDataModel, GlobalNamesp
using Base = GlobalNamespace::LobbyPlayersDataModel;
void Activate_override();
void Deactivate_override();
void HandlePlayerConnected(GlobalNamespace::IConnectedPlayer* connectedPlayer);
void HandleMenuRpcManagerGetRecommendedBeatmap_override(StringW userId);
void HandleMenuRpcManagerRecommendBeatmap_override(StringW userId, GlobalNamespace::BeatmapKeyNetSerializable* beatmapKey);
void SetLocalPlayerBeatmapLevel_override(GlobalNamespace::BeatmapKey& beatmapKey);
void SendMpBeatmapPacket(GlobalNamespace::BeatmapKey beatmapKey);
void SendMpBeatmapPacket(GlobalNamespace::BeatmapKey beatmapKey, GlobalNamespace::IConnectedPlayer* player = nullptr);
private:
void PutPlayerPacket(StringW playerId, Beatmaps::Packets::MpBeatmapPacket* packet);
)
4 changes: 4 additions & 0 deletions include/UI/CustomBeatmapSelectionView.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include "custom-types/shared/macros.hpp"
#include "custom-types/shared/coroutine.hpp"
#include "lapiz/shared/macros.hpp"

#include "Objects/MpPlayersDataModel.hpp"
Expand All @@ -15,4 +16,7 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, CustomBeatmapSelectionView, GlobalNam
DECLARE_OVERRIDE_METHOD_MATCH(void, SetBeatmap, &GlobalNamespace::BeatmapSelectionView::SetBeatmap, ByRef<GlobalNamespace::BeatmapKey> beatmapKey);

DECLARE_INJECT_METHOD(void, Inject, MultiplayerCore::Objects::MpPlayersDataModel* mpPlayersDataModel, Beatmaps::Providers::MpBeatmapLevelProvider* mpBeatmapLevelProvider);

public:
custom_types::Helpers::Coroutine SetBeatmapCoroutine(GlobalNamespace::BeatmapKey beatmapKey, std::string levelHash);
)
4 changes: 4 additions & 0 deletions include/UI/CustomEditableBeatmapSelectionView.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include "custom-types/shared/macros.hpp"
#include "custom-types/shared/coroutine.hpp"
#include "lapiz/shared/macros.hpp"

#include "Objects/MpPlayersDataModel.hpp"
Expand All @@ -15,4 +16,7 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, CustomEditableBeatmapSelectionView, G
DECLARE_OVERRIDE_METHOD_MATCH(void, SetBeatmap, &GlobalNamespace::BeatmapSelectionView::SetBeatmap, ByRef<GlobalNamespace::BeatmapKey> beatmapKey);

DECLARE_INJECT_METHOD(void, Inject, MultiplayerCore::Objects::MpPlayersDataModel* mpPlayersDataModel, Beatmaps::Providers::MpBeatmapLevelProvider* mpBeatmapLevelProvider);

public:
custom_types::Helpers::Coroutine SetBeatmapCoroutine(GlobalNamespace::BeatmapKey beatmapKey, std::string levelHash);
)
6 changes: 5 additions & 1 deletion include/UI/GameServerPlayerTableCellCustomData.hpp
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
#pragma once

#include "custom-types/shared/macros.hpp"
#include "custom-types/shared/coroutine.hpp"
#include "lapiz/shared/macros.hpp"
#include "UnityEngine/MonoBehaviour.hpp"
#include "../Objects/MpPlayersDataModel.hpp"
#include "Beatmaps/Providers/MpBeatmapLevelProvider.hpp"
#include "GlobalNamespace/GameServerPlayerTableCell.hpp"
#include "GlobalNamespace/IConnectedPlayer.hpp"
#include "GlobalNamespace/ILobbyPlayerData.hpp"

DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, GameServerPlayerTableCellCustomData, UnityEngine::MonoBehaviour,
DECLARE_INJECT_METHOD(void, Inject, MultiplayerCore::Objects::MpPlayersDataModel* mpPlayersDataModel);
DECLARE_INJECT_METHOD(void, Inject, MultiplayerCore::Objects::MpPlayersDataModel* mpPlayersDataModel, MultiplayerCore::Beatmaps::Providers::MpBeatmapLevelProvider* beatmapLevelProvider);
DECLARE_INSTANCE_FIELD_PRIVATE(MultiplayerCore::Objects::MpPlayersDataModel*, _mpPlayersDataModel);
DECLARE_INSTANCE_FIELD(MultiplayerCore::Beatmaps::Providers::MpBeatmapLevelProvider*, _mpBeatmapLevelProvider);
DECLARE_INSTANCE_FIELD(GlobalNamespace::GameServerPlayerTableCell*, _gameServerPlayerTableCell);

DECLARE_INSTANCE_METHOD(void, Awake);
public:
void SetData(GlobalNamespace::IConnectedPlayer* connectedPlayer, GlobalNamespace::ILobbyPlayerData* playerData, bool hasKickPermissions, bool allowSelection, System::Threading::Tasks::Task_1<GlobalNamespace::EntitlementStatus>* getLevelEntitlementTask);
custom_types::Helpers::Coroutine SetDataCoroutine(GlobalNamespace::IConnectedPlayer* connectedPlayer, GlobalNamespace::ILobbyPlayerData* playerData, bool hasKickPermissions, bool allowSelection, System::Threading::Tasks::Task_1<GlobalNamespace::EntitlementStatus>* getLevelEntitlementTask);
private:
void SetLevelFoundValues(bool displayLevelText);
)
95 changes: 95 additions & 0 deletions include/UI/MpPerPlayerUI.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
#pragma once

#include "custom-types/shared/macros.hpp"
#include "lapiz/shared/macros.hpp"

#include "GlobalNamespace/GameServerLobbyFlowCoordinator.hpp"
#include "GlobalNamespace/BeatmapLevelsModel.hpp"


#include "System/Object.hpp"
#include "System/IDisposable.hpp"
#include "Zenject/IInitializable.hpp"

#include "UnityEngine/UI/VerticalLayoutGroup.hpp"
#include "UnityEngine/UI/HorizontalLayoutGroup.hpp"
#include "UnityEngine/CanvasGroup.hpp"

#include "HMUI/TextSegmentedControl.hpp"

#include "bsml/shared/BSML/Components/Settings/ToggleSetting.hpp"

#include "Beatmaps/Providers/MpBeatmapLevelProvider.hpp"
#include "Objects/MpPlayersDataModel.hpp"
#include "Networking/MpPacketSerializer.hpp"
#include "Repositories/MpStatusRepository.hpp"

#include "Players/Packets/MpPerPlayerPacket.hpp"
#include "Players/Packets/GetMpPerPlayerPacket.hpp"

DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::UI, MpPerPlayerUI, System::Object, std::vector<Il2CppClass*>({ classof(::Zenject::IInitializable*), classof(::System::IDisposable*)}),

DECLARE_INSTANCE_FIELD(GlobalNamespace::GameServerLobbyFlowCoordinator*, _gameServerLobbyFlowCoordinator);
DECLARE_INSTANCE_FIELD(GlobalNamespace::LobbySetupViewController*, _lobbyViewController);
DECLARE_INSTANCE_FIELD(GlobalNamespace::ILobbyGameStateController*, _gameStateController);
DECLARE_INSTANCE_FIELD(GlobalNamespace::BeatmapLevelsModel*, _beatmapLevelsModel);
DECLARE_INSTANCE_FIELD(GlobalNamespace::MultiplayerSessionManager*, _multiplayerSessionManager);
DECLARE_INSTANCE_FIELD(MultiplayerCore::Beatmaps::Providers::MpBeatmapLevelProvider*, _beatmapLevelProvider);
DECLARE_INSTANCE_FIELD(MultiplayerCore::Objects::MpPlayersDataModel*, _playersDataModel);
DECLARE_INSTANCE_FIELD(MultiplayerCore::Networking::MpPacketSerializer*, _packetSerializer);
DECLARE_INSTANCE_FIELD(MultiplayerCore::Repositories::MpStatusRepository*, _statusRepository);

// Values
DECLARE_INSTANCE_FIELD(GlobalNamespace::BeatmapKey, _currentBeatmapKey);
DECLARE_INSTANCE_FIELD(ListW<StringW>, _allowedDifficulties);

DECLARE_OVERRIDE_METHOD_MATCH(void, Initialize, &::Zenject::IInitializable::Initialize);
DECLARE_OVERRIDE_METHOD_MATCH(void, Dispose, &::System::IDisposable::Dispose);

DECLARE_INSTANCE_METHOD(void, DidActivate, bool firstActivation, bool addedToHierarchy, bool screenSystemEnabling);
DECLARE_INSTANCE_METHOD(void, ModifierSelectionDidActivate, bool firstActivation, bool addedToHierarchy, bool screenSystemEnabling);
// DECLARE_INSTANCE_METHOD(void, DidDeactivate, bool removedFromHierarchy, bool screenSystemDisabling);
DECLARE_INSTANCE_METHOD(void, SetLobbyState, GlobalNamespace::MultiplayerLobbyState state);
DECLARE_INSTANCE_METHOD(void, LocalSelectedBeatmap, GlobalNamespace::LevelSelectionFlowCoordinator::State* state);
DECLARE_INSTANCE_METHOD(void, UpdateDifficultyListWithBeatmapKey, GlobalNamespace::BeatmapKey beatmapKey);
DECLARE_INSTANCE_METHOD(void, UpdateDifficultyList, ListW<StringW> difficulties);
DECLARE_INSTANCE_METHOD(void, ClearLocalSelectedBeatmap);
DECLARE_INSTANCE_METHOD(void, HandleMpPerPlayerPacket, MultiplayerCore::Players::Packets::MpPerPlayerPacket* packet, GlobalNamespace::IConnectedPlayer* player);
DECLARE_INSTANCE_METHOD(void, HandleGetMpPerPlayerPacket, MultiplayerCore::Players::Packets::GetMpPerPlayerPacket* packet, GlobalNamespace::IConnectedPlayer* player);
DECLARE_INSTANCE_METHOD(void, UpdateButtonsEnabled);

DECLARE_INSTANCE_METHOD(void, SetSelectedDifficulty, HMUI::SegmentedControl* control, int index);
DECLARE_INSTANCE_METHOD(void, set_PerPlayerDifficulty, bool value);
DECLARE_INSTANCE_METHOD(bool, get_PerPlayerDifficulty);
DECLARE_INSTANCE_METHOD(void, set_PerPlayerModifiers, bool value);
DECLARE_INSTANCE_METHOD(bool, get_PerPlayerModifiers);

DECLARE_CTOR(ctor,
GlobalNamespace::GameServerLobbyFlowCoordinator* gameServerLobbyFlowCoordinator,
GlobalNamespace::BeatmapLevelsModel* beatmapLevelsModel,
GlobalNamespace::IMultiplayerSessionManager* sessionManager,
MultiplayerCore::Beatmaps::Providers::MpBeatmapLevelProvider* beatmapLevelProvider,
MultiplayerCore::Objects::MpPlayersDataModel* playersDataModel,
MultiplayerCore::Networking::MpPacketSerializer* packetSerializer,
MultiplayerCore::Repositories::MpStatusRepository* statusRepository
);

// UI Elements
DECLARE_INSTANCE_FIELD(UnityEngine::UI::VerticalLayoutGroup*, segmentVert);
DECLARE_INSTANCE_FIELD(UnityEngine::UI::HorizontalLayoutGroup*, ppth);
DECLARE_INSTANCE_FIELD(HMUI::TextSegmentedControl*, difficultyControl);
DECLARE_INSTANCE_FIELD(BSML::ToggleSetting*, ppdt);
DECLARE_INSTANCE_FIELD(BSML::ToggleSetting*, ppmt);
DECLARE_INSTANCE_FIELD(UnityEngine::CanvasGroup*, _difficultyCanvasGroup);

// Event Listeners
// Delegates
DECLARE_INSTANCE_FIELD(HMUI::ViewController::DidActivateDelegate*, didActivateDelegate);
DECLARE_INSTANCE_FIELD(HMUI::ViewController::DidActivateDelegate*, modifierSelectionDidActivateDelegate);
// DECLARE_INSTANCE_FIELD(HMUI::ViewController::DidDeactivateDelegate*, didDeactivateDelegate);
DECLARE_INSTANCE_FIELD(System::Action_1<GlobalNamespace::MultiplayerLobbyState>*, setLobbyStateDelegate);
DECLARE_INSTANCE_FIELD(System::Action_1<GlobalNamespace::LevelSelectionFlowCoordinator::State*>*, localSelectedBeatmapDelegate);
DECLARE_INSTANCE_FIELD(System::Action_1<GlobalNamespace::BeatmapKey>*, updateDifficultyListDelegate);
DECLARE_INSTANCE_FIELD(System::Action*, clearLocalSelectedBeatmapDelegate);
DECLARE_INSTANCE_FIELD(System::Action*, updateButtonsEnabledDelegate);
)
7 changes: 7 additions & 0 deletions include/Utilities.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,11 @@ namespace MultiplayerCore {
if (hash.ends_with(" WIP")) hash = hash.substr(0, hash.size() - 4);
return std::string(hash);
}

template<typename T>
std::future<T> finished_future(T& value) {
std::promise<T> p;
p.set_value(std::forward<T>(value));
return p.get_future();
}
}
2 changes: 2 additions & 0 deletions include/assets.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ DECLARE_FILE(_binary_LoadingIndicator_bsml, Assets, LoadingIndicator_bsml);
DECLARE_FILE(_binary_MissingReq_png, Assets, MissingReq_png);
DECLARE_FILE(_binary_MissingSprite_png, Assets, MissingSprite_png);
DECLARE_FILE(_binary_MissingSuggestion_png, Assets, MissingSuggestion_png);
DECLARE_FILE(_binary_MpDifficultySelector_bsml, Assets, MpDifficultySelector_bsml);
DECLARE_FILE(_binary_MpPerPlayerToggles_bsml, Assets, MpPerPlayerToggles_bsml);
DECLARE_FILE(_binary_RequirementsButton_bsml, Assets, RequirementsButton_bsml);
DECLARE_FILE(_binary_RequirementsUI_bsml, Assets, RequirementsUI_bsml);
DECLARE_FILE(_binary_Warning_png, Assets, Warning_png);
Loading

0 comments on commit 2578e54

Please sign in to comment.