Dawn of the era

Dawn of the era

Postby cage » 11 Mar 2019, 18:50

Hello!

An user on opengameart.org suggested me to post my request for collaboration so here I am! :)

I have spent past years developing a turn based strategy game project,
the game is inspired at software like Xcom but it is ported in a
fantasy scenario (so i could use magic ;-)).

After so much work the game is now feature complete but still lacks
some arts to be actually completed (except for bugs that will popup in
the future of course!).

The game is in 3D (uses openGL for rendering, and a custom engine)
and, while many of the contents are procedurally generated it still
misses the characters models.

At the bare minimum three models are needed: a warrior an wizard and
an healer. More would be fantastic but not a priority at this time.

The game load model in MD2 file format, i am using a model borrowed
from the excellent "UFO: alien invasion" that you can find here:

https://notabug.org/cage/dote/src/maste ... /ai/ortnok

I hope i could find someone that help me with this task.

The game is released under GPLv3 or later and the sources can be found
here:

https://notabug.org/cage/dote/

it works only on linux, though.

The discussion on opengameart

https://opengameart.org/forumtopic/dawn ... ment-77353

(you will find a few screenshot of the game there)

brought to my attention this model:

https://opengameart.org/content/isometr ... nd-heroine

that probably is very near to what i would like to put in my game, unfortunately blender seems
like an alien artifact for my brain, and i simply i prefer to code! :)

Feel free to ask for more, if interested.
An thanks in advance for any help/suggestions!
Bye!
C.
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby dulsi » 13 Mar 2019, 19:07

I don't think I've ever seen a substantial program written in lisp until looking at this. (Well you could say emacs but besides that.) Not sure if you will find artwork help here but I'm glad to hear about the project. I'll try to give it a test when I get a chance.
dulsi
 
Posts: 570
Joined: 18 Feb 2016, 15:24

Re: Dawn of the era

Postby cage » 13 Mar 2019, 20:25

Hello!

dulsi {l Wrote}:I don't think I've ever seen a substantial program written in lisp until looking at this. (Well you could say emacs but besides that.) Not sure if you will find artwork help here but I'm glad to hear about the project. I'll try to give it a test when I get a chance.


Thank you for showing your interest in this project! :)

Yes, the program is written in lisp (to be precise in Common Lisp), i did not mention that in my first message as the text was more or less copied from the one I posted on opengameart and i did not thought the language the game was written with could be an interesting information, but this is freegamedev so people are more into this technical stuff! :)

If you have some question regarding game development in lisp do not hesitate to ask! :)

Bye!
C.
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby cage » 26 May 2019, 17:15

Hello!

I have spent the last month or so implementing a light system for the dungeon, the works was slowed down a bit because of many bugs especially in normalmap generation (and in the shaders too). The results is not fantastic but not so terrible, i would say!

https://opengameart.org/forumtopic/dawn-of-the-era#comment-78999

I missed this in my first post: anyone is welcome to contribute to the development! :) :)

Bye!
C.
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby drummyfish » 26 May 2019, 20:31

Awesome! I can work with Blender but unfortunately I'm busy to offer help at this point... but have you looked at Blendswap? There are many free character models and generally it's a larger DB than OGA regarding 3D models (just be sure to filter out the NC stuff, that is not free).
socialist anarcho-pacifist
Abolish all IP laws. Use CC0. Let's write less retarded software.
http://www.tastyfish.cz
User avatar
drummyfish
 
Posts: 448
Joined: 29 Jul 2018, 20:30
Location: Moravia

Re: Dawn of the era

Postby cage » 27 May 2019, 18:07

Hello drummyfish!

Thank you for your suggestion, i think blendswap website was totally unknown to me! There are a bunch of good stuff there but to be honest i am considering adding some meshes from this entry on OGA:

https://opengameart.org/content/lowpoly ... ngeon-pack

i like especially the columns, the ones that i am currently using are good but the style is quite unfit for my game, even if i can see the vertex count is about 250 vertices, maybe a bit too much for my unoptimized engine? We will see! :)

Of course feel free to ask for anything about the game development if you interested!

Bye!
C.
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby fluffrabbit » 28 May 2019, 04:45

At 250 vertices your bottleneck will be draw calls, not the renderer. I see your engine uses a lot of Lisp stuff, so I guess you've been around for a while. :)

A screenshot in the thread might be a good way to build interest.
fluffrabbit
 
Posts: 557
Joined: 11 Apr 2019, 11:17

