A LAN server for the original PC/DVD release of Need for Speed: Hot Pursuit (2010). Based on Khysnik's Go BlazeSDK and adds the legacy 12-byte FIRE framing used by the game's embedded Blaze 3.05 client.
- Legacy FIRE frame reader/writer implemented.
- Shared BlazeSDK TDF codec retained.
- Captured Authentication login request decodes successfully.
- Silent-login, logout, and invalid-password responses implemented.
- Separate ProtoSSL redirector (
42127) and Blaze (10013) listeners are implemented. - TLS 1.0 RSA/RC4 transport supports suites
0x0004and0x0005. - Synthetic authentication, user sessions, Autolog bootstrap, shared lobby registry, queued matchmaking, and asynchronous notifications are implemented.
- GameManager rosters use one canonical account/persona/session identity per client, stable lobby slots, LAN addresses, and P2P mesh state up to the lobby's advertised capacity.
- Many non-lobby retail services remain intentionally incomplete.
The executable has obsolete TLS RSA/RC4 suites 0x0004 and 0x0005.
The server includes a deliberately narrow TLS 1.0 adapter for those
suites because Go's standard crypto/tls cannot accept them.
go test ./...
go build ./cmd/hpserver
./hpserver.exeBy default an ephemeral self-signed RSA certificate is generated. Use
-cert server.crt -key server.key to provide a stable certificate and chain.
On every client machine, update the hosts file:
192.168.1.50 gosredirector.ea.com
192.168.1.50 gosredirector.online.ea.com
192.168.1.50 nfshp-prd2-mp-app-01.ea.com
192.168.1.50 autolog1.ea.com
Where 192.168.1.50 is the server host's address. Allow inbound TCP
ports 42127, 10013, and 18080 through the emulator host firewall. Allow
the game's peer UDP port 3659 between client machines.
The PID supplied by silentLogin is treated as the client's preferred
persisted persona. It is reused when available. If another active connection
already owns it, the emulator provisions a fresh account/persona instead. The
assigned ID and generated name (Player, Player2, and so on) are then kept
identical in FullLogin, UserSessions, and every GameManager roster; mixing
requested and assigned identities across those messages makes the retail
client stall after authentication or misidentify its P2P endpoint.
Verify routing before launching the game:
Resolve-DnsName gosredirector.ea.com
Test-NetConnection gosredirector.ea.com -Port 42127
Test-NetConnection nfshp-prd2-mp-app-01.ea.com -Port 10013
Test-NetConnection autolog1.ea.com -Port 18080The HP header contains six big-endian uint16 fields:
payload length, component, command, error, message type, message id
Message types are request 0x0000, reply 0x1000, and error reply
0x3000. Authentication is component 1; login is command 0x28.
The TDF+FIRE2 foundation is derived from Khysnik/BlazeSDK
under its WTFPL (DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE).
See LICENSE.