ROSE Next classic was an attempt to develop a new version of ROSE Online based on the existing irose code base. Many new developments were added at a technical level with minor or no changes to the core gameplay. The biggest change was porting the old ROSE code from MSSQL to Postgres.
This project has been discontinued but the work is released for others to continue upon it if they wish. While there are some bugs, there are significant enhancements over the original iROSE code.
Since this is likely the "biggest" release of any serious ROSE project in the past several years, we hope that the community will appreciate our efforts.
Thanks to all that contributed.
To get started quickly, consider using the existing Justfile. Available commands:
Available recipes:
build config=CONFIG # Build code projects
build-all config=CONFIG # Build all code and assets
build-assets config=CONFIG # Build game assets
cld key="" # Alias to start auto client in release
client config=CONFIG # Start the client
client-auto config=CONFIG key="" # Start the client and auto-connect looking up the connection info in env
clr key="" # Alias to start auto client in release
dev-setup # Setup dev environment by linking to assets dir
gameserver config=CONFIG # Start gameserver
gs config=CONFIG # alias for `gameserver`
loginserver config=CONFIG # Start loginserver
ls config=CONFIG # alias for `loginserver`
server-all config=CONFIG # Start all servers
worldserver config=CONFIG # Start worldserver
ws config=CONFIG # alias for `worldserver`
- Install all the requirements (see (requirements)[#requirements])
- Setup the database, see (database)(#Database)
- Squash the migrations
- Create the database + tables
- Create a new user
- Run
just build-allto build all the requirements - Run
just dev-setupto setup a local dev environment - Create
dev/server/settings.toml(seedoc/server.toml.examplefor a sample) - Create a
.envfile in the main directory (seedoc/.env.examplefor sample) - Start client
just client
- Rust 1.38+
- Visual studio 2019 Community or better
- "Desktop development with C++" bundle is recommended
- PostgreSQL 12+
- Python 3+ (for scripts)
- Clang-format (for code formatting)
- Powershell core 7.0+
- (Optional) (just)[https://github.com/casey/just]
The project consists of a mix of Rust code and C++ code. In order to build the project one must first build all the Rust dependencies and then build the C++ projects. The Rust crates must be built using the 32-bit mscv toolchain.
It's recommended to set the toolchain override for the entire src/ directory using rustup. E.g.
cd src/
rustup override set stable-i686-pc-windows-msvc
rustup show
Once all the Rust dependendencies are built then all the thirdparty C++ dependencies must be built.
This can be done by compiling the thirdparty.sln solution. Finally we can compile the remaining
projects by compiling the rose-next.sln solution.
- Change into the src directory
cd src/ - Install the 32-bit msvc toolchain
rustup toolchain install stable-i686-pc-windows-msvc - Set the toolchain override
rustup override set stable-i686-pc-windows-msvc - Build all project
cargo buildandcargo build --release
- Open the
thirdparty.slnsolution and compile all projects - Open the
rose-next.slnsolution and compile all the projects
Note: Don't forget to build both configurations (debug/release)
It is recommended to use your own assets but the original rose-next assets can be downloaded from https://f000.backblazeb2.com/file/rose-archive/clients/rose-next-assets.7z
The client requires assets to be baked before it can run. This can be
accomplished using the pipeline tool in conjunction with the bake.manifest
file. However, this process can be automated be running the scripts/bake.ps1 script.
The client project can be run from within Visual Studio to debug the executable. By default
it looks in the dev/game/ directory for the runtime game assets
Run rosenext.exe --server <IP> to connect to a server at a specific IP Address
The client has an extra feature to automatically connect directly to the game world. It requires that all the servers are running and that a character exists and is known by name. E.g. usage:
rosenext.exe --server 127.0.0.1 --username user --password pass --auto-connect-server 1 --auto-connect-channel 1 --auto-connect-character MyChar
ROSE Next uses PostgreSQL for its database. It should work with any version newer than Postgres 12.
To support the ever evolving schema changes of the production, the database files are broken up into smaller "migration" files. Each migration is prefixed with its version and a short descrptive name, e.g. "0001_rose-next". Each migration script has an "up.sql" file used to create all the changes for the migration and a "down.sql" to undo it. To setup the database each of these migrations must be run in order by executing each "up.sql" script.
If setting up the databsae for the first time it is recommended to run the
scripts/squash-migrations.ps1 script which will combine all the migrations
into one sql script which should make it easier to execute in the database.
- Install PostgreSQL 12+
- Create a new database, e.g. "rose-next"
- (Optional) Create a new user for the database
- Run
scripts/squash-migrations.ps1 - Import
database/rose-next.sqlinto the database using your database program- E.g. Using psql:
psql -f database/rose-next.sql
- E.g. Using psql:
- Update
server.tomlwith the connection information for the database
The servers require access to certain game data files. The server looks for these by default in a
folder called data/ at the same level as the executable.
This is controlled in the server.toml configuration, e.g.
[worldserver]
data_dir = "C:\\dev\rose-next\server\data"
[gameserver]
data_dir = "C:\\dev\rose-next\server\data"For development, it's recommended to create symlinks to the asset files used by
the client and folder. One can do this manually in their desired directories or
the script scripts/dev-setup.ps1 can be used. This will create a directory
called dev/ with the subdirectories dev/client and dev/server. These
directories should be set as the working directories when running the
client/server executables.
NOTE: This script assumes that the assets have already been baked at least
one. Refer to the docs for scripts/bake.ps1
- Run the
scripts/dev-setup.ps1script - Update the server configuration file (
dev/server/server.toml) with your database settings.
See the (configuration)(#Configuration) section for further details on how to setup the environment, such as add users, configuring the server and more.
Insert a row into accounts, the following fields are required:
email- The user's email addresspassword- SHA256 encoded and salted version of the user's passwordsalt- The salt used to salt the password
The script scripts/generate-password.py can be used to convert a plain text
password to a sha256 password + salt.
The servers have default values but can optionally read their values from a server.toml file in the
same directory as the executable.
Log levels can be controlled using the values 0-5. With 0 being the highest logging level and 5 being the lowest (no logs)
# Log levels
0 - Trace
1 - Debug
2 - Info
3 - Warn
4 - Error
5 - Off
[database]
ip = "127.0.0.1"
name = "SHO"
username = "seven"
password = "tpqmsgkcm"
[loginserver]
ip = "127.0.0.1"
port = 29000
server_port = 19000
password = "password"
log_level = 2
log_path = "C:\\rose\\logs\\loginserver.log"
[worldserver]
ip = "127.0.0.1"
port = 29100
server_port = 19001
world_name = "1Rose Next" # Prepend number to control ordering in world list
data_dir = "C:\\rose\data\\"
log_level = 2
log_path = "C:\\rose\\logs\\worldserver.log"
[gameserver]
ip = "127.0.0.1"
port = 29200
server_name = "Channel 1"
data_dir = "C:\\rose\\data\\"
log_level = 2
log_path = "C:\\rose\\logs\\worldserver.log"