Re: Dawn of the era

Postby cage » 28 May 2019, 18:08

Hello fluffrabbit!

fluffrabbit {l Wrote}:At 250 vertices your bottleneck will be draw calls, not the renderer.


I am using instanced rendering to draw the most parts of dungeons, so i hope this very likely should not be a problem. I am struggling with blender (i can not wrap my head around this software :-( ) to fit a texture on the column and then i am going to try. I have to say that opengameart is a very valuable site for a lonely programmer with no art skills like me! :-D

I see your engine uses a lot of Lisp stuff, so I guess you've been around for a while. :)


Well i guess i am older than the average age population if i understand correctly what you have written! :D
I am starting using lisp just about ten year ago, though. I have used (and still using) a lot of languages before but i feel lisp (Common Lisp) is the one where the gap between the code in your mind and the code written on the editor is minimum, at least for me of course. (sorry if this sentence is not clear, my english is horrible!)

A screenshot in the thread might be a good way to build interest.


Sure!

Image

Also there is a web page here: https://www.autistici.org/interzona/dote.html

Bye!
C.
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby fluffrabbit » 28 May 2019, 18:38

I am using instanced rendering to draw the most parts of dungeons, so i hope this very likely should not be a problem. I am struggling with blender (i can not wrap my head around this software :-( ) to fit a texture on the column and then i am going to try. I have to say that opengameart is a very valuable site for a lonely programmer with no art skills like me! :-D

Instancing -- nice! My current project unfortunately limits me to WebGL so I can't use those fancy GL/ES 3+ features for compatibility reasons. With instancing and low-poly models (250 verts bordering on ultra-low poly) you should not have any problems with graphics performance whatsoever.

Well i guess i am older than the average age population if i understand correctly what you have written! :D
I am starting using lisp just about ten year ago, though. I have used (and still using) a lot of languages before but i feel lisp (Common Lisp) is the one where the gap between the code in your mind and the code written on the editor is minimum, at least for me of course. (sorry if this sentence is not clear, my english is horrible!)

Your English is good, though your taste in scripting languages is questionable. :D 10 years ago Lua was the hot scripting language to learn. Now it's mostly JavaScript and smaller niche languages. I have always found Lisp to be a bit odd. My code these days is very procedural; comment, step A, comment, step B, tiny and extremely cautious chunks, not as lispy.

That is a very nice screenshot. I see you have implemented normal mapping. I also see what you mean about the art. :D Your pipeline can probably handle more physically correct materials so the red walls don't look overexposed. It looks like lots of functionality is already in place, so the aesthetic stuff really will be adding polish rather than replacing what would otherwise be content. My games never have any depth before I start jamming them full of art assets. Unlike me, you seem to be doing things in the proper order.
fluffrabbit
 
Posts: 557
Joined: 11 Apr 2019, 11:17

Re: Dawn of the era

Postby cage » 28 May 2019, 19:54

fluffrabbit {l Wrote}:Instancing -- nice! My current project unfortunately limits me to WebGL so I can't use those fancy GL/ES 3+ features for compatibility reasons.


i am curious about your project, can you tell me more or do you have a link for it?

I am starting using lisp just about ten year ago, though.[...]


Your English is good,


you are too kind :)

though your taste in scripting languages is questionable. :D


yes, i can see the point! :D :D when i tell people i use lisp they start to look at me like a cross between an alien and a dinosaur! :D :D

10 years ago Lua was the hot scripting language to learn. Now it's mostly JavaScript and smaller niche languages. I have always found Lisp to be a bit odd. My code these days is very procedural; comment, step A, comment, step B, tiny and extremely cautious chunks, not as lispy.


Well if you take a look at my code, you'll see that it is mostly imperative/procedural too. There are a few module that are written in functional style because the algorithm i implemented was simpler to me to be written this way, but the vast majority of the code is OOP/imperative with some functional and even a tiny, tiny bit of logic programming on top! :D Lisp is really multiparadigm, and i think i like a lot for that too, it does not force you a style of programming. I use javascript too but the syntax is sometimes confusing and prototype inheritance even more!

That is a very nice screenshot.


Thank you! :)

I see you have implemented normal mapping.


A great technique! There was an error in my code regarding normal map generation that was driving me crazy. But seems to me that the results is correct now. The bug inspired me an experiment: i would like to try to perturb the normal (in the fragment shader) with some kind of noise. Maybe i could try to simulate the lights waiving...probably this is going to results in a failure, i do not know...

