Files
ls-2019-source/PATCHES-LosaDev.md

23 KiB

LosaDev changes to the 2019 source

This snapshot is a copy of the 2019 source (213 heroes, 213LSK). Every change against the original tree is listed here. All edits were made byte-safe (the sources are CP949): only the listed text was replaced, line endings were kept, and every other file is byte-identical to the original (checked by SHA-256 on 2026-11-07: 20 269 identical, 327 changed (including the new .gitignore and the host-name pass below), 0 added apart from the LosaDev files at the root).

1. What was left out of the copy

  • Build output: Debug\, Release\, x64\, Shipping*\, ipch\, and *.obj, *.pch, *.ipch, *.sdf, *.opensdf, *.suo, *.user, *.ncb, *.aps, *.tlog, *.pdb, *.ilk, *.idb, *.sbr, *.bsc, *.cod, *.lastbuildstate, *.unsuccessfulbuild.
  • IDE and VCS folders: .vs\, .git\ (the old repository history, 450 MB), and the previous owner's .gitignore (it ignored every bin\ folder, which holds needed libraries). A new .gitignore is at the root.

Third-party libraries (lib\, extra\lib\, extra\include\, etc\Library\, wxWidgets, Bullet, gperftools, ziparchive, the anti-cheat SDKs) are kept as they were. Exception: the vendor SDK binaries listed under "Vendor SDK binaries removed" below.

2. Build fixes

File Change Why
src\ls_relaysvr\Manager.cpp g_UDPNode()->InitMemory(3000,16384*2,6000,6000,1000); became InitMemory(3000,16384*2,6000/*,6000,1000*/); C2661: UDPNode (source in src\iocpSocketDLL and the prebuilt lib\iocpSocketDLL.lib) only has 3- and 7-argument overloads; no 5-argument version exists anywhere in the tree. The 2014 relay server has exactly this line, so the 3-argument call (packetCount = 6000) is the original developers' own fix.
win\projects\LogDLL.vcxproj, win\projects\FrameTimerDLL.vcxproj Each post-build copy ... ..\..\build\zone_office\<server>\ line now starts with if exist "<that folder>\" The copy failed when the zone_office folders did not exist, which failed the build. The DLL itself was always fine.
src\ioFreeType\StdAfx.h #pragma comment(lib, "../LSLog/bin/LSLog.lib") (and LSLogd.lib) now point at ../../lib/ LNK1104: LSLog builds into lib\; src\LSLog\bin\ does not exist in this release.

3. Secrets and personal data replaced

Placeholders: 127.0.0.1 for addresses the code connects to, 192.0.2.1 (a reserved documentation address that never matches a real host) where the code compares the server's own IP against a fixed list, and CHANGE_ME for keys, passwords, tokens and account names. Private network addresses (10.x, 172.16-31.x, 192.168.x) were left as they are.

