Skip to main content

On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

TheUnproPro

207
Posts
12
Topics
517
Followers
16
Following
A member registered Oct 22, 2017 · View creator page →

Creator of

Recent community posts

Sure~ add me on Discord. hawkwhisper
I'm the chonky bird
Although I do plan to make an entirely new one (more optimized, etc) for MZ, I just don't know when.

I have no clue

Not only am I omega confused as to what the cosmic f* is happening, lol, but... somehow the letters arent aligning when I force a fixed pixel space O.o Ill get to the bottom of it because now I'm beyond confused, and my brain demands answers

See? TOLD you I wouldn't forget :) Def gonna do it rn so I dont forget again lol

Thats very strange, Ill figure this out, but I just looked at the font (forgot to check itch.io lmao), and it appears to be normal... I'll remember not to forget, unless I forget to remember not to forget

Alright~ Ill work on it either tonight or tomorrow to try and figure out why tf it doesnt want to work right lol

Can you send only your font image, Ill work with that one :)

Also, does your font have exactly 95 characters? if not Ill have to edit the script to support a custom amount

Patched <3

https://theunpropro.itch.io/rpg-maker-mz-bitmap-font-renderer/devlog/983639/rend...

Maybe~ Its been ages since I touched this, but I'll see if I can make an update real quick~

You're very welcome :)

Omg thats def hideous lol~ Not sure why but for some reason my script seems to hate anything that isn't a multiple of 8
Looks like Klingon


Like, the spritesheet, is its width also a perfect multiple of 18? If I have to Ill edit the script, but lolwut happened

No worries, I sometimes forget Itch exists too lol

I seriously need to work on the MZ version~ I keep neglecting it D: However, yes, there will be an MZ version :) And probably soon, hopefully, maybe

That's super weird that Numbers aren't showing O.o which bitmap font sprite sheet are you using? No idea what would cause only the numbers to malfunction lol

Oh wow I forgot all about that plugin, send the .js for it and I'll modify it real quick~

Yes

Sweet, looking forward to it :)

Also, worry not my friend; the whole "good at one thing and one thing only" is a myth, I'm also good at cooking! *provides burn af crusty fish
:)

Bruh your answers are on time compared to me, my answers are slower than a -- well lets not go there~
"

it just gets so close to nailing the look i want that im making sure im happy with it before moving with the rest of the stuff lol"
My guy, I'm genuinely happy you have this kind of mindset, it means you have legit potential to become a coder yourself, and a very good one, persistence on a problem is what drives me as well, I spend like 2 months on a dumb issue with Linux Kernel code and trying to write a custom driver for some hardware, not because I found it fun (at first I did), but because I didnt want to move on until I conquered that b* lol

I have in fact moved on without conquering it but Ill be back, lol
"

was wondering if messing with just some of the values could i just increase it a bit to get the blur i want while having it at 0.7?"
Yep, from here you can share the code with GPT or Gemini and they will help you better understand my packed spaghetti code lol

You dont need to apologize~ So basically, I forgot that I only included the frag / vert files so people can read how they work, but I actually packed the contents
in superRetroPlus.js~ replace the line on 272:

var compositeFragSource = **big a* code line here lol**
With this one:


