The Ur-Quan Masters Home Page Welcome, Guest. Please login or register.
Did you miss your activation email?
October 12, 2024, 02:42:56 am
Home Help Search Login Register
News: Celebrating 30 years of Star Control 2 - The Ur-Quan Masters

+  The Ur-Quan Masters Discussion Forum
|-+  The Ur-Quan Masters Re-Release
| |-+  Technical Issues (Moderator: Death 999)
| | |-+  Compiling with Visual Studio .NET ...
« previous next »
Pages: [1] 2 Print
Author Topic: Compiling with Visual Studio .NET ...  (Read 8594 times)
Kuma
Guest


Email
Compiling with Visual Studio .NET ...
« on: June 04, 2005, 03:28:52 pm »

Is it even possible?

I've tinkered around with the source, and I've made what I think are some interesting modifications - but I haven't the first clue about how to compile it with Visual Studio.

Can anyone give me a place to start?
Logged
Halleck
Enlightened
*****
Offline Offline

Gender: Male
Posts: 752


Personal Text


View Profile WWW
Re: Compiling with Visual Studio .NET ...
« Reply #1 on: June 04, 2005, 10:04:20 pm »

I use Visual C++ .NET 2003 to compile (VC7). I sometimes have issues, but I have gotten it to compile correctly.

First, make sure you have all the required libraries, and tell VC where to find them. Read the INSTALL file for a list of these.

EDIT: Also, I'd reccomend compiling an unmodified copy first, to make sure all your libs and include directories are set up correctly. Then, you will be able to tell the difference between VC++ screwing up and your modifications causing errors.
« Last Edit: June 04, 2005, 10:35:36 pm by Halleck » Logged


Currently working on: Going outside more
harth1026
*Many bubbles*
***
Offline Offline

Gender: Male
Posts: 142



View Profile WWW
Re: Compiling with Visual Studio .NET ...
« Reply #2 on: June 05, 2005, 07:30:22 pm »

What kind of errors are you getting?  I too am using the .NET compiler so maybe I can help...
Logged
abcminiuser
Zebranky food
*
Offline Offline

Posts: 10


I love YaBB 1G - SP1!


View Profile
Re: Compiling with Visual Studio .NET ...
« Reply #3 on: June 26, 2005, 07:49:59 am »

I need som help with this also. I've downloaded and compiled all the components, but .NET now goes ape when I try to compile:


