Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions GAMES_LIST.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
| asr08 | Arca Sim Racing '08 | |
| assettocorsa | Assetto Corsa | |
| atlas | Atlas | [Valve Protocol](#valve) |
| ats | American Truck Simulator | [Valve Protocol](#valve) |
| avorion | Avorion | [Valve Protocol](#valve) |
| avp2 | Aliens versus Predator 2 | |
| avp2010 | Aliens vs. Predator 2010 | [Valve Protocol](#valve) |
Expand Down Expand Up @@ -190,6 +191,7 @@
| mbe | Minecraft: Bedrock Edition | |
| medievalengineers | Medieval Engineers | [Valve Protocol](#valve) |
| mgm | Mumble - GT Murmur | [Notes](#mumble) |
| mindustry | Mindustry | |
| minecraft | Minecraft | [Notes](#minecraft) |
| minetest | Minetest | |
| mnc | Monday Night Combat | [Valve Protocol](#valve) |
Expand Down Expand Up @@ -303,6 +305,7 @@
| synergy | Synergy | [Valve Protocol](#valve) |
| t1s | Tribes 1: Starsiege | |
| tacticalops | Tactical Ops | |
| tce | The Cenozoic Era | [Valve Protocol](#valve) |
| tcgraw | Tom Clancy's Ghost Recon Advanced Warfighter | |
| tcgraw2 | Tom Clancy's Ghost Recon Advanced Warfighter 2 | |
| teamfactor | Team Factor | |
Expand Down Expand Up @@ -345,6 +348,7 @@
| valheim | Valheim | [Notes](#valheim), [Valve Protocol](#valve) |
| vampireslayer | Vampire Slayer | [Valve Protocol](#valve) |
| vcm | Vice City Multiplayer | |
| vein | VEIN | [Valve Protocol](#valve) |
| ventrilo | Ventrilo | |
| vietcong | Vietcong | |
| vietcong2 | Vietcong 2 | |
Expand Down
35 changes: 35 additions & 0 deletions lib/games.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,15 @@ export const games = {
protocol: 'assettocorsa'
}
},
ats: {
name: 'American Truck Simulator',
release_year: 2016,
options: {
port: 27015,
port_query_offset: 1,
protocol: 'valve'
}
},
atlas: {
name: 'Atlas',
release_year: 2018,
Expand Down Expand Up @@ -1930,6 +1939,14 @@ export const games = {
doc_notes: 'minecraft'
}
},
mindustry: {
name: 'Mindustry',
release_year: 2017,
options: {
port: 6567,
protocol: 'mindustry'
}
},
minetest: {
name: 'Minetest',
release_year: 2010,
Expand Down Expand Up @@ -3054,6 +3071,15 @@ export const games = {
doc_notes: 'terraria'
}
},
tce: {
name: 'The Cenozoic Era',
release_year: 2024,
options: {
port: 7777,
port_query_offset: 1,
protocol: 'valve'
}
},
theforest: {
name: 'The Forest',
release_year: 2014,
Expand Down Expand Up @@ -3306,6 +3332,15 @@ export const games = {
doc_notes: 'valheim'
}
},
vein: {
name: 'VEIN',
release_year: 2024,
options: {
port: 7777,
port_query_offset: 1,
protocol: 'valve'
}
},
vcm: {
name: 'Vice City Multiplayer',
release_year: 2015,
Expand Down
3 changes: 2 additions & 1 deletion protocols/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import mafia2online from './mafia2online.js'
import minecraft from './minecraft.js'
import minecraftbedrock from './minecraftbedrock.js'
import minecraftvanilla from './minecraftvanilla.js'
import mindustry from './mindustry.js'
import minetest from './minetest.js'
import mumble from './mumble.js'
import mumbleping from './mumbleping.js'
Expand Down Expand Up @@ -80,7 +81,7 @@ import scpsl from './scpsl.js'
export {
armagetron, ase, asa, assettocorsa, battlefield, brokeprotocol, brokeprotocolmaster, buildandshoot, cs2d, discord, doom3, eco, epic, factorio, farmingsimulator, ffow,
fivem, gamespy1, gamespy2, gamespy3, geneshift, goldsrc, gtasao, hawakening, hawakeningmaster, hexen2, hytale, jc2mp, kspdmp, mafia2mp, mafia2online, minecraft,
minecraftbedrock, minecraftvanilla, minetest, mumble, mumbleping, nadeo, openttd, palworld, quake1, quake2, quake3, renegadex, renegadexmaster, renown, rfactor, ragemp, samp,
minecraftbedrock, minecraftvanilla, mindustry, minetest, mumble, mumbleping, nadeo, openttd, palworld, quake1, quake2, quake3, renegadex, renegadexmaster, renown, rfactor, ragemp, samp,
satisfactory, soldat, savage2, squad, starmade, starsiege, teamspeak2, teamspeak3, terraria, toxikk, tribes1, tribes1master, unreal2, ut3, valve,
vcmp, ventrilo, warsow, eldewrito, beammpmaster, beammp, dayz, theisleevrima, xonotic, altvmp, vintagestorymaster, vintagestory, sdtd, scpsl
}
44 changes: 44 additions & 0 deletions protocols/mindustry.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import Core from './core.js'

const GAMEMODES = ['survival', 'sandbox', 'attack', 'pvp', 'editor']

export default class mindustry extends Core {
constructor () {
super()
this.encoding = 'utf8'
this.byteorder = 'be'
}

async run (state) {
if (!this.options.port) this.options.port = 6567

// arc-net discovery request: triggers the Mindustry server to reply
// with a serialized Host struct (see Mindustry NetworkIO.writeServerData).
const request = Buffer.from([0xfe, 0x01])
const buffer = await this.udpSend(request, b => b)

const reader = this.reader(buffer)
const name = reader.pascalString(1)
const map = reader.pascalString(1)
const players = reader.int(4)
const wave = reader.int(4)
const version = reader.int(4)
const vertype = reader.pascalString(1)
const gamemodeId = reader.uint(1)
const playerLimit = reader.int(4)
const description = reader.pascalString(1)
const modeName = reader.pascalString(1)

state.name = name
state.map = map
state.password = false
state.numplayers = players
state.maxplayers = playerLimit
state.version = String(version)
state.raw.wave = wave
state.raw.vertype = vertype
state.raw.gamemode = GAMEMODES[gamemodeId] ?? String(gamemodeId)
state.raw.description = description
state.raw.modeName = modeName
}
}
Loading