Compile win_ds1edit.exe on Windows 10 (VC++2010)

Post here for all aspects of map making and level design. Click here to visit the Keep's official map site, Diabolic Cartography.

Moderator: Paul Siramy

Post Reply
User avatar
MilesTeg
Posts: 36
Joined: Sun Jul 18, 2021 6:42 am
Germany

Compile win_ds1edit.exe on Windows 10 (VC++2010)

Post by MilesTeg » Fri Nov 12, 2021 3:56 pm

Compile win_ds1edit.exe on Win 10
==================================

This is an updated guide for anyone else having problems getting old VisualC++2010Express to work.

There's not really much new information for experienced programmers (that know VC++2010 by heart) but newcomers might welcome it.
This is mostly just my writeup of what I did. There might be far easier ways to do it, so feel free to add ideas/suggestions :)



1. Downloads & Installs
=======================
As a side note VC++2010 peacefully coexists beside my VisualStudio 2019 Community Edition Installation.

win_ds1edit source files
---------------------------
Source code is provided for free by the author Paul Siramys (huge thanks!) on his site:
http://paul.siramy.free.fr/_divers/ds1/dl_ds1edit.html


Microsoft Visual C++ 2010
---------------------------
WinDS1 is compiled with Microsoft Visual C++ 2010. [1]

Download the iso from
https://web.archive.org/web/20130811055 ... press1.iso

Installation: - extract the VS2010Express1.iso with 7zip and start \VCExpress\setup.exe
- disable both options: Silverlight & Microsoft SQL Server 2008 SP1 and finish the install [2]


Allegro Library
---------------------------
win_ds1edit uses the Allegro Library. Go to http://www.allegro.cc/files/?v=4.4
and get the "MSVC 10" windows binary ( allegro-4.4.2-msvc-10.0.zip /.7z )

Extract the files.


2. VC++: Setup & Configs
=======================

Setup a project
---------------------------
To compile win_ds1edit.exe you need to make a new project with all .c and all .h,
and link the Allegro library.

- start "MS Visual Studio C++ 2010 Express"
- on the start page click "New Project..."
- select template "Win32" / "Win32 Console Application"
- enter a name & click OK


Win32 Application Wizard
---------------------------
- click "next"
- Application Settings: At "Additional options" select "Empty Project" & click "Finish"
- Your new project opens. Notice "Header Files" and "Source Files" folders within the "Solution Explorer" window.


Add win_ds1edit Files to the project
--------------------------
- Switch to windows explorer and open the win_ds1edit-source directory
- select all .h files and drag&drop them to your projects "Header Files"
- select all .c files and drag&drop them to your projects "Source Files"
-- also repeat this for all files in "mpq" subdir.


Link Allegro library [3]
---------------------------
In your "Solution Explorer" CLICK on 'YourProjectName'! It's the subelement of "Solution 'YourProjectName' (1 project)"! (This. is. important!)

Open menu "Project" / "Properties": In the left column open "Configuration Properties"
(next steps will always assume we are under Configuration Properties)

- In C/C++ -> "General" in "Additional Include Directories" add the path to your allegro.h file: "<PathToExtracted_Allegro>\include\"
- In Linker -> "General" in "Additional Library Directories" add the path to static library allegro-4.4.2-monolith-md.lib: "<PathToExtracted_Allegro>\lib\"
- In Linker -> "Input" in "Additional Dependencies" add the allegro library by clicking the dropdown button and click <Edit...>. Write "allegro-4.4.2-monolith-md.lib" in the input field and click ok.


3. Let's compile!
=======================
Now everything should be setup correctly. Open menu "Build" / "Build Solution" start compiling.

You shouldn't have any warnings or errors:

========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

You'll usually find the new .exe file in your debug dir.

source:
WinDS1 source-readme by tool author Paul Siramys
https://stackoverflow.com/questions/366 ... ss-project

credits:
Paul Siramy - Author of this awesome tool!

Tom Amigo "The mpq\ directory is my modification of the 'Sample Console App source code'
at http://www.angelfire.com/sc/mpq/ Big thanks to Tom Amigo to have released
these sources. It's a really usefull piece of code." -Paul Siramy


