Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
22e335e
Resources Replaced ...
CO2-code Sep 21, 2025
bbead93
removed unnecessary files
CO2-code Sep 21, 2025
1544dd0
Update :)
CO2-code Oct 2, 2025
af61267
Updates....
CO2-code Oct 2, 2025
e49c778
moved config. files from theme Default to Resources folder.
CO2-code Oct 2, 2025
3a662fb
DTACnCNetClient.ini must be in ThemeDefault
CO2-code Oct 2, 2025
854b0c3
updates.
CO2-code Oct 7, 2025
9f02ba3
replace Resources/ThemeDefault/LANGameLobby.ini
CO2-code Oct 9, 2025
f912a7a
Add files via upload
CO2-code Oct 9, 2025
269658e
Map preview/ binaries updated.
CO2-code Oct 9, 2025
6ede10d
Map bug fixed.
CO2-code Oct 9, 2025
dcc5387
Merge branch 'master' of https://github.com/CO2-code/cncnet-ra-client…
CO2-code Oct 9, 2025
1b3f5f3
Create LANGameLobby.ini
CO2-code Oct 9, 2025
1d18238
Delete LANGameLobby.ini
CO2-code Oct 9, 2025
7722a83
Move theme non-related ini's to the `Resources` folder
MahBoiDeveloper Oct 9, 2025
20c08c1
Fix `Got It` button position and enable border draw
MahBoiDeveloper Oct 10, 2025
b031265
Enable borders drawing
MahBoiDeveloper Oct 22, 2025
c5b0879
Update client binaries to 2.12.12 version
MahBoiDeveloper Oct 22, 2025
58494b7
ClientGameType changed to RA, added voiceicon.png and deleted client …
CO2-code Oct 22, 2025
2e7396c
Update client binaries to 2.12.13 version
MahBoiDeveloper Oct 23, 2025
9fa1dd8
Update regular and bold sprite fonts with latet CJK changes
MahBoiDeveloper Oct 23, 2025
c901a34
maps
CO2-code Oct 23, 2025
40cab79
Add files via upload
CO2-code Oct 23, 2025
884a88d
Add files via upload
CO2-code Oct 23, 2025
05309fa
Maps++
CO2-code Oct 23, 2025
5162f8a
Add files via upload
CO2-code Oct 23, 2025
5bd6c70
Update client stub to the latest version (2.0.10.0)
MahBoiDeveloper Oct 23, 2025
05ad8f1
Add files via upload
CO2-code Oct 23, 2025
86d78c9
Add files via upload
CO2-code Oct 23, 2025
936da8d
Enable start position dropdowns and refactoring `GameLobbyBase.ini`
MahBoiDeveloper Oct 24, 2025
af23b17
Add files via upload
CO2-code Oct 24, 2025
f4ab3f0
Game lobby designed/modified by Razer
CO2-code Oct 25, 2025
58c8bc2
Game lobby designed/modified by Razer
CO2-code Oct 25, 2025
fcbe554
Merge branch 'master' of https://github.com/CO2-code/cncnet-ra-client…
CO2-code Oct 25, 2025
5d7300e
Initial Port
CnCRAZER Oct 26, 2025
c0bb8f1
Add game search filter for online lobbies
CnCRAZER Oct 26, 2025
7874c49
Lobby UI Adjustments + Housekeeping
CnCRAZER Oct 26, 2025
7636a3e
Add msgboxform.png
CnCRAZER Oct 26, 2025
f9f9a18
Update ClientDefinitions.ini
CnCRAZER Oct 26, 2025
8748b2a
Update MultiplayerGameLobby.ini
CnCRAZER Oct 26, 2025
a0cd22c
Fix Borders
CnCRAZER Oct 26, 2025
ccc683c
Restructure to mimic YR repo
CnCRAZER Oct 26, 2025
14e17e9
maps
CnCRAZER Oct 26, 2025
0422c73
Update SkirmishLobby.ini
CnCRAZER Oct 26, 2025
c929216
Binaries updated , General UI fixes
CO2-code Oct 29, 2025
a68a129
Fix Background Texture
CnCRAZER Oct 29, 2025
997d8e7
Refactor to mimic YR repo structure
CnCRAZER Oct 29, 2025
25a3975
Beginning stages of mission file structure
CnCRAZER Oct 29, 2025
2c55b89
not sure , some maps..
CO2-code Oct 29, 2025
7c65eca
Start of tools folder support
CnCRAZER Oct 29, 2025
81927d3
maxname=11
CO2-code Oct 31, 2025
cfc5be9
Update ClientDefinitions.ini
CnCRAZER Nov 3, 2025
925859a
Update .gitignore
CnCRAZER Nov 3, 2025
eddfb97
Merge branch 'Local-Tests' into master
CnCRAZER Nov 4, 2025
b01f0d3
Revert "Merge branch 'Local-Tests' into master"
CnCRAZER Nov 4, 2025
6e57b5e
TEST - Add build-installer tool and CI/CD workflows
CnCRAZER Nov 4, 2025
e9c0e03
Update .gitattributes and .gitignore, add VersionWriter.exe
CnCRAZER Nov 4, 2025
f7a46b1
Add InnoDependencyInstaller library to installer tools
CnCRAZER Nov 4, 2025
8a4fc3f
Update build-installer.service.ts
CnCRAZER Nov 4, 2025
da66475
Update build-installer.service.ts
CnCRAZER Nov 4, 2025
fefb529
Enforce LF for TypeScript and simplify installer spawn
CnCRAZER Nov 4, 2025
e15c986
Update build-installer.service.ts
CnCRAZER Nov 4, 2025
c60bb12
CI: Ensure x64 Inno Setup on windows-2022 and robustly resolve ISCC.e…
CnCRAZER Nov 4, 2025
588d561
Installer: fix invalid icon by using RedAlert.exe as SetupIconFile (v…
CnCRAZER Nov 4, 2025
2cbda91
Installer: point SetupIconFile to Inno’s built-in SetupClassicIcon.ic…
CnCRAZER Nov 4, 2025
16e544b
Installer: make SetupIconFile optional; validate ICO magic and skip i…
CnCRAZER Nov 4, 2025
9c4708f
Update build-installer.service.ts
CnCRAZER Nov 4, 2025
85dbe72
Update build-installer.service.ts
CnCRAZER Nov 4, 2025
01c65dd
Add .gitmodules to pin InnoDependencyInstaller submodule (matching YR…
CnCRAZER Nov 4, 2025
b4dad93
Update cncnet5.ico
CnCRAZER Nov 4, 2025
02977f4
test
CnCRAZER Nov 4, 2025
eeb52e5
Revert "test"
CnCRAZER Nov 4, 2025
23ee2e9
test2omg
CnCRAZER Nov 4, 2025
86845db
Update GameLobbyBase.ini
CnCRAZER Nov 15, 2025
6f9c798
Random Icons
CnCRAZER Nov 15, 2025
29c6dca
Update GameLobbyBase.ini
CnCRAZER Nov 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
34 changes: 34 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Shell scripts require LF
*.sh text eol=lf
*.ps1 text eol=lf
*.ts text eol=lf

# Batch scripts require CRLF
*.cmd text eol=crlf
*.bat text eol=crlf

*.cfg text eol=crlf
*.ini text eol=crlf
*.map text eol=crlf
*.txt text eol=crlf
*.xdp text eol=crlf

preupdateexec text eol=crlf
updateexec text eol=crlf
version text eol=crlf

# Ensure binary assets keep original byte content
*.exe binary
*.dll binary
*.ico binary
*.cur binary
*.xnb binary
*.zip binary
*.7z binary
*.gz binary
*.tgz binary
*.png binary
*.jpg binary
*.jpeg binary
*.bmp binary
*.psd binary
224 changes: 224 additions & 0 deletions .github/workflows/deployment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
name: build-and-deploy

on:
# Run on push to any branches listed
# Any new features that should be auto built and deployed should be in a branch under "feature/"
# example: feature/port-to-xna
push:
branches:
- master
- pre-release
- feature/*
- hotfix/*

# Run when there is a release published
release:
types: [published]

# Allows for this workflow to be run manually
workflow_dispatch:

jobs:
# This job is responsible for building the package that will be deployed to the server.
# It is run in a windows container so that Version.exe and other Windows based tools are able to be executed.
build-package:
runs-on: windows-2022
environment: cncnet
outputs:
# This the fully qualified version string that is used for deploy purposes.
packageUploadVersion: ${{ env.GitVersion_MajorMinorPatch }}${{ env.GitVersion_PreReleaseLabelWithDash }}
mirrorLinkName: ${{ env.GitVersion_PreReleaseLabel }}

steps:
# Checkout the repo
- name: Checkout repo
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0 # required for gitversion

# Ensure Inno Setup is installed on the runner (x64), and upgrade to a version that supports ExecAndCaptureOutput (>= 6.3)
- name: Install Inno Setup (x64)
shell: pwsh
run: |
choco install innosetup --yes --no-progress
function Set-InnoPath {
param([string[]]$Candidates)
$cand = $Candidates | Where-Object { Test-Path $_ } | Select-Object -First 1
if (-not $cand) { throw 'ISCC.exe not found after Chocolatey install.' }
echo "INNO_SETUP_ISCC=$cand" | Out-File -FilePath $env:GITHUB_ENV -Append
return $cand
}
$cands = @(
'C:/Program Files/Inno Setup 6/ISCC.exe',
'C:/Program Files (x86)/Inno Setup 6/ISCC.exe'
)
$iscc = Set-InnoPath -Candidates $cands
$ver = ([System.Diagnostics.FileVersionInfo]::GetVersionInfo($iscc)).FileVersion
try { $verObj = [version]$ver } catch { $verObj = $null }
if (-not $verObj -or ($verObj.Major -lt 6 -or ($verObj.Major -eq 6 -and $verObj.Minor -lt 3))) {
Write-Host "Detected Inno Setup version $ver (path: $iscc). Upgrading to latest..."
choco upgrade innosetup --yes --no-progress
# Re-select after upgrade
Remove-Item Env:\INNO_SETUP_ISCC -ErrorAction SilentlyContinue
$iscc = Set-InnoPath -Candidates $cands
$ver = ([System.Diagnostics.FileVersionInfo]::GetVersionInfo($iscc)).FileVersion
Write-Host "Using Inno Setup version $ver at $iscc"
} else {
Write-Host "Using Inno Setup version $ver at $iscc"
}

- name: Install Tools NPM Libs
working-directory: tools
run: npm ci

# This step validates the format of the tag created, if this was a published release.
# Currently, it must be in the format "ra-X.Y" or "ra-X.Y.Z"
- name: Validate Tag Name
if: github.event_name == 'release'
working-directory: tools
run: |
npm run release-tag-validator

- name: Install GitVersion
uses: gittools/actions/gitversion/[email protected]
with:
versionSpec: "5.x"

# Run Gitversion - https://gitversion.net/docs/
- name: Run GitVersion
uses: gittools/actions/gitversion/[email protected]

# Update versionconfig.ini with gitversion version info
- name: Update versionconfig.ini
# replace the second line in the file with the proper version number (X.Y.Z-dev.N)
run: sed -i "2 s/.*/${{env.GitVersion_SemVer}}/" ./package/versionconfig.ini

- name: Version Writer
working-directory: tools
run: npm run version-writer

# Create package archive
- name: Create package artifact (tar.gz)
run: tar -C ./package -czvf package.tar.gz .

- name: Create package artifact (zip)
run: 7z.exe a package.zip ./package

# Create installer
- name: Build Installer
working-directory: tools
env:
INNO_SETUP_ISCC: ${{ env.INNO_SETUP_ISCC }}
run: npm run build-installer

- name: Check installer exists
shell: pwsh
run: |
if (Test-Path './CnCNet5_RA_Installer.exe') {
Write-Host 'Installer found at repo root.'
Get-Item './CnCNet5_RA_Installer.exe' | Select-Object FullName,Length,LastWriteTime | Format-Table -AutoSize
} else {
Write-Warning 'Installer not found at ./CnCNet5_RA_Installer.exe. Searching...'
Get-ChildItem -Recurse -File -Filter 'CnCNet5_RA_Installer*.exe' | Select-Object FullName,Length,LastWriteTime | Format-Table -AutoSize
throw 'Installer missing!'
}

# Upload package archive as a workflow artifact
- name: Upload Package Workflow Artifact
uses: actions/upload-artifact@v4
with:
name: package
path: ./package.tar.gz
if-no-files-found: error

# Upload installer as a workflow artifact
- name: Upload Installer Workflow Artifact
uses: actions/upload-artifact@v4
with:
name: installer
path: ./CnCNet5_RA_Installer.exe
if-no-files-found: error

# Upload package archive (tar.gz) to any relevant releases for current tag
# If there is no release/tag, this will not do anything
- name: Upload Package Release Asset (tar.gz)
if: github.event_name == 'release'
working-directory: tools
run: npm run release-asset-uploader -- --token ${{ secrets.GITHUB_TOKEN }} --assetName "package_${{env.GitVersion_SemVer}} (tar.gz)" --assetPath ../package.tar.gz

# Upload package archive (zip) to any relevant releases for current tag
# If there is no release/tag, this will not do anything
- name: Upload Package Release Asset (zip)
if: github.event_name == 'release'
working-directory: tools
run: npm run release-asset-uploader -- --token ${{ secrets.GITHUB_TOKEN }} --assetName "package_${{env.GitVersion_SemVer}} (zip)" --assetPath ../package.zip

# Upload installer to any relevant releases for current tag
# If there is no release/tag, this will not do anything
- name: Upload Installer Release Asset
if: github.event_name == 'release'
working-directory: tools
run: npm run release-asset-uploader -- --token ${{ secrets.GITHUB_TOKEN }} --assetName "CnCNet5_RA_Installer_${{env.GitVersion_SemVer}} (exe)" --assetPath ../CnCNet5_RA_Installer.exe

# This job downloads the package artifact from the previous job and deploys it to the server.
deploy-package:
# if previous job was successful
if: ${{ success() }}
runs-on: ubuntu-22.04
environment: cncnet
needs: build-package

steps:
# Download the package artifact from previous job
- name: Get artifact
uses: actions/download-artifact@v4
with:
name: package

# Deploy the package to the server
- name: Deploy package
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
passphrase: ${{ secrets.SSH_PASS }}
key: ${{ secrets.SSH_KEY }}
port: ${{ secrets.SSH_PORT }}
overwrite: true
source: "package.tar.gz"
target: "${{ secrets.SSH_PATH_UPDATES }}/${{ needs.build-package.outputs.packageUploadVersion }}/"

# Extract the deployed package on the server
- name: Extract the deployed package
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
passphrase: ${{ secrets.SSH_PASS }}
key: ${{ secrets.SSH_KEY }}
port: ${{ secrets.SSH_PORT }}
script: |
cd ${{ secrets.SSH_PATH_UPDATES }}/${{ needs.build-package.outputs.packageUploadVersion }}
tar -xzvf ${{ secrets.SSH_PATH_UPDATES }}/${{ needs.build-package.outputs.packageUploadVersion }}/package.tar.gz
rm ${{ secrets.SSH_PATH_UPDATES }}/${{ needs.build-package.outputs.packageUploadVersion }}/package.tar.gz
chmod 777 --recursive ${{ secrets.SSH_PATH_UPDATES }}/${{ needs.build-package.outputs.packageUploadVersion }}/*

# Create/update a mirror link for client update purposes, using the GitVersion pre release label as the link name.
# See the file "GitVersion.yml" for more details on the name that will be used for a given branch.
# Ex: if the branch name is "feature/port-to-xna", it will create a link using the sanitized branch name to point to the directory "updates/X.Y.Z-port-to-xna".
# Then, client users can use the path "/updates/games/ra/<branch>/" for their UpdaterConfig.ini file.
# This will keep develop and feature branch update mirror links up to date as soon as the deploy has occurred.
- name: Update mirror link
uses: appleboy/[email protected]
# RUN ON NON-RELEASES ONLY. RELEASE VERSION LINKS SHOULD CONTINUE TO BE UPDATED MANUALLY, FOR NOW.
if: github.event_name != 'release' && needs.build-package.outputs.mirrorLinkName != ''
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
passphrase: ${{ secrets.SSH_PASS }}
key: ${{ secrets.SSH_KEY }}
port: ${{ secrets.SSH_PORT }}
script: |
cd ${{ secrets.SSH_PATH_GAMES_RA }}
ln -sfn updates/${{ needs.build-package.outputs.packageUploadVersion }} ${{ needs.build-package.outputs.mirrorLinkName }}
28 changes: 28 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: publish-release

on:
# Only run this workflow manually
workflow_dispatch:

jobs:
publish:
runs-on: ubuntu-22.04
environment: cncnet

steps:
# Checkout the repo
- name: Checkout repo
uses: actions/checkout@v4

- name: Install Tools NPM Libs
working-directory: tools
run: npm ci

# This looks for the latest release in our repo and does the following:
# - updates our /live mirror path to point to it
# - posts an update message to an IRC channel notifying user clients of the newly published update
- name: Publish Latest Release
working-directory: tools
run: npm run publish-release -- --token ${{ secrets.GITHUB_TOKEN }} --sshHost ${{ secrets.SSH_HOST }} --sshUsername ${{ secrets.SSH_USER }} --sshPort ${{ secrets.SSH_PORT }} --sshPassphrase ${{ secrets.SSH_PASS }} --sshKeyBase64 ${{ secrets.SSH_KEY_BASE64 }} --raGamePath ${{ secrets.SSH_PATH_GAMES_RA }} --ircServer ${{ secrets.IRC_SERVER }} --ircChannel ${{ secrets.IRC_CHANNEL }} --ircNick ${{ secrets.IRC_NICK }} --ircUserName ${{ secrets.IRC_USERNAME }} --ircPassword ${{ secrets.IRC_PASSWORD }} --ircRealName ${{ secrets.IRC_REALNAME }}


18 changes: 10 additions & 8 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
*-spawn.exe
DtaverWriter.exe
ddraw.dll
ddraw.ini
/package/ddraw.dll
/package/ddraw.ini
Client/*
Debug/*
Maps/Custom/*.zip
Expand All @@ -13,15 +13,17 @@ CnCNet5_RA_Installer.exe
*.idea/
VersionWriter-CopiedFiles/
MainMenuTheme.bak

VersionWriter.exe
ddraw.ddl
ddraw.ini
version

/REDALERT.ini

spawn.ini
spawnmap.ini
stats.dmp
/package/spawn.ini
/package/spawnmap.ini
/package/stats.dmp
/InnoSetup/output
/gitversion.json
/logs
/package/Client
/package/REDALERT.ini
/tools/node_modules/
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "tools/build-installer/inno/libs/InnoDependencyInstaller"]
path = tools/build-installer/inno/libs/InnoDependencyInstaller
url = https://github.com/DomGries/InnoDependencyInstaller
34 changes: 34 additions & 0 deletions GitVersion.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
tag-prefix: 'ra-'
mode: ContinuousDeployment
increment: Patch

branches:
master:
regex: ^master$
source-branches: [ 'master' ]
tag: ''
increment: Patch

pre-release:
regex: ^pre-release$
source-branches: [ 'master' ]
tag: prerelease
increment: Patch

# Any new features that should be auto versioned should be in a branch under "feature/"
# Example: feature/port-to-xna
# Features will inherit the increment behaviour from their source branch and receive a branch-based pre-release label.
feature:
regex: ^feature?[/-]
source-branches: [ 'master', 'pre-release' ]
tag: useBranchName
increment: Inherit

# Any patches should be put under the "hotfix/" branch prefix.
# Example: hotfix/fix-crash
# Hotfixes will increment the version by Patch and receive a branch-based pre-release label.
hotfix:
regex: ^hotfix?[/-]
source-branches: [ 'master' ]
tag: useBranchName
increment: Patch
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# CnCNet Red Alert Client Package
# This read me is a WIP



The official CnCNet Red Alert package for online.

This package is an add-on to the [XNA CnCNet Client](https://github.com/CnCNet/xna-cncnet-client) by [Rampastring](https://github.com/Rampastring)

### Contributors


### Development

**NOTE:** This is NOT the repository necessary for developing the CnCNet client for Red Alert. That is the **XNA CnCNet Client** mentioned above. This is simply a wrapper for it.

### Repository Structure

### Deployments

## Sponsored by
<a href="https://www.digitalocean.com/?refcode=337544e2ec7b&utm_campaign=Referral_Invite&utm_medium=opensource&utm_source=CnCNet" title="Powered by Digital Ocean" target="_blank">
<img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/PoweredByDO/DO_Powered_by_Badge_blue.svg" width="201px" alt="Powered By Digital Ocean" />
</a>
Loading
Loading