2018-07-07 23:54:37

hello players,
As a developer of Audio Games, I have recently come to hit a bit of a question.
Is BGT worth it?
A year ago, I'd have said yes.
Now though?
It is a great language for coding beginner games. It serves, and can be twisted, into making some pretty epic stuff if you know what you are doing. Hell, nearly all of my games released so far are BGT.
What I have noticed though is as of recently, BGT has begun to spark windows defender interest.
For no reason or fault of the developer, windows defender has begun to delete the game files, mistakenly thinking them viruses.
As this problem is unlikely to be resolved by the blastbay games toolkit maker, as I understand it BGT development is at an all time stand still, I have begun to look for other areas, other languages, to develop in.
It made me wonder though, what do you players think?
If a game is made in BGT, are you likely to play it/
Is it worth me continuing development of games in BGT, which allows faster speeds, of releases but means you, the user have to add acceptions to defender?
Or, would you prefer me to drop BGT entirely, and focus on other languages. I have found so far, that python is a viable option, excusing the fact the game sizes increase drasticly compared to BGT.
So, there is my question.
Is BGT worth it/
I look forward to your responses.
Thanks
Nate.

Nathan Smith
Managing Director of Nathan Tech
It's not disability
It's ability!

2018-07-08 01:05:44

I wrote this blog post regarding this issue. Suffice it to say, no, I don't think BGT's worth it. New people will not be able to play your games because of them being flagged, they will become frustrated and just give up most likely. That, and the lack of recent support for anything audio, and the lack of ability for supporting libraries more than perfunctorily makes it a pretty bad option.

Facts with Tom MacDonald, Adam Calhoun, and Dax
End racism
End division
Become united

2018-07-08 06:33:18

Why doesn't Philip just contact Microsoft and tell them to stop flagging programs made by his engine as a virus?

Grab my Adventure at C: stages Right here.

2018-07-08 08:57:51

As much as people say BGT isn't worth it, our most popular games are made in BGT. Crazy party, VG storm games, and many many others. Fortunately, a lot of them are portable so it is easy enough to just create a folder called games and add that as an exclusion.

2018-07-08 12:03:35

@3 because he's not actively working on it anymore, I guess its probably not accurate, but closest term I can think of is abandonware.

Facts with Tom MacDonald, Adam Calhoun, and Dax
End racism
End division
Become united

2018-07-08 14:58:31

Not only that, but games written in BGT don't work well with JAWS unless the game is self voicing to where no screen reader is needed to play it. If you use BGT and want any visually impaired player to be able to play your game regardless of what screen reader they use, then your game needs to be completely self voicing or use SAPI.

While there a lot of popular games written in BGT, many of those same games are not playable by everybody because the developer chose not to make the game self voicing. So players who use JAWS can't play them.

2018-07-08 15:28:44

Actually, I have to correct you on that, BGT is highly playable with Jaws, it only takes like 4 lines of code to initiate this functionality, and a few lines of code to remove it when the game is finished. And the line for actually turning this feature on is just one line, but you have to make sure the user is running Jaws first, that's why it may be a few lines, because of the conditional statement needed to check the screen reader that is running. If a game you are playing is not working with Jaws and you know that game is written in BGT, go scream at the dev for being a lazy sod.  It is other languages where there are likely to be insurmountable issues with playing with Jaws due to the way Jaws monopolizes the keyboard.

Facts with Tom MacDonald, Adam Calhoun, and Dax
End racism
End division
Become united

2018-07-08 16:30:18

Thanks for that explanation!

By that same token, we could also bitch at Philip for not making that code a default part of BGT so that developers wouldn't have to add it to their programs.

Can you tell me where I might be able to find this code?

2018-07-08 16:49:47

No it's not external code, its part of BGT. That's why I say there is no excuse for not adding it to their games. It works like that, first we set a variable equal to the function to check if its running like this:

 bool jawsIsRunning = screen_reader_is_running(1);

The 1 is BGT's internal designator for Jaws, so we're basically asking the question, is jaws running? and storing the answer in the variable, which is a boolean, and can either be true or false. If Jaws is running, we then install the keyhook, we can just do it, or do it and store the result in another variable, which would be true if the installation took place, and false if not, but really, when would it not, anyway, the full way would look like this:

jawsKeyHook = install_keyhook();

After that's done, we can operate the game normally, but also can check the state of that jawsKeyHook variable and if its false, we could display a message to the player that says there was a problem installing the keyhook, and maybe try with a different screen reader, or ask if they want to fall back to Sapi mode instead. Then just do a uninstall_keyhook() at the end of the main function, so it is always removed before the game closes.

