VectorGame

Use this forum to share and discuss Uzebox games and demos.
Post Reply
User avatar
danboid
Posts: 1935
Joined: Sun Jun 14, 2020 12:14 am

VectorGame

Post by danboid »

One of my favourite Uzebox games is CunningFellow's VectorGame. I spent a lot of time playing Asteroids on the 2600 as a kid at home and in the arcade so that is a big reason for me liking it. The other levels, like the Missile Command and the Thrust style one are fun too. Also, both T2K and Chickens in Choppers require an SD card for the data files so I haven't been able to play those on my real Uzebox yet but VectorGame runs fine from flash alone.

A zip of the source code is on the wiki but I've not been able to get it to build under Debian Linux unfortunately. I adjust the path to my kernel source code in the Makefile but when I run `make` all I get is:

Code: Select all

dep/uzeboxCore.o.d:1: *** multiple target patterns.  Stop.
I'm sure it'll be a pretty simple fix to get it building again.
User avatar
danboid
Posts: 1935
Joined: Sun Jun 14, 2020 12:14 am

Re: VectorGame

Post by danboid »

I see what the problem is now. Its because dep/uzeboxCore.o.d contains Windows paths. Deleting the dep dir fixes that.
Last edited by danboid on Fri Feb 10, 2023 4:47 pm, edited 1 time in total.
User avatar
danboid
Posts: 1935
Joined: Sun Jun 14, 2020 12:14 am

Re: VectorGame

Post by danboid »

Code: Select all

