Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

rahisaurus

148
Posts
7
Topics
151
Followers
5
Following
A member registered Jun 27, 2017 · View creator page →

Creator of

Recent community posts

(2 edits)

Sorry to hear that. I'm currently just using SFML's controller detection functionality but I may have to write my own using xinput if it gets too annoying.

Have you tried running RahiTuber as administrator? That sometimes helps. (the answer is yes for anyone reading, I caught her on stream).

I think the mouse movement being jumpy is a result of the game grabbing your mouse and forcing it to move to the center of the screen (or some other similar thing, games all do different stuff with the mouse and it's hard to account for).

RahiTuber directly translates your mouse's position on the screen into a position co-ordinate for the layer, so if the layer jitters, that means the mouse jitters. I'll try to add something to smooth any sudden jumps.

https://rahisaurus.itch.io/rahituber/devlog/839896/update-2024-11-25-v1152

Fixed!

This is a weird one, especially since there's no code in RahiTuber that connects to any audio output device. It's possible there's some confusion behind the scenes where something considers the headphones and the microphone to be the same device, but that really shouldn't be the case... I'll see if I can find anything, but I'm not sure I will because I don't have a headset that produces this problem.

Thanks for letting me know, I'll keep you posted.

Hi, I'm very sorry to hear that. Did you get a log file from the crash, and hopefully a .dmp file appeared too? 

Had you been using an older version that worked?

Are you using windows 11?

You can send those to my discord @rahisaurus or to rahisaurus@gmail.com. 

Hi, sorry to hear that. You can contact me via discord @rahisaurus or at rahisaurus@gmail.com to share more details. 

If your friend is using the Linux version, spout2 support isn't there yet (and won't be until spout2 offer it themselves) - but on windows, see if the different architecture builds (RahiTuber.exe and RahiTuber_64.exe) have different results? Maybe it has to match whatever architecture OBS is using.

I've been thinking of removing that limitation actually, so it's good to know somebody wants it. I originally did it to avoid complexity in my program but that's a lost cause at this point 😅. The snag is I now have to retain the existing functionality by default so I don't break anyone's existing setups, so it'll have to be an option somewhere.

Thanks very much for recording the video and for the suggestions, I'll see what i can do!

Hi, thanks for pointing this out, I'll look into it!

https://rahisaurus.itch.io/rahituber/devlog/831991/update-2024-11-11-v115-more-c...

Elliptical mouse tracking is done!

https://rahisaurus.itch.io/rahituber/devlog/831991/update-2024-11-11-v115-more-c...

I've added both the things you suggested, thanks for those!

Wow, nice work! That's an incredible account of detail you got in there. 

I'll try and add some ways to make that easier in future!

(3 edits)

