Jump to content
IGNORED

Burger Lord (intellivision burgertime-inspired multiplayer action drama)


fued

Recommended Posts

Great looking game, I didn't realize GWBasic was still around and making games! I loved that flavor of BASIC, so you have any snips of sample code to get an idea?

 

I am curious about how you mentioned you code visually on the GIF, is that a tool you use to make those GIFs?

 

I am designing a game right now and am interested in others tools and techniques for my first outing.

 

Congrats on what looks like a super fun game.

 

Thank you !

 

Link to comment
Share on other sites

Not the GW but GLbasic. It exists for somewhat 15-20 years. We just pushed it to STEAM a while ago and I think a promotion is going on, check here:
https://store.steampowered.com/app/819510/GLBasic_SDK/

In sum, it is a BASIC geared towards games/media, like Amos/BlitzBasic/Stos in the old days.

I came from trs 80-color basic and went to Amos and then to GLbasic, so if you know any flavor of Basic you are pretty much home.

Add to it speed, as everything is converted to C++ and one can also inline it. There are functions and types, no line numbers and a lot of modern stuff I almost don´t use. :D

 

As of that debugging info on the GIF, while GLB has an awesome debugger (specially if you want to find places in code that are taking too much time), I like placing my debug info on screen so I usually code it myself.

Here on the final game, it is turned off.

 

If you enjoy coding(ye no visual coding), give the tool a try, it is super fast to prototype stuff with it and easy to take it further.

 

Here is some code I did a while ago while thinking about creating a dungeon crawler game similar to Hired Guns, it is a proof of concept I did not push further but shared on the Forum.
I only created control for the top left player and there is no collision, I just wanted to mess with a 3d array.

Attached it the EXE to give it a try and an image of how it looks.
Code to create that is this here:
 

// --------------------------------- //
// Project: HG
// Start: Thursday, November 12, 2015
// IDE Version: 14.006

// ---	BOOT
SETSCREEN 680,400,0					;// final resolution
CREATESCREEN 0,0,170,100			;// player view set to sprite 0
SMOOTHSHADING FALSE

// ---	VARIABLES
GLOBAL ft							;// for/next timer/player set (1-4)
GLOBAL world[]						;// world 3d array
DIM world[61][61][61]
GLOBAL fov[]						;// fov 3d array
DIM fov[5][5][5]
GLOBAL wx,wy,wz						;// for/next world scanner
DIM px[5]; DIM py[5]; DIM pz[5]		;// players position
DIM pf[5]							;// players face direction (1-4) 1 north
GLOBAL px[], py[], pz[], pf[]

// ---	LOAD ASSETS
SETCURRENTDIR("Media") 				;// go to media files
LOADSPRITE "GUIDE BKG.png",1		;// load background guide
LOADANIM "BLK004.png",2,170,100		;// load block sprites
LOADANIM "FOG.png",3,170,100		;// load depth fog

// ---	WORLD GENERATION
FOR wx=5 TO 55
	FOR wy=5 TO 55
		FOR wz=5 TO 55
			IF RND(4)=1 THEN world[wx][wy][wz]=1				;// ramdom plot block
		NEXT
	NEXT
NEXT

// ---	HARDCODE PLAYER POSITION
px[1]=25 ; py[1]=25 ; pz[1]=55		;// set player 1 coord
pf[1]=1								;// set player 1 orientation
px[2]=24 ; py[2]=25 ; pz[2]=55		;// set player 2 coord
pf[2]=1								;// set player 2 orientation
px[3]=23 ; py[3]=25 ; pz[3]=55		;// set player 3 coord
pf[3]=1								;// set player 3 orientation
px[4]=26 ; py[4]=25 ; pz[4]=55		;// set player 4 coord
pf[4]=1								;// set player 4 orientation
FOR wx=22 TO 27						;// clear players start room
	FOR wy=25 TO 27
		FOR wz=52 TO 55
			world[wx][wy][wz]=0
		NEXT
	NEXT
NEXT
FOR wx=22 TO 27
	FOR wz=52 TO 55
		world[wx][24][wz]=1
	NEXT
NEXT

// ------------------------------------------------------------------------- MAIN LOOP
WHILE TRUE
// ---	DISPLAY
FOR ft=1 TO 4									;// loop through players
	USESCREEN 0									;// use virtual screen
	DRAWSPRITE 1,0,0							;// draw bkg guide

	// ---	DUMP FOV ARRAY
	IF pf[ft]=1									;// check orientation north
		FOR wx=0 TO 4							;// dump
			FOR wy=0 TO 4
				FOR wz=0 TO 4
					fov[wx][wy][wz]=world[px[ft]+wx-2][py[ft]+wy-2][pz[ft]-wz]
				NEXT
			NEXT
		NEXT
	ENDIF

	IF pf[ft]=2									;// check orientation east
		FOR wx=0 TO 4							;// dump
			FOR wy=0 TO 4
				FOR wz=0 TO 4
					fov[wx][wy][wz]=world[px[ft]+wz][py[ft]+wy-2][pz[ft]+wx-2]
				NEXT
			NEXT
		NEXT
	ENDIF
