Windows DopeFish - The Big Launch

TheSnidr

Heavy metal viking dentist
GMC Elder
Just a heads up I've tried repeating a texture from an atlas for batching reasons, it's all fun and games until you try to get mipmapping to work with it. It'll create seams at the borders of each repeat, and GM seems to be missing certain GLSL shader functions that would solve this like the textureGrad function. Not sure why that is.
Just extend your borders. You can do this in the Texture Groups window.
Uten navn.png
 

Jase217

Member
Just extend your borders. You can do this in the Texture Groups window.
View attachment 30109
Tried that but unfortunately it seems to be a problem with how the LOD is calculated or something, and wrapping texture coordinates in a shader manually seems to break it. I'm not too sure but after looking online for solutions it seems to be a common problem with repeating textures from atlas + mipmapping, and that it requires having access to things that we can't use in GM. Though I'm no expert on this stuff so I may be wrong.
 

IGameArt

Member
I've also run into that problem with this project, it's inherent in GLSL unfortunately. All of my textures are saved to individual atlases, one atlas per texture. This is to ensure that some of the non power of two textures still tile properly. The problem with that then becomes texture swaps occur constantly which can dramatically effect performance. This is something that I'm going to be looking into further when I have more free time to do so. I did manage to find a way to circumvent that weird border issue but my method is really only viable for systems like mine where non power 2 textures are saved to individual atlases though.
 

Jase217

Member
The problem with that then becomes texture swaps occur constantly which can dramatically effect performance.
That's where Doom's BSP tree system could help, only rendering whats visible. As for texture swaps, since you can use the Z Buffer just sort the all visible planes by texture so that planes that use the same texture will be drawn together. Also something to note: I've found that vertex_submit() won't break the batch if the texture doesn't change, setting uniforms will of course, but at least you won't get as many texture swaps.
 

IGameArt

Member
Yeah that's one of the things I'm hoping to implement into the system, sorting buffer submissions by texture to reduce swaps.
 

Yal

🐧 *penguin noises*
GMC Elder
GM seems to be missing certain GLSL shader functions that would solve this like the textureGrad function. Not sure why that is.
GM uses GL ES 1.0 with no extension support, so if they were introduced later or are extensions, there's your answer.
 

IGameArt

Member
On the topic of optimization, I've recently created a technique for batching vertex buffers together that all share the same texture, so that's something I'm going to be experimenting with implementing into this project. That should reduce my number of vertex buffer submissions drastically, and hopefully also increase the frame rate as well.

Keep your eyes on this topic if you want to see the results of these experiments.

I'm feeling pretty hopeful!
 

Lazymoth

Member
Bump; I've bought a few of your assets off the store before. They're great. I would love to make a game with this as a map editor, especially combined with your RetroFexx resource to make a game vaguely in the style of King's Field, or something.

I hope progress is smooth and that your living situation has stabilized. I tried to find a Patreon under your name because I would like to support you, but couldn't. Did you ever get one set up? Also, Ko-Fi is another good site for accepting donations, and I would recommend setting one up.

Wishing you the best!
 

IGameArt

Member
Thanks a billion @Lazymoth! I've been putting a lot of my time and effort into finishing my video game Starr Mazer DSP, which is on track to be completed by December.

I've heard of Ko-Fi before but haven't even considered it until now. I'll definitely look into that!
 

z_bill

Member
I still check here from time to time and would use this like nuts if it came out! My 3d GMS2 game runs like trash when I add too many "walls" using my current system/hack, so I'd love any way to get, like, just a full legit video game level in it! haha.

Bump; I've bought a few of your assets off the store before. They're great. I would love to make a game with this as a map editor, especially combined with your RetroFexx resource to make a game vaguely in the style of King's Field, or something.
I beg your pardon? King's Field?! I need to look into this other resources!
 

CMAllen

Member
I beg your pardon? King's Field?! I need to look into this other resources!
Kings Field 1 and 2 are old PS1 games. But they are full 3d, more akin to Quake than Doom. Well, if Quake was swords and sorcery and an RPG, and such.
 

z_bill