const mixValue = 0.5;
var compositeFragSource = `varying vec2 vTextureCoord;
uniform sampler2D uSampler;
uniform float delta;
uniform float canvasWidth;
uniform float canvasHeight;
uniform float positionX;
uniform float positionY;
uniform float signal;
uniform float sync;
uniform float scanlines;
uniform bool enabled;
uniform bool interlacing;
uniform vec2 texsize;
uniform float checker_size;
float checker(vec2 uv, float repeats) {
float cx = floor(repeats * uv.x);
float cy = floor(repeats * uv.y); float result = mod(cx + cy, 2.0);
return sign(result);
} void main(void) {
vec4 color = texture2D(uSampler, vTextureCoord); if(sync != 0.0) {
for(float i=0.0;i<0.0005;i+=0.00006) {
for(float j=-0.0003;j<0.0003;j+=0.0003) {
vec4 colCopy = texture2D(uSampler, vTextureCoord);
color = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.t+sin(gl_FragCoord.t / sync)));
}
}
} if(interlacing == true) {
vec4 lineDown = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.t+(0.78539816345 / (canvasHeight * 2.0))));
vec4 lineUp = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.t-(0.78539816345 / (canvasHeight * 2.0))));
float checkFor = cos(gl_FragCoord.y+(delta*2.0));
if(checkFor >= (3.1415926538 / 4.0)) {
color = lineDown / 4.0;
} else {
color = lineUp / 4.0;
} color *= 4.0;
}
if(enabled == true) {
vec4 color2 = texture2D(uSampler, vTextureCoord); float result = (cos(gl_FragCoord.s*3.1415926538) + sin(gl_FragCoord.t*3.1415926539)) / 1.0;
color2.r /= (result+cos(delta) / 32.0);
color2.g /= result;
color2.b /= result; color.r += cos(delta/1.1+cos(delta))*(color2.r / 7.0);
color.g += cos(-delta+cos(delta))*(color2.g / 7.0);
color.b += cos(delta+cos(delta))*(color2.b / 7.0);
color.r+=cos(gl_FragCoord.x * 2.0) / 32.0;
color /= 1.33;
color.b /= 1.15;
for(float i=0.0;i<0.0005;i+=0.00006) {
for(float j=-0.0003;j<0.0003;j+=0.0003) {
color += (texture2D(uSampler, vec2(vTextureCoord.x+i/1.90, vTextureCoord.y+(j/3.1415926538)))) / 4.0 - (signal / 1000.0);
color -= (texture2D(uSampler, vec2(vTextureCoord.x+(i/3.1415926538), vTextureCoord.y+(j/3.1415926538)))) / 4.0 - (signal / 1000.0);
color.g *= 1.001;
color += (texture2D(uSampler, vec2(vTextureCoord.x-i/1.90, vTextureCoord.y+(j/3.1415926538)))) / 4.0 - (signal / 1000.0);
color -= (texture2D(uSampler, vec2(vTextureCoord.x-(i/3.1415926538), vTextureCoord.y+(j/3.1415926538)))) / 4.0 - (signal / 1000.0);
color.g /= 1.001;
color += (texture2D(uSampler, vec2(vTextureCoord.x+i/1.90, vTextureCoord.y-(j/3.1415926538)))) / 4.0 - (signal / 1000.0);
color -= (texture2D(uSampler, vec2(vTextureCoord.x+(i/2.0), vTextureCoord.y-(j/3.1415926538)))) / 4.0 - (signal / 1000.0);
color.b *= 1.001;
color += (texture2D(uSampler, vec2(vTextureCoord.x-i/1.80, vTextureCoord.y-(j/3.1415926538)))) / 5.0;
color -= (texture2D(uSampler, vec2(vTextureCoord.x-(i/2.0), vTextureCoord.y-(j/3.1415926538)))) / 5.0;
color.b /= 1.001;
color.r *= 1.0015;
color += (texture2D(uSampler, vec2(vTextureCoord.x-i/1.91, vTextureCoord.y-(j/3.1415926538)))) / 8.0;
color -= (texture2D(uSampler, vec2(vTextureCoord.x-(i/2.0), vTextureCoord.y-(j/3.1415926538)))) / 8.0; color.r /= 1.001;
}
} if(signal >= 1.0) {
for(float i=0.0;i<0.0005;i+=0.00006) {
for(float j=-0.0003;j<0.0003;j+=0.0003) {
color += (texture2D(uSampler, vec2((sin(delta*signal))+vTextureCoord.x+i/1.90, vTextureCoord.y+(j/3.1415926538)))) / 77.0 - signal;
color -= (texture2D(uSampler, vec2((cos(delta*signal))+vTextureCoord.x+(i/3.1415926538), vTextureCoord.y+(j/3.1415926538)))) / 77.0 - signal;
color.g *= 1.001;
color += (texture2D(uSampler, vec2((cos(delta*signal))+vTextureCoord.x-i/1.90, vTextureCoord.y+(j/3.1415926538)))) / 77.0 - signal;
color -= (texture2D(uSampler, vec2((sin(delta*signal))+vTextureCoord.x-(i/3.1415926538), vTextureCoord.y+(j/3.1415926538)))) / 77.0 - signal;
color.g /= 1.001;
color += (texture2D(uSampler, vec2((sin(delta*signal))+vTextureCoord.x+i/1.90, vTextureCoord.y-(j/3.1415926538)))) / 77.0 - signal;
color -= (texture2D(uSampler, vec2((cos(delta*signal))+vTextureCoord.x+(i/2.0), vTextureCoord.y-(j/3.1415926538)))) / 77.0 - signal;
color.b *= 1.001;
color += (texture2D(uSampler, vec2((cos(delta*signal))+vTextureCoord.x-i/1.80, vTextureCoord.y-(j/3.1415926538)))) / 77.0 - signal;
color -= (texture2D(uSampler, vec2((sin(delta*signal))+vTextureCoord.x-(i/2.0), vTextureCoord.y-(j/3.1415926538)))) / 77.0 - signal;
color.b /= 1.001; color += (texture2D(uSampler, vec2((sin(delta*signal))-vTextureCoord.x+i/1.90, vTextureCoord.y+(j/3.1415926538)))) / 77.0 - signal;
color -= (texture2D(uSampler, vec2((cos(delta*signal))-vTextureCoord.x+(i/3.1415926538), vTextureCoord.y+(j/3.1415926538)))) / 77.0 - signal;
color.g *= 1.001;
color += (texture2D(uSampler, vec2((cos(delta*signal))-vTextureCoord.x-i/1.90, vTextureCoord.y+(j/3.1415926538)))) / 77.0 - signal;
color -= (texture2D(uSampler, vec2((sin(delta*signal))-vTextureCoord.x-(i/3.1415926538), vTextureCoord.y+(j/3.1415926538)))) / 77.0 - signal;
color.g /= 1.001;
color += (texture2D(uSampler, vec2((sin(delta*signal))-vTextureCoord.x+i/1.90, vTextureCoord.y-(j/3.1415926538)))) / 77.0 - signal;
color -= (texture2D(uSampler, vec2((cos(delta*signal))-vTextureCoord.x+(i/2.0), vTextureCoord.y-(j/3.1415926538)))) / 77.0 - signal;
color.b *= 1.001;
color += (texture2D(uSampler, vec2((cos(delta*signal))-vTextureCoord.x-i/1.80, vTextureCoord.y-(j/3.1415926538)))) / 77.0 - signal;
color -= (texture2D(uSampler, vec2((sin(delta*signal))-vTextureCoord.x-(i/2.0), vTextureCoord.y-(j/3.1415926538)))) / 77.0 - signal;
color.b /= 1.001; }
}
}
}
if(scanlines > 0.0) {
color -= sin(vTextureCoord.t * (canvasHeight * 1.5)) / (100.0 - scanlines);
} gl_FragColor = mix(color, texture2D(uSampler, vTextureCoord), ${mixValue});
}`;

