As was foretold, we've added advertisements to the forums! If you have questions, or if you encounter any bugs, please visit this thread: https://forums.penny-arcade.com/discussion/240191/forum-advertisement-faq-and-reports-thread/
Options

[Game Dev] I don't have a publisher. What I do have are a very particular set of skills.

1626365676892

Posts

  • Options
    CornucopiistCornucopiist Registered User regular
    I'd love to grab these but I'm wondering how their UVs are set up... Adjusting to my style of texture atlas might take more time than creating my own geometry and skinning that...


  • Options
    Houk the NamebringerHouk the Namebringer Nipples The EchidnaRegistered User regular
    edited February 2020
    Those Synty Polygon assets are very good and I use them for pretty much all of my prototyping, highly recommend

    Houk the Namebringer on
  • Options
    KupiKupi Registered User regular
    Kupi's Weekly Friday Status Report

    This week was sort of a single continuous low-key depressive episode while I strained to get some non-game-dev creative work started and failed at it.

    In other news, I added support for scaling/zoom to my Animation and Level editors, so I can now more easily arrange fine details or just move quickly through the world space in the editor.

    The next line item is to add onion-skinning and the ability to load "subordinate" animations into the Animation Editor so that if you have two animations that are supposed to go together, you can line them up for simultaneous editing.

    (I have entirely abandoned the idea of trying to parallelize event resolution in the collision detection engine.)

    My favorite musical instrument is the air-raid siren.
  • Options
    IzzimachIzzimach Fighter/Mage/Chef Registered User regular
    edited February 2020
    What I completed this week:

    pxtfkpvtoskk.gif

    I needed some sort of pop-up for the NPCs to send short messages to the player to update them. I don't have resources for voice-over or anything, so instead I'm using short text boxes and animated portraits.


    Izzimach on
  • Options
    dipuc4lifedipuc4life ... In my own HeadRegistered User regular
    @Kupi always comes in here with their weekly report and I am always amazed at what they have accomplished in a week. Then they come in here some weeks and are like "I didn't get much done this week". Then I feel bad because even in their bad weeks they have accomplished MORE than I have in a year. Keep up the great work ... At least I'm rooting for you.

    NNID: SW-6490-6173-9136
    Playstation: Dipuc4Life
    Warframe_Switch IGN: ONVEBAL
  • Options
    KupiKupi Registered User regular
    It frustrates me that I can't summon my usual loquaciousness to something that actually deserves the word count, but: thank you. Knowing that there's some people out there who appreciate these little journal entries is part of what keeps me going... the other part being sheer bullheadedness. :lol:

    But I don't like the idea that I'm holding someone back, so let me add this: my circumstances give me more free time than most, so my perception of how productive I've been is distorted by the proportions. Combined with the fact that I'm deliberately taking a harder path than most (and my penchant for exaggeration), I think a lot of what I'm doing is... I don't have the right word for this hand waving motions achievable by anyone. So don't be discouraged! You can do the thing! I believe in you!

    My favorite musical instrument is the air-raid siren.
  • Options
    LD50LD50 Registered User regular
    Kupi wrote: »
    It frustrates me that I can't summon my usual loquaciousness to something that actually deserves the word count, but: thank you. Knowing that there's some people out there who appreciate these little journal entries is part of what keeps me going... the other part being sheer bullheadedness. :lol:

    But I don't like the idea that I'm holding someone back, so let me add this: my circumstances give me more free time than most, so my perception of how productive I've been is distorted by the proportions. Combined with the fact that I'm deliberately taking a harder path than most (and my penchant for exaggeration), I think a lot of what I'm doing is... I don't have the right word for this hand waving motions achievable by anyone. So don't be discouraged! You can do the thing! I believe in you!

    By the same token, taking on a project like what you're working on and keeping to it under your own direction is not something that is easy to do (even if you have more free time than the average forumer). You shouldn't sell yourself short.

  • Options
    KupiKupi Registered User regular
    Kupi's Weekly Friday Status Report

    Sometimes you complain about how little you're getting done. Sometimes you're so productive that you already did the next item on your to-do list a couple weeks ago.

    As a convenience, I'd meant to include the value that one ought to set an Entity's Position value to in order to move it to the point where a collision occurred to a collision event. That's a natural thing to want to have; if a character hits a damaging hitbox, you might want them to go to where they got hit and then change direction and whatever. Turns out I put that in a while ago! So, that's one task done.

    Also this week, I added onion-skinning to my animation editor. It's not configurable, but it at least shows you what the next frame and previous frame look like overlaid on the one you're currently editing, when it's enabled. It was a little tougher than it needed to be because, for some reason, the override of DrawImage() in Windows Forms that lets you apply a color or alpha tint wants its target coordinates in the form of three points that define a parallelogram, and I have never worked with that format before. I decided against adding the support for displaying secondary animations at this time because, though I can see the use case for them, it's both difficult and not strictly necessary yet, so it's not my top priority.

    After that, I fixed a bug in the level editor that caused a crash when you deleted any object except the last one in the list of all objects in the level. Dunno how I got this far without noticing that one, but I did and now it's gone.

    Finally, I did some housekeeping by renaming a bunch of component classes whose name ended with "Component" to not end with "Component", which was mostly because it annoyed me to see how an entity might have a Position, Rotation, Velocity, and CollisionVolumeComponent. Now the names are consistent.

    Also this week, I've been speccing out some component and system types related to making characters move around on the ground. Without the sort of task detritus that I've been cleaning out this week to keep me from it, we might actually see some real platforming in next week's report!

    My favorite musical instrument is the air-raid siren.
  • Options
    RoyceSraphimRoyceSraphim Registered User regular
    Going over my old projects and trying to get them stable to upload to itch.io. maybe attach pdf of code for each one.

    Figure if I drop dead someone could benefit.

    Discovered that I managed to get by without setting a variable in my first project because I never, ever, spawned enemies without a player character.

  • Options
    HandkorHandkor Registered User regular
    I remember one time where I had my son try out one of my jam entries only for him to completely break the game the moment he got the controls. He was spamming buttons and not only did he manage to break a state toggle he broke through some physics barrier and was able to run out of bounds of the level.

    In other news I did a thing and added a horse

  • Options
    CornucopiistCornucopiist Registered User regular
    edited February 2020
    Quicky hangar design.
    But! There's a story attached! Turns out I could only get a directional light to work in this scene (or in the other) for some weird reason. Mind you, I just got done removing either a point or spot lights from that spaceship. So why weren't they working?
    Checked the Unity forums, came up with not much except a vague idea I should update my project's dependencies (packages in Unity talk).
    Well, that broke everything. It gives me a very specific error that should have been solved by an update dating back to... monday.
    So, next up is submitting a bug report... You gotta love the cutting edge of development...

    26p7s73ksd1s.png

    Cornucopiist on
  • Options
    Mc zanyMc zany Registered User regular
    Handkor wrote: »
    I remember one time where I had my son try out one of my jam entries only for him to completely break the game the moment he got the controls. He was spamming buttons and not only did he manage to break a state toggle he broke through some physics barrier and was able to run out of bounds of the level.

    In other news I did a thing and added a horse


    Looks great, already has more content than no mans sky (heyyyyooooooooo).

    How are you doing the procedural generation? Making endless levels is a goal of mine but I can't think of how to do it without performance loss when it generates the next area.

    Spoilered for cynical.
    what you should do is put Link on his horse in there, email some websites about a fan made Zelda remake. Then, when the C&D comes in, pivot to the game you were gonna to make anyway only now you have all this publicity.

  • Options
    CornucopiistCornucopiist Registered User regular
    So, the DOTS hole just got deeper and deeper. Sure, they said all the way back in 2019 that this was not ready for production... But the way they cheerfully rip out basic code and not actually document what goes in it's place is pretty annoying. I can put in a weekend trying to find why World.Active doesn't work anymore. Sure, it's been deprecated and replaced by DefaultWorldInitialization. Why doesn't that work anymore? Go fish.

    Or... I can pare back my scenes, and go full mono, and not worry about any of that crap anymore.

    u1rd7cokmlkz.png

  • Options
    HandkorHandkor Registered User regular
    edited February 2020
    Mc zany wrote: »
    Handkor wrote: »
    I remember one time where I had my son try out one of my jam entries only for him to completely break the game the moment he got the controls. He was spamming buttons and not only did he manage to break a state toggle he broke through some physics barrier and was able to run out of bounds of the level.

    In other news I did a thing and added a horse


    Looks great, already has more content than no mans sky (heyyyyooooooooo).

    How are you doing the procedural generation? Making endless levels is a goal of mine but I can't think of how to do it without performance loss when it generates the next area.

    Spoilered for cynical.
    what you should do is put Link on his horse in there, email some websites about a fan made Zelda remake. Then, when the C&D comes in, pivot to the game you were gonna to make anyway only now you have all this publicity.

    The procedural terrain is generated in a material, I might change it to a layered material or something that can also do iterations to allow sedimentation and other effect. It's a very heavy shader using many noise nodes which are not meant for realtime. It probably still only takes a few ms to draw though so it's cheap. The material is only updated when you change tile which are 32mx32m.

    The terrain itself, with collision, is only generated near the player up to around 100m the rest are static mesh with a height displacement applied. If an actor need to exist outside the 100m I can either turn that tile into a mesh with collision or have actors further than 100m use the terrain generator to just query the height they need to be at and handle from there.

    In that tweet's comments I posted another video which shows the terrain in wireframe as it is generated. I also left the performance stats on screen so you can see the spike when changing tile.

    Handkor on
  • Options
    KupiKupi Registered User regular
    Kupi's Weekly Friday Status Report

    Last week I said I might be able to show off some basic platforming running in my engine. Naturally, having said that, I immediately took off at a sprint and stepped on a rake.

    This all requires some context. My engine only allows one Component of each type per Entity. Therefore, a single Entity can't have, for instance, two collision volumes at the same time. However, it's possible for a character to be made up of multiple Entities, with some Entities being children of a common parent. So, a character might have a main Entity with a collision volume for its main body, and then two extra ones for the hitbox and hurtbox. I felt it appropriate to tie collision information-- the actual shape data for a given collision volume-- to the sprite animations, because it seems relatively self-evident that the shape of something's ability to interact with other objects is related to how it's visually represented. When a sprite animation flips to a new frame, it has to go out and update the collision data for each associated collision volume. However, the sprite animation is being driven by a component that's on one Entity while the secondary collision volumes are all on other Entities.

    To get around that, I use what I call "Component references", which are essentially just a record mapping an Entity ID, a Component type, and a reference identifier to another Entity ID and Component type pair. This is almost but not exactly like just using a plain old C# variable to store a reference, because the reference is destroyed when either the referrer or the reference is deleted. It's like a weak reference in C++. So, each frame in a sprite animation has a mapping from reference identifiers to collision data objects, and when the animation system observes that a sprite animation has changed to a new frame, it goes through every reference identifier in that mapping, finds the referenced collision volumes, and updates their collision data.

    In my initial implementation, those reference identifiers were integers. I chose to use integers because integers are more or less optimally compact as a dictionary key and you never have to allocate an object for them. However, I realized that using integers as reference identifiers is going to be an absolute pain in the ass in the long term, because every time I make a new animation for a character, I have to remember: 0 is body, 1 is hitbox, and 2 is hurtbox. And 3 is critbox. Is 3 critbox? Wait, no, I changed it. 2 is critbox and 3 is hitbox. Did I remember to update every animation? Oh no...

    Now, there's still a problem with having to make sure that a character's sprite animation playback Component has references that match the reference names in all the animations that it uses, but we'll get to my solution for that (and the way it possibly renders everything I just changed there irrelevant) later.

    I mention Newtonsoft.Json a lot, often to say that it's the comfiest serialization library I've ever used, and while that's still true, I have run into a recurring pain point, even if it's (mostly) not actually the library's fault. JSON stands for "JavaScript Object Notation". It's more or less a 1:1 mapping with JavaScript's object model. And JavaScript is one of those tiresome languages where objects are basically just specialized hashmaps. Dictionaries/Maps/Hashtables/Whatever else you want to call them are only allowed to have integers and strings as keys in JSON. This doesn't play nicely with the way C# lets you use any Type as a key. Newtonsoft.Json is basically forced to convert dictionary keys to strings and then pray that there's a reverse relationship. Now, according to the documentation you can annotate a given Type with a TypeConverter in order to manage the conversion between that Type and a string. (TypeConverter hails back to the very first version of C#, and was intended to be the primary means of converting instances of one Type to another.) However, in my experience Newtonsoft.Json doesn't actually notice your TypeConverters, which means that my dictionaries for tracking references that are keyed on specialized objects don't serialize correctly. I wound up having to write a custom converter for those values, essentially two-stepping them into a specially-formatted list and then outputting that into the final JSON, and vice-versa.

    When I finally got around to starting in on the platformer logic implementation, the first step was to add some arbitrary shape cast methods. I'll go into this in more detail when it's actually working, but the core of it is that objects that move around on the ground use short-range raycasts to determine if the floor is still under them each frame. Which means that they have to be able to query the rest of the world's collision volumes on a given layer. Well, I discovered that doing this required some knowledge of things like what the collision detection grid size was, and my "simple" raycast function was taking six parameters, three or four of which were for practical purposes global or static information. So, I created some classes that allow you to load the moral equivalent of an ini file and distribute the loaded values into static variables in other classes. It's a lot simpler than it sounds, really; I just extended my existing "game configuration" object to be able to be extended with any arbitrary set of bonus data that needs to change on a per-game basis. Since those configuration values are arbitrary and accessible from anywhere, I could, say, have a value that stores the list of valid reference identifiers for each component type. Which would allow me to associate visible names with integer values, which means I could have both the memory savings and speed of integer-valued reference identifiers with the human-comprehensibility of string names. But I've put enough effort into making the reference identifiers strings already that I'm not likely to go back until it's shown to be a genuine performance bottleneck.

    With all that finished, I... discovered that somewhere in my last four or five git commits (or even further back), the content pipeline had begun intermittently refusing to load my extensions. Which causes my builds to fail at random (but increasingly consistently). I don't know what it's happening and the error message produced is the dreaded "idk lol" toward which all linking, library reference, and runtime errors converge. For a half-day I felt like this was it, this was the point where I gave up and went back to Unity, and then I read Cornucopiist's post and felt like my grass was green enough, actually. So instead I remembered that I'm using ad-hoc content loading already (MonoGame lets you load most any built-in content through code now, not just through their content pipeline tool), removed all the references to my test content from the current content project files, and got the build succeeding consistently again. It's a disturbing error, but bypassing it for now beats throwing out a year of work.

    For future work, I've been considering moving onto .NET Core, since that seems to be where the maintenance team is taking MonoGame. That can be forestalled a while longer (there appear to be more contemporary bug reports regarding the content pipeline, in any case), so having put the rake back in the shed where it belongs, I'm going to go back to trying to get basic platforming stood up in my engine.

    My favorite musical instrument is the air-raid siren.
  • Options
    RoyceSraphimRoyceSraphim Registered User regular
    Redoing my first project, i had inputs fed directly into the player character.

    Which was fine until I needed to do something without the player character. Like menus or cutscenes.

    Although a future menu shortcut could be a room where objects are menu controls, so tapping a game lever to change settings.

  • Options
    IncenjucarIncenjucar VChatter Seattle, WARegistered User regular
    edited February 2020
    Handkor wrote: »
    I remember one time where I had my son try out one of my jam entries only for him to completely break the game the moment he got the controls. He was spamming buttons and not only did he manage to break a state toggle he broke through some physics barrier and was able to run out of bounds of the level.

    In other news I did a thing and added a horse


    A major part of my success as a game tester was drinking lots of caffeine and tapping buttons like my finger was a hungry woodpecker.

    Incenjucar on
  • Options
    IzzimachIzzimach Fighter/Mage/Chef Registered User regular
    I decided this last week to try and get just enough stuff into my game for a complete playthrough. Basically my goal is that I can click on "new game" and play all the NPC quest steps and interactions until I get to "Game done!" and return to the main menu.

    So I put in just enough to achieve this. The main quest line is a bunch of short steps. Like, REALLY short. Completing a task usually means just walking up to an object and interacting with it. Talking with an NPC gives you a single sentence that just blurts out what you need to do next.

    lqugm0gjabza.png

    So each step is laughably short but I now all the pieces are in there and work in sequence. The whole game takes only five minutes but it runs from begining-to-end. I just need to go back and fill in all the narrative stubs I dumped in there. Easy!

    ijyxuk8ses7x.png

  • Options
    CornucopiistCornucopiist Registered User regular
    Izzimach wrote: »
    So each step is laughably short but I now all the pieces are in there and work in sequence. The whole game takes only five minutes but it runs from begining-to-end.

    Time to ship!
    I kid.
    But really

  • Options
    Mc zanyMc zany Registered User regular
    Izzimach wrote: »
    So each step is laughably short but I now all the pieces are in there and work in sequence. The whole game takes only five minutes but it runs from begining-to-end.

    Time to ship!
    I kid.
    But really
    "Early access"

  • Options
    templewulftemplewulf The Team Chump USARegistered User regular
    Izzimach wrote: »
    So each step is laughably short but I now all the pieces are in there and work in sequence. The whole game takes only five minutes but it runs from begining-to-end.

    Time to ship!
    I kid.
    But really

    I cannot tell you how proud I was to get a start screen and credits screen into our game jam game.

    Twitch.tv/FiercePunchStudios | PSN | Steam | Discord | SFV CFN: templewulf
  • Options
    KoopahTroopahKoopahTroopah The koopas, the troopas. Philadelphia, PARegistered User regular
    Another Humble Bundle with GameDev courses in Unity, Python, and Bite Size CSS.

    https://www.humblebundle.com/software/learn-to-code-bundle

  • Options
    KupiKupi Registered User regular
    Kupi's Weekly Friday Status Report

    Life Is Strange 2 was on sale this weekend, so I bought it and played it with the majority of my spare time this week.

    Also, Spikevegeta and Iateyourpie are doing their annual month of speedrun competitions (MOMAM), which I am using as a sort of nicotine patch for my addiction to Twitch. (MOMAM isn't always interesting, which makes it easier to ignore or detach from.)

    As for game dev, I finished my work on the raycasting helper function, including unit tests. Raycasts will be important for platforming logic because things on the ground need to use a raycast to determine if they're still roughly above the surface they're walking on. On that note, the platforming logic has turned out to be unsurprisingly surprisingly complicated, with multiple interacting Component types and the logic splitting across multiple Systems, so I've been doing spec/design/pseudocode work on that front to make sure I don't commit to anything hard to back out of.

    This week: more of the same.

    My favorite musical instrument is the air-raid siren.
  • Options
    eelektrikeelektrik Southern CaliforniaRegistered User regular
    My capstone game project class is wrapping up, I haven't posted a progress video in a long while but things have changed quite a bit and it is shaping up with last minute polishing before we present to the rest of the class on Wednesday.

    https://www.youtube.com/watch?v=d_rxUz4Y7ao

    (She/Her)
  • Options
    KupiKupi Registered User regular
    edited March 2020
    Kupi's Weekly Friday Status Report

    It's... it's been a week. My day job has been throwing all kinds of stress at us, and I've been paying too much attention to the disaster threads over in Debate and Discourse for my own good, so all I've wanted to do with my spare time is play games.

    As a consolation for not having actual platforming gameplay to present, a quick summary of the design of the Platforming Body system:

    - The Platforming Body Component indicates that a particular Entity should be treated as a platforming body.
    - A Platforming Body needs sibling Ground State (tracks whether the Entity is on the ground, and if so, its associated surface normal) and Collision Volume (knocks into things) to be picked up by the Platforming System.
    - The Platforming Body tracks the surface it's on in two phases: based on the collisions that affected the Collision Volume, and then a "ground scan".
    - When the Collision Volume experiences a blocking interaction, what happens depends on a frustrating combination of multiple possible states. But, it sums up to, if the surface normal of the collision is at an acceptable angle to be walked on, then the Ground State becomes "Grounded", the surface normal is stored, and the associated Velocity (if any) gets projected onto the new surface plane. If the surface normal isn't acceptable, then something (configurable) happens. Options include reflecting off of the surface, projecting the velocity onto the surface (while remaining or becoming airborne), stopping completely, or just not caring.
    - After examining the frame's collisions (if any), a "ground scan" is performed if the Ground State is "Grounded". This is as simple as performing a raycast of a configurable length from the center of the Entity and if a walkable surface is discovered beneath it, moving the body downward by however much is required. This allows the Platforming Body to immediately snap to angled surfaces rather than momentarily going airborne and re-attaching itself to the ground on impact. If nothing is detected, then the Ground State flips back to Airborne.
    - Optionally, the Platforming Body can adjust a sibling Rotation value to match the surface normal. (Because of my custom fixed-point number type, this required me to implement my own version of atan2. That was an adventure!)

    I actually already have most of this implemented. At this point I need to do unit testing and then throw together a scenario in my test project.

    Kupi on
    My favorite musical instrument is the air-raid siren.
  • Options
    IzzimachIzzimach Fighter/Mage/Chef Registered User regular
    I blocked out my first simple puzzle. Push over a column (as bear, BEAR IS STRONG) and then use that to leap up to a wall and climb to the top.

    It's evident that I need some sort of consistent "Visual Language" to indicate what things can be pushed and which things can be climbed. I'm thinking all pushable things will be made out of the same beveled cube, with different colors but keeping the same texture and rim lighting. Climbable walls currently have a pulsing polka-dot pattern but I can do better, maybe something more corrugated or spiky.

    Also I discovered that using triangle meshes for collision in UE4 means that one object can be completely inside a triangle mesh and NOT COLLIDE with it. So I'll have to convert some of these into convex hulls instead. But I was confuse by some weird collision results until I found that out.

    https://youtu.be/up-KDM9gMFY

  • Options
    nervenerve Registered User regular
    Is anyone familiar with shader graph displacements?

    I'm having issues when trying to use shader graph to simulate wind on grass while also having multiple meshes use the same texture sheet (grass, flowers, clovers, etc). I'm using a gradient to prevent the bottom of the mesh from waving and it works well for the few items drawn at the top of the texture, but all other parts only get the white part of the gradient. I'm trying to use the Tiling and Offset node but can't figure out how to make it offset based on the lowest UV point of a particular mesh. Is this possible or should I not be having everything on the same texture?

    Here is an example of what I'm trying to do manually. In this example I'm trying to make the gradient begin where the lower grass texture begins instead of the at the top.
    plze57lplnqf.jpg

  • Options
    IzzimachIzzimach Fighter/Mage/Chef Registered User regular
    So using bumpmapped shapes to indicate a climbing surface looks pretty good. The bumps have to be pretty big so that you can see them from a reasonable distance. Tried some different shapes, kidney-bean bumps look cool.

    f39ds2rrt6rf.jpg

  • Options
    rembrandtqeinsteinrembrandtqeinstein Registered User regular
    greetings penny arcade gamedev forum

    its been a long time of starting and stopping various projects and taking a hiatus from dev entirely

    but the bug bit me again so I updated Unity and away I go

    to get my feet wet again I wanted to go back to basics and make asteroids....so I did

    ex58qb3a0196.png

  • Options
    ZibblsnrtZibblsnrt Registered User regular
    Asteroidsy things are a great "get back into this" project if just because there's enough basic mechanics to get you moving in a few directions at once, and a lot of polish room for learning more elaborate stuff. I've been fiddling one myself in between bouts of poking at some Unity coursework and, simple as the results are so far, figuring things out has been fun.

    ztf08c4ltt7k.png

  • Options
    KupiKupi Registered User regular
    Still Calling It Kupi's Weekly Friday Status Report Despite the Obvious Delay

    I didn't even look at my projects this week. Didn't feel like it. Will try to substitute discipline for inspiration so we don't score a hat-trick on no-ops.

    I considered simply neglecting this week's report entirely, but with circumstances as they are, losing an extremely consistent message stream without explanation could make people worry. I'm alive and well, at least for the moment. Hoping the same for all of you.

    My favorite musical instrument is the air-raid siren.
  • Options
    rembrandtqeinsteinrembrandtqeinstein Registered User regular
    attempting to add a "twist" to asteroids and since I'm not really creative I came up with "asteroids + flashlight"

    a bit rough in the first pass but might be something there


    b6ccgxxq4b25.png

  • Options
    IzzimachIzzimach Fighter/Mage/Chef Registered User regular
    Starting a sandbox level where I just throw in all the environmental objects so I can debug/test interactions with them.

    So far I have some cubes you can push around and a "big branch" that works as a tightrope/zipline.

    baspk31ghh63.jpg

  • Options
    ZibblsnrtZibblsnrt Registered User regular
    attempting to add a "twist" to asteroids and since I'm not really creative I came up with "asteroids + flashlight"

    a bit rough in the first pass but might be something there

    Is the player only seeing asteroids spotlit from the ship?

  • Options
    rembrandtqeinsteinrembrandtqeinstein Registered User regular
    Zibblsnrt wrote: »
    attempting to add a "twist" to asteroids and since I'm not really creative I came up with "asteroids + flashlight"

    a bit rough in the first pass but might be something there

    Is the player only seeing asteroids spotlit from the ship?

    Yeah there is a light cone projected in front of the player, which I'm now thinking needs some indicator of how long and wide it is. Only asteroids in that cone are visible.

    It is a really crude attempt at using 3d lighting to create 2d gameplay. The lights are all at higher z levels so they are looking "down" on the screen. I couldn't find an elegant way to make it work in pure 2d like with cutout shaders and still have the lights adjustable in realtime, mostly because I don't know what I'm doing.

  • Options
    ZibblsnrtZibblsnrt Registered User regular
    (Ack! I thought those were just screenshots, not playable links!)

    Yeah, I see what you mean about the indicator issue. I'm not sure how to do volumetric spotlights, but I'm pretty sure there's a workaround involving textured cones instead of going all the way into shadertown or wrestling with something like HDRP for a basic 2D project.

    (Of course you might want to wrestle with HDRP, since a basic 2D project looks way less basic with some lighting..)

  • Options
    ElvenshaeElvenshae Registered User regular
    I played a couple levels of Space Rocks in Space, and I tell you, I had the frickin' biggest grin whenever a rock would appear out of the darkness, just missing my ship.

    That's way more fun than it should be - good work!

  • Options
    ZibblsnrtZibblsnrt Registered User regular
    "What if Asteroids, but with jumpscares?" is in fact the fun kind of unexpected!

  • Options
    LilnoobsLilnoobs Alpha Queue Registered User regular
    Zibblsnrt wrote: »
    attempting to add a "twist" to asteroids and since I'm not really creative I came up with "asteroids + flashlight"

    a bit rough in the first pass but might be something there

    Is the player only seeing asteroids spotlit from the ship?

    Yeah there is a light cone projected in front of the player, which I'm now thinking needs some indicator of how long and wide it is. Only asteroids in that cone are visible.

    It is a really crude attempt at using 3d lighting to create 2d gameplay. The lights are all at higher z levels so they are looking "down" on the screen. I couldn't find an elegant way to make it work in pure 2d like with cutout shaders and still have the lights adjustable in realtime, mostly because I don't know what I'm doing.

    If this is Unity, there's a 2d lights package. You use the URP and then you can just light up sprites as if 3d. Pretty great.

  • Options
    rembrandtqeinsteinrembrandtqeinstein Registered User regular
    edited March 2020
    Lilnoobs wrote: »

    If this is Unity, there's a 2d lights package. You use the URP and then you can just light up sprites as if 3d. Pretty great.

    just looked it up and URP appears to be compatible with webgl which is my deployment target. https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.1/manual/index.html

    TY for the heads up. I was just about to dive into shaderworld adjust the attenuation for the lights

    edit: added urp and the experimental 2d lighting appears to work much better than my 3d hack so TY. It doesn't appear to come with an unlit sprite shader so need to figure that out.

    edit2: figured out how to make unlit 2d sprite shader in shadergraph, bad news....build crashes waterfox (havent tried firefox) but it plays in chrome! lights look much better, also added background so you can see your light radius and also pretty thrust particles which are just distracting and need tweaking

    8f8kq25dr8t8.png

    rembrandtqeinstein on
Sign In or Register to comment.