//
	IF pf[ft]=3									;// check orientation south
		FOR wx=0 TO 4							;// dump
			FOR wy=0 TO 4
				FOR wz=0 TO 4
					fov[wx][wy][wz]=world[px[ft]-wx+2][py[ft]+wy-2][pz[ft]+wz]
				NEXT
			NEXT
		NEXT
	ENDIF

	IF pf[ft]=4									;// check orientation west
		FOR wx=0 TO 4							;// dump
			FOR wy=0 TO 4
				FOR wz=0 TO 4
					fov[wx][wy][wz]=world[px[ft]-wz][py[ft]+wy-2][pz[ft]-wx+2]
				NEXT
			NEXT
		NEXT
	ENDIF

	// ---	DRAW FOV [layer4]
	IF fov[0][4][4]=1 THEN STRETCHANIM 2,0,0,0,170,100
	IF fov[1][4][4]=1 THEN STRETCHANIM 2,1,0,0,170,100
	IF fov[4][4][4]=1 THEN STRETCHANIM 2,0,170,0,-170,100
	IF fov[3][4][4]=1 THEN STRETCHANIM 2,1,170,0,-170,100
	IF fov[2][4][4]=1 THEN STRETCHANIM 2,2,0,0,170,100

	IF fov[0][3][4]=1 THEN STRETCHANIM 2,3,0,0,170,100
	IF fov[1][3][4]=1 THEN STRETCHANIM 2,4,0,0,170,100
	IF fov[4][3][4]=1 THEN STRETCHANIM 2,3,170,0,-170,100
	IF fov[3][3][4]=1 THEN STRETCHANIM 2,4,170,0,-170,100
	IF fov[2][3][4]=1 THEN STRETCHANIM 2,5,0,0,170,100

	IF fov[0][0][4]=1 THEN STRETCHANIM 2,0,0,100,170,-100	;// mirror down
	IF fov[1][0][4]=1 THEN STRETCHANIM 2,1,0,100,170,-100
	IF fov[4][0][4]=1 THEN STRETCHANIM 2,0,170,100,-170,-100
	IF fov[3][0][4]=1 THEN STRETCHANIM 2,1,170,100,-170,-100
	IF fov[2][0][4]=1 THEN STRETCHANIM 2,2,0,100,170,-100

	IF fov[0][1][4]=1 THEN STRETCHANIM 2,3,0,100,170,-100
	IF fov[1][1][4]=1 THEN STRETCHANIM 2,4,0,100,170,-100
	IF fov[4][1][4]=1 THEN STRETCHANIM 2,3,170,100,-170,-100
	IF fov[3][1][4]=1 THEN STRETCHANIM 2,4,170,100,-170,-100
	IF fov[2][1][4]=1 THEN STRETCHANIM 2,5,0,100,170,-100

	IF fov[0][2][4]=1 THEN STRETCHANIM 2,6,0,0,170,100		;// in the midium!!
	IF fov[1][2][4]=1 THEN STRETCHANIM 2,7,0,0,170,100
	IF fov[4][2][4]=1 THEN STRETCHANIM 2,6,170,0,-170,100
	IF fov[3][2][4]=1 THEN STRETCHANIM 2,7,170,0,-170,100
	IF fov[2][2][4]=1 THEN STRETCHANIM 2,8,0,0,170,100
	DRAWANIM 3,3,0,0	;// hardfog
	// ---	DRAW FOV [layer3]
	IF fov[0][4][3]=1 THEN STRETCHANIM 2,9,0,0,170,100
	IF fov[1][4][3]=1 THEN STRETCHANIM 2,10,0,0,170,100
	IF fov[4][4][3]=1 THEN STRETCHANIM 2,9,170,0,-170,100
	IF fov[3][4][3]=1 THEN STRETCHANIM 2,10,170,0,-170,100
	IF fov[2][4][3]=1 THEN STRETCHANIM 2,11,0,0,170,100

	IF fov[0][3][3]=1 THEN STRETCHANIM 2,12,0,0,170,100
	IF fov[1][3][3]=1 THEN STRETCHANIM 2,13,0,0,170,100
	IF fov[4][3][3]=1 THEN STRETCHANIM 2,12,170,0,-170,100
	IF fov[3][3][3]=1 THEN STRETCHANIM 2,13,170,0,-170,100
	IF fov[2][3][3]=1 THEN STRETCHANIM 2,14,0,0,170,100

	IF fov[0][0][3]=1 THEN STRETCHANIM 2,9,0,100,170,-100	;// mirror down
	IF fov[1][0][3]=1 THEN STRETCHANIM 2,10,0,100,170,-100
	IF fov[4][0][3]=1 THEN STRETCHANIM 2,9,170,100,-170,-100
	IF fov[3][0][3]=1 THEN STRETCHANIM 2,10,170,100,-170,-100
	IF fov[2][0][3]=1 THEN STRETCHANIM 2,11,0,100,170,-100

	IF fov[0][1][3]=1 THEN STRETCHANIM 2,12,0,100,170,-100
	IF fov[1][1][3]=1 THEN STRETCHANIM 2,13,0,100,170,-100
	IF fov[4][1][3]=1 THEN STRETCHANIM 2,12,170,100,-170,-100
	IF fov[3][1][3]=1 THEN STRETCHANIM 2,13,170,100,-170,-100
	IF fov[2][1][3]=1 THEN STRETCHANIM 2,14,0,100,170,-100

	IF fov[0][2][3]=1 THEN STRETCHANIM 2,15,0,0,170,100		;// in the midium!!
	IF fov[1][2][3]=1 THEN STRETCHANIM 2,16,0,0,170,100
	IF fov[4][2][3]=1 THEN STRETCHANIM 2,15,170,0,-170,100
	IF fov[3][2][3]=1 THEN STRETCHANIM 2,16,170,0,-170,100
	IF fov[2][2][3]=1 THEN STRETCHANIM 2,17,0,0,170,100
	DRAWANIM 3,2,0,0	;// midfog
	// ---	DRAW FOV [layer2]
	IF fov[0][4][2]=1 THEN STRETCHANIM 2,18,0,0,170,100
	IF fov[1][4][2]=1 THEN STRETCHANIM 2,19,0,0,170,100
	IF fov[4][4][2]=1 THEN STRETCHANIM 2,18,170,0,-170,100
	IF fov[3][4][2]=1 THEN STRETCHANIM 2,19,170,0,-170,100
	IF fov[2][4][2]=1 THEN STRETCHANIM 2,20,0,0,170,100

	IF fov[0][3][2]=1 THEN STRETCHANIM 2,21,0,0,170,100
	IF fov[1][3][2]=1 THEN STRETCHANIM 2,22,0,0,170,100
	IF fov[4][3][2]=1 THEN STRETCHANIM 2,21,170,0,-170,100
	IF fov[3][3][2]=1 THEN STRETCHANIM 2,22,170,0,-170,100
	IF fov[2][3][2]=1 THEN STRETCHANIM 2,23,0,0,170,100

	IF fov[0][0][2]=1 THEN STRETCHANIM 2,18,0,100,170,-100	;// mirror down
	IF fov[1][0][2]=1 THEN STRETCHANIM 2,19,0,100,170,-100
	IF fov[4][0][2]=1 THEN STRETCHANIM 2,18,170,100,-170,-100
	IF fov[3][0][2]=1 THEN STRETCHANIM 2,19,170,100,-170,-100
	IF fov[2][0][2]=1 THEN STRETCHANIM 2,20,0,100,170,-100

	IF fov[0][1][2]=1 THEN STRETCHANIM 2,21,0,100,170,-100
	IF fov[1][1][2]=1 THEN STRETCHANIM 2,22,0,100,170,-100
	IF fov[4][1][2]=1 THEN STRETCHANIM 2,21,170,100,-170,-100
	IF fov[3][1][2]=1 THEN STRETCHANIM 2,22,170,100,-170,-100
	IF fov[2][1][2]=1 THEN STRETCHANIM 2,23,0,100,170,-100

	IF fov[0][2][2]=1 THEN STRETCHANIM 2,24,0,0,170,100		;// in the midium!!
	IF fov[1][2][2]=1 THEN STRETCHANIM 2,25,0,0,170,100
	IF fov[4][2][2]=1 THEN STRETCHANIM 2,24,170,0,-170,100
	IF fov[3][2][2]=1 THEN STRETCHANIM 2,25,170,0,-170,100
	IF fov[2][2][2]=1 THEN STRETCHANIM 2,26,0,0,170,100
	DRAWANIM 3,1,0,0	;// lightfog
	// ---	DRAW FOV [layer1]
	IF fov[0][3][1]=1 THEN STRETCHANIM 2,27,0,0,170,100
	IF fov[1][3][1]=1 THEN STRETCHANIM 2,28,0,0,170,100
	IF fov[4][3][1]=1 THEN STRETCHANIM 2,27,170,0,-170,100
	IF fov[3][3][1]=1 THEN STRETCHANIM 2,28,170,0,-170,100
	IF fov[2][3][1]=1 THEN STRETCHANIM 2,29,0,0,170,100

	IF fov[0][1][1]=1 THEN STRETCHANIM 2,27,0,100,170,-100	;// mirror down
	IF fov[1][1][1]=1 THEN STRETCHANIM 2,28,0,100,170,-100
	IF fov[4][1][1]=1 THEN STRETCHANIM 2,27,170,100,-170,-100
	IF fov[3][1][1]=1 THEN STRETCHANIM 2,28,170,100,-170,-100
	IF fov[2][1][1]=1 THEN STRETCHANIM 2,29,0,100,170,-100

	IF fov[0][2][1]=1 THEN STRETCHANIM 2,30,0,0,170,100		;// in the midium!!
	IF fov[1][2][1]=1 THEN STRETCHANIM 2,31,0,0,170,100
	IF fov[4][2][1]=1 THEN STRETCHANIM 2,30,170,0,-170,100
	IF fov[3][2][1]=1 THEN STRETCHANIM 2,31,170,0,-170,100
	DRAWANIM 3,0,0,0	;// super lightfog
	IF fov[2][2][1]=1 THEN STRETCHANIM 2,32,0,0,170,100

	// ---	DRAW FOV [layer0]

	IF fov[1][3][0]=1 THEN STRETCHANIM 2,33,0,0,170,100
	IF fov[3][3][0]=1 THEN STRETCHANIM 2,33,170,0,-170,100
	IF fov[2][3][0]=1 THEN STRETCHANIM 2,34,170,0,-170,100

	IF fov[1][1][0]=1 THEN STRETCHANIM 2,33,0,100,170,-100	;// mirror down
	IF fov[3][1][0]=1 THEN STRETCHANIM 2,33,170,100,-170,-100
	IF fov[2][1][0]=1 THEN STRETCHANIM 2,34,170,100,-170,-100

	IF fov[1][2][0]=1 THEN STRETCHANIM 2,35,0,0,170,100 	;// in the midium!!
	IF fov[3][2][0]=1 THEN STRETCHANIM 2,35,170,0,-170,100

	PRINT "X="+px[ft],2,2						;// player info
	PRINT "Y="+py[ft],2,10
	PRINT "Z="+pz[ft],2,18
	PRINT "F="+pf[ft],2,26