Basically just delete the original compositeFragSource var, and paste all of the code block there in~
Now just edit mixValue (If this doesnt work I'll get more hands on and we can use discord)

Ok so~ open "composite.frag"


On line 27:

void main(void) {

    vec4 color = texture2D(uSampler, vTextureCoord);

Add this under vec4 color:

vec4 basexx = texture2D(uSampler, vTextureCoord);


Next,  scroll down to the bottom where you see:

    gl_FragColor = color;

   
}
Replace the gl_FragColor = color with the following:

gl_FragColor = mix(color, basexx, 0.5);

From here, just edit the "0.5" value until you get a result you like <3

Man my old code be funky lol~ Brings back memories... But yeah, Ill download the JS file today and go over it again, if it doesnt exist I'll add a patch and update the page

Sorry, I've been a hermit from the internet for a while. Idr if I included a way to change the intensity, but if you have to, open up the main source code and look for "uniforms", reply with what you find there and I'll guide you into making the edits manually

Most likely not~ its been a while but iirc RMMV used a different filter padding, so you'll probably end up with a black screen~

Make sure you extracted the plugin as instructed ~ And use the plugin command

If it doesnt work after doing both, let me know 

I haven't tested it in the most recent RPG Maker, haven't touched RM in a while but it should; as for if I worked it out, Kinda but... it's still horrifically jank, I don't understand why PIXI went that route without clear documentation at the time

Send a screenshot of the whole error~ or press F8 and copy the console log in a reply

BRO YOU SPEAK MY LANGUAGE~

Yeah xD This was pre-MZ

You could make it happen tho but~
Ty for reminding me this existed lol, I remember how fun it was making this

It is indeed quite impressive, as for MV/MZ while they are fantastic, every export no matter the device will export to a web format, on PC it uses NW.js (node webkit), like CrossCode does, this makes games easier to hack and even flat out edit, though to be 100% honest, no game is safe from that regardless of the engine lol. 

As for reverse engineering the shader, turns out now you need to link your own gl program it looks like, and store the frag/vert shaders in an object, I just need to figure out why/how a glProgram is now required and how to tie that to the renderer, gonna attempt to just bootleg it and use the main app's glProgram

I appreciate the offer though~
But yeah, the TL;DR version is WebGPU is significantly faster, also optimized asf for newer mobile devices (or even some older ones with updated web rendering, w/e browser you use), The down side is, GLSL code wont work out of the box with it, apparently? Idk man, some jank sh* going down rn on PIXI's side lol, like they're improving which is amazing, but they've also made custom shaders obscure asf, I'll try deconstructing a built in shader and see if I can't figure out クソ何で  makes them work~

Very lol, especially in the latest PIXI (non-rpg maker versions), which is 7 and 8, 8 seems to completely remove the methods for shaders entirely, and relies on WebGPU now, with GL as a backup, but there's next to no documentation on where the heck to put a frag / vert shader in the new system lol

yw! Thanks for being interested <3

You're welcome~ Sorry I couldn't be much help

It doesn't have any dependencies, but PIXI.JS has updated (the rendering engine) since this, and it seems to be breaking a lot of my plugins annoyingly~

Most likely not without some kind of direct editing to the code~ in particular the shader's padding might be an issue since if I recall correctly, the changes made by PIXI when they introduced an updated version for some reason caused the UV coords for a few of my plugins to jank out

Email me at TheUnproPro@gmail.com xD

The title names should be the name of the image file you want to add to the list of swappable title screen images :)
"