avr-gcc -I"../../uzebox/kernel/" -I"../" -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=28636360UL -Os -fsigned-char -ffunction-sections -fno-toplevel-reorder -MD -MP -MT VectorDemo.o -MF dep/VectorDemo.o.d  -DVIDEO_MODE=6 -DINTRO_LOGO=0  -DRAM_TILES_COUNT=256 -DSOUND_MIXER=1 -c  ../VectorDemo.c
In file included from ../VectorDemo.c:30:0:
../StringObjectsFonts.h:50:13: error: variable ‘StringPointers’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
 const char* StringPointers[] PROGMEM = {
Must be const? It is tho isn't it?
User avatar
Artcfox
Posts: 1382
Joined: Thu Jun 04, 2015 5:35 pm
Contact:

Re: VectorGame

Post by Artcfox »

danboid wrote: Fri Feb 10, 2023 3:31 pm

Code: Select all

avr-gcc -I"../../uzebox/kernel/" -I"../" -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=28636360UL -Os -fsigned-char -ffunction-sections -fno-toplevel-reorder -MD -MP -MT VectorDemo.o -MF dep/VectorDemo.o.d  -DVIDEO_MODE=6 -DINTRO_LOGO=0  -DRAM_TILES_COUNT=256 -DSOUND_MIXER=1 -c  ../VectorDemo.c
In file included from ../VectorDemo.c:30:0:
../StringObjectsFonts.h:50:13: error: variable ‘StringPointers’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
 const char* StringPointers[] PROGMEM = {
Must be const? It is tho isn't it?
Read the type definition backwards, or cheat and use https://cdecl.org/

Code: Select all

const char* StringPointers[]
means: declare StringPointers as array of pointer to const char

I think the compiler wants you to declare StringPointers as array of const pointer to const char, so:

Code: Select all

const char* const StringPointers[] PROGMEM = {
User avatar
danboid
Posts: 1935
Joined: Sun Jun 14, 2020 12:14 am

Re: VectorGame

Post by danboid »

Not quite. Here's what I've done so far:

Building vectorgame:

Edit vectorgame/default/Makefile and correct the path of KERNEL_DIR (line 14) to point to your Uzebox kernel source. On my machine the correct path is ../../uzebox/kernel/

Code: Select all

cd vectorgame/default/
rm -rf dep
make clean
For some reason, vectorgame isn't finding the contents of videoMode6.h so I copy/pasted the entire contents of that file near to the top of VectorDemo.c, after

Code: Select all

#define OBJ_MC_GROUND_1   17
Edit StringObjectsFonts.h and change line 50 to:

Code: Select all

const char* const StringPointers[] PROGMEM = {
but now it seems to be missing off the assembly bit:

Code: Select all

avr-gcc -I"../../uzebox/kernel/"  -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=28636360UL -Os -fsigned-char -ffunction-sections -fno-toplevel-reorder -MD -MP -MT VectorDemo.o -MF dep/VectorDemo.o.d  -DVIDEO_MODE=6 -DINTRO_LOGO=0  -DRAM_TILES_COUNT=256 -DSOUND_MIXER=1 -c  ../VectorDemo.c
../VectorDemo.c: In function ‘PlayLevelGyrus’:
../VectorDemo.c:278:9: warning: variable ‘RandRockType’ set but not used [-Wunused-but-set-variable]
 uint8_t RandRockType;
         ^
../VectorDemo.c: In function ‘PlayLevelMC’:
../VectorDemo.c:474:9: warning: variable ‘RandRockType’ set but not used [-Wunused-but-set-variable]
 uint8_t RandRockType;
         ^
avr-gcc -mmcu=atmega644 -Wl,-Map=VectorDemo.map  -Wl,-gc-sections  -Wl,--section-start=.objectstore=0x00800200 -Wl,--section-start=.ramtiles=0x00800400 -Wl,--section-start=.vram=0x00800C00 -Wl,--section-start=.trigtable=0x00800F80 uzeboxVideoEngineCore.o uzeboxCore.o uzeboxSoundEngine.o uzeboxSoundEngineCore.o uzeboxVideoEngine.o VectorDemo.o     -o VectorDemo.elf
VectorDemo.o:(.ramtiles+0x0): multiple definition of `ramTiles'
uzeboxVideoEngineCore.o:(.bss+0x3f8): first defined here
VectorDemo.o:(.vram+0x0): multiple definition of `vram'
uzeboxVideoEngineCore.o:/home/dan/src/vectorgame/default/../../uzebox/kernel//videoMode6/videoMode6.s:929: first defined here
VectorDemo.o: In function `ConvertShipCoordToGyrus':
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `SinMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `CosMulFastC'
VectorDemo.o: In function `PlayLevelAsteroid':
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `renderCount'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearBufferLastLine'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
VectorDemo.o: In function `PlayLevelGyrus':
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `renderCount'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearBufferLastLine'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `CosMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `SinMulFastC'
VectorDemo.o: In function `PlayLevelGravity':
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `renderCount'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearBufferLastLine'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `AddBCD'
VectorDemo.o: In function `PlayLevelMC':
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `renderCount'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearBufferLastLine'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
VectorDemo.o: In function `PlayMessage':
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `renderCount'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearBufferLastLine'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `OutCharXYFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `renderCount'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `renderCount'
VectorDemo.o: In function `GameOver':
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `renderCount'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearBufferLastLine'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `ClearVramFlags'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `OutStringXYProgmemFastC'
VectorDemo.o: In function `main':
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `DefaultCallback'
/home/dan/src/vectorgame/default/../VectorDemo.c:810: undefined reference to `DefaultCallback'
VectorDemo.o: In function `ProcessInputGyrus':
/home/dan/src/vectorgame/default/../VectorDemo.c:865: undefined reference to `CosMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:864: undefined reference to `SinMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:863: undefined reference to `CosMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:862: undefined reference to `SinMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:868: undefined reference to `CosMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:868: undefined reference to `SinMulFastC'
VectorDemo.o: In function `ProcessInput':
/home/dan/src/vectorgame/default/../VectorDemo.c:899: undefined reference to `SinFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:900: undefined reference to `CosFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:916: undefined reference to `CosMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:915: undefined reference to `SinMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:914: undefined reference to `CosMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:913: undefined reference to `SinMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:920: undefined reference to `CosMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:920: undefined reference to `SinMulFastC'
VectorDemo.o: In function `ClearStatus':
/home/dan/src/vectorgame/default/../VectorDemo.c:935: undefined reference to `StatusTiles'
/home/dan/src/vectorgame/default/../VectorDemo.c:935: undefined reference to `StatusTiles'
VectorDemo.o: In function `UpdateStatusLine':
/home/dan/src/vectorgame/default/../VectorDemo.c:952: undefined reference to `StatusTiles'
/home/dan/src/vectorgame/default/../VectorDemo.c:953: undefined reference to `StatusTiles'
/home/dan/src/vectorgame/default/../VectorDemo.c:954: undefined reference to `StatusTiles'
VectorDemo.o:/home/dan/src/vectorgame/default/../VectorDemo.c:958: more undefined references to `StatusTiles' follow
VectorDemo.o: In function `ScrollText':
/home/dan/src/vectorgame/default/../VectorDemo.c:983: undefined reference to `ClearVramFlags'
/home/dan/src/vectorgame/default/../VectorDemo.c:984: undefined reference to `ClearBufferLastLineTileOnly'
/home/dan/src/vectorgame/default/../VectorDemo.c:993: undefined reference to `Mode7PutCharFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:1004: undefined reference to `ClearVramFlags'
VectorDemo.o: In function `DrawObjects':
/home/dan/src/vectorgame/default/../VectorDemo.c:1055: undefined reference to `DrawPolarObjectFastC'
VectorDemo.o: In function `MoveObjectsGyrus':
/home/dan/src/vectorgame/default/../VectorDemo.c:1109: undefined reference to `AddBCD'
VectorDemo.o: In function `MoveObjectsMC':
/home/dan/src/vectorgame/default/../VectorDemo.c:1161: undefined reference to `AddBCD'
VectorDemo.o: In function `MoveObjects':
/home/dan/src/vectorgame/default/../VectorDemo.c:1235: undefined reference to `AddBCD'
/home/dan/src/vectorgame/default/../VectorDemo.c:1219: undefined reference to `AddBCD'
/home/dan/src/vectorgame/default/../VectorDemo.c:1226: undefined reference to `AddBCD'
VectorDemo.o: In function `PolarToPoint':
/home/dan/src/vectorgame/default/../VectorDemo.c:1441: undefined reference to `SinMulFastC'
/home/dan/src/vectorgame/default/../VectorDemo.c:1442: undefined reference to `CosMulFastC'
VectorDemo.o: In function `UpdateStatusLine':
/home/dan/src/vectorgame/default/../VectorDemo.c:944: undefined reference to `StatusTiles'
/home/dan/src/vectorgame/default/../VectorDemo.c:944: undefined reference to `StatusTiles'
uzeboxVideoEngineCore.o: In function `mycallback':
/home/dan/src/vectorgame/default/../../uzebox/kernel//uzeboxVideoEngineCore.s:652: undefined reference to `bgcolors'
/home/dan/src/vectorgame/default/../../uzebox/kernel//uzeboxVideoEngineCore.s:652: undefined reference to `bgcolors'
collect2: error: ld returned 1 exit status
make: *** [Makefile:91: VectorDemo.elf] Error 1
User avatar
Artcfox
Posts: 1382
Joined: Thu Jun 04, 2015 5:35 pm
Contact:

Re: VectorGame

Post by Artcfox »

Are you sure your kernel path is correct?

Code: Select all

../../uzebox/kernel
would give you the proper number of path separators shown in the error messages.

Code: Select all

uzeboxVideoEngineCore.o:/home/dan/src/vectorgame/default/../../uzebox/kernel//videoMode6/videoMode6.s:929: first defined here
User avatar
danboid
Posts: 1935
Joined: Sun Jun 14, 2020 12:14 am

Re: VectorGame

Post by danboid »

If we can get this to build again, how about adding a menu to VectorGame to let the user choose which of the sub games they wish to play on loop? I really just want to play the Asteroids level on loop.

It'd be great if you could get it to build under Linux too CF!
Post Reply