Half-Life for Dreamcast has some functional multiplayer components

Discussion in 'Sega Dreamcast Development and Research' started by TerdFerguson, Jul 13, 2015.

  1. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    757
    Likes Received:
    469
    Hey guys,

    This is going to be a long winded post. Just wanted to share my findings since testing any further is beyond my capabilites.

    Someone on here said that theres still multiplayer stuff in the game's exe. So i downloaded an exe explorer and found that it looks like 80%-90% of the multiplayer functions are in the game and on-disc. Here's what i found :


    All the strings for connecting, server browsing, hosting a server, and more are in the exe. Here's an exerpt. I'll attach the full exe string log to this post :
    Code:
    SayText
      hud_saytext_time
      misc/talk.wav
      StatusIcon
      TextMsg
      Train
      sprites/%d_train.spr
      chase_back
      chase_up
      chase_right
      chase_active
       duck
      CL_ParseCustomEntity: bad model number
      msg_badread in packetentities
      D:\proj\halflifedc\src\engine\cl_ents.c
      CL_ParsePacketEntities:  Failed to allocate space for %i entities.
      CL_ParsePacketEntities: newindex == MAX_PACKET_ENTITIES
      WARNING: oldcopy on full update
      WARNING: U_REMOVE on full update
      WARNING: delta on full update
      CL_LinkPacketEntities: cl_numvisedicts == MAXVISEDICTS
      Bad model on beam
       pred %s
      for %i, time %i ms
      CL_ParsePlayerinfo: bad num
      CL_LinkPlayers: cl_numvisedicts == MAXVISEDICTS
      cl_pred_fraction
      start
      cl_pred_maxtime
      cl_pred_fraction
      cl_adaptive
      cl_himodels
      cl_gaitestimation
      cl_timeout
      cl_shownet
      cl_showsizes
      cl_nolerp
      cl_spectator_password
      lookspring
      lookstrafe
      sensitivity
      cl_skyname
      desert
      cl_skycolor_r
      cl_skycolor_g
      cl_skycolor_b
      cl_skyvec_x
      cl_skyvec_y
      cl_skyvec_z
      cl_pred_link
      cl_predict_players
      cl_solid_players
      cl_nodelta
      m_pitch
      0.022
      m_yaw
      0.022
      m_forward
      m_side
      cl_pitchup
      cl_pitchdown
      rcon_address
      rcon_port
      cl_resend
      cl_downloadinterval
      cl_slist
      cl_allowdownload
      cl_allowupload
      cl_upload_max
      cl_download_max
      cl_download_ingame
      password
      spectator
      Player
      model
      topcolor
      bottomcolor
      ---- MOTD -----
      ---------------
      empty slot
      empty slot
      Server list cleared.
      Searching for local servers...
      27015
      details
      27015
      details
      ------------------
      %i %s %s %i/%i
      Adr:  %s - Dir:  %s
        dedicated - 
        listen - 
        type (%c) - 
      win32 - 
      linux - 
      os (%c) - 
       password 
       nopasswd 
      pw (%c) - 
       +serverside
       +client.dll
      Mod info:
      Info URL %s
      DL URL %s
      Ver. %i, size %i
      No local servers in list.
      Try 'slist' to search again.
      empty slot
      ------------------
      %i %s %s %i/%i
      Adr:  %s - Dir:  %s
        dedicated - 
        listen - 
        type (%c) - 
      win32 - 
      linux - 
      os (%c) - 
       password 
       nopasswd 
      pw (%c) - 
      Mod info:
      Info URL %s
      DL URL %s
      Ver. %i, size %.2f MB
      %i.%i.%i.%i
      %4i:  %s:%i
      %i total servers
      end-of-list
      more-in-list
      %3i %5i %s
      %i servers
      more-in-list
      Done.
      %i.%i.%i.%i
      %i servers
      Done.
      loopback
      Connection accepted by %s
      The server requires that you be validated through WON.net.
      Could not obtain WON authentication.
      BADPASSWORD
      BADPASSWORD
      BADPASSWORD
      BADPASSWORD
      Invalid server password.
      Ping took %.3f ms.
      Unknown command:
      %s: Runt packet
      %s:sequenced packet without connection
      Server connection timed out.
      Can't cl_print_custom, not connected
      D:\proj\halflifedc\src\engine\cl_main.c
      Unable to allocate %i client frames
      dropclient
      2534835307254
      Key has no meaning on dedicated server...
      Bogus key length on CD Key...
      local
      localhost
      Bad server address
      27015
      models/player/gordon/gordon.mdl
      could not find models/player/gordon/gordon.mdl
      *modelcrc
      %c%c%c%cconnect %i %i %i %i %i "%s" "%s"
      localhost
      cl_resend
      cl_resend
      local
      localhost
      Bad server address
      27015
      Connection failed after %i retries.
      localhost
      Connecting to %s...
      Retrying %s...
      %c%c%c%cgetchallenge
      Can't retry, no previous connection
      connect %s
      Commencing connection retry to %s
      usage: connect <server>
      local
      start
      Long timecheck gap between %s and %s
      Long timecheck gap after %s
      spawn %i %s
      CL_Signon 1
      begin
      CL_Signon 2
      CL_Signon 3
      No demos listed with startdemos
      playdemo %s
      EMPTY
      %s:%2i  (%5.1f,%5.1f,%5.1f) [%5.1f %5.1f %5.1f]
      Snapshot
      %s%04d.bmp
      startmovie <filename>
      Started recording movie...
      No movie started.
      Stopped recording movie...
      You must set 'rcon_password' before
      issuing an rcon command.
      You must either be connected,
      or set the 'rcon_address' cvar
      to issue rcon commands
      Unable to resolve rcon address %s
      27015
      rcon "%s" 
      cl_view entity#
      Current %i
      View entity set to %i
      Skipping upload...
      custom resource list not valid -- not connected
      CL_SendResourceListBlock_f from different level
      custom resource list request out of range
      customrsrclist %i %i
      Too many resources on client.
      pldecal.wad
      custom.hpk
      Client downloading enabled.
      Client downloading disabled.
      Client uploading enabled.
      Max. upload size is %i
      Client uploading disabled.
      HudText
      Client Rep. of Player Logos ===
      SELF ====================
      SELF ====================
      ==========================
      usage: fullserverinfo <complete info string>
      --------------------------
      Time %.3f
      Drop %.2f%%
      Avg. Latency %.2f
      Load K/s %.2f
      Upd/s %.2f
      Rate %.2f
      cl fps %.1f
      unnamed
      topcolor
      bottomcolor
      fullserverinfo
      retry
      disconnect
      snapshot
      startmovie
      endmovie
      entities
      cl_view
      cl_messages
      cl_bitcounts
      cl_usr
      pingservers
      slist
      clearlist
      resources
      cl_allow_upload
      cl_allow_download
      upload
      allowupload
      skipdl
      skipul
      cl_print_custom
      D:\proj\halflifedc\src\engine\cl_main.c
      Unable to allocate %i client frames
      svc_bad
      svc_nop
      svc_disconnect
      svc_updatestat
      svc_version
      svc_setview
      svc_sound
      svc_time
      svc_print
      svc_stufftext
      svc_setangle
      svc_serverinfo
      svc_lightstyle
      svc_updateuserinfo
      svc_updatefrags
      svc_clientdata
      svc_stopsound
      svc_updatecolors
      svc_particle
      svc_damage
      svc_spawnstatic
      OBSOLETE svc_spawnbinary
      svc_spawnbaseline
      svc_temp_entity
      svc_setpause
      svc_signonnum
      svc_centerprint
      svc_killedmonster
      svc_foundsecret
      svc_spawnstaticsound
      svc_intermission
      svc_finale
      svc_cdtrack
      svc_restore
      svc_cutscene
      svc_weaponanim
      svc_decalname
      svc_roomtype
      svc_addangle
      svc_newusermsg
      svc_download
      svc_packetentities
      svc_deltapacketentities
      svc_playerinfo
      svc_choke
      svc_resourcelist
      svc_newmovevars
      svc_nextupload
      svc_resourcerequest
      svc_customization
      svc_crosshairangle
      svc_soundfade
      svc_clientmaxspeed
      svc_skippedupdate
      CL_EntityNum: %i is an invalid number, cl.max_edicts is %i
      D:\proj\halflifedc\src\engine\cl_parse.c
      D:\proj\halflifedc\src\engine\cl_parse.c
      %i:%s Sz %i
      CL_ParseStartSoundPacket: ent = %i
      CL_ParseServerMessage: svc_updateuserinfo > MAX_CLIENTS
      model
      topcolor
      bottomcolor
      *spectator
      server.cfg
      Refusing to download a path with '..'
      Download refused, cl_allow_download is 0
      cl_downloadinterval
      Got to CL_ParseDownload
      unknown
      sound
      decal
      model
      generic
      %3i %s:%15s %i %s
      - Needed -------------------------------------------
      #   Name                  Size Type Index Fatal
      - On hand ------------------------------------------
      #   Name                  Size Type Index Fatal
      --------------------------------------------
      Couldn't CRC map %s, disconnecting
      Disconnected
      Refusing to download map %s, (cl_allowdownload is 0 ) disconnecting
      Disconnected
      Couldn't find map %s, server will download the map
      cl_dlls\client.dll
      Couldn't CRC client side dll %s.
      Disconnected
      Mismatched client.dll, proceeding...
      Client world model is NULL
      prespawn %i 0
      Cannot continue without sound %s, disconnecting
      Model %s not found
      Cannot continue without model %s, disconnecting
      Resource already linked
      Resource list corrupted.
      Mislinked resource in CL_RemoveFromResourceList
      Attempt to free last entry in list.
      Resource propagation complete
      Resources registered
      D:\proj\halflifedc\src\engine\cl_parse.c
      Verifying and downloading resources...
      Customization
      CL_ReallocateDynamicData allocating 0 entities
      CL_Reallocate cl_entities
      cl_entities
      D:\proj\halflifedc\src\engine\cl_parse.c
      CL_ReallocateDynamicData failed to allocate %i frames
      Server didn't specify a gamedir, assuming no change
      exec config.cfg
      exec preset_a.cfg
      /CD-ROM/valve/halflife.cfg
      exec halflife.cfg
      Changed to game %s
      CL_ParseServerInfo
      Server returned version %i, not %i
      Bad maxclients (%u) from server
      r_decals
      Request resourcelist
      resourcelist %i 0
      Too many static entities
      cl_skyname
      gl_zmax
      gl_wateramp
      -------- Message Load ---------
      bogus #
      %i:%s: %i msgs:%.2fK
      User messages:  %i:%.2fK
      ------ End:  %i Total----
      ------- Bit Counts -------
      Bit    Delta   Player  Custom
      (1<<%2i) %6.6i  %6.6i  %6.6i
      (1<<%2i) %6.6i
      --------------------------
      CL_ParseServerMessage()
      ------------------
      CL_ParseServerMessage: Bad server message
      END OF MESSAGE
      END OF MESSAGE
      %3i:%s
      %3i:%s
      CL_ParseServerMessage: Illegible server message
      CL_ParseServerMessage: Server is protocol %i instead of %i
      Server disconnected
      svc_lightstyle > MAX_LIGHTSTYLES
      Received signon %i when at %i
      room_type
      svc_updatestat: %i is invalid
      CL_ParseServerMessage: svc_clientmaxspeed >= cl.maxclients
      cl_nopred
      pushlatency
      cl_dumpents
      cl_showpred
      cl_hightrack
      ptrack
      ptrack %i
      No camera
      Tracking
      1st Person
      Top Down
      Unknown
      Specator mode set to %s
      No target found ...
      tracerspeed
      traceroffset
      tracerlength
      tracerred
      tracergreen
      tracerblue
      traceralpha
      egon_amplitude
      weapons/ric1.wav
      weapons/ric2.wav
      weapons/ric3.wav
      weapons/ric4.wav
      weapons/ric5.wav
      weapons/explode3.wav
      weapons/explode4.wav
      weapons/explode5.wav
      player/pl_shell1.wav
      player/pl_shell2.wav
      player/pl_shell3.wav
      weapons/sshell1.wav
      weapons/sshell2.wav
      weapons/sshell3.wav
      debris/wood1.wav
      debris/wood2.wav
      debris/wood3.wav
      debris/metal1.wav
      debris/metal2.wav
      debris/metal3.wav
      debris/glass1.wav
      debris/glass2.wav
      debris/glass3.wav
      debris/concrete1.wav
      debris/concrete2.wav
      debris/concrete3.wav
      debris/flesh1.wav
      debris/flesh2.wav
      debris/flesh3.wav
      debris/flesh5.wav
      debris/flesh6.wav
      debris/flesh7.wav
      player/geiger1.wav
      player/geiger2.wav
      player/geiger3.wav
      player/geiger4.wav
      player/geiger5.wav
      player/geiger6.wav
      sprites/dot.spr
      sprites/lgtning.spr
      sprites/white.spr
      sprites/animglow01.spr
      sprites/muzzleflash1.spr
      sprites/muzzleflash2.spr
      sprites/muzzleflash3.spr
      sprites/richo1.spr
      sprites/shellchrome.spr
      CL: Client playing ricochet sound
      Couldn't allocate temp ent in R_Projectile!
      Bad ent in R_Projectile!
      No model %d!
      Bad ent in R_PlayerSprites!
      Bad client in AttachTentToPlayer()!
      No temp ent.
      Bad client in KillAttachedTents()!
      No modelindex for funnel!!
      Decal: entity = %i
      CL: Client playing Explosion sound
      Bubble: entity = %i
      CL_ParseTEnt: bad type
      CL: Client playing random hit sound
      CL_AddVisibleEntity: !pEntity->model or cl_numvisedicts == MAXVISEDICTS
      Sprite: no such frame %d
      R_DrawSprite: Bad sprite type %d
      Cbuf_AddText: overflow
      stuffcmds : execute command line parameters
      exec <filename> : execute a script file
      autoexec.cfg
      hw/opengl.cfg
      joystick.cfg
      game.cfg
      couldn't exec %s
      Current alias commands:
      %s : %s
    [​IMG]

    WON was the servers half-life ran on before steam, by Sierra. All the code for authentication, and masterlists seem to be in the exe
    [​IMG]

    An example of the various multiplayer/server commands that work ingame. More info on that below
    [​IMG]



    The game has all the multiplayer maps, mapcycle.txt file, server.cfg file, and in the default.cfg file theres a keybind to tab for '+showscores'. Which is the scoreboard key on pc
    Server.cfg :
    Code:
    // Use this file to configure your DEDICATED server. 
    // This config file is executed everytime the server changes levels.
    
    // disable autoaim
    sv_aim 0
    
    // player bounding boxes (collisions, not clipping)
    sv_clienttrace 3.5
    
    // disable clients' ability to pause the server
    pausable 0
    
    // default server name. Change to "Bob's Server", etc.
    // hostname "Half-Life"
    
    // maximum client movement speed 
    sv_maxspeed 270
    
    // 20 minute timelimit
    // mp_timelimit 20
    
    Config.cfg :
    Code:
    unbindall
    bind "TAB" "+showscores"
    bind "ENTER" "+attack2"
    bind "ESCAPE" "cancelselect"
    bind "SPACE" "+jump"
    bind "'" "+moveup"
    bind "," "+moveleft"
    bind "." "+moveright"
    bind "/" "+movedown"
    bind "1" "slot1"
    bind "2" "slot2"
    bind "3" "slot3"
    bind "4" "slot4"
    bind "5" "slot5"
    bind ";" "+mlook"
    bind "[" "invprev"
    bind "]" "invnext"
    bind "`" "toggleconsole"
    bind "a" "+moveleft"
    bind "c" "+movedown"
    bind "d" "+moveright"
    bind "e" "+use"
    bind "f" "impulse 100"
    bind "q" "lastinv"
    bind "r" "+reload"
    bind "s" "+back"
    bind "t" "impulse 201"
    bind "u" "messagemode2"
    bind "v" "+moveup"
    bind "w" "+forward"
    bind "y" "messagemode"
    bind "~" "toggleconsole"
    bind "UPARROW" "+forward"
    bind "DOWNARROW" "+back"
    bind "LEFTARROW" "+left"
    bind "RIGHTARROW" "+right"
    bind "ALT" "+strafe"
    bind "CTRL" "+duck"
    bind "SHIFT" "+speed"
    bind "F5" "snapshot"
    bind "F6" "save quick"
    bind "F7" "load quick"
    bind "F10" "quit prompt"
    bind "INS" "+klook"
    bind "PGDN" "+lookdown"
    bind "PGUP" "+lookup"
    bind "END" "centerview"
    bind "MOUSE1" "+attack"
    bind "MOUSE2" "+attack2"
    bind "MOUSE3" "+jump"
    bind "MWHEELDOWN" "invnext"
    bind "MWHEELUP" "invprev"
    bind "PAUSE" "pause"
    lookstrafe "0.000000"
    m_pitch "0.022000"
    lookspring "0.000000"
    crosshair "1.000000"
    _windowed_mouse "0.000000"
    m_filter "0.000000"
    joystick "0.000000"
    sv_aim "1.000000"
    console "1.0"
    cl_himodels "0.000000"
    d_spriteskip "0.000000"
    sensitivity "3.000000"
    viewsize "120.000000"
    brightness "1.000000"
    gamma "2.500000"
    bgmvolume "1.000000"
    suitvolume "0.250000"
    hisound "1.000000"
    volume "0.800000"
    s_a3d "0.000000"
    s_eax "0.000000"
    rate "9999.000000"
    model "gordon"
    topcolor "30"
    bottomcolor "6"
    name "Player"
    +mlook
    +jlook
    
    Mapcycle.txt, all these maps are on-disc and playable too :
    Code:
    undertow
    snark_pit
    boot_camp
    lambda_bunker
    datacore
    stalkyard
    

    Every command works in console except for 'connect <ip>'. It says "connect is not valid from console". Binding 'messagemode' and 'messagemode2' to a key allows chat and teamchat. Typing slist searches for servers. Typing list lists the servers. You can type 'exec server.cfg' and it makes the game multiplayer ready. I attached screenshots of all those commands and more working. With the full exe string list



    Summary:
    Everything for playing online seems to already be in the game aside from connecting to the internet. That could potentialy work too if someone figures out how to run connect from the console. But getting this game to play online isn't as unfeasable as decompiling the exe to source which is near impossible. It could be possible to edit some strings into the exe to connect to the internet. Or make a winCE app that connects to the internet then boots the game and stays connected while patching the game so the masters point to a modified neuwon server (woncomm.lst) and allowing 'connect <ip>' to be run from console

    I've been trying to edit in another .cfg file to run 'connect' but im having trouble recompiling the cdi. Might have set the lba wrong or editing the .pak file is difficult



    Anyways i go through the trouble because counter-strike on dc would be off the wall. If i get those edited .cfg's working ill update the post, but maybe some other actual devs can poke around and fiddle with files to see if multiplayer is in fact possible or not.


    Link to screens and string log : https://mega.co.nz/#!fBYQVSLI!eCI7yL5pvqchyguo_ueBf-PTv-_1foOvm9r1TbHSThA
     
    lolzvid, atari2atari and wombat like this.
  2. lolzvid

    lolzvid Peppy Member

    Joined:
    Jan 27, 2012
    Messages:
    340
    Likes Received:
    11
    Seems like that the multiplayer gamemode was going to be an option on the original game, but seems like that Valve decided to make an extra buck by selling it alone.

    Edit: Just saw that this is really the Dreamcast version, sorry
     
    Last edited: Jul 15, 2015
  3. Borman

    Borman Digital Games Curator

    Joined:
    Mar 24, 2005
    Messages:
    9,564
    Likes Received:
    2,221
    Or its just leftover code from Windows. Isn't it using Windows CE on DC, which contributed to the load times? Reportedly one of the options, other than canceling, was to use the Katana libraries and delay the game.
     
  4. doulomb

    doulomb Robust Member

    Joined:
    Apr 26, 2013
    Messages:
    237
    Likes Received:
    57
    Could also be because they were developing the goldsrc engine with Multiplayer games in mind even if HL wasn't intended to use it (TFC and CS1.6 for example)

    Its similar to how sometimes you see references to Half Life 3 and L4D3 in game updates. For example this recently happened with Dota2 update which had references left in to those games. This is simply a sideeffect of the fact that Valve uses the same engine across all their titles, you get this overlap.

    -doulomb
     
  5. -=FamilyGuy=-

    -=FamilyGuy=- Site Supporter 2049

    Joined:
    Mar 3, 2007
    Messages:
    3,097
    Likes Received:
    1,046
    In fact in goldsrc even single player is basically creating a local server and then connecting to it. There's an interesting read about that in this article about porting Xash3D (goldsrc clone) to pandora: http://pandoralive.info/?p=5043
     
  6. CrAzY

    CrAzY SNES4LIFE

    Joined:
    Nov 25, 2006
    Messages:
    1,738
    Likes Received:
    53
    FamilyGuy is exactly right. Single player games are handled the same way in the Source engine, too. I also would assume this is leftover scripts/game configurations from porting, as going through each script to remove unused bindings / message strings relating to the multiplayer component probably wouldn't be the best use of time.

    That being said, I coulda swore there was a long ass thread on some DC forum that was trying to work this out, but it didn't amount to much.
     
    Last edited: Jul 13, 2015
  7. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    757
    Likes Received:
    469
    Yeah all that makes sense. I know goldsrc makes a localserver for single player. What i thought was interesting is the build is a release build from early 2001 and they had multiplayer maps and server.cfg that works. But maybe someone could see if they could get 'connect' to work. Because if it attempts to connect or has the ability to, then it could still be possible i guess. It may be leftover code, but it does work ingame besides for 'connect' and actually connecting to the internet. Its all there
     
  8. petterk

    petterk Spirited Member

    Joined:
    Dec 30, 2011
    Messages:
    137
    Likes Received:
    11
    Which would've made more sense if this was a PC release. In a console game, all the bytes should be reordered to be the exact order randomly read from say 100 files to reduce physical disc seeking while loading levels and whatnot, which is why there's often alot more "loose files" in a PC build.
     
    Last edited: Jul 14, 2015
  9. CrAzY

    CrAzY SNES4LIFE

    Joined:
    Nov 25, 2006
    Messages:
    1,738
    Likes Received:
    53
    Sure, but we are talking about a game in an unfinished state, here. I personally have never looked into the inner workings of the DC version, but this is tempting me to.

    & saying that it has all of these working multiplayer console commands is a moot point, as most tie into the single player portion as well. Most the "mp_" commands won't do anything in SP, but mostly all "cl_" & "sv_" (client & server) commands will.

    I am not saying multiplayer was never planned, or that it is in fact not possible with the build(s) that we received, I am saying that this doesn't seem to be the evidence for it being workable with what we do have. If anyone wants to prove that wrong, then we can all have a good time playing some DC HL matches & porting over MP mods to it.

    Also, wasn't there a supposed Half life Online planned for the Dreamcast, or was that all nonsense? Maybe they did preliminary testing using the Half life DC build, & then dummied it out later when they realized they could split MP & SP for more sales.

    The old thread discussing this appears to be from a now defunct DC website. Will still look for a bit.
     
  10. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    757
    Likes Received:
    469
  11. wombat

    wombat SEGA!

    Joined:
    Mar 14, 2004
    Messages:
    2,676
    Likes Received:
    323
    A couple of years ago I ran into Randy Pitchford and talked about Half-Life for Dreamcast. He told me that they had the netcode/multiplayer 100% up and running, so the fact that these remnants of online-play are in the executable makes total sense.
     
    TerdFerguson and americandad like this.
  12. Borman

    Borman Digital Games Curator

    Joined:
    Mar 24, 2005
    Messages:
    9,564
    Likes Received:
    2,221
    Not the most reliable source ever hah, the guy is full of himself.
     
  13. petterk

    petterk Spirited Member

    Joined:
    Dec 30, 2011
    Messages:
    137
    Likes Received:
    11
    Either way, the lack of code for dialing up the modem (and/or bba/lan connection, being a WinCE game) is making this alot more difficult, atleast without the source code.
     
  14. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    757
    Likes Received:
    469
    Making another attempt at editing in another .cfg or edited server.cfg to see if 'connect' can be run using exec server.cfg. Best case scenario it allows the command and attempts to do something. If so then the modem code may be the only needed thing rather than implement something that was never in the game. Worst case scenario i can't get the disc to boot or the command still cant be run via console
     
  15. CrAzY

    CrAzY SNES4LIFE

    Joined:
    Nov 25, 2006
    Messages:
    1,738
    Likes Received:
    53
    I say go for it & good luck, even though I don't think it will work. These scripts when executed just pass these commands through the console as if you had manually typed it yourself.

    If typing "connect [ip]" really shows the message "connect is not valid from console," as you said in your opening post, then it sounds like they modified the code for the actual "connect" console command to return that message in the console & commented out the actual working code for connecting.

    So no matter how you execute the command, it will probably never do anything. Not sure the coding behind that command has ever been exposed in any of the source code releases for the PC versions, so it might be tough to somehow inject it into the Dreamcast compiled .dlls.

    I'd love to be wrong on that, but I doubt it.
     
  16. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    757
    Likes Received:
    469
    Got the game to boot with an edited server.cfg
    [​IMG]
    [​IMG]
    Running connect via cfg doesn't work either so yes its like running it from console

    But the mp_ vars do also work
    [​IMG]
    [​IMG]
    [​IMG]

    The 'stuffcmds' command executes command line parameters. But i'm unsure how to use that. Is it command line for the dc as a whole or for the game engine? Could there be some commands to give either to poke around further?

    EDIT: High res images https://mega.co.nz/#!LcJC2TjC!_7JxTlGL-FO6i6VVtArH4oNZ4XZX0a0i7ER99hFi6EQ
     
    Last edited: Jul 14, 2015
    sa1 likes this.
  17. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    757
    Likes Received:
    469
    With some looking around about stuffcmds it looks like thats run by valve.rc when the game first loads. Valve developer wiki :
    "Valve.rc is a file that lies inside the game / mod's cfg folder. It is a file that automatically executes convars on game launch, identical to that of the autoexec.cfg.

    To create one create a text document and save it with a .rc extension inside your cfg folder. Simply place your convars inside the file with each convar on a separate line. Your valve.rc should contain these convars if you're making one" - https://developer.valvesoftware.com/wiki/Valve.rc

    It looks like you can make new convars too : https://developer.valvesoftware.com/wiki/Developer_Console_Control#Using_the_ConVar_class
    See also the "adding new commands and variables" above link


    So if its not too restricting as to what can be added it looks like someone could potentially code a new command into valve.rc. Then i can replace it in the .pak really fast, rerender the cdi and try it. If anyone attempts this, try to code something that dials the modem. But again im not sure how restricting what functions can be added
     
  18. Jack.

    Jack. RISC Master Race

    Joined:
    Sep 3, 2014
    Messages:
    129
    Likes Received:
    9
    This.
    Probably the code itself is all there, but what about the resources? Can't we simply call the TCP/IP stack and let WinCE do the rest? I may give it a try...
     
    TerdFerguson likes this.
  19. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    757
    Likes Received:
    469
    I installed the CE dev kit in a winXP virtual machine, then got all the dlls half life uses on-disc and the CE networking dlls in the kit.

    Half life exe and dll dependancies : https://mega.co.nz/#!eRwWlQ5B!lfqlsNwxjJppxpuZvAWRXW5mgoURx9U7uPp7trNdRr0

    CE net DLLs : https://mega.co.nz/#!yZo32bTB!SivvDmlIU54sljXkuKKPccGoQF5Bz3nQNkwP2y851AI

    If someone had a devbox you might be albe to run the exe with additional dlls by going to "Project --> Settings --> Debug" and changing category to "Additional DLLs" in visual c++ 6.0

    These might not be of too much use but you can open dependency walker and view all the dll info for the exe. Too bad theres no katana/devbox emulator with virtual SCSI to fiddle around further. But this is about all i can do ability wise. If anyone attempts anything :
    1.) See the extent of what convars/commands can be added into valve.rc
    2.) Try to add the CE network DLLs into the EXE
    3.) See if you can execute the EXE and possibly additional DLLs with an actual katana/devbox + CE devkit
    4.) Using results from 1-3, try to add commands for dialing modem off of the config on dc, and another for connecting to a server
     
  20. petterk

    petterk Spirited Member

    Joined:
    Dec 30, 2011
    Messages:
    137
    Likes Received:
    11
    The valve.rc (or autoexec.cfg) file is simply executing commands already coded into the game (as vars - or settings if you will), like presets.
    Adding low-level code for dialing the modem and/or other network interfaces would require (some of) the source code - or enough free memory for another process to remain in memory, and even then it would be hard to integrate it for the game to use without some kind of sources.

    I think its plausible to be able to use the connect command with some hacking, as single player seems to use that command aswell, but adding support for the modem is a much more extensive task.

    You could try to see if there are references to the network stack in the game somewhere (being a WinCE game, bba support is out of the question), but I doubt it.
     

Share This Page