mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-09-29 20:03:26 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 104d8af2b4 |
+1
-1
@@ -334,7 +334,7 @@ pacman -Syuu --needed --noconfirm $packages
|
||||
<summary>HaikuOS</summary>
|
||||
|
||||
```sh
|
||||
pkgman install git cmake patch libfmt_devel nlohmann_json lz4_devel opus_devel boost1.90_devel vulkan_devel qt6_base_devel qt6_declarative_devel libsdl2_devel ffmpeg7_devel libx11_devel enet_devel catch2_devel quazip1_qt5_devel qt6_5compat_devel glslang qt6_devel qt6_charts_devel
|
||||
pkgman install git cmake patch libfmt_devel nlohmann_json lz4_devel opus_devel boost1.89_devel vulkan_devel qt6_base_devel qt6_declarative_devel libsdl2_devel ffmpeg7_devel libx11_devel enet_devel catch2_devel quazip1_qt5_devel qt6_5compat_devel glslang qt6_devel qt6_charts_devel
|
||||
```
|
||||
|
||||
[Caveats](./Caveats.md#haikuos).
|
||||
|
||||
+15
-35
@@ -56,7 +56,7 @@ Use this when you need to connect to a multiplayer room for LDN functionality in
|
||||
- Multiplayer Options Configured in Eden Settings
|
||||
- Network Access
|
||||
|
||||
### Steps
|
||||
## Steps
|
||||
There are 2 primary methods that you can use to connect to an existing room, depending on how the room is hosted.
|
||||
|
||||
- Joining a Public Lobby
|
||||
@@ -70,7 +70,7 @@ There are 2 primary methods that you can use to connect to an existing room, dep
|
||||
|
||||
</aside>
|
||||
|
||||
## Joining a Public Lobby
|
||||
### Joining a Public Lobby
|
||||
1. Open Eden and navigate to *Multiplayer → Browse Public Game Lobby*.
|
||||
2. The **Public Room Browser** will now open and display a list of publicly accessible rooms. Find one you want to connect to and double click it.
|
||||
|
||||
@@ -90,7 +90,7 @@ If the hoster has not made the lobby public, or you don't want to find it in the
|
||||
|
||||
---
|
||||
|
||||
## Hosting a Multiplayer Room
|
||||
# Hosting a Multiplayer Room
|
||||
Use this guide for when you want to host a multiplayer lobby to play with others in Eden. In order to have someone access the room from outside your local network, see the *Access Your Multiplayer Room Externally* section for next steps.
|
||||
|
||||
**Click [Here](https://evilperson1337.notion.site/Hosting-a-Multiplayer-Room-2c357c2edaf6819481dbe8a99926cea2) for a version of this guide with images & visual elements.**
|
||||
@@ -100,7 +100,7 @@ Use this guide for when you want to host a multiplayer lobby to play with others
|
||||
- Network Access
|
||||
- Ability to allow programs through the firewall on your device.
|
||||
|
||||
### Steps
|
||||
## Steps
|
||||
1. Open Eden and navigate to *Emulation → Multiplayer → Create Room.*
|
||||
2. Fill out the following information in the popup dialog box.
|
||||
|
||||
@@ -120,7 +120,7 @@ Use this guide for when you want to host a multiplayer lobby to play with others
|
||||
|
||||
---
|
||||
|
||||
## Access Your Multiplayer Room Externally
|
||||
# Access Your Multiplayer Room Externally
|
||||
Quite often the person with whom you want to play is located off of your internal network (LAN). If you want to host a room and play with them you will need to get your devices to communicate with each other. This guide will go over your options on how to do this so that you can play together.
|
||||
|
||||
**Click [Here](https://evilperson1337.notion.site/Access-Your-Multiplayer-Room-Externally-2c357c2edaf681c0ab2ce2ee624d809d) for a version of this guide with images & visual elements.**
|
||||
@@ -129,9 +129,9 @@ Quite often the person with whom you want to play is located off of your interna
|
||||
- Eden set up and Functioning
|
||||
- Network Access
|
||||
|
||||
### Options
|
||||
## Options
|
||||
|
||||
#### Port Forwarding
|
||||
### Port Forwarding
|
||||
|
||||
- **Difficulty Level**: High
|
||||
|
||||
@@ -148,9 +148,8 @@ The process works by creating a static mapping—often called a “port-forward
|
||||
|
||||
For our purposes we would pick the port we want to expose (*e.g. 24872*) and we would access our router's configuration and create a port-forward rule to send the traffic from an external connection to your local machine over our specified port (*24872)*. The exact way to do so, varies greatly by router manufacturer - and sometimes require contacting your ISP to do so depending on your agreement. You can look up your router on [*portforward.com*](https://portforward.com/router.htm) which may have instructions on how to do so for your specific equipment. If it is not there, you will have to use Google/ChatGPT to determine the steps for your equipment.
|
||||
|
||||
Remember you can't have one port open for multiple devices at the same time - you must only host from one device (or do more convoluted networking which we will not cover here).
|
||||
|
||||
#### Use a Tunnelling Service
|
||||
### Use a Tunnelling Service
|
||||
- **Difficulty Level**: Easy
|
||||
|
||||
<aside>
|
||||
@@ -168,7 +167,7 @@ For our purposes we would spawn the listener for the port that way chose when ho
|
||||
- [*Playit.GG*](https://playit.gg/)
|
||||
|
||||
|
||||
#### Use a VPN Service
|
||||
### Use a VPN Service
|
||||
|
||||
- **Difficulty**: Easy
|
||||
|
||||
@@ -190,7 +189,7 @@ The VPN solution is a good compromise between the tunnelling solution and port f
|
||||
|
||||
---
|
||||
|
||||
## Finding the Server Information for a Multiplayer Room
|
||||
# Finding the Server Information for a Multiplayer Room
|
||||
Use this guide when you need to determine the connection information for the Public Multiplayer Lobby you are connected to.
|
||||
|
||||
**Click [Here](https://evilperson1337.notion.site/Finding-the-Server-Information-for-a-Multiplayer-Room-2c557c2edaf6809e94e8ed3429b9eb26) for a version of this guide with images & visual elements.**
|
||||
@@ -199,7 +198,7 @@ Use this guide when you need to determine the connection information for the Pub
|
||||
- Eden set up and configured
|
||||
- Internet Access
|
||||
|
||||
### Steps
|
||||
## Steps
|
||||
|
||||
### Method 1: Grabbing the Address from the Log File
|
||||
1. Open Eden and Connect to the room you want to identify.
|
||||
@@ -223,7 +222,7 @@ Use this guide when you need to determine the connection information for the Pub
|
||||
2. Open the terminal supported by your operating system.
|
||||
3. Run one of the following commands, replacing *<Name>* with the name of the server from step 1.
|
||||
|
||||
#### PowerShell Command [Windows Users]
|
||||
### PowerShell Command [Windows Users]
|
||||
|
||||
```powershell
|
||||
# Calls the API to get the address and port information
|
||||
@@ -236,7 +235,7 @@ Use this guide when you need to determine the connection information for the Pub
|
||||
#}
|
||||
```
|
||||
|
||||
#### CURL Command [MacOS/Linux Users] **Requires jq*
|
||||
### CURL Command [MacOS/Linux Users] **Requires jq*
|
||||
|
||||
```bash
|
||||
# Calls the API to get the address and port information
|
||||
@@ -253,7 +252,7 @@ Use this guide when you need to determine the connection information for the Pub
|
||||
|
||||
---
|
||||
|
||||
## Multiplayer for Local Co-Op Games
|
||||
# Multiplayer for Local Co-Op Games
|
||||
Use this guide when you want to play with a friend on a different system for games that only support local co-op.
|
||||
|
||||
**Click [Here](https://evilperson1337.notion.site/Multiplayer-for-Local-Co-Op-Games-2c657c2edaf680c59975ec6b52022a2d) for a version of this guide with images & visual elements.**
|
||||
@@ -272,7 +271,7 @@ In either situation at its core, we are emulating an input device on the host ma
|
||||
- Parsec is free to use for personal, non-commercial use. For instructions on how to set up an account and install the client you should refer to the Parsec documentation on it's site.
|
||||
- Parsec client installed on your machine and remote (friend's) machine
|
||||
|
||||
### Steps
|
||||
## Steps
|
||||
|
||||
<aside>
|
||||
|
||||
@@ -295,22 +294,3 @@ This guide will assume you are the one hosting the game and go over things *Pars
|
||||
10. Set up the remote player's controller.
|
||||
11. Hit **OK** to apply the changes.
|
||||
12. Launch the game you want to play and enter the co-op mode. How this works depends on the game, so you will have to look in the menus or online to find out.
|
||||
|
||||
## Metaserver troubleshooting
|
||||
|
||||
If you can't connect to the metaserver, it's likely your ISP is blocking the requests.
|
||||
|
||||
### Linux and Steamdeck
|
||||
|
||||
Most Linux systems and Steamdeck should allow to modify the base `/etc/hosts` file, this should fix the DNS lookup issue; hence add the following to said file:
|
||||
```
|
||||
28.165.181.135 api.ynet-fun.xyz api.ynet-fun.xyz
|
||||
```
|
||||
|
||||
### Zapret
|
||||
|
||||
In `lists/list-general.txt` add the following:
|
||||
```
|
||||
api.ynet-fun.xyz
|
||||
ynet-fun.xyz
|
||||
```
|
||||
|
||||
Vendored
+1
@@ -30,6 +30,7 @@
|
||||
"tag": "v%VERSION%",
|
||||
"hash": "5efa8140aadffe105dcf39935b732476e95755f6c7473ada3d0b64df2bc02c557633ae3948a25b45e1cf67e89a3ff6329fb30362e4ac033b9a1d1e453aa2eded",
|
||||
"git_version": "0.37.0",
|
||||
"version": "0.18.7",
|
||||
"find_args": "MODULE GLOBAL",
|
||||
"patches": [
|
||||
"0001-mingw.patch",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||
@@ -51,12 +51,10 @@ void RenderdocAPI::ToggleCapture() {
|
||||
if (!rdoc_api) [[unlikely]] {
|
||||
return;
|
||||
}
|
||||
|
||||
auto* api = static_cast<RENDERDOC_API_1_6_0*>(rdoc_api);
|
||||
if (!is_capturing) {
|
||||
api->StartFrameCapture(NULL, NULL);
|
||||
rdoc_api->StartFrameCapture(NULL, NULL);
|
||||
} else {
|
||||
api->EndFrameCapture(NULL, NULL);
|
||||
rdoc_api->EndFrameCapture(NULL, NULL);
|
||||
}
|
||||
is_capturing = !is_capturing;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
struct RENDERDOC_API_1_7_0;
|
||||
|
||||
namespace Tools {
|
||||
|
||||
class RenderdocAPI {
|
||||
@@ -16,7 +18,7 @@ public:
|
||||
void ToggleCapture();
|
||||
|
||||
private:
|
||||
void* rdoc_api{};
|
||||
RENDERDOC_API_1_7_0* rdoc_api{};
|
||||
bool is_capturing{false};
|
||||
};
|
||||
|
||||
|
||||
@@ -18,25 +18,8 @@ void GameCard::paint(QPainter* painter, const QStyleOptionViewItem& option,
|
||||
painter->save();
|
||||
painter->setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
// Padding, dimensions, alignment...
|
||||
const int column = index.row() % m_columns;
|
||||
const int cell_width = option.rect.width();
|
||||
const int fixed_card_width = cell_width - m_padding;
|
||||
const int margins = 8;
|
||||
|
||||
// The gist of it is that this anchors the left and right sides to the edges,
|
||||
// while maintaining an even gap between each card.
|
||||
// I just smashed random keys into my keyboard until something worked.
|
||||
// Don't even bother trying to figure out what the hell this is doing.
|
||||
const auto total_row_width = m_columns * cell_width;
|
||||
const auto total_gap_space = total_row_width - (margins * 2) - (m_columns * fixed_card_width);
|
||||
const auto gap = (m_columns > 1) ? (total_gap_space / (m_columns - 1)) : 0;
|
||||
|
||||
const auto relative_x = margins + (column * (fixed_card_width + gap));
|
||||
const auto x_pos = option.rect.left() - (column * cell_width) + static_cast<int>(relative_x);
|
||||
|
||||
// also, add some additional padding here to prevent card overlap
|
||||
QRect cardRect(x_pos + 4, option.rect.top() + 4, fixed_card_width - 8, option.rect.height() - margins);
|
||||
// padding
|
||||
QRect cardRect = option.rect.adjusted(4 + m_padding / 2, 4, -4 - m_padding / 2, -4);
|
||||
|
||||
// colors
|
||||
QPalette palette = option.palette;
|
||||
@@ -58,6 +41,8 @@ void GameCard::paint(QPainter* painter, const QStyleOptionViewItem& option,
|
||||
painter->setPen(QPen(borderColor, 1));
|
||||
painter->drawRoundedRect(cardRect, 10, 10);
|
||||
|
||||
static constexpr const int padding = 8;
|
||||
|
||||
// icon
|
||||
int _iconsize = UISettings::values.game_icon_size.GetValue();
|
||||
QSize iconSize(_iconsize, _iconsize);
|
||||
@@ -69,7 +54,7 @@ void GameCard::paint(QPainter* painter, const QStyleOptionViewItem& option,
|
||||
scaledSize.scale(iconSize, Qt::KeepAspectRatio);
|
||||
|
||||
int x = cardRect.left() + (cardRect.width() - scaledSize.width()) / 2;
|
||||
int y = cardRect.top() + margins;
|
||||
int y = cardRect.top() + padding;
|
||||
|
||||
iconRect = QRect(x, y, scaledSize.width(), scaledSize.height());
|
||||
|
||||
@@ -88,7 +73,7 @@ void GameCard::paint(QPainter* painter, const QStyleOptionViewItem& option,
|
||||
painter->restore();
|
||||
} else {
|
||||
// if there is no icon just draw a blank rect
|
||||
iconRect = QRect(cardRect.left() + margins, cardRect.top() + margins, _iconsize, _iconsize);
|
||||
iconRect = QRect(cardRect.left() + padding, cardRect.top() + padding, _iconsize, _iconsize);
|
||||
}
|
||||
|
||||
if (UISettings::values.show_game_name.GetValue()) {
|
||||
@@ -97,8 +82,8 @@ void GameCard::paint(QPainter* painter, const QStyleOptionViewItem& option,
|
||||
|
||||
// padding + text
|
||||
QRect textRect = cardRect;
|
||||
textRect.setTop(iconRect.bottom() + margins);
|
||||
textRect.adjust(margins, 0, -margins, -margins);
|
||||
textRect.setTop(iconRect.bottom() + 8);
|
||||
textRect.adjust(padding, 0, -padding, -padding);
|
||||
|
||||
// We are already crammed on space, ignore the row 2
|
||||
QString title = index.data(Qt::DisplayRole).toString();
|
||||
@@ -126,8 +111,7 @@ QSize GameCard::sizeHint(const QStyleOptionViewItem& option, const QModelIndex&
|
||||
return m_size;
|
||||
}
|
||||
|
||||
void GameCard::setSize(const QSize& newSize, const int padding, const int columns) {
|
||||
void GameCard::setSize(const QSize& newSize, const int padding) {
|
||||
m_size = newSize;
|
||||
m_padding = padding;
|
||||
m_columns = columns;
|
||||
}
|
||||
|
||||
@@ -18,10 +18,9 @@ public:
|
||||
const QModelIndex& index) const override;
|
||||
|
||||
QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
|
||||
void setSize(const QSize& newSize, const int padding, const int columns);
|
||||
void setSize(const QSize& newSize, const int padding);
|
||||
|
||||
private:
|
||||
QSize m_size;
|
||||
int m_padding;
|
||||
int m_columns;
|
||||
};
|
||||
|
||||
@@ -411,7 +411,7 @@ GameList::GameList(FileSys::VirtualFilesystem vfs_, FileSys::ManualContentProvid
|
||||
list_view->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
list_view->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
list_view->setGridSize(QSize(140, 160));
|
||||
m_gameCard->setSize(list_view->gridSize(), 0, 4);
|
||||
m_gameCard->setSize(list_view->gridSize(), 0);
|
||||
|
||||
list_view->setSpacing(10);
|
||||
list_view->setWordWrap(true);
|
||||
@@ -1051,8 +1051,8 @@ void GameList::UpdateIconSize() {
|
||||
|
||||
// And now stretch it a bit to fill out remaining space.
|
||||
// Not perfect but works well enough for now
|
||||
int columns = std::max(1, (view_width - 16) / min_item_width);
|
||||
int stretched_width = ((view_width) - (spacing * (columns - 1))) / columns;
|
||||
int columns = std::max(1, view_width / min_item_width);
|
||||
int stretched_width = (view_width - (spacing * (columns - 1))) / columns;
|
||||
|
||||
// only updates things if grid size is changed
|
||||
QSize grid_size(stretched_width, icon_size + heightMargin);
|
||||
@@ -1060,7 +1060,7 @@ void GameList::UpdateIconSize() {
|
||||
list_view->setUpdatesEnabled(false);
|
||||
|
||||
list_view->setGridSize(grid_size);
|
||||
m_gameCard->setSize(grid_size, stretched_width - min_item_width, columns);
|
||||
m_gameCard->setSize(grid_size, stretched_width - min_item_width);
|
||||
|
||||
list_view->setUpdatesEnabled(true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user