tera-arise / arise Goto Github PK
View Code? Open in Web Editor NEWA game resurrection project for the final build of TERA EU.
Home Page: https://tera-arise.io
License: GNU Affero General Public License v3.0
A game resurrection project for the final build of TERA EU.
Home Page: https://tera-arise.io
License: GNU Affero General Public License v3.0
arise/src/server/web/Controllers/NewsController.cs
Lines 15 to 23 in e3fb247
https://github.com/tera-arise/arise/tree/master/src/tools/mapper
Lots of research to be done here still.
arise/src/server/world/Bridge/BridgeModuleObfuscationPass.cs
Lines 5 to 14 in dd39613
There are third-party implementations on NuGet but I don't particularly trust their correctness or performance. Would rather wait for native .NET support.
Blocked on:
This is a very, very long term project that will require a lot of experimentation.
The idea is to completely rip out the ancient, slow, and ugly Scaleform GFx UI from the game. We would replace it with a new UI, written from scratch, using Avalonia.
Here's what I think we would roughly have to do:
For the Avalonia backend, I think we would basically just do a classic IDXISwapChain::Present()
hook. In the hook, we make Avalonia render using Direct2D or Win2D, which should be fairly easy since Avalonia already has an official Direct2D backend that we can learn from. Using Direct2D is advantageous because it can interoperate with Direct3D.
Note: TERA only works with DirectX 11.0+ since the 64-bit upgrade. However, Direct2D/Direct3D interop will require Direct3D feature level 11.1. Unfortunately, the client currently hardcodes feature level 11.0 when calling D3D11CreateDevice()
, so we will need to patch that.
Lines 48 to 62 in a77e698
This is only used for deploying the client, so we should just generate it as part of the normal build.
arise/.github/workflows/deploy-client.yml
Lines 38 to 42 in a77e698
arise/src/server/web/Controllers/Api/AccountsController.cs
Lines 299 to 301 in b9903ef
arise/Directory.Packages.props
Lines 21 to 24 in 51e618e
There needs to be a way to point the build system to a 'vendor project' that can control a few things:
Usage should look something like ./cake -c Release --vendor path/to/vendor.proj
. The build system will build that project (if necessary) and then grab whatever it needs from it using well-known target names. If --vendor
is not specified, the defaults in this repository will be used, which should be fine for development/contribution purposes.
As part of this effort, also make sure that we remove stuff like this from the repository:
Blocked on:
This will be needed by the launcher. We don't want to have to open a game connection just to fetch articles.
As with geometry (#48 (comment)), we will use a separate repository for data center sheets, namely arise-data. This will allow us to keep it as a shallow submodule.
After we load the client into memory and perform our modifications, we should checksum the client's code segment periodically.
global.json
.Directory.Packages.props
.dotnet-tools.json
..globalconfig
.arise/src/server/web/wwwroot/arise.webmanifest
Lines 5 to 6 in 6fe0723
Should also add a call to AssertDatabaseMatchesConfigurationOnStartup()
after ApplyAllDatabaseChangesOnStartup()
.
Blocked on:
In particular for actions that send emails.
arise/src/client/launcher/launcher.csproj
Line 18 in 9fdf9bb
The vendor project should be able to provide these for the launcher and website. We should still include some default assets in this repository.
arise/Directory.Packages.props
Lines 3 to 10 in 6c5f66e
arise/src/client/Directory.Build.props
Lines 8 to 9 in dc21823
arise/src/client/switcher/switcher.csproj
Lines 31 to 33 in dc21823
Using this library: https://github.com/Lachee/discord-rpc-csharp
The application ID should be configurable from the vendor project. Ours is 1145819827861196880
.
This was put in place by f83ff17. We will need to get rid of this.
Hopefully "getting rid of it" means that this bug is fixed:
arise/src/shared/data/data.csproj
Line 21 in fe87532
We need to be able to strip server-side data from the data center to reduce download size. This will require build changes to perform the XSLT transformations, but also to produce different Arise.Data.dll
assemblies for client and server.
arise/src/server/web/Mail/MailSender.cs
Line 18 in b9903ef
This should be configurable in the regular configuration files. It should be implemented as a bot rather than using webhooks, so we're less likely to run into rate limiting.
We'll use this library: https://github.com/discord-net/Discord.Net
S1DataDB::Initialize
crash unless we've hooked it appropriately.S1Connection::{Connect,Disconnect}
, S1ConnectionManager::SendPacket
, and S1CommandQueue::RunCommands
crash unless we've hooked it appropriately.isCompanyDomain
and isDevDomain
always return false
without even checking network configuration.Maybe other stuff?
Right now, the LowPriority
/NormalPriority
/HighPriority
split for conduits only has the effect of letting packets get received/sent in each concurrently. We need the .NET QUIC APIs to get support for stream priorities so that the underlying QUIC implementation will also prioritize sends.
arise/src/server/web/DataAnnotations/EmailAttribute.cs
Lines 3 to 15 in 62f0d04
Depends on:
All of our interop bindings need to be moved to Novadrop at some point.
arise/src/shared/gateway/Gateway/GatewayClient.cs
Lines 3 to 8 in 8700030
We should probably use this library to make life easier: https://github.com/reactiveui/refit
arise/src/shared/module/Protection/CodeChecksumTask.cs
Lines 32 to 41 in 53939a4
I'm thinking that we could keep a Dictionary<(int ZoneX, int ZoneY), SoftReference<SpatialZone>>
or similar (SoftReference<T>
). This would let the geometry data get unloaded when there are no strong references to it. This only works well if we hand out SpatialZone
references to callers, which we might not want to do. ๐ค
An alternative would be to use a MemoryCache
with custom eviction logic. For example, we could say that a SpatialZone
that hasn't been queried in a while is probably fine to unload.
Lines 16 to 17 in 861c89d
Task.Delay()
has around ~15 ms of overhead on Windows and ~10 ms on Linux. This is likely to be too much for some combat simulation tasks in the world server.
On Windows, we can implement a custom timer queue backed by CreateWaitableTimerExW
(with the CREATE_WAITABLE_TIMER_HIGH_RESOLUTION
flag) and SetWaitableTimer
(with negative lpDueTime
to avoid clock skew).
On Linux, we can use clock_nanosleep
(with CLOCK_MONOTONIC_RAW
to avoid clock skew) in a dedicated thread. We would need to send the thread a signal with pthread_kill
when the due time needs to be updated.
.NET 8 already has SHA-3 support in the previews, so we can make this switch.
However, it's not clear what our iteration count should be, and OWASP does not yet cover SHA-3: https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html#pbkdf2
c9afc56 removed trimming from the build system. While full trimming is impractical for us, we could explore partial trimming. I think we only do reflection on our own assemblies, so there should be no issue with trimming any third-party assemblies that declare themselves trimmable.
Right now, a client release archive with maximum compression is around 171 MB, which seems rather excessive.
arise/src/server/world/Data/DataTree.cs
Line 16 in fe87532
Just needs some basic logging so we get a sense of how long the loading takes.
This will be needed by the launcher. As with articles (#8), we don't want to have to open a game connection to create an account. The same should probably be the case for changing password, and similar tasks.
arise/.github/workflows/deploy-server.yml
Lines 85 to 98 in 88c5269
This is the only part of the workflow that litters untracked files in the source tree. We should generate these files as part of the regular build and grab them from the output directory.
We need to know exactly which parts we actually need to keep around. Parts of the data center that are leftovers from removed features or are only used on the server side can be excluded.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.