File Replaced
extra/LS_Monitor/LS_Monitor/config.ini 10 public IP(s)
extra/LS_MonitorClient/Bin/config.ini 4 public IP(s)
extra/LS_MonitorClient/LS_MonitorClient/config.ini 10 public IP(s)
extra/LS_Service/bin/server.txt 1 public IP(s)
extra/testNXShop/testCode/cTestThread.cpp 1 public IP(s)
extra/testNXShop/testCode/testCode.cpp 1 public IP(s)
sql/20120504/lostsaga_sp.sql 1 public IP(s)
src/BillingRelayServer/billingrelayserverinfo.ini 1 public IP(s)
src/BillingRelayServer/Channeling/ioChannelingNodeDaum.cpp 1 public IP(s)
src/BillingRelayServer/Channeling/ioChannelingNodeWemadeBuy.cpp 1 public IP(s), billing session value
src/BillingRelayServer/ipg/sample/asp/ipg_cli_input.asp e-mail address
src/BillingRelayServer/Local/ioLocalIndonesia.cpp 2 public IP(s)
src/BillingRelayServer/Local/ioLocalTaiwan.cpp player account id
src/BillingRelayServer/Local/ioLocalThailand.cpp 10 public IP(s)
src/ErrorDlg/ErrorDlg/ErrorDlg.vcxproj developer user folder (post-build now copies $(TargetPath))
src/ErrorDlg/ErrorDlg/HackShield/ioHackShield.cpp 1 public IP(s)
src/ls_billingsvr/Channeling/ioChannelingNodeDaum.cpp 1 public IP(s)
src/ls_billingsvr/Channeling/ioChannelingNodeWemadeBuy.cpp 1 public IP(s), billing session value
src/ls_billingsvr/Channeling/ioChannelingNodeWemadeCashLink.cpp 1 public IP(s), billing session value
src/ls_billingsvr/Local/ioLocalBrazil.cpp publisher hash key
src/ls_billingsvr/Local/ioLocalEU.cpp 1 public IP(s)
src/ls_billingsvr/Local/ioLocalIndonesia.cpp 2 public IP(s)
src/ls_billingsvr/Local/ioLocalLatin.cpp 2 public IP(s)
src/ls_billingsvr/Local/ioLocalSA.cpp 6 public IP(s)
src/ls_billingsvr/Local/ioLocalThailand.cpp 10 public IP(s)
src/ls_billingsvr/Local/ioLocalUS.cpp publisher app id, test account + password, publisher hash key
src/ls_gamesvr/MainProcess.cpp 2 public IP(s) (2 in address comparisons -> 192.0.2.1)
src/ls_gamesvr/NodeInfo/LicenseManager.h 1 public IP(s)
src/ls_gamesvr/Xtrap/XTrap4Server.cpp 3 public IP(s) (1 in address comparisons -> 192.0.2.1)
src/ls_mainsvr/MainProcess.cpp 2 public IP(s) (2 in address comparisons -> 192.0.2.1)
src/LSAutoUpgrade/_참고/ls.asp SQL connection string (host, login, password)
src/LSAutoUpgrade/AutoUpgradeDlg.cpp login token
src/LSAutoUpgrade/ioLoginDlg.cpp 1 public IP(s)
src/LSAutoUpgrade/Xtrap/ioXtrap.cpp XTrap license id(s)
src/LSClient/config/debug_connect.ini login token
src/LSClient/Login.cpp login token
src/LSClient/XignCode/ioXignCode.cpp XignCode license key
src/LSClient/Xtrap/ioXtrap.cpp XTrap license id(s)
src/LSClientMT/config/debug_connect.ini login token
src/LSClientMT/Login.cpp login token
src/LSClientMT/XignCode/ioXignCode.cpp XignCode license key
src/LSClientMT/Xtrap/ioXtrap.cpp XTrap license id(s)
src/LSMonitor/LSMonitorDlg.cpp LSMonitor login password
src/LSWebBroker/_CMD.txt login token
src/LSWebBroker/Local/ioLocalBrazil.cpp login token
src/LSWebBroker/Local/ioLocalEU.cpp login token
src/LSWebBroker/Local/ioLocalLatin.cpp login token
src/LSWebBroker/Local/ioLocalUS.cpp login token
src/MainServer/Window.cpp 2 public IP(s) (2 in address comparisons -> 192.0.2.1)
src/PatchManager/PatchManager.cpp 1 public IP(s)
src/SP2LostSagaGameServer/NodeInfo/LicenseManager.h 1 public IP(s)
src/SP2LostSagaGameServer/Window.cpp 1 public IP(s) (1 in address comparisons -> 192.0.2.1)

The anti-cheat license strings (XTrap, XignCode) are only used by the Shipping configurations with those SDKs; Debug and Release do not use them.

4. Left in place on purpose

These are part of the game itself and are needed to read its data or talk to the client:

  • Pack (.iop) passwords per country in src\io3DEngine\ioLocalManagerParent.cpp (stored encoded, with the plain text in comments), repeated in the PatchManager, PatchManagerOld, LSAutoUpgrade and ErrorDlg copies of the local managers.
  • WEB_UDP_KEY_VALUE in src\ls_gamesvr\NodeInfo\UserNodeManager.h and the check key EDEW3940FVDP4950 in the launcher command-line notes.
  • Packet and DB password encoding in iocpSocketDLL and ls_dbagent (ls_dbagent.exe -x).
  • Copyright and author e-mail addresses in third-party code and .rc version blocks.

5. Build test

Copied to a scratch folder and built on 2026-11-07 in Release|Win32 with the v100 toolset (VS2010, via VS2022 MSBuild), Version.h created next to every TSvnVersion.tmpl, the TortoiseSVN pre-build step disabled and static-runtime Boost:

Solution Result
ioINILoader, Log, LogDLL, FrameTimerDLL, iocpSocketDLL, LSLog, SharedContainer, PerfMon, TownPortal, ioFreeType Build
io3DEngine Builds
ls_dbagent, ls_mainsvr, ls_billingsvr, ls_gamesvr, ls_relaysvr, ls_loginsvr, ls_filewritesvr Build
LSClient Builds LostSaga.exe
ioPac Builds (Release, 0 errors) after the BigPac fix in "ioPac BigPac fix" below. Before the fix BigPac.cpp used members that BigPac.h did not declare.