Member
Kings Field 1 and 2 are old PS1 games. But they are full 3d, more akin to Quake than Doom. Well, if Quake was swords and sorcery and an RPG, and such.
I know it! My mind just sorta shattered by being suggested some Doom/King's Field combo game! haha.
 

IGameArt

Member
Hey guys, I'm not dead! Neither is the project. Been putting a lot of time into other endeavors, like working on trailers for games published by Devolver Digital, and doing visual effects work for Facebook.

Anyways, I migrated the project to the latest version of GMS, and fixed some issues with midwall segments not lining up the way you'd expect them to, as well as a couple other under the hood quality of life improvements.

Here, have a pretty picture:
1612860111625.png

EDIT: Made a bunch of progress today too, specifically I've updated the entity parser to include flag checks for stuff like "is it a monster", "does it hang from the ceiling" and so on. I also implemented proper actual sprite offsets.


 
Last edited:

IGameArt

Member
Got some rad new features implemented, namely a proper billboarding shader set up, no more rotating all sprites to face the camera, it just happens naturally now.

Entities can be animated, directional, or neither, or both.

Took a lot of work to get that to happen, so here, have a video as a reward for all my hard work.

 

IGameArt

Member
Thanks for the kind words!

I managed to discover a weird bug yesterday that causes the ceiling to render with the wrong texture, so I've managed to fix that, and I improved the level geometry shader to more closely mimic the dimished lighting found in the original idtech 1 engine.
1613527563058.png

I've also been working a lot on my test map, and have learned a lot of things about how to design a level so as to keep it looking cool but also keep it from lagging. Looking pretty cool I think!
1613528496807.png
 

IGameArt

Member
So couple of cool additions, I spent a LOT of time working on fixing several bugs with texture alignment, and a bug where a wall texture would be used in place of a floor texture with the same name. That no longer happens thankfully.

Obligatory screenshot of Doom 2 Map13:
1614035101479.png

I also fixed a problem where certain texture patches would appear invisible, so now textures just work straight across the board, which pleases me pretty greatly.

Just yesterday I started refactoring a Huge part of the project. Currently all of the sector, line, thing, subsector data are stored in ds_maps, which is cool I guess, but since GM now has structs, why not use them? So I'm swapping all of that information over into struct format, so wish me luck!

Obligatory screenshot of an update made to my personal DopeFish testmap:
1614035261314.png
 

z_bill

Member
whoa dropped by on a whim and mega stoked to see this project is back on!

I've been stubbornly making levels in 3d programs but this would really really help me with level design.

Has collision stuff been worked on yet? I forget (heh, not to rush you. Everything looks great!)
 

IGameArt

Member
whoa dropped by on a whim and mega stoked to see this project is back on!

I've been stubbornly making levels in 3d programs but this would really really help me with level design.

Has collision stuff been worked on yet? I forget (heh, not to rush you. Everything looks great!)
Actually, collision has been in for a very long time. It's getting overhauled currently, but yea, that's been a thing :)
 

IGameArt

Member
The core of the dopefish engine itself is purely gml. There are some helper assets that it comes with for processing wads so that they are usable by dopefish which only run on windows unfortunately. I'm relying on already available tools and am integrating with them using a custom written dll to handle the processing of your wads so that dopefish can display them, and do so efficiently. Your dialogue module might work quite well with the wad processing application that I'm planning on writing.

I do eventually plan on opening the source to Dopefish, but I want to get as much of the core written and functioning as possible before doing so. This is an old project of mine and really needs a lot of cleanup before it's ready for the public to look at lmao.
 

IGameArt

Member
As per my Modus Operandi, random update after months of silence!

DopeFish Lives!

The past several months have been very busy for me. I moved back to my home state after doing a bunch of film work for Devolver Digital, HBO, and a few others. I poured my heart and soul into a project that I can't speak of at the moment. But off and on through that time I cracked away at little bits and pieces of the DopeFish engine. Today marks the completion of a couple of goals I set out to accomplish.
Let's dive in to whats new, shall we?

Custom Text Lump Parser:
Yep, I hand wrote a text parser. Why the Hell would I do that? Well, certain lumps in doom wads contain text based information. This is usually simple code like Decorate or Zscript, or just a bunch of variables that contain data meant to be referenced elsewhere in the game engine, or even in the wad itself. This took a lot of work to get functioning at the level that it is right now, and it works, and that makes me happy. What does this mean for you the end user?