[1] - I did most of it out of curiosity if VC++2010 worked on Win10 :lol:
- I also quickly gave up on newer versions of VS as they don't seem to provide necessary dependencies.
- The VC++2010 webinstaller did not work (failed to download a module and cancled setup...).
-- There's also no network installer available - therefor: .iso.

[2] Thankfully we don't need any additional service packs or updates. (they seem to be incompatible with Win10...)

[3] MS has restructured dependency management quite a bit for VC++2010. The old guide from source-readme was probably based on an earlier version of VC++.

User avatar
kain_abel_666
Posts: 68
Joined: Fri Apr 03, 2020 12:13 pm
Location: Canada
Canada

Re: Compile win_ds1edit.exe on Windows 10 (VC++2010)

Post by kain_abel_666 » Fri Nov 12, 2021 7:20 pm

why would you compile it from source if it is already available with an editor GUI in the keep discord, in #cain-commands when you type .tools?
I've stayed quite a while and heard what you have to say. Now it is time for the real Kain to emerge.

User avatar
MilesTeg
Posts: 36
Joined: Sun Jul 18, 2021 6:42 am
Germany

Re: Compile win_ds1edit.exe on Windows 10 (VC++2010)

Post by MilesTeg » Tue Nov 16, 2021 4:55 pm

afaik: Paul Siramy has stopped working on the editor. It's the most advanced DS1-Map Editor and with D2R there might be interest in new features.

With a working build environment it's also much easier to test and reimplement some of the features for other tools.


Of course all of this might change once we get a full featured level editor from Blizzard... but I have doubts that one will arrive anytime soon ;-)

sergejj180
Posts: 2
Joined: Wed Dec 15, 2021 5:10 am

Re: Compile win_ds1edit.exe on Windows 10 (VC++2010)

Post by sergejj180 » Wed Dec 15, 2021 6:50 am

i'm is compiling ds1edit to eclipse ide parallel-2021-12 according to the instructions https://www.allegro.cc/forums/thread/616828 to allegro-4.4.2 https://github.com/liballeg/allegro5/releases/tag/4.4.2

i configured eclipse ide i configured eclipse ide to the instruction https://www.devdungeon.com/content/how- ... evelopment

mu eclipse ide setting

Code: Select all

MINGW_HOME = ${MSYS_HOME}\mingw64;
//msys2 directories
MSYS_HOME = E:\msys64;

PATH = 
${MINGW_HOME}\bin;
${MINGW_HOME}\bin\include;
${MINGW_HOME}\bin\include\c++\11.2.0;
${MSYS_HOME}\usr\bin;
${MSYS_HOME}\usr\include;
These settings turned out to be working, but eclipse ide no searching allegro.h

This was solved by adding paths in the project setting, in the file .cproject