Publisher and operator host names (added 2026-11-07)

Owner decision: no real publisher, operator or game-service host names in the repository. Every such host was replaced in text files (same byte-safe method as above, CP949 as Latin-1, UTF-16 .sql only when lossless, line endings kept):

  • a URL scheme://host[:port]/path became http://127.0.0.1/path (the path is kept, the port dropped);
  • a bare host name became example.invalid;
  • e-mail addresses at the developer's and publisher's own domains (@ioenter.com, @nexon.co.kr) became @example.invalid (the part before @ is kept). Files: src/BillingRelayServer/Local/ioLocalTaiwan.cpp (10), src/BillingRelayServer/Local/ioLocalUS.cpp (10), src/ls_billingsvr/Local/ioLocalEU.cpp (9), src/ls_billingsvr/Local/ioLocalUS.cpp (9), src/ls_gamesvr/Channeling/ioChannelingNodeNexonBuy.cpp (1).

2313 replacements in 279 files, 74 hosts. Hosts (number of replacements): nxsoap.nexon.com (1421), testsoap.nexon.com (703), www.lostsaga.com (13), lostsaga.com (12), billingws.gamon.net (12), forum.gemscool.com (7), lostsaga.ogplanet.com (7), nxpay.nexon.com (7), billlosatest.wemade.com (6), secure3.asiasoft.co.th (5), www.lostsaga.jp (5), www.gemscool.com (4), cdn.lostsaga.z8games.com (4), www.playone.asia (4), www.lostsaga.in.th (4), www.gamon.net (4), images.z8games.com (4), ls.garena.in.th (4), lostsaga.gamon.net (4), profile.playcybergames.com (4), www.z8games.com (3), lostsaga.z8games.com (3), games.playpark.com (3), www.gameclub.ph (3), platform.garena.tw (2), cabinet.ogplanet.com (2), patch.lostsaga.com.tw (2), lostsaga.gemscool.com (2), na-qa.launcher.z8games.com (2), en.lostsaga.nexoneu.com (2), passport.nexoneu.com (2), test.bill.daum.net (2), losa.nexon.com (2), www.daum.net (2), authen.playpark.net (2), cdn.lostsaga.com (2), www.nxcreative.co.kr (2), support.z8games.com (2), download.lostsaga.com (2), search.daum.net (2), qa-happycode.mangot5.com (2), ripay.nexon.com (1), ripay-test.nexon.com (1), api.z8games.com (1), doc.valofe.com (1), app.z8games.com (1), alpha.lostsaga-tw.valofe.com (1), beta.lostsaga-tw.valofe.com (1), lostsaga.nefficient.co.kr (1), lostsaga-tw.valofe.com (1), network.adsmarket.com (1), aspdll.xonda.net (1), www.lostsaga.ph (1), beta.www.lostsaga.com (1), start.tiara.daum.net (1), citystat.playone.asia (1), game.playpark.com (1), my.playpark.com (1), www.playpark.com (1), billing.ogplanet.com (1), apis-test.nexon.com (1), api.ogplanet.com (1), lostsaga.wemadeusa.com (1), alpha.api.bill.naver.com (1), www.softnyx.com (1), tr.lostsaga.nexoneu.com (1), ls.gameclub.ph (1), lostsaga.garena.tw (1), vfun.valofe.com (1), de.lostsaga.nexoneu.com (1), support.lostsaga.nexoneu.com (1), fr.lostsaga.nexoneu.com (1), pl.lostsaga.nexoneu.com (1), it.lostsaga.nexoneu.com (1).