Decorate Scripting Support:
Yeah, so that's a thing now. You can completely define new classes for your wads using the Decorate scripting lump. Heck, you can even create a class that overwrites one of the built in class types with new behaviors, stats, or graphics. I won't divulge into how Decorate works because there are loads of tutorials for it online, but what I can do, is show you a cool screenshot or two:

1630475226132.png
1630475264931.png


Wow! How confusing! Basically, this Decorate script creates a new class called ZombieClone and assigns it to an id number 3004. 3004 is the id number for the standard ZombieMan, meaning this new entity will replace the ZombieMan. This is evident in the screenshot because all built in classes contain no state information and just constantly loop through their animations without a care in the world, as you can see the ShotgunGuy on the right, behind dead doom dude is looping through all frames whereas the two ZombieClones are looping through the frames of their Spawn, or "idle" state. Cool right? Also, the code above that's kinda mustard color, like A_Look, and A_blahblahblah, those are all script calls, like, GM script calls. For example, in the Spawn state, every time the ZombieClone changes frames from A to B or B to A, it performs the scrips A_Look, using the arguments that you provide in parenthesis. You can use as many arguments as you like, don't want to use arguments? That's cool, just don't add the parenthesis. I have tested that this works by adding a simple show_debug_message into the A_Look script that displays text when the player is close to the entity. So, yay! This stuff works. What else is there?

Localization:
This one is has big implications. Yous wanna be the kinds a folks what done let your games be plaid by all kinds of folks right? Somes of them folks don't speak your language so good, so we got to localize your smizmar to reflect properly in their brain canals. Here in lies the awesomeness of Localization. In most doom source ports, this is handled internally, however there is a seldom used lump called Language. This lump contains a huge list of strings, assigned to variables. These are all categorized by language, let's look at the following example, shan't we?

1630475856798.png
Is it getting lumpy in here, or is it just me? I need to lay off the glutenous sweets. Anyways, that's an example of the Language lump. The parser is smart enough to know when a line is a comment, and therefor ignores that first line. The next entry is an important one. Inside these brackets are which languages the following vars are meant to be used for, enu meaning Us ENglish, and default meaning if you're looking for a var and can't find it in your chosen language, use the one below. Simple. After the brackets you have a bunch of vars with a bunch of text assigned to them. Cool, gravy, I tested it, it works. What else is there?

Sometimes you'll notice that a string contains a weird symbol in it, for example in our ZombieClone decorate script you'll find his obituary entry reads "$OB_ZOMBIE". The $ at the start of the string denotes that the following word is a LABEL. Labels are entries in the Language lump. The system is smart enough when parsing a decorate script, that if it finds the $ denoting a label, it will replace the following string with it's corresponding entry in the language lump under your currently chosen language. I tested that too, and it works.

That brings me to where I am right now, typing out this malarkey for the glorification of your eye holes. No, DopeFish is not dead, yes, in fact, DopeFish Lives Again.

Also, DopeFish pre-orders free, so if you like all this weird crap I just typed out, head on over to the OP, click that big DopeFish logo and download the hell out of my promisary note on itch.io that this will eventually be usuable by you. Also, tips are cool.

Cheers!
 

Attachments

Last edited:

IGameArt

Member
Lots of stuff is happening, in the meantime, here's a thing me and another guy put together. I'll probably make a whole thread about this in one of the programming forums shortly.

1631416534249.png

Here's the effect in engine. It is currently applied to the ground and ceiling planes, as well as the sprites. Still working on implementing it to the walls ( walls are complex lol )
1631438312035.png
 
Last edited:

IGameArt

Member
Well would you look at that. The DopeFish alpha is open source, and the wadLab is now free to download from itch.io.

You can find out more about the wadLab here:
https://subpixel-studios.itch.io/dopefish/devlog/378251/devlog-8-launch-time

This is a big moment for me. It marks the first time in years that I've shared the source code to DopeFish and givent he community something that they can actually get their hands on and start playing around with. Being that this is in alpha, there are bound to be lots of bugs and fps dips, so I recommend not using this for full blown production until some of these issues are ironed out. However, being that it's now fully open source, if anyone feels they have what it takes to contribute to the engine, whatever code y'all can come up with, if it's helpful, I'll gladly merge it into the repo!