i've been trying to logic the code but i keep getting reminded that i have the most rudimentary coding experience  (think: hello world) ;;

"
^ Welcome to the world of coding =D It's always awesome to hear someone putting in the effort to learn, though it can be a real headache;

About toggling plugins mid-game, yeah atm that's not really an option, I mean it -kind of- can be, but it'd be a bit bootleg on how it needs to be done lol~ Anyway here's the commented version:

// Extending Scene_Title prototype to add custom properties
(() => {
  // Custom properties for the title scene
  Scene_Title.prototype.title_timer = 0; // Timer for tracking time
  Scene_Title.prototype.title_image_index = 0; // Index to track the current title image
  Scene_Title.prototype.title_images = [
    "title_1_name",
    "title_2_name",
    "etc",
  ].map(t => ImageManager.loadTitle1(t)); // Array of title images loaded using ImageManager
  // Save the original update function of Scene_Title
  const originalUpdate = Scene_Title.prototype.update;
  // Override the update function to add custom logic
  Scene_Title.prototype.update = function() {
    // Call the original update function
    originalUpdate.call(this, arguments);
    // Increment the title timer
    this.title_timer++;
    // Check if 2.5 seconds (2500 milliseconds) have passed
    if (this.title_timer >= 2500) {
      // Increment the title image index
      this.title_image_index++;
    }
    // Check if the current title image is loaded
    if (this._backSprite1._imageLoaded != this.title_image_index) {
      // Update the loaded image index
      this._backSprite1._imageLoaded = this.title_image_index;
      
      // Set the bitmap of _backSprite1 to the current title image
      this._backSprite1.bitmap = this.title_images[this.title_image_index];
    }
    // Wrap around the title_image_index to prevent going beyond the array length
    this.title_image_index = this.title_image_index % this.title_images.length;
  };
})();
(2 edits)

Ah~ I can give you a rundown way to do it-
Make a "title_change.js" file, put it in plugins, give it the following content:

(()=>{
Scene_Title.prototype.title_timer = 0;
Scene_Title.prototype.title_image_index= 0;
Scene_Title.prototype.title_images = [
"title_1_name",
"title_1_name",
"etc",
].map(t=>ImageManager.loadTitle1(t)); const osu = Scene_Title.prototype.update;
Scene_Title.prototype.update = function() {
osu.call(this, arguments);
this.title_timer++;
if(this.title_timer>=2500) //2.5 seconds
this.title_image_index++; if(this._backSprite1._imageLoaded != this.title_image_index) {
this._backSprite1._imageLoaded = this.title_image_index;
this._backSprite1.bitmap = this.title_images[this.title_image_index];
}
this.title_image_index = this.title_image_index%this.title_images.length;
} })();


Put it on top of the other plugins;I don't know if this will work right off the bat, but~ play around with it, it should work :)

Sadly no~
I lost interest in this project ages ago since nobody really cared about it lol

idr if I tested that or not, but it should, unless PIXI did something different again with the autoDensity thing