Folder Files Replacements Hosts
extra/LS_NXSoap/LS_NXSoap/ 66 657 nxsoap.nexon.com
extra/LS_NXSoap/NEXON_live/ 72 764 nxsoap.nexon.com
extra/LS_NXSoap/NEXON_testnx/ 66 703 testsoap.nexon.com
extra/testHTTP/testCode/ 1 1 apis-test.nexon.com
src/BillingRelayServer/ 1 3 alpha.api.bill.naver.com, api.ogplanet.com, billing.ogplanet.com
src/BillingRelayServer/Channeling/ 2 3 billlosatest.wemade.com, test.bill.daum.net
src/BillingRelayServer/Local/ 1 16 billingws.gamon.net, www.gamon.net
src/ErrorDlg/ErrorDlg/ 7 8 forum.gemscool.com, games.playpark.com, lostsaga.gamon.net, lostsaga.wemadeusa.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp
src/ls_billingsvr/Channeling/ 4 7 billlosatest.wemade.com, qa-happycode.mangot5.com, test.bill.daum.net
src/ls_billingsvr/Local/ 2 3 api.z8games.com, app.z8games.com, network.adsmarket.com
src/ls_gamesvr/Channeling/ 3 8 doc.valofe.com, losa.nexon.com, nxpay.nexon.com, ripay.nexon.com, ripay-test.nexon.com
src/LSAutoUpgrade/ 4 25 authen.playpark.net, cdn.lostsaga.com, cdn.lostsaga.z8games.com, citystat.playone.asia, game.playpark.com, my.playpark.com, profile.playcybergames.com, search.daum.net, secure3.asiasoft.co.th, start.tiara.daum.net, www.daum.net, www.nxcreative.co.kr, www.playpark.com
src/LSAutoUpgrade/_참고/ 2 4 cabinet.ogplanet.com, patch.lostsaga.com.tw
src/LSAutoUpgrade/Local/ 12 50 cdn.lostsaga.z8games.com, de.lostsaga.nexoneu.com, en.lostsaga.nexoneu.com, forum.gemscool.com, fr.lostsaga.nexoneu.com, images.z8games.com, it.lostsaga.nexoneu.com, lostsaga.garena.tw, lostsaga.gemscool.com, lostsaga.z8games.com, ls.gameclub.ph, ls.garena.in.th, passport.nexoneu.com, pl.lostsaga.nexoneu.com, platform.garena.tw, support.lostsaga.nexoneu.com, support.z8games.com, tr.lostsaga.nexoneu.com, vfun.valofe.com, www.gameclub.ph, www.gemscool.com, www.lostsaga.com, www.lostsaga.jp, www.playone.asia, www.softnyx.com, www.z8games.com
src/LSClient/ 3 13 lostsaga.com, nxpay.nexon.com
src/LSClient/Local/ 7 8 forum.gemscool.com, games.playpark.com, lostsaga.gamon.net, lostsaga.ogplanet.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp
src/LSClientMT/ 2 2 nxpay.nexon.com
src/LSClientMT/Local/ 7 8 forum.gemscool.com, games.playpark.com, lostsaga.gamon.net, lostsaga.ogplanet.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp
src/LSMonitor/Sms/ 2 2 aspdll.xonda.net, lostsaga.com
src/LSWebBroker/ 3 7 download.lostsaga.com, lostsaga.nefficient.co.kr, www.lostsaga.com
src/LSWebBroker/Local/ 12 21 alpha.lostsaga-tw.valofe.com, beta.lostsaga-tw.valofe.com, beta.www.lostsaga.com, cdn.lostsaga.z8games.com, forum.gemscool.com, lostsaga.gamon.net, lostsaga.ogplanet.com, lostsaga-tw.valofe.com, na-qa.launcher.z8games.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp, www.lostsaga.ph

Binary files, patched only with same-length replacements (nxsoap.nexon.com -> xexample.invalid, testsoap.nexon.com -> xxxexample.invalid, and so on, so sizes and offsets do not change):

  • extra\lib\: LS_NXSoap.lib, LS_NXSoapD.lib, LS_NXSoapTEST.lib, LS_NXSoapTESTD.lib. The SOAP namespace and endpoint strings inside the libraries now use the padded .invalid names.
  • Vendor documents src\BillingRelayServer\OGPDocument\1. IOEntertainment.doc, 4. installer package components.doc (OGPlanet hosts) and src\LSMonitor\Sms\Xonda_net_SMSWS_v1.0.doc (SMS service host).

Left on purpose (not publisher or game-service hosts): standards and XML namespaces (www.w3.org, schemas.microsoft.com, schemas.xmlsoap.org), homepages and documentation links of third-party libraries and their authors (Bullet, ZipArchive, OPCODE, Lua, TinyXML, Ogg Vorbis, wxWidgets, gperftools, OpenSSL, libcurl and others), copyright lines that name a company without a host (Wellbia, INCA, Bandisoft), api.ipify.org (public IP lookup used by the launcher), www.google-analytics.com (the analytics collector; the tracking id comes from config), the Steam SDK headers (store.steampowered.com, www.steamgames.com), and the vendor addresses inside third-party binaries listed above in section "Left in place on purpose".