Code: Select all

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
	<storageModule moduleId="org.eclipse.cdt.core.settings">
		<cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.debug.31072707">
			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.debug.31072707" moduleId="org.eclipse.cdt.core.settings" name="Debug">
				<externalSettings/>
				<extensions>
					<extension id="org.eclipse.cdt.core.PE64" point="org.eclipse.cdt.core.BinaryParser"/>
					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
				</extensions>
			</storageModule>
			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.exe.debug.31072707" name="Debug" parent="cdt.managedbuild.config.gnu.mingw.exe.debug">
					<folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.debug.31072707." name="/" resourcePath="">
						<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.exe.debug.1956745657" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.exe.debug">
							<targetPlatform id="cdt.managedbuild.target.gnu.platform.mingw.exe.debug.937712099" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.mingw.exe.debug"/>
							<builder buildPath="${workspace_loc:/zxvxcvxczvcxzvzxv}/Debug" id="cdt.managedbuild.tool.gnu.builder.mingw.base.46321100" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" superClass="cdt.managedbuild.tool.gnu.builder.mingw.base"/>
							<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.exe.debug.2104737812" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.exe.debug">
								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.122750808" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
							</tool>
							<tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.1785789162" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug.1222735283" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug">
								<option id="gnu.cpp.compiler.mingw.exe.debug.option.optimization.level.2041791050" name="Optimization Level" superClass="gnu.cpp.compiler.mingw.exe.debug.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
								<option defaultValue="gnu.cpp.compiler.debugging.level.max" id="gnu.cpp.compiler.mingw.exe.debug.option.debugging.level.772138552" name="Debug Level" superClass="gnu.cpp.compiler.mingw.exe.debug.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
								<option id="gnu.cpp.compiler.option.dialect.std.1137310010" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.default" valueType="enumerated"/>
								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.1011127334" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
									<listOptionValue builtIn="false" value="&quot;D:\files\new_folder\allegro\include&quot;"/>
								</option>
								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.530901275" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
							</tool>
							<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.896228219" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug">
								<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.mingw.exe.debug.option.optimization.level.1981803481" name="Optimization Level" superClass="gnu.c.compiler.mingw.exe.debug.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/>
								<option defaultValue="gnu.c.debugging.level.max" id="gnu.c.compiler.mingw.exe.debug.option.debugging.level.1396676117" name="Debug Level" superClass="gnu.c.compiler.mingw.exe.debug.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
								<option id="gnu.c.compiler.option.dialect.std.94439907" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.default" valueType="enumerated"/>
								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.380600844" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
							</tool>
							<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.exe.debug.871519053" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.exe.debug"/>
							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.debug.1909538101" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.debug">
								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1583396276" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
								</inputType>
							</tool>
						</toolChain>
					</folderInfo>
					<sourceEntries>
						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
					</sourceEntries>
				</configuration>
			</storageModule>
			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
		</cconfiguration>
		<cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.release.668298769">
			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.release.668298769" moduleId="org.eclipse.cdt.core.settings" name="Release">
				<externalSettings/>
				<extensions>
					<extension id="org.eclipse.cdt.core.PE64" point="org.eclipse.cdt.core.BinaryParser"/>
					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
				</extensions>
			</storageModule>
			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.exe.release.668298769" name="Release" parent="cdt.managedbuild.config.gnu.mingw.exe.release">
					<folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.release.668298769." name="/" resourcePath="">
						<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.exe.release.1146435758" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.exe.release">
							<targetPlatform id="cdt.managedbuild.target.gnu.platform.mingw.exe.release.1400956573" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.mingw.exe.release"/>
							<builder buildPath="${workspace_loc:/zxvxcvxczvcxzvzxv}/Release" id="cdt.managedbuild.tool.gnu.builder.mingw.base.649053525" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" superClass="cdt.managedbuild.tool.gnu.builder.mingw.base"/>
							<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.exe.release.359668948" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.exe.release">
								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.334869740" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
							</tool>
							<tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.1172935107" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.release.1685404865" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.release">
								<option id="gnu.cpp.compiler.mingw.exe.release.option.optimization.level.44482005" name="Optimization Level" superClass="gnu.cpp.compiler.mingw.exe.release.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
								<option defaultValue="gnu.cpp.compiler.debugging.level.none" id="gnu.cpp.compiler.mingw.exe.release.option.debugging.level.206772555" name="Debug Level" superClass="gnu.cpp.compiler.mingw.exe.release.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.238470841" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
							</tool>
							<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.341352366" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release">
								<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.mingw.exe.release.option.optimization.level.1925720056" name="Optimization Level" superClass="gnu.c.compiler.mingw.exe.release.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/>
								<option defaultValue="gnu.c.debugging.level.none" id="gnu.c.compiler.mingw.exe.release.option.debugging.level.926533854" name="Debug Level" superClass="gnu.c.compiler.mingw.exe.release.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.700745547" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
									<listOptionValue builtIn="false" value="&quot;D:\files\new_folder\allegro\include&quot;"/>
								</option>
								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1525413347" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
							</tool>
							<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.exe.release.482471731" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.exe.release"/>
							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.release.1974274103" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.release">
								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.paths.1474296167" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths">
									<listOptionValue builtIn="false" value="&quot;D:\files\new_folder\allegro\lib&quot;"/>
								</option>
								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.libs.1585175429" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs">
									<listOptionValue builtIn="false" value="alleg44"/>
								</option>
								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.764631646" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
								</inputType>
							</tool>
						</toolChain>
					</folderInfo>
					<sourceEntries>
						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
					</sourceEntries>
				</configuration>
			</storageModule>
			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
		</cconfiguration>
	</storageModule>
	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
		<project id="zxvxcvxczvcxzvzxv.cdt.managedbuild.target.gnu.mingw.exe.389048682" name="Executable" projectType="cdt.managedbuild.target.gnu.mingw.exe"/>
	</storageModule>
	<storageModule moduleId="scannerConfiguration">
		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.31072707;cdt.managedbuild.config.gnu.mingw.exe.debug.31072707.;cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug.1222735283;cdt.managedbuild.tool.gnu.cpp.compiler.input.530901275">
			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
		</scannerConfigBuildInfo>
		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.668298769;cdt.managedbuild.config.gnu.mingw.exe.release.668298769.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.341352366;cdt.managedbuild.tool.gnu.c.compiler.input.1525413347">
			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
		</scannerConfigBuildInfo>
		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.668298769;cdt.managedbuild.config.gnu.mingw.exe.release.668298769.;cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.release.1685404865;cdt.managedbuild.tool.gnu.cpp.compiler.input.238470841">
			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
		</scannerConfigBuildInfo>
		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.31072707;cdt.managedbuild.config.gnu.mingw.exe.debug.31072707.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.896228219;cdt.managedbuild.tool.gnu.c.compiler.input.380600844">
			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
		</scannerConfigBuildInfo>
	</storageModule>
	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
	<storageModule moduleId="refreshScope"/>
	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
