This is my first graphics project ever. My only meaningful work so far was writing RomiChess which has received praise from a handful of people due to its playing style and unique learning algorithm labeled as "famous" on the chess programming wiki. Okay, enough of that.
Anyway, my fav game of all time is MOO (Master Of Orion) 1. It is a DOS game from 1993. There have been dozens of attempts to emulate and improve upon it, including MOO 2, MOO 3 and MOO 2016. All add complexity and add to the micromanagement necessities of playing the game, successfully. I personally am of the Risk generation. Risk is a great game because it is super simple and easy to play. And yet one can put in as much deep thought and strategic planning as they want. MOO is a lot like that. Except MOO does have some problems that make it problematic to get a fair starting position. Sometimes one enemy or more are right on top of the players starting position while another enemy has a large portion of the map to themselves. Those games are often over before they begin. The micromanagement was rather simple in MOO but it could still be very time consuming.
My dream ever since the 90's was to create my own space conquest game similar to MOO but in the spirit of Risk, i.e., keep the micromanagement under control. It is to be real time instead of turn based and have a modern GUI. And by modern I mean one of my vision. Even though I taught myself to program in C in 2004 so I could write RomiChess anything more than a console based C application was beyond my ability. The reason for that was the complexity of installing and using graphics libraries with myriads of mind boggling function names and cryptic parameters. I spent months with some packages just to determine that they don't really do what I need to be done.
A couple of weeks ago I stumbled upon QB64. I was not immediately impressed. I have no need nor desire to do anything in less than 1080p. And all the examples were in less than 1080p. Then I stumbled upon a YT vid that was in a 1080p window. That got my attention. The presenter in the vid mentioned that _FULLSCREEN could be used but he'd leave that up to the viewer to implement. Okay, so I had to investigate. I downloaded QB64 and entered the YT presenters code and modified it to run _FULLSCREEN. For the first time ever I had in my hands a tool chain that would do what I wanted to do without exhausting myself trying to understand it. So I started a few days ago writing my game Beyond Sol.
My vision of the GUI is no visible GUI until requested. My example code gives the flavor. It displays the game, not the interface. In the example when a star is moused over it displays the name of the Star. Eventually it will display a panel. The panel will appear and disappear as stars (or fleets) are moused over. The panel will stay displayed if the star is clicked. I got a late start today so I have not cleaned up the code or commented it yet. I will do that next. Then I will find a way to display panels and print to them.
There is one thing I need to know. Does this work on 2k and 4k displays and is the scaling okay. Also any suggestions to make the game or code better are welcome. Even really cool star names would be nice. I just copied star names from a list and made a few up along the way. Can you spot the ones I made up, :)? For those following me on my initial thread I added a micro amount of graphical bling and initiated the 6 starting positions.
repeat = 1
sww = sw / 24
swn = sw / 48
nw = 1920
ratio = sw / 1920
shw = sh / 20
shn = sh / 40
nh = 1080
GiveName
NewGame
PutBackground
PutStars
Identify x, y
ch = ""
dx = star(i).x - x
dy = star(i).y - y
ShowPanel i
c = star(i).c
x = star(i).x
y = star(i).y
CIRCLE (x
, y
), (star
(i
).s
+ 6) * ratio
, c
PAINT (x
, y
), star
(i
).o
+ 8, c
star(0).n = "Sol"
star
(0).x
= RND * (sw
- sww
) + swn
star
(0).y
= RND * (sh
- shw
) + shn
star(0).c = 14
star(0).s = 3
star(0).o = 1
home(0) = 0
k = 1
k = 0
x
= RND * (sw
- sww
) + swn
y
= RND * (sh
- shw
) + shn
n = names(r)
dx = x - star(j).x
dy = y - star(j).y
k = 1
k = 1
star(i).n = n
star(i).x = x
star(i).y = y
star(i).o = 0
k = 1
k = 0
x = star(0).x
y = star(0).y
home(i) = r
star(r).o = i
' A lot of star names I made up
names(0) = "Acamar"
names(1) = "Arcab"
names(2) = "Acrux"
names(3) = "Adhara"
names(4) = "Arneb"
names(5) = "Antares"
names(6) = "Arcturus"
names(7) = "Atria"
names(8) = "Beid"
names(9) = "Betelgeuse"
names(10) = "Botein"
names(11) = "Beemim"
names(12) = "Bellatrix"
names(13) = "Bharani"
names(14) = "Biham"
names(15) = "Brachium"
names(16) = "Canopus"
names(17) = "Capella"
names(18) = "Castor"
names(19) = "Chara"
names(20) = "Cursa"
names(21) = "Copernicus"
names(22) = "Chalawan"
names(23) = "Chertan"
names(24) = "Dabih"
names(25) = "Dalim"
names(26) = "Deneb"
names(27) = "Denebola"
names(28) = "Diadem"
names(29) = "Diphda"
names(30) = "Dschubba"
names(31) = "Dziban"
names(32) = "Edasich"
names(33) = "Electra"
names(34) = "Elgafar"
names(35) = "Elkurud"
names(36) = "Elnath"
names(37) = "Eltanin"
names(38) = "Enif"
names(39) = "Errai"
names(40) = "Fafnir"
names(41) = "Fang"
names(42) = "Fawaris"
names(43) = "Felis"
names(44) = "Fomalhaut"
names(45) = "Fulu"
names(46) = "Fumal"
names(47) = "Furud"
names(48) = "Garnet"
names(49) = "Giausar"
names(50) = "Gienah"
names(51) = "Ginan"
names(52) = "Gomeisa"
names(53) = "Graffias"
names(54) = "Grumium"
names(55) = "Gudja"
names(56) = "Hadar"
names(57) = "Haedus"
names(58) = "Hamal"
names(59) = "Hassaleh"
names(60) = "Hatysa"
names(61) = "Helvetios"
names(62) = "Heze"
names(63) = "Homan"
names(64) = "Iklil"
names(65) = "Imai"
names(66) = "Intercrus"
names(67) = "Izar"
names(68) = "Iccar"
names(69) = "Inar"
names(70) = "Iaeth"
names(71) = "Imaous"
names(72) = "Jabbah"
names(73) = "Jishui"
names(74) = "Jax"
names(75) = "Jalae"
names(76) = "Jewel"
names(77) = "Jumbo"
names(78) = "Jerue"
names(79) = "Jabear"
names(80) = "Kakkab"
names(81) = "Kang"
names(82) = "Kekouan"
names(83) = "Keid"
names(84) = "Kitalpha"
names(85) = "Kochab"
names(86) = "Kolob"
names(87) = "Kobol"
names(88) = "Larawag"
names(89) = "Lesath"
names(90) = "Libertas"
names(91) = "Lich"
names(92) = "Lilly"
names(93) = "Laddel"
names(94) = "Luminous"
names(95) = "Lasacious"
names(96) = "Mizar"
names(97) = "Markab"
names(98) = "Matar"
names(99) = "Mintaka"
names(100) = "Meleph"
names(101) = "Menkar"
names(102) = "Merga"
names(103) = "Merope"
names(104) = "Nahn"
names(105) = "Naos"
names(106) = "Nashira"
names(107) = "Navi"
names(108) = "Nekkar"
names(109) = "Nembus"
names(110) = "Nihal"
names(111) = "Nunki"
names(112) = "Ogma"
names(113) = "Okab"
names(114) = "Ohmy"
names(115) = "Oragami"
names(116) = "Origen"
names(117) = "Omanii"
names(118) = "Obytewa"
names(119) = "Oglok"
names(120) = "Phact"
names(121) = "Pherkad"
names(122) = "Pleione"
names(122) = "Polaris"
names(123) = "Pollux"
names(124) = "Procyon"
names(125) = "Proxima"
names(126) = "Polis"
names(127) = "Quaint"
names(128) = "Quazzat"
names(129) = "Quetzal"
names(130) = "Qussol"
names(131) = "Quella"
names(132) = "Quyaeo"
names(133) = "Ququdas"
names(134) = "Quekak"
names(135) = "Rasalas"
names(136) = "Regor"
names(137) = "Regulus"
names(138) = "Rigel"
names(139) = "Revati"
names(140) = "Rotenev"
names(141) = "Rukbat"
names(142) = "Rastaban"
names(143) = "Sabik"
names(144) = "Sadr"
names(145) = "Saiph"
names(146) = "Sargas"
names(147) = "Sarin"
names(148) = "Syrma"
names(149) = "Spica"
names(150) = "Sirius"
names(151) = "Tarazed"
names(152) = "Taygeta"
names(153) = "Tejat"
names(154) = "Thabit"
names(155) = "Thuban"
names(156) = "Tiaki"
names(157) = "Toliman"
names(158) = "Torcular"
names(157) = "Umala"
names(158) = "Ulatte"
names(159) = "Ubbessa"
names(160) = "Unoless"
names(161) = "Umaddem"
names(162) = "Ummbra"
names(162) = "Uniqu"
names(163) = "Uzzaal"
names(164) = "Vega"
names(165) = "Veritate"
names(166) = "Vindetrix"
names(167) = "Vedas"
names(168) = "Vergg"
names(169) = "Vacant"
names(170) = "Vucae"
names(171) = "Vicar"
names(172) = "Wasat"
names(173) = "Wazn"
names(174) = "Wezen"
names(175) = "Waiten"
names(176) = "Wachar"
names(177) = "Wheelz"
names(178) = "Whatsp"
names(179) = "Wassand"
names(180) = "Xenno"
names(181) = "Xyphod"
names(182) = "Xu"
names(183) = "Xaal"
names(184) = "Xyross"
names(185) = "Xiggot"
names(186) = "Xirrks"
names(187) = "Yed"
names(188) = "Yildun"
names(189) = "yundun"
names(190) = "Yavyo"
names(191) = "Yotrac"
names(192) = "Yxzoqu"
names(193) = "Ynnot"
names(194) = "Zaniah"
names(195) = "Zaurak"
names(196) = "Zhang"
names(197) = "Zibal"
names(198) = "Zosma"
names(199) = "Zuben"