Local run fixes (added 2026-11-07)

Found while running this source on one local PC. Byte patches, line endings kept.

File Change Why
src\ls_gamesvr\Local\ioLocalParent.cpp, src\LSClient\Local\ioLocalParent.cpp IsRightLicense() no longer compares the date (if( iDate >= GetLicenseDate() ) return false; replaced by (void)iDate;) The Indonesia license dates (server 2013-12-31, client 2012-11-30) have passed: the game server exited with "This program has expired", the client showed "Your license has com up for renewal.".
src\ls_billingsvr\LoginManager\LoginManager.cpp In CheckLogin(), the Indonesia TestMode success branch moved before the pInfo == NULL check Without the launcher nobody fills the login list, so every TestMode login failed.
src\ls_gamesvr\NodeInfo\UserNodeManager.cpp The two __OHTG_LOGIN_IP_CHECK__ comparisons in OnResultSelectUserLoginInfo() are skipped when szTestIP is empty The Indonesia locale never decrypts an IP key, so the check always failed (USER IP NOT2).
src\ls_mainsvr\MainProcess.cpp The MessageBox "Local IP Error." became a log line A server started without a window would wait on the dialog for ever.

Client text (added 2026-11-07)

SafeSprintf and the printers built on it have two paths. Korea uses printf (%s %d), every other locale uses FormatMessage (%1 %2). This repository is set up for the Indonesia client:

Files Change Why
193 .cpp files in src\LSClient 841 literal formats of AddTextPiece, PrintText, PrintTextWidthCut, SetMsgBox, SafeSprintf and related calls changed from %s %d %u %I64d to %1 %2 They printed as raw text outside Korea.
The same files 2 556 Korean literals inside functions became STR(n) Text belongs in the text tables. The rows are added to resource/text/text_id.txt in the client download, in Korean until translated. Left as they are: string comparisons, _e macros and literals outside functions.
src\io3DEngine\Safesprintf.cpp New FormatPrintfStyle() %02d and %.2f cannot be written as %1; they are formatted from the argument strings.
src\io3DEngine\ioXMLElement.cpp Child elements inherit the text table setting STR(n) in nested XML, such as TextBlock, printed as raw text.
src\LSClient\GUI\EtcItemSlotWnd.cpp, GrowthDownSelectWnd.cpp Array initializers changed for STR(n) STR returns a pointer.

Side effect: in the Korea locale these literals now print %1. To run Korea, use the original format strings or add a table for that locale.

Bug fixes (added 2026-11-07)

File Change Why
src\LSClient\Setting.cpp LOW_SPEC and MINIMUM_SPEC presets set m_bUse16bitFrameBuffer = false These presets asked for a 16-bit full screen device, which current Windows refuses; the client exited without a window.
db\losadev\losadev-2019-procs.sql Procedures the 2019 server calls (ls_query.ini ids 1, 136, 137, 139) that no released DB script contains Login and the DB agent keep-alive failed.
db\losadev\losadev-first-tournament.sql First userLeagueListDB row Faction War / LS Cup showed no dates.
server-config\ls_gamesvr\config\ (10 files) The client's sp2_deco_*, sp2_extraitem_info, sp2_gashapon_present, sp2_item_price, sp2_item_recharge, sp2_leader_item, sp2_medalitem_info, sp2_new_alchemic_info, sp2_setitem_info copied over the server's (same keys) Shop and gacha lists did not match the client. Copy them over the release's server config.
Client download: xml/myinventoryinfownd.xml in rs.iop Window IDs changed to the ones in MyInventoryInfoWnd.h My Item buttons were on top of each other.
server-config\ls_gamesvr\config\sp2_mode_select.ini Shuffle Bonus subs 30-32 and Factory subs 2-3 set to active = 0, map_cnt = 0 The client has no maps for them (black screen).

Vendor SDK binaries removed (added 2026-11-07)

No vendor SDK binaries are shared in any LosaDev tier. The source code that uses them stays.