I also see what you mean about the art. :D Your pipeline can probably handle more physically correct materials so the red walls don't look overexposed.


it is in fact...i am not happy with the results but this is the best i could achieve for now. :(

It looks like lots of functionality is already in place, so the aesthetic stuff really will be adding polish rather than replacing what would otherwise be content. My games never have any depth before I start jamming them full of art assets. Unlike me, you seem to be doing things in the proper order.


i forced myself not to ask help from other people if the game was not feature complete, i do not want to waste other person's time. i hope they enjoy working on this project like i do!

Bye!
C.
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby fluffrabbit » 28 May 2019, 21:06

i am curious about your project, can you tell me more or do you have a link for it?

Sorry, it's not an open source project. I've got 99 problems and an ideology ain't one. Life stresses, basic needs, etc. Maybe one day...

I use javascript too but the syntax is sometimes confusing and prototype inheritance even more!

Funny you should mention that. I've always seen JavaScript as a little lispy, so my programming style in it was mostly functional with lots of nested brackets, for instance:

var a = ( function( b ){ var a = b * b; return a; } )( a );

It's awful... JavaScript lets you write weird/bad code, so I used it to write weird/bad code. In much the same way, Lisp also lets you write weird/bad code, but apparently you avoid that pitfall.

A great technique! There was an error in my code regarding normal map generation that was driving me crazy. But seems to me that the results is correct now. The bug inspired me an experiment: i would like to try to perturb the normal (in the fragment shader) with some kind of noise. Maybe i could try to simulate the lights waiving...probably this is going to results in a failure, i do not know...

Not just normal maps but generated normal maps! That's pretty cool. I don't have anything close to that.

i forced myself not to ask help from other people if the game was not feature complete, i do not want to waste other person's time. i hope they enjoy working on this project like i do!

Regardless of when you show it to people, a lot of games are bare-bones button mashers with nothing to do but are full of polished art assets (from the programmer or downloaded). These developers, many of them using Unity, put 90% of the time into the graphics and don't really work on gameplay ever.
fluffrabbit
 
Posts: 557
Joined: 11 Apr 2019, 11:17

Re: Dawn of the era

Postby cage » 29 May 2019, 18:18

Hi fluffrabbit!

fluffrabbit {l Wrote}:
i am curious about your project, can you tell me more or do you have a link for it?

Sorry, it's not an open source project. I've got 99 problems and an ideology ain't one. Life stresses, basic needs, etc. Maybe one day...


Not a problem at all! :-)

I use javascript too but the syntax is sometimes confusing and prototype inheritance even more!

Funny you should mention that. I've always seen JavaScript as a little lispy, so my programming style in it was mostly functional with lots of nested brackets, for instance:

var a = ( function( b ){ var a = b * b; return a; } )( a );

It's awful... JavaScript lets you write weird/bad code, so I used it to write weird/bad code. In much the same way, Lisp also lets you write weird/bad code, but apparently you avoid that pitfall.


To be honest, in principle, i can not find anything wrong with this code (it calculates the square of a number, is it?), except for the two different kinds of brackets and the return statement (i prefer the expression based language). I fear that if i inspect my code i would find many stuff like that! ;-)

A great technique! There was an error in my code regarding normal map generation [...]

Not just normal maps but generated normal maps! That's pretty cool. I don't have anything close to that.


Well it is just the application of the good old sobel gradient operator. :)

The fact is that because of my poor art skill i tried to push as much procedural content (so texture too) as possible in the game, and this prevents to generate normal map with an external tool (i could, in principle, script gimp to do the job, but this is a bit impractical, right?).

[...]

Regardless of when you show it to people, a lot of games are bare-bones button mashers with nothing to do but are full of polished art assets (from the programmer or downloaded). These developers, many of them using Unity, put 90% of the time into the graphics and don't really work on gameplay ever.



I hope the game was fun for other people to play as much was to code! :)

Bye!
C.
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby fluffrabbit » 30 May 2019, 05:31

I'm going to ramble a bit. Sorry in advance.

Nowadays, "good code" is code that is easily readable and does not rely too much on symbols, like Python. While I prefer the niceties of C-like languages over significant-whitespace Pythonic languages, I definitely see where those people are coming from. A better way to write the above would be like so:

{l Code}: {l Select All Code}
function square( num ){
    return num * num;
}

var a = square( /* some number */ );