//	PRINT "2BA="+world[px[1]][py[1]][pz[1]-2],2,34
//	PRINT "FOV="+fov[2][2][2],2,42

	// ---
	USESCREEN -1								;// use backbuffer
	IF ft=1 THEN ZOOMSPRITE 0,84,50,2,2			;// scale output pl1
	IF ft=2 THEN ZOOMSPRITE 0,424,50,2,2		;// scale output pl2
	IF ft=3 THEN ZOOMSPRITE 0,84,250,2,2		;// scale output pl3
	IF ft=4 THEN ZOOMSPRITE 0,424,250,2,2		;// scale output pl4
	IF ft=4 THEN DRAWRECT 338,0,3,400,RGB(126,126,126)		;// hud
	IF ft=4 THEN DRAWRECT 0,198,680,3,RGB(126,126,126)		;// hud
NEXT
// ---	CONTROLS
IF KEY(17)=1						;// advance
	IF pf[1]=1 THEN pz[1]=pz[1]-1
	IF pf[1]=2 THEN px[1]=px[1]+1
	IF pf[1]=3 THEN pz[1]=pz[1]+1
	IF pf[1]=4 THEN px[1]=px[1]-1
	SLEEP 200
ENDIF
IF KEY(31)=1						;// retreat
	IF pf[1]=1 THEN pz[1]=pz[1]+1
	IF pf[1]=2 THEN px[1]=px[1]-1
	IF pf[1]=3 THEN pz[1]=pz[1]-1
	IF pf[1]=4 THEN px[1]=px[1]+1
	SLEEP 200