Deleted XTrap libraries/DLLs (13): src\LSAutoUpgrade\Xtrap\XTrap4Launcher_mt.lib, src\LSClient\Xtrap\XTrap4ClientExt1_mtdll.lib, src\LSClient\Xtrap\XTrap4Client_ClientPart_mtDll.lib, src\LSClient\Xtrap\XTrap4Client_ServerPart_mtDll.lib, src\LSClient\Xtrap\XTrap4Client_mtDll.lib, src\LSClient\Xtrap\XTrap_Unipher_mtDll.lib, src\LSClientMT\Xtrap\XTrap4ClientExt1_mtdll.lib, src\LSClientMT\Xtrap\XTrap4Client_ClientPart_mtDll.lib, src\LSClientMT\Xtrap\XTrap4Client_ServerPart_mtDll.lib, src\LSClientMT\Xtrap\XTrap4Client_mtDll.lib, src\LSClientMT\Xtrap\XTrap_Unipher_mtDll.lib, src\SP2LostSagaGameServer\Xtrap\XTrap4Server.dll, src\ls_gamesvr\Xtrap\XTrap4Server.dll.

Deleted bxIPGClient.dll copies (7): lib\bxIPGClient.dll, src\BillingRelayServer\JapanDLL\bxIPGClient.dll, src\BillingRelayServer\bxIPGClient.dll, src\BillingRelayServer\ipg\bin\bxIPGClient.dll, src\ls_billingsvr\Adbill\bxIPGClient.dll, src\ls_billingsvr\JapanDLL\bxIPGClient.dll, src\ls_billingsvr\ipg\bin\bxIPGClient.dll.

#import "...bxIPGClient.dll" no_namespace needs the DLL at compile time, so it was replaced by #include "...bxIPGClient_stub.h" in:

  • src\BillingRelayServer\Local\ioLocalJapan.cpp
  • src\ls_billingsvr\Channeling\ioChannelingNodeHappyTuk.cpp
  • src\ls_billingsvr\Channeling\ioChannelingNodeValofe.cpp
  • src\ls_billingsvr\Local\ioLocalJapan.cpp

New stand-in headers: src\BillingRelayServer\JapanDLL\bxIPGClient_stub.h, src\ls_billingsvr\Adbill\bxIPGClient_stub.h, src\ls_billingsvr\JapanDLL\bxIPGClient_stub.h. They declare only what the code calls (IIPGClient with GetCash, Output, OutputCancel, OutputIPG, and the IIPGClientPtr smart pointer). The COM class is never registered, so CreateInstance fails, the pointer stays empty and the existing catch( _com_error ) paths run: the Japan IPG and Adbill billing calls report an error, nothing else changes.

Verified 2026-11-07: ls_billingsvr Release|Win32 builds with 0 errors with no bxIPGClient.dll present. BillingRelayServer gets the same header but was not build-tested.

The XTrap code is only compiled in Shipping configurations with XTRAP defined. Those configurations no longer link without the vendor SDK; build Debug or Release.

Script: vendor-strip.js (latin1 byte-safe, CRLF kept).

ioPac BigPac fix (added 2026-11-07)

src\ioPac\BigPac.cpp is newer than BigPac.h (the header is the 2014 one, byte-identical), so ioPac did not build and the release only worked with the prebuilt lib\iopac.dll.

File Change
src\ioPac\BigPac.h Added vFileInfo m_vecFileInfo; next to m_setFileInfo, and declarations for the functions the .cpp defines: OpenBigPacAll, GetFileIndexVec, AddFile, DeleteFiles (public), BuildFileInfo, ClearFileInfo (private). Each addition is marked LosaDev.
src\ioPac\BigPac.cpp CBigPac::OpenBigPacAll (IOP Manager only) wrapped in #ifdef STATIC_PAC_API, because it calls BuildFileInfo(), which is only defined in that block. Without it the DLL build fails to link.

Verified 2026-11-07: Release|Win32 builds with 0 errors. The new iopac.dll (279 040 bytes) exports 71 functions, a superset of the 66 in the prebuilt DLL (none missing). The LosaDev client package ships this rebuilt DLL.

Scripts: bigpac-header.js, bigpac-cpp.js (latin1 byte-safe, CRLF kept).

Database setup and one-PC server config (added 2026-11-07)

  • New database\: creates LosaGame, LosaGame_log, LosaLogData and an empty Backup (game procedures create their own tables in it), the SQL logins lstggame / lstglog with a password you choose, the 2021 release schema (owner decision 2026-11-07; the 2019 scripts lack 212 of 401 procedures) without its CREATE DATABASE block, db_owner users, the encode key, the 2019 procedures and first tournament from DB\losadev\, optional test accounts, backup.sql / restore.sql with .bat wrappers, and setup-db.bat. Tested on SQL Server 2022 Express: 0 errors, backup + restore OK.
  • server-config\ is now the tested one-PC set (nine server folders, 127.0.0.1, ports 19xxx, PW=CHANGE_ME). The previous content moved to server-config\_original-release\.