libcmtd.lib(dbgheap.obj) : error LNK2005: _malloc already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(dbgheap.obj) : error LNK2005: _calloc already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(dbgheap.obj) : error LNK2005: _realloc already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(dbgheap.obj) : error LNK2005: _free already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(fflush.obj) : error LNK2005: _fflush already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(fpinit.obj) : error LNK2005: __ldused already defined in a previous module
libcmtd.lib(fpinit.obj) : error LNK2005: __fltused already defined in a previous module
libcmtd.lib(write.obj) : error LNK2005: __write already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(crt0dat.obj) : error LNK2005: __exit already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(crt0dat.obj) : error LNK2005: __cexit already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(crt0dat.obj) : error LNK2005: __c_exit already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(dosmap.obj) : error LNK2005: __errno already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(crt0.obj) : error LNK2005: _mainCRTStartup already defined in MSVCRTD.lib(crtexe.obj)
libcmtd.lib(crt0.obj) : error LNK2005: __amsg_exit already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(open.obj) : error LNK2005: __open already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRTD.lib(cinitexe.obj)
libcmtd.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRTD.lib(cinitexe.obj)
libcmtd.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRTD.lib(cinitexe.obj)
libcmtd.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in MSVCRTD.lib(cinitexe.obj)
libcmtd.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(read.obj) : error LNK2005: __read already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(lseek.obj) : error LNK2005: __lseek already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(setlocal.obj) : error LNK2005: _setlocale already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(getenv.obj) : error LNK2005: _getenv already defined in MSVCRTD.lib(MSVCR70D.dll)
libcmtd.lib(tolower.obj) : error LNK2005: _tolower already defined in MSVCRTD.lib(MSVCR70D.dll)
MSVCRTD.lib(MSVCR70D.dll) : error LNK2005: __stricmp already defined in libcmtd.lib(stricmp.obj)
MSVCRTD.lib(MSVCR70D.dll) : error LNK2005: __isatty already defined in libcmtd.lib(isatty.obj)
MSVCRTD.lib(MSVCR70D.dll) : error LNK2005: __close already defined in libcmtd.lib(close.obj)
MSVCRTD.lib(MSVCR70D.dll) : error LNK2005: _fopen already defined in libcmtd.lib(fopen.obj)
MSVCRTD.lib(MSVCR70D.dll) : error LNK2005: _fclose already defined in libcmtd.lib(fclose.obj)
MSVCRTD.lib(MSVCR70D.dll) : error LNK2005: __isctype already defined in libcmtd.lib(isctype.obj)
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library
MSVCRTD.lib(cinitexe.obj) : warning LNK4098: defaultlib 'libcmtd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_sync_clear referenced in function _ov_clear
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_stream_clear referenced in function _ov_clear
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_stream_init referenced in function __ov_open1
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_sync_wrote referenced in function __ov_open1
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_sync_buffer referenced in function __ov_open1
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_sync_init referenced in function __ov_open1
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_stream_packetout referenced in function __fetch_headers
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_stream_pagein referenced in function __fetch_headers
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_stream_reset_serialno referenced in function __fetch_headers
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_page_serialno referenced in function __fetch_headers
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_sync_pageseek referenced in function __get_next_page
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_sync_reset referenced in function __seek_helper
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_page_granulepos referenced in function __prefetch_all_headers
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_page_eos referenced in function _ov_raw_seek
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_stream_reset referenced in function _ov_raw_seek
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_page_continued referenced in function _ov_pcm_seek_page
vorbisfile.lib(vorbisfile.obj) : error LNK2019: unresolved external symbol _ogg_stream_packetpeek referenced in function _ov_pcm_seek_page
vorbisfile.lib(res0.obj) : error LNK2001: unresolved external symbol _oggpack_read
vorbisfile.lib(floor1.obj) : error LNK2019: unresolved external symbol _oggpack_read referenced in function _floor1_fit
vorbisfile.lib(floor0.obj) : error LNK2001: unresolved external symbol _oggpack_read
vorbisfile.lib(info.obj) : error LNK2019: unresolved external symbol _oggpack_read referenced in function _vorbis_synthesis_headerin
vorbisfile.lib(synthesis.obj) : error LNK2001: unresolved external symbol _oggpack_read
vorbisfile.lib(codebook.obj) : error LNK2001: unresolved external symbol _oggpack_read
vorbisfile.lib(mapping0.obj) : error LNK2001: unresolved external symbol _oggpack_read
vorbisfile.lib(info.obj) : error LNK2019: unresolved external symbol _oggpack_readinit referenced in function _vorbis_synthesis_headerin
vorbisfile.lib(synthesis.obj) : error LNK2001: unresolved external symbol _oggpack_readinit
vorbisfile.lib(info.obj) : error LNK2019: unresolved external symbol _oggpack_bytes referenced in function _vorbis_commentheader_out
vorbisfile.lib(analysis.obj) : error LNK2001: unresolved external symbol _oggpack_bytes
vorbisfile.lib(bitrate.obj) : error LNK2001: unresolved external symbol _oggpack_bytes
vorbisfile.lib(mapping0.obj) : error LNK2001: unresolved external symbol _oggpack_bytes
vorbisfile.lib(info.obj) : error LNK2019: unresolved external symbol _oggpack_writeinit referenced in function _vorbis_commentheader_out
vorbisfile.lib(block.obj) : error LNK2001: unresolved external symbol _oggpack_writeinit
vorbisfile.lib(bitrate.obj) : error LNK2001: unresolved external symbol _oggpack_writeinit
vorbisfile.lib(floor1.obj) : error LNK2001: unresolved external symbol _oggpack_write
vorbisfile.lib(info.obj) : error LNK2019: unresolved external symbol _oggpack_write referenced in function __vorbis_pack_comment
vorbisfile.lib(codebook.obj) : error LNK2001: unresolved external symbol _oggpack_write
vorbisfile.lib(mapping0.obj) : error LNK2001: unresolved external symbol _oggpack_write
vorbisfile.lib(res0.obj) : error LNK2001: unresolved external symbol _oggpack_write
vorbisfile.lib(info.obj) : error LNK2019: unresolved external symbol _oggpack_writeclear referenced in function _vorbis_analysis_headerout
vorbisfile.lib(block.obj) : error LNK2001: unresolved external symbol _oggpack_writeclear
vorbisfile.lib(bitrate.obj) : error LNK2001: unresolved external symbol _oggpack_writeclear
vorbisfile.lib(info.obj) : error LNK2019: unresolved external symbol _oggpack_reset referenced in function _vorbis_analysis_headerout
vorbisfile.lib(analysis.obj) : error LNK2001: unresolved external symbol _oggpack_reset
vorbisfile.lib(analysis.obj) : error LNK2019: unresolved external symbol _oggpack_get_buffer referenced in function _vorbis_analysis
vorbisfile.lib(bitrate.obj) : error LNK2019: unresolved external symbol _oggpack_get_buffer referenced in function _vorbis_bitrate_init
vorbisfile.lib(codebook.obj) : error LNK2019: unresolved external symbol _oggpack_adv referenced in function _decode_packed_entry_number
vorbisfile.lib(codebook.obj) : error LNK2019: unresolved external symbol _oggpack_look referenced in function _decode_packed_entry_number
vorbisfile.lib(mapping0.obj) : error LNK2019: unresolved external symbol _oggpack_writealign referenced in function _mapping0_forward
../../uqmdebug.exe : fatal error LNK1120: 28 unresolved externals


