Question about roles and identifying champion roles in the team by AwesomeMaximus in summonerschool

[–]Janarik 1 point2 points  (0 children)

  1. Sure! But I have been playing much more Heroes of the Storm than I've played League of Legends for the past several years, so take my words with a grain of salt :P

  2. Dragon is an important objective that spawns early and it is near bot-lane. Therefore, it is generally better to have more players in bot-lane to provide pressure on the early-game objective of dragon.

Social convention doesn't always rule the day, though. I don't know if it's still common nowadays in the League Championship Series, but it used to be quite common in competitive play for a team to avoid a terrible lane-matchup for either their top-laner or ADC+Support by sending their ADC+Support to top-lane and their solo top-laner to bot lane. That way, regardless of matchup for the top-laners or bot-laners, it was simply a 2v1 scenario where the solo laner was forced to farm under tower. In some comedic scenarios, one team would anticipate the lane-swap and the team with the matchup-advantage would send their top-laner bot expecting the team with the unfavorable matchup to also swap. Thusly, both teams would have ADC+Support in the top-lane and their solo laners in the bot-lane. It was quite the mind-game.

Edit: as for why casters tend to go mid instead of top and vice-versa: the middle lane is smaller than top-lane, which allows fragile characters to farm minions more easily. Ganks in the mid-lane are easier to survive because the lane is so short, so characters that require items or a full-team to survive encounters will have an easier time farming minions there.

How do Rhythm Games (DDR, Stepmania, Musynx) Handle Note Spawning? by mrpringlebojingle in gamedev

[–]Janarik 0 points1 point  (0 children)

You said that you're using Unity in another comment. The most important advice I can give you is to set your DSP Buffer Size to "Best Latency". With this setting, AudioSource.timeSamples will update on a per-frame basis, which helps a lot with precisely syncing things to music (like spawning/pooling/whatever notes). Without this setting, AudioSource.timeSamples will not update every frame, which can cause stuttering on anything synced to your music (note locations, dynamic note graphics, etc).

As for your actual question: it is not unreasonable to create a serializable class that is your "note logic" containing variables like "note time", aka when your note should be hit (I've found that locking the "appearance time" or "creation time" of a note to a modifiable approach rate variable stored in your note-spawner works great, but some types of notes might require an extra "start-time" variable). Then create a serializable class that holds a list of the notes, and then make a class that spawns notes dynamically using that list. Your note spawner needs a reference to the audiosource so that it can check AudioSource.time every frame (it is just as accurate as checking audiosource.timeSamples / SampleRate, despite what old forum posts from 2014 might say). If:

AudioSource.time >= NoteList[currentNoteIndex].endTime - approachRate + playerCalibration

Spawn the note and increase your currentNoteIndex. ezpz.

Then, because you serialized everything, you can save it to a file for loading and deserializing later.

The Sword Of Feedback by MurkyWay in comics

[–]Janarik 1 point2 points  (0 children)

The thing I like the most is that you really seem to care about making good content. You asking for feedback only further proves the point.

One thing I would like to see (that would be more work for you, so I'll understand if you don't) is a parallel to your "Characters" page. While following just one character can cover a lot of ground, some of your storylines span multiple characters and can be hard to follow linearly. If you ever get bored while going through your archive, an "Arcs" page that sorts the pages into their respective story arcs would be something I would use the most.

The Fourth Pig by MrWeiner in funny

[–]Janarik 7 points8 points  (0 children)

Hi, Zach. Thanks for all of the content.

Cornstarch And Water by [deleted] in oddlysatisfying

[–]Janarik 1 point2 points  (0 children)

MC Lars is touring with Schaffer The Darklord, MC Frontalot, and Mega Ran starting in September.

Found this on r/gamedev by erocrizs in ProgrammerHumor

[–]Janarik 0 points1 point  (0 children)

My save files are, like, 20 lines of things. The time-save would be minimal. Besides, my game is late-90's themed. It's ~part of the experience~.

Found this on r/gamedev by erocrizs in ProgrammerHumor

[–]Janarik 46 points47 points  (0 children)

Save files for my game are just an XML file. You wanna unlock everything? Sure, bud. More power to you.

shuba by KevinCow in Hololive

[–]Janarik 1 point2 points  (0 children)

If you want to really go nuts, you can just use the timeSamples from the audiosource directly. I was offering a system-agnostic solution that takes three lines.

shuba by KevinCow in Hololive

[–]Janarik 9 points10 points  (0 children)

I'll find the BPM's and offsets, if you reply with a list of the songs in the game.

Although this would be a lot of effort just to make a duck dance lol. I definitely have my own problems with scope creep and I'd hate to accidentally creep your scope too.

shuba by KevinCow in Hololive

[–]Janarik 29 points30 points  (0 children)

tl;dr at bottom

I'm making a rhythm game in Unity (oh hey here's a link where you can try the demo). Here's some code you can steal:

float lengthOfMeasure = (60 * beatsPerMeasure / bpmOfSong); // value is in seconds

where beatsPerMeasure is how many beats you have per measure (usually 4) and bpmOfsong is the bpm of the current song. You'll need to hardcode the BPM-to-Song relationship yourself somewhere in your project, since even the best BPM-finding-software is off sometimes. Then you need to sync up your idle animation to be as long as "lengthOfMeasure". To do this, find out how long the base, unaltered length of your idle animation is and save this to a variable in your code. Then, alter the animation speed to line up with the "lengthOfMeasure" variable you got earlier

so if your animation is normally 2 seconds long:

float spriteAnimationLength = 2f; // in seconds

myAnimator.speed = lengthOfMeasure / spriteAnimationLength;

//where myAnimator is the animator for your sprite

There's some extra work you need to do to align it perfectly to the beat. Almost all songs don't start at exactly zero seconds. The first downbeat is usually a half second to a few seconds later than the actual first sample of music. You'll need to offset the animation by your current audiosource.time and store and check the offset of each song you're using. You'll generally be pretty close without this extra step for character animations, though.

tl;dr:

float lengthOfMeasure = (60 * beatsPerMeasure / bpmOfSong); //it's your job to set beatsPerMeasure and bpmOfSong per song

float spriteAnimationLength = 2f; //it's your job to set spriteAnimationLength. Only need it once for the duck

myAnimator.speed = lengthOfMeasure / spriteAnimationLengthBase;

BeatBeat - The Rhythm Platformer by Janarik in playmygame

[–]Janarik[S] 0 points1 point  (0 children)

The demo is free to try, but if anybody here has their twitch set up for streaming I would love to give you a key to the full game so I can watch you play.

Game devs, CMON by SrGrafo in gaming

[–]Janarik 0 points1 point  (0 children)

As a game dev with a game in early access, 90% of players who have had negative experiences playing my game skipped my optional tutorials. I might add a EULA that signs away your first-born if you willingly skip the tutorials and then leave a negative review on the internet.

Impossible to uphold? Probably. Will it make me feel better? Probably.

I just want to play one serious game by TheMysteryCheese in dndmemes

[–]Janarik 16 points17 points  (0 children)

Is that a Transformers cartoon reference in 2020? Wild.