Jump to content


  • Content Count

  • Joined

  • Last visited

Community Reputation

17 Good

About catch22

  • Rank
    Advanced Member

Profile Information

  • Gender
  • Location
  • Interests
    Code. Games. Guitar.

    Jesus Christ.

Recent Profile Visitors

1,094 profile views
  1. catch22

    Discord Server is Back!

    To clarify, links in discord will expire after 24 hours unless you flag them to "not expire" or set their limit to unlimited. The link says it's invalid/expired. I was asking you to make a new one and make sure it never expires?
  2. catch22

    Discord Server is Back!

    Link seems to be expired, set it to not expired please?
  3. catch22

    How did you get into game dev?

    Nah, it had them. Poke, for example. It was hell to do, but it was possible. "Sprites" were just you changing pixel colors in batches/subroutines. If memory serves, that is. Good times.
  4. catch22

    Why Isn't Leadwerks More Popular?

    It's not more popular because people are sheep. They flock to "industry standards" whether those are even worthy of being standards or not. I used to work in middle ware and most people won't or can't make use of most features software packages are capable of putting out. They need waaaay less than what they chain themselves to. All the bells and whistles are just to get more people to use it, broader audience. Unity and UE4 are a terrible option for a majority of people who struggle to use them. Anyway, I don't like game makers. I'm not a child. I also hate bloat and feature creep. I jumped on the LE bandwagon because it gave me exactly what I wanted: a short cut. I mean I've written my own engines, I cut my teeth on that ****. The thing is, I'd rather write a character controller than a model loader, or a combat system and not a map editor. I don't want to care about driver and API compliance, hardware compatibility, so on and so forth. Booooring stuff. I do that kind of stuff at work all day 😃 I just wanna write games when I get home, which means game system stuff. That's enough work on its own to have to worry about all the building blocks that go into making even that possible. Josh is willing to do all that, so I'll let him do the boring stuff I'm kind of an 'against the grain' personality, I like finding neat stuff that is not well known or super popular; the little guy, you might say. I looked at LE briefly before picking it up. Once I saw the API I was just sold. The fact I can write C++ with a really trim engine that doesn't have a stupid complex API for no reason other than.... just because... is why I got LE. It's like a kit car. You get the building blocks you need to make something fast AF, but it's on you to make it your own. It's like a ticket to just start making games rather than writing the bare bone details that kills projects and startups. Yeah there's a lot of nice free engines, but they don't have the same support and improvement pathways as something you pay for. This is actually a strength of LE. No one is a customer on an open source project, for example. If something doesn't work, get to fixing it yourself. I've devoted weeks and months to learning packages only to find a feature I needed is broken or NYI or incomplete or.... Well, that cuts into stuff I want to do. The community is kind of dead, yeah. This is how indie and sideshow game development goes though. Bursts of activity and then people drop off when life demands their focus. Heck I was gone for like a year and just came back recently!
  5. catch22

    How did you get into game dev?

    I got an NES when I was 6 for Christmas. I remember when I first played it I wondered how it worked, and wanted to make my own. I had a Commodore 64 growing up after that, where I made a bunch of mini games in the BASIC shell it had. I learned pascal in high school after that, and moved onto C and C++ in my own time. I did a few small contributions to ClanLib. I wrote a couple OpenGL ortho2d engines back in the day. I used to use python as a mockup language for prototyping ideas, since it translates well to C++. I was hired by Simutronics to work on HeroEngine/Hero's Journey, which I did for about 3 years. At some point I had the opportunity to work on SWTOR (Bioware bought a HE license and was one of the first studios to use it), which I did not take. HE was cancelled when Simutronics decided to focus their effort on middleware, so many were let go. It's okay though, I was happy to be let go because I had attended a few GDCs (2007-08 ish) and realized at those events that the gaming industry was not sustainable for a living. Not my cup of tea. Too shady, too cut throat, to exploitative. Gross. So indie is the only way I do it, in my spare time, as a hobby, as I've been doing since I was a kid. During the day time hours I am a nodeJS fullstack engineer for another kind of gaming company that is, surprisingly, far more stable. Casino gaming 😃 The last major project I had was doing a throw back MUD in node. Text I can do.... One of the problems I've always had is art. So the past couple years I've been doing 3d modelling and painting fairly exclusively just to become an artist. I could always code, I just could never have art to play with, which is really vital for being able to move forward on projects. Eh that's it in a nutshell. I've been taking my time and never releasing anything for about 20 some odd years.
  6. First, I'd like to say, I am not an artist. I'm a programmer who does art to get by 😃 One issue I struggle with is textures being seamless between separate "modular" dungeon pieces. This is like walls and such. The problem I'm having is with texture scaling when making my unwraps and using textures for the sub parts of the model. It's very hard to unwrap each modular set piece and then like, stencil in the textures, because they'll never line up; the scale in the uv could be off, etc. I ended up making basically making a small texture atlas because then my texel to unit ratio is consistent and the coordinates are always roughly the same... I tend to model geometry first then try to texture after, maybe I'm doing it the wrong way? At the moment I've kind of gone back to making modular geometry pieces that I will use to compose larger "set" pieces that are groupings of these... however, it's limiting. Not everything comes down to a square. I tend to do a lot of bevels and other geometry embellishments. I also wonder, then, about using different materials, but the same texture. So I have a "set" atlas so all these modular geometry unwraps and scales correctly, but some of it might be wood, or stone, or metal... and I'd want each part to have it's own material. But then, does this cause performance hits having a big-ish texture with multiple material properties? I thought I could get away just doing each piece with its own custom unwrap and stenciled texture; im not too worried about it from a performance perspective -- just a visual one. Because in this case as I said, making stuff "line up" is tricky. Of course, a trade off might be to do "seam hiders," ie, like pillars every segment to cover the few pixels off. ... anyone more experienced with art pipelines comment? Am I on the right track, totally off, etc? My environment art is intended to be pretty elaborate, but considering uv scale, texels per unit, and seams, I'm kind of scratching my head on the best approach here?
  7. catch22

    How to use the PlayAnimation endhook feature [C++]

    I was bored. I wrote something in a few minutes. It's a mockup, I dunno? It works anyhow. I'm using EventEmitter I posted the other night in that other thread. https://gist.github.com/rioki/1290004d7505380f2b1d Or just ignore my ->on and ->emit stuff in the player class. It's just a callback function anyway. main loop: long currentTime; long dt; long lt; while (true) { if (window->Closed() || window->KeyDown(Leadwerks::Key::Escape)) return false; Leadwerks::Time::Update(); currentTime = Leadwerks::Time::GetCurrent(); dt = currentTime - lt; lt = currentTime; controller->update(dt); world->Update(); world->Render(); //dt = Leadwerks::Time::GetCurrent() - dt; context->SetBlendMode(Leadwerks::Blend::Alpha); context->SetColor(1.0, 1.0, 1.0); context->DrawStats(2, 2); context->Sync(false); } return 0; player class update function: // constructor .. this->on(EVENT_ANIMATION_END, function<void (const char*)>([this](const char* sequence) { std::cout << "Animation sequence '" << sequence << "' ended!" << std::endl; })); void update(long dt) { animationFrame += dt / ANIMATION_WALK_SPEED; if (animationFrame > model->GetAnimationLength("walk")) { animationFrame = 0; // this doesnt have to reset to 0 but rather whatever your state system dictates? this->emit(EVENT_ANIMATION_END, "walk"); } if (animationFrame < 0) { animationFrame = 0; } model->SetAnimationFrame(animationFrame, 0.8, "walk"); std::cout << "animationFrame: " << animationFrame << endl; }; EDIT: I guess it should be noted (at least in my model) it's 0 based animation sequences, so GetAnimationLength would return, for example 100 and your frames are 0-99; so offset appropriately. Also, I'm not blending or anything here (it's a hack come on!), so you'd take the remainder from the DT calculation and probably want to mix that into your wrap around to avoid hitching or smooth the interpolation =D
  8. catch22

    GLTF Loader

    You've said crazier things?!
  9. catch22

    How to use the PlayAnimation endhook feature [C++]

    Well, I cannot speak for him of course, but that was 2 years ago and still nothing. It seems people just measure it themselves. I'll be doing this soon myself since animation is my next milestone...... Not a big fan of lua for core stuff like player controlling, so yeah. If I write something of use before you have a solution, i will gladly share it.
  10. catch22

    How to use the PlayAnimation endhook feature [C++]

    Note the comments: Josh says that's only a lua function.
  11. catch22

    GLTF Loader

    Wonder how long till someone YAMLs or BSONs it for file size? JSON is great, I work with it everyday, but it's it's a little heavy around the waist since it's notation/markup is a bit excessive. Being a Ctype struct expression, it moves between languages very easily as well. Now we should ditch lua and go javascript rite? hue
  12. catch22

    GetAnimationFrame is missing

    Eh, I tend to gravitate toward event driven models. Would definitely be a use-case, when the animation loops to the start again just emit oncomplete event, or whatever. C++ we used to call this slots/hooks (dating myself here); in Node it is just the EventEmitter and part of the base package. Someone wrote it for C++ though if you guys wanna add similar functionality to your own classes. https://gist.github.com/rioki/1290004d7505380f2b1d
  13. catch22

    which one has better performance

    I'm a nodejs software engineer. When dealing with this stuff you generally design the routines to be "chunkable"; like you can do pieces of the work every 10ms or whatever, so it's non-blocking to the rest of the thread. Alternatively, you can fork child processes to do that, and use IPC (interprocess communication) to poll results and what not. Since you're really being quite vague there's no easy answer. But if you're asking if you should be doing "big calculations" when the game happens to be running over 60fps, I think there's probably a better way to design your program flow; it's certainly not a 'standard' way of looking at things. It seems weird to me you'd have "big" stuff to do then, and only then, rather than tasks that just need to be done all the time, or potentially all the time, whenever, wherever, etc.. Anonymous function processing is a thing as well for small bursts of stuff you don't really have anyway of knowing if it's going to be happening in regular enough intervals to write classes/functions for it -- ie: like doing a lamba on a separate thread -- but these are specific kind of workloads, lest you need to think about mutex/resource contention. C++ on modern hardware is extremely fast. You'd be surprised how much it can do at interactive framerates; if you're experiencing slow downs you need to profile your app and see where your bottlenecks are and address them accordingly.
  14. catch22

    Adding LOD to the Model Class

    Josh are you attending Siggraph this year?
  15. catch22

    Building a Zero-Overhead Renderer

    I think it's important to keep trudging forward with newer hardware. AMD's affordable core act (RYZEN) means 6 and 8 core CPUs (with 12 and 16 threads) are going to be the norm in the coming years, because intel has had to adapt to their pricing and offering, so are likewise offering more cores for cheaper. We already saw them move coffee lake to 6 cores after a decade of quad cores. So to me, offering to leverage this in your core engine is going to be a strong selling point and get developer attention. AMD has a 15w, mobile 4 core 8 thread CPU. It's getting heated out there on the CPU front. As soon as miners stop buying all the GPUs, I think we're going to see some trading blows over the next year starting from this summer. Offering Vulkan support out of the box is going to turn a lot of heads as well, especially if it's well done. Good work Josh. Looking forward to playing with Leadwerks on my 8 core AMD and RX Vega =)