Gamemoose Posted August 22, 2019 Share Posted August 22, 2019 I bought it just now. Can't wait to install it! 1 Quote Link to comment Share on other sites More sharing options...
fued Posted August 22, 2019 Author Share Posted August 22, 2019 Great, thanks chaps! Play with 3 players if possible! Let me know what you guys think, I truly enjoy re envisioning old classics but it is hard to keep its original spirit, I hope I did well on that. Quote Link to comment Share on other sites More sharing options...
imstarryeyed Posted August 22, 2019 Share Posted August 22, 2019 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 ! Quote Link to comment Share on other sites More sharing options...
fued Posted August 22, 2019 Author Share Posted August 22, 2019 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. 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] HG.zip Quote Link to comment Share on other sites More sharing options...
imstarryeyed Posted August 23, 2019 Share Posted August 23, 2019 That is an excellent example and thank you for the correction, I realized it once you mentioned it, haha. I bookmarked it for the next payday but I am totally going to support this Steam. Thank you again for sharing your knowledge, it was really helpful. Quote Link to comment Share on other sites More sharing options...
fued Posted August 23, 2019 Author Share Posted August 23, 2019 (edited) All fine @imstarryeyed , just don´t look too close on the code itself as it was a quick bashed one. edit: forgot to mention the control WASD for moving, QE for rotation and RF for going up/down. Edited August 23, 2019 by fued Quote Link to comment Share on other sites More sharing options...
digdugnate Posted September 7, 2019 Share Posted September 7, 2019 It's a pretty slick game! Thanks again for the key. Quote Link to comment Share on other sites More sharing options...
Gamemoose Posted November 23, 2020 Share Posted November 23, 2020 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. Quote Link to comment Share on other sites More sharing options...
fued Posted November 23, 2020 Author Share Posted November 23, 2020 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) Quote Link to comment Share on other sites More sharing options...
Gamemoose Posted November 23, 2020 Share Posted November 23, 2020 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. Quote Link to comment Share on other sites More sharing options...
fued Posted November 24, 2020 Author Share Posted November 24, 2020 @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! Quote Link to comment Share on other sites More sharing options...
Gamemoose Posted November 24, 2020 Share Posted November 24, 2020 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. 1 Quote Link to comment Share on other sites More sharing options...
Gamemoose Posted November 30, 2020 Share Posted November 30, 2020 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. Quote Link to comment Share on other sites More sharing options...
fued Posted December 1, 2020 Author Share Posted December 1, 2020 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.