ENDIF
IF KEY(32)=1						;// strife right
	IF pf[1]=1 THEN px[1]=px[1]+1
	IF pf[1]=2 THEN pz[1]=pz[1]+1
	IF pf[1]=3 THEN px[1]=px[1]-1
	IF pf[1]=4 THEN pz[1]=pz[1]-1
	SLEEP 200
ENDIF
IF KEY(30)=1						;// strife left
	IF pf[1]=1 THEN px[1]=px[1]-1
	IF pf[1]=2 THEN pz[1]=pz[1]-1
	IF pf[1]=3 THEN px[1]=px[1]+1
	IF pf[1]=4 THEN pz[1]=pz[1]+1
	SLEEP 200
ENDIF
IF KEY(18)=1						;// rotate right
	pf[1]=pf[1]+1
	IF pf[1]=5 THEN pf[1]=1
	SLEEP 200
ENDIF
IF KEY(16)=1						;// rotate left
	pf[1]=pf[1]-1
	IF pf[1]=0 THEN pf[1]=4
	SLEEP 200
ENDIF
IF KEY(19)=1						;// up
	py[1]=py[1]+1
	SLEEP 200
ENDIF
IF KEY(33)=1						;// down
	py[1]=py[1]-1
	SLEEP 200
ENDIF
// ---	POSITION LIMITS
	IF px[1]<5 THEN px[1]=5
	IF px[1]>55 THEN px[1]=55
	IF py[1]<5 THEN py[1]=5
	IF py[1]>55 THEN py[1]=55
	IF pz[1]<5 THEN pz[1]=5
	IF pz[1]>55 THEN pz[1]=55