Have any questions or bugs to report, feel free to post them here or on the itch page.
 

Joe Ellis

Member
Hmmm! I've always wanted to make my own wad handler, but could never be bothered to put any of the ground work in, maybe I could download this and find out how it works by looking at the code. I always learn how to do stuff best from looking at code rather than explanations for some reason. :D

I wonder though, why have you released it for free? plus open source?
It's nice of you to share the source code though! But I'd release it as paid but open source, like I'd definitely pay $50 for a wad program source code.
 

IGameArt

Member
There are new tools that this relies on that have specific licenses that asking money for to access would be immoral. However, there's always that "Pay for this free thing" thing that itch.io does. So if anyone feels so inclined, I'd be more than happy to accept any donations. Especially with the mess that my life is right now. Hopefully some of this karma will come back to me in a nice way.

Edit:
It was a LOT of ground work. Honestly I started this literally years ago as a test of what I could make happen in GM. It's been a long time coming and opening up the source code can help advance the engine, hopefully, with smarter and more organized minds taking a look into it.
 

Joe Ellis

Member
Cool, well it's great that you've started this off as open source, I'm sure there's a handful of people that'll do something with it (including me)
Btw I think in the past I bought yoyo doom for $34 and also dopefish for about $3.. and even though I never used either of them I'm happy to support it! I think a lot of people are like that, they appreciate the work that's gone into stuff. It's usually people who have at least some experience, so they can see. Beginners don't know just cus they don't know anything yet lol
 

IGameArt

Member
I appreciate it Joe! The ultimate goal here is to make it so retro 3d stuff like this is just plain easy for those beginners. If I can get this to that point, then I think we will all win.
 

Joe Ellis

Member
I could've loaded any of them :p It's all thanks to noesis though (rich whitehouse) he made a program that can load any old map (doom, build, quake 1 2 & 3, half life ++) and an obj export function! F***ing perfect! haha :D
It's gonna be better with a doom map loader though cus you've got access to the sectors and line defs, I've always wanted to make my own sector level editor, this just might be the inspiration I need haha :D

Noesis can also load most models from those games, if you haven't seen it you should def check it out.. I think it's open source aswell, but in c++
 

IGameArt

Member
Oh that's awesome. Yeah I'll definitely look into that! The big benefit that DopeFish offers is that layer of interaction. I'm not finished implementing it, but so far doors and switches work. I'm planning on getting ceiling crushers, elevators, animated sector lighting, and all that happy jazz! Oh, and of course the decorate scripting format works. You can define new monsters and pickups inside the wad using a coding format that integrates with your gml scripts for maximum configurability. You can define some basic ai routines in GML, then make things in a wad that will make use of that ai, but perform uniquely. It's pretty spiffy <3
 

Joe Ellis