Install perhaps isn't the best choice of words, its not like you have an installer program that pops up, it presumably just loads some code into active memory. There are reasons for not having this done unless its needed though, because it can cause problems, since it sort of grabs all keyboard input while the game is focused and could prevent you from using Jaws specific things. Also, if another screen reader besides Jaws is running, there is no need for this keyhook.

Also, all this could be written in a class that you could include for all BGT projects, and the class could set the mode as appropriate based off of which screen reader the class finds when the game starts. You, as the developer, wouldn't even have to do anything, should you use such a class. I might write one for the lols and as a coding exercise, I'm not the best dev out there, and so if there are corrections to be made from more experienced BGT devs, please do as its not my intent to provide incorrect information.

Facts with Tom MacDonald, Adam Calhoun, and Dax
End racism
End division
Become united

2018-07-08 17:16:48

I've never gotten windows defender issues with bgt games, because I turned it off, in favor of another anti virus. And, the way I see it, it's the developer's choice what language he or she uses. If you switched to Python, or some flavor of Objective C, you could make your games cross platform for windows and mac. Before someone makes a post about being an apple developer and paying 99 US dollars a year, that's only if you want to put your app in the app store. Off topic, but I think they should make being an apple registered dev free, and make you pay if you have apps that are paid, because if you don't generate  enough income from those apps or only have free stuff, you will lose money. But, Nathan, it's your choice.

Power is not the responsibility of freedom, but it is actually the responsibility of being responsible, it's self, because someone who is irresponsible is enslaved by their own weaknesses.

2018-07-08 17:32:59 (edited by Lucas1 2018-07-08 17:33:47)

void main()
{
if(screen_reader_is_running(1)) install_keyhook();
//Rest of your main function goes here...
}
It can be done in 1 line of code. I guess then you have no means of error checking if the install_keyhook function gives some kind of result, but if there's an error installing the keyhook there's not much a BGT dev can do about it...

Sincerely,
Lucas.

2018-07-08 18:19:23

Hi there,
@Dardar: No, no, no, never ask like that. I mean: "Does people want to play games in BGT?"
Users should never deal with what is an app or a game programmed in.
They can complayn about performance for example, or missing or not working features, bugs, etc. and programmer only is that person, who may eventually use other language to solve these problems or will manage to solve them in current language.
I am not defending BGT by this, I would write the same about every programming language, if this question is asked.
Another question is thatone from subject: "Is BGT worth it?"
That is very hard to tell. I started with audiogames development in BGT, then continued to C++, ended with C#, which I am currently considering to be the best programming language ever. big_smile
However whatever language I am working in, I must say, I can't imagine programming audiogames without knowledges learned from BGT.
Only disadvantage was me not being used to capture pressed keys with events rather than timer. Luckyly they are handled perfectly in C#, so I fixed this issue quickly. smile
All other principles like speaking with current screenreader, encrypting strings with string_encrypt, hashing with string_hash, mamanaging sounds with sound class, positioning with soundpool etc. are still actual. I have wrote a library called BgtKit for C#, which implements all these features. The same library is available for C++, Kotlin for Android and partially for Python, so my code looks very similar in each language.
So it is upto you only, use language which you like, not language which others say you should use. You will get farther.

Best regards

Rastislav

2018-07-08 18:22:50

@12 could I have a look at the python version?

Paul

2018-07-08 18:32:12

Oh you can forgo the braces if its a one liner, cool, didn't know that.

Facts with Tom MacDonald, Adam Calhoun, and Dax
End racism
End division
Become united

2018-07-08 19:22:10

Thanks for the code! I like BGT for learning, playing around, and prototyping ideas. But when it comes time to do real coding on something I might release, I use Pure Basic.

2018-07-08 20:32:40 (edited by Ethin 2018-07-08 20:33:44)

@Rastislav Kiss, there are lots of problems with BGT. If you use string_ecrypt, and send me your BGT application, give me about an hour and I can extract your encryption key as a raw memory dump of bytes. I'm serious; it literally takes me an hour. If you do the same in C# without obfuscation I can do the same in about 25 minutes or so. Do that in C++ or some other compiled language (not Java) and I couldn't get the key within a week. BGT also has the anti-virus issue; when people want to play a game, they're not going to want to add exceptions to their AV programs in order to play it, they just want to play it. If they have to do a bunch of complex stuff in order to play the game, they're not going to play it, period.

"On two occasions I have been asked [by members of Parliament!]: 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out ?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question."    — Charles Babbage.
My Github

2018-07-08 22:03:50

I'm one of those, I refuse to punch holes in my anti virus protection by adding exclusions to it. If a BGT game produces a virus warning, I just delete it and move on to something else.

2018-07-08 23:24:27