</cproject>
As a result, the number of errors was reduced to two:

Code: Select all

01:51:40 **** Incremental Build of configuration Release for project dfgdfgdf ****
Info: Internal Builder is used for build
g++ "-LD:\\allegro\\lib" -o dfgdfgdf "src\\anim.o" "src\\animdata.o" "src\\dc6info.o" "src\\dccinfo.o" "src\\ds1misc.o" "src\\ds1save.o" "src\\dt1_draw.o" "src\\dt1misc.o" "src\\editobj.o" "src\\editpath.o" "src\\edittile.o" "src\\error.o" "src\\gfx_custom.o" "src\\inicreat.o" "src\\iniread.o" "src\\interfac.o" "src\\main.o" "src\\misc.o" "src\\mpq\\Dcl_tbl.o" "src\\mpq\\Explode.o" "src\\mpq\\MpqView.o" "src\\mpq\\Wav_unp.o" "src\\msg_quit.o" "src\\msg_save.o" "src\\txtread.o" "src\\undo.o" "src\\wBits.o" "src\\wEdit.o" "src\\wMsg.o" "src\\wPreview.o" -lalleg44
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: src\dccinfo.o:dccinfo.c.bss+0x40): multiple definition of `dcc_error'; src\anim.o:anim.c.bss+0x40): first defined here
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: src\dccinfo.o:dccinfo.c.bss+0x0): multiple definition of `dcc_bits_width_table'; src\anim.o:anim.c.bss+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
And both errors point to file dccinfo.c

Code: Select all

dccinfo.c.bss+0x40): multiple definition of `dcc_error'; src\anim.o:anim.c.bss+0x40): first defined here
dccinfo.c.bss+0x0): multiple definition of `dcc_bits_width_table'; src\anim.o:anim.c.bss+0x0): first defined here
but the definitions themselves are in dc6info.h:

Code: Select all

#ifndef _DCC_INFO_H_
#define _DCC_INFO_H_
#define DCC_MAX_DIR 32
#define DCC_MAX_FRAME 256
#define DCC_MAX_PB_ENTRY 85000
char dcc_error[512]; /* if an error is found while using a function of this
                     // dcc "library", this variable contain a string that
                     // explain what happened. You should display it somewhere
                     // to inform the user*/
 
int dcc_bits_width_table[16]; // will be initialized by dcc_decode()
...
This was resolved by postponing

Code: Select all

int dcc_bits_width_table[16];
char dcc_error[512];
from dccinfo.h to dccinfo.c

After the changes made, ds1edit compilation went without errors

sergejj180
Posts: 2
Joined: Wed Dec 15, 2021 5:10 am

Re: Compile win_ds1edit.exe on Windows 10 (VC++2010)

Post by sergejj180 » Sun Jan 09, 2022 10:16 am

ds1edit is not just a map editor, it is almost a ready-made game engine for diabolo 2 & d2lod !!!

faizanmazhar00
Posts: 5
Joined: Thu Feb 17, 2022 6:52 am

Re: Compile win_ds1edit.exe on Windows 10 (VC++2010)

Post by faizanmazhar00 » Thu Dec 29, 2022 7:28 pm

MilesTeg wrote:
Fri Nov 12, 2021 3:56 pm
Compile win_ds1edit.exe on Win 10.
==================================