Ideas? The OGG .lib files seem to have compiled OK.
- Dean :twisted:
Logged
harth1026
*Many bubbles*
***
Offline Offline

Gender: Male
Posts: 142



View Profile WWW
Re: Compiling with Visual Studio .NET ...
« Reply #4 on: June 28, 2005, 01:43:37 am »

Part of the problem appears to be that you didn't tell Visual Studio where the Ogg Vorbis libraries are.

In the menubar, select Tools->Options...
In the Options dialog, select Projects->VC++ Directories
In the top right, it'll have a pulldown menu called "Show Directories for"...  Select "Include files"
Add the entry "C:\Oggvorbis\Include" or whatever path the include files are in.
Now go back to the pulldown menu and select "Library files".
Add the entry "C:\Oggvorbis\Lib".  Change where necessary.

After all that, recompile the code.  Most of those linker errors should be gone...  I'm not too sure why you're getting "already defined" errors though...
Logged
Halleck
Enlightened
*****
Offline Offline

Gender: Male
Posts: 752


Personal Text


View Profile WWW
Re: Compiling with Visual Studio .NET ...
« Reply #5 on: June 28, 2005, 05:21:13 am »

You actually need to follow harth's instructions for EVERY required lib/include package you download. Also, keep in mind that most of them need to be dev versions in order to work.
Logged


Currently working on: Going outside more
abcminiuser
Zebranky food
*
Offline Offline

Posts: 10


I love YaBB 1G - SP1!


View Profile
Re: Compiling with Visual Studio .NET ...
« Reply #6 on: June 28, 2005, 02:35:07 pm »

Hmm, I defined all the libraries I could find, must have missed the OGG one. No matter; I've got the binaries and only wanted to compile the source code so I could make changes/additions. After looking at the code I've decided to scrap that idea and create a new game ("Star Control 2.5", even though I HATE Star Control 3) with the SDL libraries et al. The SDL library is fantastic, isn't it! I've always wanted to make a proper game, just never found the right language and libraries to do it in, no I have.

- Dean :twisted:
Logged
harth1026
*Many bubbles*
***
Offline Offline

Gender: Male
Posts: 142



View Profile WWW
Re: Compiling with Visual Studio .NET ...
« Reply #7 on: June 28, 2005, 09:31:01 pm »

Starting a new game like Star Control 2 from scratch will take a lot of time and dedication plus existing knowledge of game programming.  My goal is to make an SC1 game using parts of the UQM code.  Although I'm dedicated, I have little time and I'm just starting to learn the basics of game programming.  If you don't have much experience with game programming, I recommend that you start off with small games that are similar to your goal.  You may want to try making an Asteroids style game first and then build from there.

A good tutorial for making an asteroids game can be found at the following site.  Although I couldn't get the code to compile without some work, the class structures he used gave me a better understanding how to make a game of this type.
http://vcg.iei.pi.cnr.it/~cignoni/a_steroid/  
Logged
abcminiuser
Zebranky food
*
Offline Offline

Posts: 10


I love YaBB 1G - SP1!


View Profile
Re: Compiling with Visual Studio .NET ...
« Reply #8 on: June 29, 2005, 06:16:07 am »

Nah, i've never listened to the experts before. I taught myself Visual Basic many years ago, then taught myself C last year. Going against all the experts advice for the latter language, I mamaged to produce a very complicated and *working* project.

I don't have much gaming experience, but I do write C for embedded systems - small microcontroller ICs. That involves a lot of abstract thinking on the best way to acomplish a task with the minimum amount of code, and also multiple threads when using a Real Time Operating System - similar to the SDL libraries's threads.

Worked out how to implement all the music, text image and main SDL libraries now. I've made most fo the helper C files and got the main menu working as a test. I though threads for the Melee is the best way to go - a thread per bullet and ship, what do you think? I could make it to inline, just seemed the best and easiest option.

- Dean
Logged
meep-eep
Forum Admin
Enlightened
*****
Offline Offline

Posts: 2847