// ---	DEBUG HUD

SHOWSCREEN
WEND
// ------------------------------------------------------------------------- MAIN LOOP [END]


 


 

LOOKSTOKILL.png

HG.zip

Link to comment
Share on other sites

  • 3 weeks later...
  • 1 year later...

This game has been in regular rotation with the kids since I bought it.  My youngest (4) gets a kick out of it and tends to try and knock people off the platforms when it all comes crashing down.  Only downside is that for three players, one has to use the keyboard.  You get used to it but if you aren't used to using a keyboard to game, it throws you off.

Link to comment
Share on other sites

Just now, Gamemoose said:

This game has been in regular rotation with the kids since I bought it.  My youngest (4) gets a kick out of it and tends to try and knock people off the platforms when it all comes crashing down.  Only downside is that for three players, one has to use the keyboard.  You get used to it but if you aren't used to using a keyboard to game, it throws you off.

It supports 3 usb pads/joysticks, what models are you using?
I also tested with a couple android joypad simulators and it worked fine too, though very weird to play (at least if you are 40yo) :)

Link to comment
Share on other sites

1 hour ago, fued said:

It supports 3 usb pads/joysticks, what models are you using?
I also tested with a couple android joypad simulators and it worked fine too, though very weird to play (at least if you are 40yo) :)

I use Xbox 360 wireless controls.  It detects the two fine but not the third.  I believe I tried using my wired Xbox 360 controller as well but that didn't work either, though it's been a while since I tried it so the memory might be a bit faded.

Link to comment
Share on other sites

@Gamemoose , strange all gamebox controllers should work. I will have to try it out again on my end.
It occurs to me that at some point, I dropped support for the PSP controllers, maybe at that point I messed up the standard 3 joy support.
Unfortunately I only have a wired xbox and a logitech controlsavailable but I will check through emulation while trying to get to a friend with an extra one.
 

And let that be a lesson for all developers wanting to do stuff without having the hardware... do it anyways! :D

Link to comment
Share on other sites

I'll try using wired next time, maybe this Friday or Saturday for "game night".  I'll bring my "work" X360 controller home and I have a NES style controller I can plug in as well.  I'll see what happens that way.  I think I can easily convince my son (who calls it "Bogoload" as his "r's" aren't quite there yet) and a few others to play.

  • Like 1
Link to comment
Share on other sites

I gave it a shot on Saturday. Two wired Xbox 360 controllers and one knockoff USB NES game pad.  Still no joy(pad) for three player.  I tried a PS3 controller, but that too used an Xbox 360 driver and no go.  Unfortunately I don't have any other wired controllers left, save for a Logitech flight stick that's buried in the basement.

 

Keyboard is fine, I just have to make sure the youngest uses a controller.

Link to comment
Share on other sites

I just got to another pad today and got to test it all, you are correct, the third joystick is not getting in :(
Damn it, I must have made a mistake when I disabled the native psx control support.

 

I will have to revisit the code, but to do it properly I will have to get a competent usb hud as I can´t have them all running on my laptop for the lack of ports.
It will be a little while as I will also push in new levels, new enemies and might add a few more powerups.

Thanks for the help @Gamemoose
It is super appreciated, even if I fell a bit shamed for letting the game out this way. :)

Check my itchio games here:
https://ericomont.itch.io/

Let me know if you want free copies of the other 3 games that are on sale.
Thanks again for the help. 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...