Breaking it up into discrete chunks on multiple lines is by no means required by JavaScript, but here there is no ambiguity as to what the code does, as opposed to the previous example. Python pretty much only allows readable code:

{l Code}: {l Select All Code}
def square( num ):
    return num * num

a = square( 5.0 )


Python does not even allow block comments. Some languages do not allow default function values, pointers, or with/using syntax. Java requires fully qualified classes and functions.

Sobel operator, huh? That will highlight edges and probably works fine for procedural textures. For textures derived from photographs, the ideal way to get a depth map is by taking the delta between two photos taken side by side (like your eyes do). Obviously that won't work if you only have one image. You could infer depth using convolutional neural networks, like with dlib for example.
fluffrabbit
 
Posts: 557
Joined: 11 Apr 2019, 11:17

Re: Dawn of the era

Postby cage » 30 May 2019, 17:03

fluffrabbit {l Wrote}:I'm going to ramble a bit. Sorry in advance.


That's ok! :)

Nowadays, "good code" is code that is easily readable [...]

{l Code}: {l Select All Code}
def square( num ):
    return num * num

a = square( 5.0 )


Python does not even allow block comments. Some languages do not allow default function values, pointers, or with/using syntax. Java requires fully qualified classes and functions.



I could agree that is more readable but sometimes you need of a "local function" that is used only in a single place and that is not of general use. In this case is better, in my opinion, to have an anonymous function so you keep the code in the same physical place i mean in the same "logical block" (and in the same place in the window editor!) and you do not pollute your module/global space with "anotherFunctionThatIDoNotKnowHowToNameAndCalledJustOnce" :-D

Then anonymous function are the simpler way (AFAIK) to delay a computation (pseudo javascript follow):
{l Code}: {l Select All Code}
 function delay(f a) { return function () { apply(f, a) }}


Of course there is good and bad in both approaches. But i find weird that python has lambda function with body of a single expression, is this still true in the latest version of the language?


Sobel operator, huh? That will highlight edges and probably works fine for procedural textures.



I would say works good enough! :)

For textures derived from photographs, the ideal way to get a depth map is by taking the delta between two photos taken side by side (like your eyes do). Obviously that won't work if you only have one image. You could infer depth using convolutional neural networks, like with dlib for example.


Nice! I could actually try the first approach!

Bye!
C.

PS: i have added a more complex column to the map and the frame rate did not dropped, so far so good! :)
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby fluffrabbit » 30 May 2019, 20:07

A function within a function on a single line? You can't be serious. :D

Python 3 indeed supports one-liner lambdas, though I must disclaim that I don't use Python and I just found this in a tutorial.

{l Code}: {l Select All Code}
square = lambda a: a * a

a = square( 5.0 )


Nice! I could actually try the first approach!

You could, but then when I thought about it I realized the delta between fine details on a wall will be insignificant compared to the distortion of the lens, so this could be more complicated than I originally thought since there might need to be an undistortion step.

I tried it without undistortion on a rusted screw on my bathroom light switch (with a macro lens). It actually looks very similar to a Sobel filter. It does not appear to represent depth.

To get the normal map, I used the NVidia texture tools and ffmpeg, which are free software. nvcompress stores the bump map in the alpha channel for convenience.

{l Code}: {l Select All Code}
sudo apt install libnvtt2 ffmpeg


{l Code}: {l Select All Code}
#!/bin/sh
nvcompress -tonormal -rgb screw_bump.png tmp.dds
ffmpeg -i tmp.dds screw_normal.png
rm tmp.dds


Long story short, my technique sucks, as evidenced in this Eevee render. For some reason the site won't let me upload the normal map, but suffice it to say it's very noisy.

Glad to hear you can push more polygons.
Attachments
screw_pbr.png
fluffrabbit
 
Posts: 557
Joined: 11 Apr 2019, 11:17

Re: Dawn of the era

Postby cage » 01 Jun 2019, 16:24

Hi fluffrabbit!

fluffrabbit {l Wrote}:A function within a function on a single line? You can't be serious. :D


:D yes it is a bit crazy, but effective! :)

fluffrabbit {l Wrote}:Python 3 indeed supports one-liner lambdas [...]


Definitely the language designer of python does not love lambdas. ;-)

fluffrabbit {l Wrote}:
Nice! I could actually try the first approach!

You could, but [...] Long story short, my technique sucks, as evidenced in this Eevee render. For some reason the site won't let me upload the normal map, but suffice it to say it's very noisy.