@Pauliyobo: Sure, however as I wrote only a part is ported to Python. There is concretely a wrapper around libaudioverse providing Sound class like in BGT in this case without sounds clonning and 3d audio positioning. It should be easy to add these methods, I planned to do so before I turned finally to C#.
Second provided feature is a wrapper around accessibleoutput2 for speaking. Although it can sound crazy to have such a wrapper, I found it very practical to have one Speak method always available, instead of handling accessibleoutput2's auto object. Code looks nicer.
It really isn't much in comparison with C# or C++ version, however I found many times that playing sounds and speaking are the most used functionalities which may blind programmer wish. That's why i made them first. smile
If you are interested, we can discuss closer in pms.

@Ethin: You are of course right. In case of BGT I personally guess less than a hour, if you are already equipped with necessary tools.
For example, I wrote a bunch of scripts, which can break encryption of sounds in 95% of BGT games in few minutes. Situation is the same for encrypted strings, you only need to know something from their content, so you can test if decryption vent right or not.
It would be more complicated as multiple encryptions are used, for example double or triple encryption. In one my old BGT game i use encryption five times with five different keys after entering authorization code in it, so it can't be cracked
that easily like most of currently payd BGT games. smile
However applied to sounds, this mechanism would slow down game bit, so it is on dev's consideration how much he wants to protect his sounds.

About C#, it is true that it can be decompiled easily with tools like dotpeek or such. But that is exactly the reason why obfuscators were invented. Today there are also opensource great tools like Confuser ex, which can change 25 minutes easily to 25 years.
C# have also a great advantage over C++ simply in its modishness. C++ have its years, what can be perfectly recognized in its syntax, while C# is completely tuned to modern requirements. Because of its auto memory management, code is very very readable, what is unvaluable when many people works together. And that is popular today. smile
Someone may argue that by using high-level languages, devs are forgetting to hardware and apps are not optimalized to modern cpus. Although it is true from a part, history teaches us, that this effect is necessary to accept when we want to make larger projects. Great ilustration for this is Assembler. That's the fastest language ever created, but try to code Minecraft in it. big_smile
But anyway C# vs. C++ is still very arguable question, there are many arguments on both sides, why yes and why no. We can create separate thread in Developers room eventually, I remember at least three C# vs. Python battles, some Python vs. C++, but no C# vs. C++. big_smile

Yeah, and about viruses and BGT, did someone tried to send few exemplars of a Bgt game for analysis to the Microsoft labs?
Kaspersky detected all BGT games some time ago too. Then I sent 2 apps I think to labs. After 30 minutes I requested a message from them that it was a false detection. Both programs were added to the whitelist in the same day. Several days after this Kaspersky stopped marking all BGT games as viruses.
May be Microsoft will fix it too.

Best regards

Rastislav

2018-07-08 23:38:21

@18, is there a place where do you prefer to be contacted?
I can contact on skype on twitter or email.
Or just PMS in the forum.

Paul

2018-07-09 00:15:14

I'd suggest a forum thread as there may be other forum members that would like to participate in such a conversation.