You could have two "permanent" states: one activated by the thumbstick, to show rightThumbAnalogNeutral. (you'd currently have to have that duplicated for each axis direction but I will hopefully add an "any axis" trigger soon). The second permanent one would be activated by the buttons to show rightThumbBtns.
The thing with "permanent" states is that they alter the default visibility, so they would go behind any "while held" states and appear once they deactivate.

Either that, or you could have all the current states being "permanent" instead of "while held", which would mean the thumb just stays in the last position it was at, but you wouldn't have either idle pose then.


It's definitely not ideal setup, but that's currently how it could be possible. I like your idea of the "after" trigger, I'll see if I can add something like that soon!

It should be possible. If you set up your layers so that only the neutral position (the finger resting over the buttons) is visible before any states are active, then it should revert to that point when those states deactivate again.

To help you understand the expected behaviour:
Internally, the default visibility of every layer is saved and updated whenever there are no states active. The States are added to a stack when they're activated, so it starts from the defaults, then adds each State effect one by one in order of activation. When the State is deactivated, it's removed from the stack, so it should stay at default when no states are active.

If that's not happening for you, let me know because that would be a bug.

nice idea, I'll look at that!

Excellent, I'm glad to hear it! Thanks!

That should be a simple addition, thanks for the suggestion!

It's likely a permissions thing. Running RahiTuber as administrator might help? I'll try to reproduce these permissions errors on my end and reduce crashes.

(1 edit)

Hi, do you have any non-english letters in your installation path? There's a known bug with that which can cause unexpected issues like this.

If you put RahiTuber in the location C:/RahiTuber and place your image sprite files in the same folder, that particular problem should be avoided. 

If the issue still happens let me know!

Hi, sorry to hear that.

It may be a bug introduced by the changes to the states menu since you last updated. Deleting and re-creating the state might help, if you want to try that.

If that doesn't work, please can you post a screenshot of the state you have set up to do the switching, and a screenshot of the state's entry (written as a "hotkey") from your layer set xml file?

Cheers!

(2 edits)

Tutorial 2: Animations and Layers

If you want to add a bit more motion to your avatar, you can use RahiTuber’s Sprite Sheet feature. We’ll start from the end of Tutorial 1.

Part 1: Sprite sheets

In the main (only) layer, click the Idle sprite and browse to select “Demo_Sprites/Advanced_sprites/body_idle.png”. This is a sprite sheet - an animation of frames laid out in a grid, from first to last. This one only has 2 frames.

Before we do anything else, it will look strange - the idle sprite now appears twice on the screen (all frames appearing at once). To set up the sprite sheet properly, we need to open the “Sprite Sheet Setup” dialog by clicking the little film-clip icon next to the sprite.

We’ll see the following popup. This is how we tell RahiTuber to read the animation from the sheet. Our “body_idle” sheet has two columns and one row, so input the correct numbers in the first two boxes.

When this is done, the “Frame Count” will automatically adjust itself to match the maximum available from a grid of that size. If your sprite sheet doesn’t fill the whole grid, you’ll have to manually adjust this number. I’ll set the FPS to 7.

We’ll leave Frame Size as (-1,-1). This will be automatically calculated from the image dimensions and the number columns/rows. If you want to specify it manually, you can do that instead. When we click Save, the sprite will go back to its expected position and will be animated.

Do the same for the talk and blink sprites, replacing them with “body_talk.png” and “body_blink.png” respectively. For body_talk, the animation sheet has 3 columns and 2 rows.

Now we’re roughly where we started, except that the avatar is animated, and appears to be missing some parts. We’ll add those with new layers!

Part 2: Layers

Let’s rename the existing layer to “Body”. Then we’ll add two more layers: One called “Chest” and another called “Arms”. Chest is easiest, so we’ll start there. For the idle sprite, add “Advanced_sprites/chest.png” and set the animation settings to show 2 columns, 1 row, and 7 FPS. 

Now - the chest will not be talking or blinking, so we can turn off the “Swap when Talking” and the “Blinking” options.

To make sure the chest follows the body movement, we will set the “Motion Inherit” option to follow the Body layer.

And now we come to the reason the Chest layer is separate - physics! Don’t give me that look. We all know why VTubers got popular 😛
Expanding the Motion Inherit options gives us some numbers to play with. Feel free to tweak these and see what they do. I recommend the following setup in this situation:

For the Arms layer, we’ll turn off “Swap when Talking” as before, but this time we’ll keep the “Blinking” option and repurpose it. Set the “Talk Threshold” to maximum since we don’t need it.

The idle sprite (“arms_idle.png”) is also a 2 x 1 grid at 7 FPS, so we need to set up those animation options again. Then we’ll add our Blink sprite “arms_gaming.png”, which is 3 x 2.

We’ll set up the Blinking options so that the arms will start “gaming” at random intervals - A Duration of 5 seconds, a Delay of 10 seconds, and a Variation of 5 seconds. The Delay will be randomly changed up to the limit of Variation (i.e. Delay can be between 5 and 15 seconds here).

You may notice by now that the avatar doesn’t blink while you’re talking. On the Body Layer, let’s enable the “Blink While Talking” option. A new sprite will pop up:

We can load in “body_talkblink.png” and set it up as a 3 x 2, 7 FPS sprite sheet. The difference here is that the sprites have the eyes closed and the mouth open.

We now have an animated avatar with physics and gaming hands!

I've added a basic one to the "Tutorials" topic. I'm working on the others now!

(1 edit)

Tutorial 1: Basic setup

Part 1: The sprites

The most simple avatar can be created using only a single layer and two images.

Start by typing a name for your avatar in the “Layer Set” box. A Layer Set is the format in which your avatar is saved. Press the Save button to create your file. When the file exists, the “Save” button will change to say “Overwrite”, so you’ll know if you’ve already used that name before.

Now you can create a layer. You can use the pencil icon on its header bar to rename it however you like.

Now add an image for your idle sprite. This will be visible while you’re not talking. I’ll use the files in the Demo_Sprites package available as an optional download from itch.io. The idle sprite is called “static_idle.png”. First, click the “?” box, then select the file you want.

Next, add an image for your talking sprite. This one’s called “static_talk.png”.

While this is already a functional avatar, we can also add a “blink” sprite to give it a bit more life. That’s “static_blink.png”.

There are other options automatically enabled to give your character some motion. These are the “Bouncing” and “Breathing” options. 

While idle, the Breathing option will move and scale your avatar to give the impression of breathing. You can click that header to show the options, and you can use the checkbox in the header to disable it.

While talking, the Bouncing option will move your sprites up and down. This can either be driven by the loudness of your voice, or a constant regular bouncing motion.

Part 2: The audio

At the bottom of RahiTuber’s menu you will find the “Audio Input” section. Here you can select the microphone you want to use as input.

If you click the Audio Input title, some more options will become visible. You can use these to tweak the overall behaviour in response to your voice (below, you can see my preferred settings), but it’s best to leave these alone until you get a feel for how the avatar moves on the default settings.

On your avatar’s layer, check beneath the sprites. 

You will see a “Talk Threshold” slider. When you speak into the microphone, the bar will light up to show your current speaking volume, and turn green when that volume passes the threshold set by the yellow bar. Speak normally into your microphone, and adjust the slider until the bar turns green for each syllable you speak, but goes red when you’re not talking.

Press Esc or right-click to close the menu, and talk into your microphone - the avatar will now bounce and open its mouth while you’re talking!

Don't forget to overwrite your layer set once you're happy with it!

Sorry, not yet. I'll try to make one soon!

This is true, as a strange quirk of SFML, the dpad is recorded as an axis.

This means that if you disable axis inputs, you won't be able to record it as a hotkey.

If you haven't disabled axis inputs, they should all be working?

Added that toggle option in 11.421!

Thanks! Yeah, I can definitely do custom shaders, I've done those in SFML before. It's just a case of when I get time to implement it. Clipping layers (especially inside groups etc) will need a slight rewrite of the way layers are currently rendered.

I think I see what you mean about the mouse tracking. I'll add an elliptical option when I can!

That's a good point, I'll add that. 

In the mean time, you could save a copy of your layer set with the mouse tracking and one without, that way you can kinda switch between them

I like it! I was thinking roughly along the same lines. Just gotta figure out how to implement the actual clipping :D

(2 edits)

Ooh, agreed. That's an oversight, i think i put the mouse movement too early in my code so the motion inheritance overwrites it. 

I can probably fix that tonight!

-Edit - done! (ver 11.41)

Hi, Spout2 support is now available in 11.4!

Hi, mouse tracking is available in 11:4!

Hi, Spout2 support is now available in 11.4!

Hi, thanks for the suggestion! I'm currently limited by the keys that SFML supports (and i don't have f13+ keys to test with), so to add that support I'd have to add in another library and just hope it works 😬

Noted the second vote for spout,  though. Cheers!

It would be for sure. There's currently an "erase" blend mode but it might not do everything you want it to do. I'll see if I can make that more useful!

Yeah that should hopefully be easy enough!

Oh I see! Well technically you can already do keyboard by setting up a state for each key... I'm not sure what would be the best way to add an actual GUI for that. Maybe a special type of layer?

Tracking mouse movement shouldn't be too bad I think.

Could you explain to me what kbm tracking is? Google is bringing up nothing useful

I'll see what I can do!

Thanks for the idea, I'll look into that!