I see. Have you used some sort of support for the camera? Like a tripod or something like that?

fluffrabbit {l Wrote}:Glad to hear you can push more polygons.


Yes but there are some small performance issues not related to this last change. :-/

Bye!
C.
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby fluffrabbit » 01 Jun 2019, 17:51

Howdy cage.

Definitely the language designer of python does not love lambdas. ;-)

No doubt. Users of Python seem to feel the same way. I'm more moderate on the issue. I don't like using lambdas as a universal solution because my brain isn't wired to read code, but I do use them when they seem like the best solution.

I see. Have you used some sort of support for the camera? Like a tripod or something like that?

Sort of. I balanced it on my knee and leaned to the side. :D

But seriously think about it: A screw on a light switch is about 3 mm across. The image sensor is about 10x that size, the lens is about 20x that size, and your eyeballs are even farther apart. The distortion is insane just from the properties of the camera. In computer vision, the binocular delta is used for estimating depth on scales of, say, a house. There are also issues like aberration. Convolutional neural networks could at least guess the depth from samples of bump maps created by artists for other images, which would invariably yield better results.

Yes but there are some small performance issues not related to this last change. :-/

Such as?
fluffrabbit
 
Posts: 557
Joined: 11 Apr 2019, 11:17

Re: Dawn of the era

Postby GunChleoc » 01 Jun 2019, 18:06

fluffrabbit {l Wrote}:
Definitely the language designer of python does not love lambdas. ;-)

No doubt. Users of Python seem to feel the same way. I'm more moderate on the issue. I don't like using lambdas as a universal solution because my brain isn't wired to read code, but I do use them when they seem like the best solution.

I like to use them to get rid of code duplication within 1 function without having to clutter the interface with a helper function :)
User avatar
GunChleoc
 
Posts: 502
Joined: 20 Sep 2012, 22:45

Re: Dawn of the era

Postby cage » 01 Jun 2019, 19:15

Hi!

Sorry if i only answer to this question.

[...]
Yes but there are some small performance issues not related to this last change. :-/

Such as?


I am rendering to texture to simulate water reflection, turned out that re-render the entire scene two times was too much for my CPU. I removed some non essential stuff from the rendering, in this second pass: there is no use to waste cycles when the results is just a bunch of blurred pixel. The CPU usage is better now.


Bye!
C.
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby cage » 01 Jun 2019, 19:19

Hi!

GunChleoc {l Wrote}: [...]
I like to use them to get rid of code duplication within 1 function without having to clutter the interface with a helper function :)


Right! But a new world is opened in front of you before you when you discover language where there is no limitation of a single expression! ;-) ;-)

Bye!
C.
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby fluffrabbit » 01 Jun 2019, 22:56

I am rendering to texture to simulate water reflection, turned out that re-render the entire scene two times was too much for my CPU. I removed some non essential stuff from the rendering, in this second pass: there is no use to waste cycles when the results is just a bunch of blurred pixel. The CPU usage is better now.

I need to catch up! Real reflective water is awesome. The other main techniques are screen space reflections and light probes, which might be more performant. However, assuming the instancing is happening with the graphics API rather than uploading vertices every frame, I don't know what would suck up the CPU time.

I like to use them to get rid of code duplication within 1 function without having to clutter the interface with a helper function :)

That's what I do.
fluffrabbit
 
Posts: 557
Joined: 11 Apr 2019, 11:17

Re: Dawn of the era

Postby cage » 06 Jun 2019, 11:24

fluffrabbit {l Wrote}:
I am rendering to texture to simulate water reflection, turned out that re-render the entire scene two times was too much for my CPU. I removed some non essential stuff from the rendering, in this second pass: there is no use to waste cycles when the results is just a bunch of blurred pixel. The CPU usage is better now.

I need to catch up! Real reflective water is awesome. The other main techniques are screen space reflections and light probes, which might be more performant. However, assuming the instancing is happening with the graphics API rather than uploading vertices every frame, I don't know what would suck up the CPU time.


Well...seems that i forgot to turn off the switch that instructs the compiler to generate all the debug symbols/information... ^_^;;;

Bye!
C.
cage
 
Posts: 12
Joined: 11 Mar 2019, 18:38

Re: Dawn of the era

Postby fluffrabbit » 06 Jun 2019, 16:06

That would do it.
fluffrabbit
 
Posts: 557
Joined: 11 Apr 2019, 11:17

Who is online

Users browsing this forum: No registered users and 1 guest