(typing isn't all that easy after drinking several Budweisers (beer))

2018-07-09 04:23:51

@Rastislav Kiss, the problem is that its not just Microsoft labs that are doing that; every single AV program detects BGT games as viruses.

"On two occasions I have been asked [by members of Parliament!]: 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out ?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question."    — Charles Babbage.
My Github

2018-07-09 07:05:48

philip bennefal should update the bgt engine,  if he's doesn't care,  why would you want to deal with buggy outdated engine?
who knows what will happen in the future for bgt
if microsoft will release a new version of windows like windows 12 etc,  bgt games could be not work
but you know c# python or c++ are not outdated engines
your best choice is python or c#
if you use that outdated stuff you will get always complaints from your player anyways
that is just my suggestion
you cannot prove the bgt games contains no viruses,  cause everyone won't add and make effort for exclude their anti virus to detecting bgt games to viruses
I am not forcing to you remove or stop use bgt games,  just my selection is i am not using these, the warnings pops up and i am deleting it

2018-07-09 08:07:09

I suspect that someone reported one of Sam or Mason's games as Malware, and the major antivirus companies probably share data, so now it's everywhere,. I mean, it could be BGT being flagged by some other false positive mechanism, but based on the drama threads I've been seeing around those games and their devs in particular, it seems more likely that the problem was initiated on our end, not BGT's.

If there is a wrapper around Libaudioverse that can be used without a bucket of Amphetamines, I would love to have access to it. I'd pay a high price for it if I had the money to do so. BGT's sound engine is in the Goldylox zone, where it's neither too convoluted nor too weak. I use to care a lot about 3d sound and EAX and the like, but none of that matters if I can't actually make something that uses them effectively. Clearly, I need to stop using pitch-bending entirely, since BGT appears to be the only engine that can do it on-the-fly. (OpenAL can, but it's ... bad at it, FWICT. And OpenAL's issues with looping and detecting when sounds are/aren't/stop playing, and the PhD levels of setup are extremely offputing. Pygame is the closest I've found to something usable, except surprise: now I have to find a way to update all of my audio files, since the sample rates of oggs have been obfuscated by the software I've used, and now I have files at conflicting Sample rates. Also, no pitch-bending.)

看過來!
"If you want utopia but reality gives you Lovecraft, you don't give up, you carve your utopia out of the corpses of dead gods."
MaxAngor wrote:
    George... Don't do that.

2018-07-09 15:40:41

The problem with anti virus false positives may not even be a BGT problem but the result of code that almost everybody uses that once compiled, looks like a virus. I say this because not all BGT games get falsely flagged.

2018-07-09 16:13:36 (edited by kianoosh 2018-07-09 16:19:20)

I started with bgt. The first game i published was lucky cop, which some people might still remember it. It was a bug with a bit of "game" mixed in to it. A part of that my experience and knowledge in bgt was too low, many of those bugs were happened do to bgt's sound system, and its weakness about handling like a lot of moving objects at onese. Of course i couldn't make a big shooting game with it because if the number of enemies were increased, Each bullet would take a long time to reach their targets. I'm not just saying this without any experiment. I wrote about two other shooting games and I've ended with the same result. They are were laggy when ever the number of NPCS were increased maybe about 30 or 40 at onese in a map. Yeah, maybe many calculations i've done in their loop but those were needed to make something good out of them(although they never could be as good as i wanted).
The other problem which is highly was, and is, the cause of the problem i mentioned above is the for loops in bgt. For loops are badly, weirdly, slow. Hay, I compared this to other programming languages as well! You already know this but i said this to make you, the reader, be sure that I have reasons that i'm complaining like that.
The next thing. Er. This Fucking thing is pretty bad. A while ago i tried to code a car system in one of those shooting games. Of course, car is a solid object and you can't pass through it like a ghost(Unfortunately you can pass through many solids in today's games). Therefore, I did this. I spawned walls around it that would make the car like a square shape. Of course, to update the position of the walls based on the position of the car, I had to find those walls within the array they were in, remove them and respawn them like a square around the car again. You know what, It ended like a program which had maybe no memory, or The processor was at 90 % or maybe more. I guess you could assume how laggy it was. I 70 % sure that the reason was the function that would find the element in an array and return it.
The last thing i can remember for now is the networking in bgt. I can say nothing but rediculous slow. Well maybe we can't blame it because it's using a very out dated version of ENet library so we can't expect more than that. But since it's probably not going to be updated, ever, I disided to finnish the project i'm currently working on, and leave it.
I used to learn C# and choos it as my main programming language but I found out that it doesn't have enough libraries to make a game easy and fast. For each library i had to write a wrapper, then test the wrapper, fix it's bugs, Well that would take so much time.
And now i'm using python. It's easy, fast enough, tuns of libraries for game creation, tuns of wrappers, And PodSixNet as a good networking library.
at C E A_Jones, I use pyOpenAl in python and it works well. It has wrapped the functions really perfectly and I found no problems in looping / stopping sounds
Urh. Libaudioverse is still really hard to set up for me. Make a server, make nodes, make buffers, bound buffer to nodes, connect nodes, make environments, make sources, Oh man I'm sure i had many mistakes in the previous sentence. While in openal, here is how you position a sound and play it with pyOpenAl:
from openal import *

sound=oalOpen("mysound.wav")
sound.set_position((10, 10, 0))
l=oalGetListener()
l.set_position((3, 5, 0))
sound.play()
See, without calculating the importing line it's just 5 lines to get a source, ready to play, set it's position, get the listener, set it's position and play the sound. That's all!
Although the fact is that pyOpenAl uses pyOgg to play the ogg files and I don't know if I should call it buggy, but it takes time to load large sized ogg files. It works much better with wave. Although it seems both pyOgg and pyOpenAl are still in development and we can expect many fixes in future.
To use the latest version of pyopenal you need pyOgg version 0.6.3a1 but pip installs 0.6.4a1. You need to force it to install that version.
I wanted to just share my experiences with bgt in here, and probably answer to some posts. Have fun!
BTW Rastislav Kiss. I also would like to see your kit in C# if possible please
Edit: My goodness, so many grammar problems this post has. Unfortunately when i type a post i just type it. I don't read it and a lot of my posts are written like that heh. And then i'm too lazy to edit it.

---
Co-founder of Sonorous Arts.
Check out Sonorous Arts on github: https://github.com/sonorous-arts/
my Discord: kianoosh.shakeri2#2988