Member
Yeah that's definitely pretty high tech! Like I'd just be happy having it load maps with all the data, but (I've seen before in this thread) you've gone a huge extra mile with all that stuff, and having it still work between the wad format and gml is, well, no one else has done that ever.
Yeah it's massive what you've done, there's only so many likes and loves I can give to say how much I love it! - ah just realized I haven't followed your last few updates, time for a like spree! haha
 

Joe Ellis

Member
I just read through all the stuff you did with the decorate scripting, that was the most interesting part for me! Is that actually what id used when they made it?
It's so cool seeing how it's all laid out and all in that small wad file. It is a perfect system
 

IGameArt

Member
Decorate is a new addition that modders added to take some of the hard coded behavior out of the engine to make creating new behaviors possible. I believe newer engines have moved on to z scripting, but decorate works quite well for this engine so support for it was a no brainer.
 

Joe Ellis

Member
Well would you look at that. The DopeFish alpha is open source, and the wadLab is now free to download from itch.io.

You can find out more about the wadLab here:
https://subpixel-studios.itch.io/dopefish/devlog/378251/devlog-8-launch-time

This is a big moment for me. It marks the first time in years that I've shared the source code to DopeFish and givent he community something that they can actually get their hands on and start playing around with. Being that this is in alpha, there are bound to be lots of bugs and fps dips, so I recommend not using this for full blown production until some of these issues are ironed out. However, being that it's now fully open source, if anyone feels they have what it takes to contribute to the engine, whatever code y'all can come up with, if it's helpful, I'll gladly merge it into the repo!

Have any questions or bugs to report, feel free to post them here or on the itch page.
Btw sorry if I've ruined the open-source announcement with all my comments..

DopeFish is now open source! scroll up to find out more
 
D

Deleted User

Guest
Well would you look at that. The DopeFish alpha is open source, and the wadLab is now free to download from itch.io.

You can find out more about the wadLab here:
https://subpixel-studios.itch.io/dopefish/devlog/378251/devlog-8-launch-time

This is a big moment for me. It marks the first time in years that I've shared the source code to DopeFish and givent he community something that they can actually get their hands on and start playing around with. Being that this is in alpha, there are bound to be lots of bugs and fps dips, so I recommend not using this for full blown production until some of these issues are ironed out. However, being that it's now fully open source, if anyone feels they have what it takes to contribute to the engine, whatever code y'all can come up with, if it's helpful, I'll gladly merge it into the repo!

Have any questions or bugs to report, feel free to post them here or on the itch page.
thanks ☺ 👍 👍 👍
 

IGameArt

Member
Not a problem! I took some time today to update the git repo with a gpl v3 license, and to clean up the landing page and make it more approachable. Looking forward to seeing folks play around with this <3
 
S

Sam (Deleted User)

Guest
Needless to say, GPLv3 or GPL anything is not a compatible license with anything created in GM, which is proprietary. IANAL, and this is not legal advice, but you won't be able to enforce this license in any way. Note this is my personal opinion and I could be wrong. Please consider consulting a lawyer if anyone breaks the license, as this asset is very good and a lot of people will not like the GPL aspect.
 
S

Sam (Deleted User)

Guest
I don't know much about licenses, but whatever you might suggest I'm more than happy to look into to keep this all tidy.
it's a grey area for me as well, that's why i think it would be good if "you know a guy" who happens to give free legal advice, a lawyer, etc

The restriction is you can't link to proprietary code. But there seems to be exceptions however because Microsoft and Apple API's are proprietary yet they are very commonly linked to in GPL'd software, (or rather, the GPL'd software is linked to them). GPL is a huge can of worms to get into in terms of trying to enforce it in certain situations, other situations you can be impossible to sue for GPL'ing your software, which the latter is a good thing, actually.

Just thought I'd let you know what you're getting yourself into, it might cost hiring a lawyer if someone violates your license. Which is a huge concern for software that a lot of users would want to remain closed, and take that as a compliment though, i find a lot of people would want it closed because of the quality and effort put into it is very well done.

Don't mean to distract the topic too much, just thought I'd share in case you find yourself in that situation.

I guess it all depends on how passionate you are about the license.
 
Last edited by a moderator:

IGameArt

Member
It's all good. I might change it to maybe MIT license? I've seen some other GM devs use that.

On a side note, I've been porting over functions used to render UI elements.

1652062485656.png
 

chamaeleon

Member
Don't make a license change without taking into consideration how you wish others to use your work. I very much prefer MIT and BSD but I have complete understanding if someone wish to use GPL.

As for licensing compatibility with GMS, this is typically solved by including a licensing exception (something you can do because your are the copyright holder, others cannot do it after the fact) that allows for including as part of an exported game from GMS.

I strongly suggest you read over the GPL FAQ for relevant information regarding linking GPL code with non GPL code and how adding an exception clause might work in your case.

(I'm not a lawyer, and I don't play one on TV, don't take my words as an absolute truth)
 

IGameArt

Member
Thank you. It seems like the best option I have is to talk to someone who actually does these sorts of things professionally, which is honestly more of a pain in the ass than I was expecting since all I want to do is release some code for some folks to use to their heart's content. Like, I could almost care less what's done with the code unless it's used to commit high treason or something crazy like that.

Edit: Got text to display properly:
1652070100244.png

EDIT2:

I failed to mention that the reason I originally went with GPL is because this is at least partially based on/inspired by/trascribed from code that is licensed in the gpl.
 
Last edited:
Top