View Profile
Re: Compiling with Visual Studio .NET ...
« Reply #9 on: June 29, 2005, 08:02:02 am »

Quote
I though threads for the Melee is the best way to go - a thread per bullet and ship, what do you think? I could make it to inline, just seemed the best and easiest option.

While one thread per object may closest resemble the intuitive idea, in practice it's probably the worst way to do this.
There's a large overhead in context switching, and synchronisation would be a lot of work and would have its own overhead (which would be a lot as you'd need to synchronise frequently).

How I would suggest you handle processing intead is to keep a list of all active objects, and process them one by one. Running at a fixed frame rate is easiest, as you can use "distance per frame" as a unit for speed. This is how UQM works. You could also use a dynamic frame rate, and process as often as you can (or want), multiplying speed by the time elapsed since the last update to get the distance to move.
« Last Edit: June 29, 2005, 08:02:39 am by meep-eep » Logged

“When Juffo-Wup is complete
when at last there is no Void, no Non
when the Creators return
then we can finally rest.”
harth1026
*Many bubbles*
***
Offline Offline

Gender: Male
Posts: 142



View Profile WWW
Re: Compiling with Visual Studio .NET ...
« Reply #10 on: June 29, 2005, 08:24:25 pm »

Quote
Nah, i've never listened to the experts before.

It's a good thing I'm not an expert...   Wink
Logged
abcminiuser
Zebranky food
*
Offline Offline

Posts: 10


I love YaBB 1G - SP1!


View Profile
Re: Compiling with Visual Studio .NET ...
« Reply #11 on: June 30, 2005, 05:57:42 am »

*Sigh*. Ok, Ok, i'll give the asteroids game a look. I've managed to write the interface routines with the SDL, SDL Image, SDL Mixer and SDL Draw libraries so i'm finally ready to start. Made the main menu as a test, all works well.

- Dean :twisted:
Logged
Dean
Guest


Email
Re: Compiling with Visual Studio .NET ...
« Reply #12 on: July 12, 2005, 12:38:59 pm »

So how would I go about "linking" the melee modules together? I'm able to program all the modules (like physics handler, keyboard handler, ship position updater, etc) but i'm at a loss as to put it all together. Normally i'd use said threads, but at the moment i'm resorting to using rather crude IF checks to ensure each routine is only executed after a specified millisecond elapse. This works OK (for now) but when I put in all the bullet handling routines this definetly wont work (well).

Writing dynamic routines - so that the routines could be executed as many times as possible without speeding up/slowing down the game - is possible for me, but it just seems like a hassle. How would I go about implementing a fixed run rate for each routine, like a simple task sheduler?

- Dean
Logged
meep-eep
Forum Admin
Enlightened
*****
Offline Offline

Posts: 2847



View Profile
Re: Compiling with Visual Studio .NET ...
« Reply #13 on: July 12, 2005, 02:04:09 pm »

Something like this perhaps for a main loop (pseudocode):
Code:
while (!exit) {
    timeIn = getTimeMilli();
    checkInput();
    updatePositions();
    outputGraphics();
    sleepMilli((1000 / frameRate) - timeIn);
}
Logged

“When Juffo-Wup is complete
when at last there is no Void, no Non
when the Creators return
then we can finally rest.”
abcminiuser
Zebranky food
*
Offline Offline

Posts: 10


I love YaBB 1G - SP1!


View Profile
Re: Compiling with Visual Studio .NET ...
« Reply #14 on: July 13, 2005, 02:07:27 am »

Oh. I coded in a simple task switcher yesterday - it works fine.

Each task is added with a function name and a timeout:

MeleeTaskHandler_AddTask(Melee_PlayerKeyHandler, 20);

The above code would tell the program to run the "Melee_PlayerKeyHandler" function every 20ms (or more, depending on machine speed). I decided to put a limit on the number of tasks, at 30. The main loop then calls the MeleeTaskHandler_CheckTasks routine, which checks the current SDL ticks, and then see if it should run any of the tasks. If a task is run, it's .NextTimeout tag is set to the current SDL tickcount + the timeout for the current task.

It all works quite well. If the tasks are offset, then the whole thing runs nicely at 700MHz- will have to stress-test on all 30 tasks.

Figuring out all the physics and such from scratch is difficult, but i'm going well and i'll have one hell-of-a sence of achievement when the whole thing's done. Anyone interested in submitting ship pictures/designs/music etc. once I have somthing to show for myself? Unlike TimeWarp and other projects, this will be a proper adventure game with a new and exciting(?!) story and BALANCED SHIPS. Stay tuned.

- Dean
Logged
Pages: [1] 2 Print 
« previous next »
Jump to:  


Login with username, password and session length

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!