This is an updated guide for anyone else having problems getting old VisualC++2010Express to work.

There's not really much new information for experienced programmers (that know VC++2010 by heart) but newcomers might welcome it.
This is mostly just my writeup of what I did. There might be far easier ways to do it, so feel free to add ideas/suggestions :)



1. Downloads & Installs
=======================
As a side note VC++2010 peacefully coexists beside my VisualStudio 2019 Community Edition Installation.

win_ds1edit source files
---------------------------
Source code is provided for free by the author Paul Siramys (huge thanks!) on his site:
http://paul.siramy.free.fr/_divers/ds1/dl_ds1edit.html


Microsoft Visual C++ 2010
---------------------------
WinDS1 is compiled with Microsoft Visual C++ 2010. [1]

Download the iso from
https://web.archive.org/web/20130811055 ... press1.iso

Installation: - extract the VS2010Express1.iso with 7zip and start \VCExpress\setup.exe
- disable both options: Silverlight & Microsoft SQL Server 2008 SP1 and finish the install [2]


Allegro Library
---------------------------
win_ds1edit uses the Allegro Library. Go to http://www.allegro.cc/files/?v=4.4
and get the "MSVC 10" windows binary ( allegro-4.4.2-msvc-10.0.zip /.7z )

Extract the files.


2. VC++: Setup & Configs
=======================

Setup a project
---------------------------
To compile win_ds1edit.exe you need to make a new project with all .c and all .h,
and link the Allegro library.

- start "MS Visual Studio C++ 2010 Express"
- on the start page click "New Project..."
- select template "Win32" / "Win32 Console Application"
- enter a name & click OK


Win32 Application Wizard
---------------------------
- click "next"
- Application Settings: At "Additional options" select "Empty Project" & click "Finish"
- Your new project opens. Notice "Header Files" and "Source Files" folders within the "Solution Explorer" window.


Add win_ds1edit Files to the project
--------------------------
- Switch to windows explorer and open the win_ds1edit-source directory
- select all .h files and drag&drop them to your projects "Header Files"
- select all .c files and drag&drop them to your projects "Source Files"
-- also repeat this for all files in "mpq" subdir.


Link Allegro library [3]
---------------------------
In your "Solution Explorer" CLICK on 'YourProjectName'! It's the subelement of "Solution 'YourProjectName' (1 project)"! (This. is. important!)

Open menu "Project" / "Properties": In the left column open "Configuration Properties"
(next steps will always assume we are under Configuration Properties)

- In C/C++ -> "General" in "Additional Include Directories" add the path to your allegro.h file: "<PathToExtracted_Allegro>\include\"
- In Linker -> "General" in "Additional Library Directories" add the path to static library allegro-4.4.2-monolith-md.lib: "<PathToExtracted_Allegro>\lib\"
- In Linker -> "Input" in "Additional Dependencies" add the allegro library by clicking the dropdown button and click <Edit...>. Write "allegro-4.4.2-monolith-md.lib" in the input field and click ok.


3. Let's compile!
=======================
Now everything should be setup correctly. Open menu "Build" / "Build Solution" start compiling.

You shouldn't have any warnings or errors:

========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

You'll usually find the new .exe file in your debug dir.

source:
WinDS1 source-readme by tool author Paul Siramys
https://stackoverflow.com/questions/366 ... ss-project

credits:
Paul Siramy - Author of this awesome tool!

Tom Amigo "The mpq\ directory is my modification of the 'Sample Console App source code'
at http://www.angelfire.com/sc/mpq/ Big thanks to Tom Amigo to have released
these sources. It's a really usefull piece of code." -Paul Siramy


[1] - I did most of it out of curiosity if VC++2010 worked on Win10 :lol:
- I also quickly gave up on newer versions of VS as they don't seem to provide necessary dependencies.
- The VC++2010 webinstaller did not work (failed to download a module and cancled setup...).
-- There's also no network installer available - therefor: .iso.

[2] Thankfully we don't need any additional service packs or updates. (they seem to be incompatible with Win10...)

[3] MS has restructured dependency management quite a bit for VC++2010. The old guide from source-readme was probably based on an earlier version of VC++.
check it out Ghost Squishmallow | Grace Squishmallow

Post Reply

Return to “Map Editing”