River City Ransom Zero - RCRz Kunio-kun

In Progress River City Ransom Zero - RCRz Kunio-kun V1.0

No permission to download
The project is currently under development.
Are you using a global palette in the year 2023 !!!! :oops:

V7HM6wB.gif
🤣
 
kinda. Nes have a limited palette, I'm using that with more added colors. So when I rip stages, I just put lot of elements in the same file and then I start building like a puzzle (for example I have one file with lot of ripped clouds, one with buildings etc). Some stages are originally from game boy and by using other stage palette, I'm sure I have consistency in colors when I add to those originally grey stages.
 
@Die_In_Fire

Whatever your reason, you shouldn't do it. The engine uses independent palettes anyway, even if you don't. So why make it harder on yourself? If you don't want more color... don't use more color. No matter how much or how little color you want, independent palettes make your life oh so much easier you'll slap yourself for ever using a global palette at all.

DC
 
Yeah, global palette won't help you on this.
If you wanna make a global palette as reference of all colors a NES game could have, ok. But applying it to everything won't help much.

The only case I can see some advantage is: stages, if you wanna use the "palette" command.
 
The only case I can see some advantage is: stages, if you wanna use the "palette" command.
I wonder how I can use the palette command in levels since I don't use Photoshop. Does it allow you to convert to indexed images for changing colors independently or are you required to use Photoshop for creating .act files as making palettes for the stage?

palette {path} {a1} {a2} {a3} {a4} {a5} {a6}

  • This command loads new palette to be used by script or by 'setpalette' command (see below). However it only works if panels, frontpanels, bglayers and fglayers use same palette as background
  • {path} is the path to loaded palette in .act format. For instance:
data/bgs/staage1/pal001.act}.

  • {a1}, {a2}, {a3}, {a4}, {a5} and {a6} are flags that determines usage of respective transparency. a1 means alpha 1 transparency, a2 means alpha 2 and so on.
  • This transparency feature costs 384kb memory when palette is loaded so use with care.
  • This command can be declared more than once if more palettes are required.

@Die_In_Fire Nice work. The Kunio zombie portrait looks like it jumps out of the black screen showing the cut-out below in the middle. But it looks like it's even when it jumps in the black border in the near end.
 
I wonder how I can use the palette command in levels since I don't use Photoshop.
You can point it to images too. This is how I use:

# Palette filepath alpha1 alpha2 alpha3 alpha4 alpha5 alpha6
palette data/bgs/greece/greececorridor.act 0 0 0 0 0 0
palette data/bgs/greece/greececorridore.act 0 0 0 0 0 0
palette data/bgs/greece/greececorridorf.act 0 0 0 0 0 0
palette data/bgs/greece/greececorridori.act 0 0 0 0 0 0
palette data/bgs/greece/greececorridorp.act 0 0 0 0 0 0
palette data/bgs/greece/greececorridors.act 0 0 0 0 0 0

Then, at the point I want to change the palette:

setpalette 2
at 480
 
I get what are you saying guys. For 16-32 bit style color games I agree.
But for me is much more easy when I rip a stage from game boy to just put that stage on an image with full colors and paint the stage from there instead of having to add lot of new colors to a file that only have a few grey tone 8 colors. Let alone having to do that for each single stage.
 
@Die_In_Fire Nice work. The Kunio zombie portrait looks like it jumps out of the black screen showing the cut-out below in the middle. But it looks like it's even when it jumps in the black border in the near end.
Thanks!
And yeah, can’t get the parameters right to make it jump from the “on-stage”area.
 
Nice. So I'm not required to use .act files at all, right? :) My guess is that each palette or image has the same color table, but they all allow colors/palettes to be changed based on the particular color table. What I mean is that, for example, let's say that color box 2 out of 5 colors has blue color in one image as a palette (color box 1 is already transparent). Then, the second palette as a red color in the second box which you can change it anytime.

Code:
palette data/bgs/colores/color1.png 0 0 0 0 0 0 #blue
palette data/bgs/colores/color2.png 0 0 0 0 0 0 #red
palette data/bgs/colores/color3.png 0 0 0 0 0 0 #yellow
palette data/bgs/colores/color4.png 0 0 0 0 0 0 #black
palette data/bgs/colores/color5.png 0 0 0 0 0 0 #white
palette data/bgs/colores/color6.png 0 0 0 0 0 0 #green

Thanks!
And yeah, can’t get the parameters right to make it jump from the “on-stage”area.
Are you using jumpframe with a single frame like the zombie from bWWd's Battletoads mod? There're so many ways you can do it whether it's with or without scripts but what I can suggest you is to use a very simple animation script involving velocity. It does the job right but in a fun way. Not only that, but you can also use subject to gravity for it to stay outside of the ground. You use either subject_to_gravity 0 or antigravity 100. Plus, time your delay value for the frame to move.

Example:
Code:
name    zoom
type    none
health  1
subject_to_gravity 0
remap     data/chars/misc/zoom.gif  data/chars/misc/zoom2.gif
remap     data/chars/misc/zoom.gif  data/chars/misc/zoom3.gif
remap     data/chars/misc/zoom.gif  data/chars/misc/zoom4.gif
remap     data/chars/misc/zoom.gif  data/chars/misc/zoom5.gif
remap     data/chars/misc/zoom.gif  data/chars/misc/zoom6.gif

animationscript data/scripts/script.c

anim idle
    loop    0
    delay    150
    offset    60 -10
        #jumpframe  0  5
        #move    10
    sound    data/sounds/zoom.wav 
    @cmd velo001 0 0 1 #move up
    frame    data/chars/misc/zoom.gif
    sound    data/sounds/zoom.wav 
    @cmd velo001 0 0 0 # stop
    frame    data/chars/misc/zoom.gif
    sound    data/sounds/zoom.wav 
    @cmd velo001 0 0 -1 # move back down
    frame    data/chars/misc/zoom.gif

Code:
void velo001(float fX, float fZ, float fY){
   
    //velo001
    //Damon Vaughn Caskey
    //05/06/2007
    //
    //Replicates movement effect.
    //
    //fX: X axis speed.
    //fZ: Z axis speed.
    //fY: Y axis speed.
  
    void vSelf = getlocalvar("self"); //Get calling entity.
  
    if (getentityproperty(vSelf, "direction")==0){ //Is entity facing right?                
   
         fX = -fX; ////Reverse X direction to match facing.
       
    }       
  
    changeentityproperty(vSelf, "velocity", fX, fZ, fY); //Apply movement.

}

There's something I forgot. Create a black border screen, especially for the bottom, and set it with either frontpanel or fglayer. I notice you are using the default screen resolution, but you can make a custom screen resolution by numbering its screen size for your mod in video.txt.

video.txt:
Code:
video 256x224

If you wanna leave it that way, it's up to you.
 
Last edited:
Are you using jumpframe with a single frame like the zombie from bWWd's Battletoads mod? There're so many ways you can do it whether it's with or without scripts but what I can suggest you is to use a very simple animation script involving velocity. It does the job right but in a fun way. Not only that, but you can also use subject to gravity for it to stay outside of the ground. You use either subject_to_gravity 0 or antigravity 100. Plus, time your delay value for the frame to move.

There's something I forgot. Create a black border screen, especially for the bottom, and set it with either frontpanel or fglayer. I notice you are using the default screen resolution, but you can make a custom screen resolution by numbering its screen size for your mod in video.txt.

video.txt:
Code:
video 256x224

If you wanna leave it that way, it's up to you.
Thanks for the suggestions Maxman.

1. .act files are a thing from the past from when palettes were restricted before the 16 bit color mode was implemented, like 15 years ago.

2. Yeah bro actually is an easy solution, it’s just that I made it in a hurry (and yes I used bWWd’s as base, I usually use his work as base for my projects) because I wanted to do a quick one for Halloween, and al other available time I’ve been focusing on new stages and other stuff. At some point I’ll fix it but there’s too much to do lol.

3. About the black border, I have used in other projects but in this one I have some dialog and portraits popping sometimes and don’t want to get them covered. Also I don’t think I need a black border actually.
 
3. About the black border, I have used in other projects but in this one I have some dialog and portraits popping sometimes and don’t want to get them covered. Also I don’t think I need a black border actually.
How about you use that black border as a panel type with speedf 1 instead of fglayer exclusively for summoning the zombie zoom in the zombie levels, but have the dialogue-portrait as text type (if you use/have it) to terminate (with animation script) the black border so that you can allow the dialogue to show and no more covering? @O Ilusionista made a terminate script for eliminating a given model name which I use for eliminating any entity especially spawnbound entities. I'll show you the code when I get home. Search for "@cmd terminate" in the search box around here and what script it has.

EDIT:
Here you go.
C-like:
void terminate(char target_name)
{// kill any entity on the screen by the given name
//Douglas Baldan - 11.27.2016 - Really thanks for the fix, White Dragon
// Thanks Lagarto
    int i;
    for (i = 0; i < openborvariant("count_entities"); ++i)
    {
            void ent = getentity(i);
        if ( getentityproperty(ent, "exists") )
           {
                   if ( getentityproperty(ent,"model") == target_name)
            {
                killentity(ent);
                continue;
            }
        } else continue;
    }
    return;
}

EDIT 2:
You can add the script for it to eliminate a given model name here.

Example:
Code:
anim fall
    offset 140 188
    delay 100
    dropframe 1
    landframe 3
    @cmd terminate "burnknuc"
    @cmd terminate "powdunk"
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/406_0.png
    delay 27
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/406_1.png
    delay 1000
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/406_2.png
    move -3
    delay 8
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/406_4.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/406_4.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/406_4.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/406_5.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/406_5.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/406_5.png
    delay 12
    move 0
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/406_3.png

anim freespecial2 #BURNING KNUCKLE
    offset 140 188
    delay 6
    load burnknuc
    load bkdust
    custentity bkdust
    spawnframe 1 0 1 0 0
    loop 1 2 4
    jumpframe 1 2 4 0 # 3 0.5 1.2 0
    landframe 4 #5
    sound data/sounds/heroes/terry/06_terry_00011.wav
    bbox 118 108 51 79
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/162_3.png
    bbox 122 103 44 64
    @cmd spawnBind2 "burnknuc" 0 1 1 0 0 1
    attack 161 104 51 31 11 1 0 0 0 0
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/162_4.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/162_6.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/162_6.png
    #frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/162_5.png
    attack 0
    delay 6
    @cmd terminate "burnknuc"
    bbox 130 123 44 64
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/162_2.png
    @cmd terminate "burnknuc"
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/162_2.png


anim freespecial4 #POWER DUNK
    offset 140 188
    delay 13
    bbox 125 109 42 79
    load powdunk
    jumpframe 1 3 1.7 0
    landframe 7
    sound data/sounds/heroes/terry/06_terry_00012.wav
    attack 138 114 43 50 9 1 0 0 0 0
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/170_2.png
    delay 1
    attack 0
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/170_2.png
    bbox 125 86 43 79
    delay 13
    attack 135 90 43 50 9 1 0 0 0 0
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/170_3.png
    attack 0
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/170_4.png
    bbox 125 94 43 79
    @cmd spawnBind "powdunk" 0 1 1 0 0
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/170_5.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/170_6.png
    bbox 135 101 43 58
    attack 166 120 43 50 9 1 0 0 0 0
    delay 1000
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/170_7.png
    delay 2
    attack 0
    bbox 130 123 44 64
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/162_2.png

Note: You don't have to add load under character animations though. That's up to you.

Try timing both the delay and speed/velocity values for each frame to move. You can use decimals in velo001 just like you're using jumpframe.

anim idle
loop 0
delay 40
offset 60 -10
sound data/sounds/zoom.wav
@cmd velo001 0 0 0.73 #move up
frame data/chars/misc/zoom.gif
sound data/sounds/zoom.wav
@cmd velo001 0 0 0 # stop
frame data/chars/misc/zoom.gif
sound data/sounds/zoom.wav
@cmd velo001 0 0 -0.73 # move back down
frame data/chars/misc/zoom.gif
Delay is used for one frame to play from a given value until it goes to the next frame or ends its animation. It's like you're using move, movez, or movea on one frame, and having it use 0 after that in the next frame or so. The higher the delay value activates, the slower the frame runs for the next. However, the smaller the velocity speed goes, the slower its speed goes. (A smaller delay value makes a frame run fast/ A higher velocity value runs faster like jumpframe.)
 
Last edited:
what should be a good spawn/respawn animation? Just idle?

Well, the simplest animation is just using IDLE frames. But you could make something different such as character rushing in while attacking, or jumpkicks in from offscreen or from top of screen. Or just jumps in if you don't want to attack something while spawing/respawning.
 
@O Ilusionista made a terminate script for eliminating a given model name which I use for eliminating any entity especially spawnbound entities.
Just keep in mind that script is arbitrary: It will look for all models that have that name and finish ALL of them at once, not just one.

So, if you have two entities called "burnknuc" but you wanted to terminate just one of them, the script won't work - it will remove them all, as it looks for all models with that name, not just one, and ignores any alias you have given to them.

When I created this script, the idea was to eliminate entities that had somehow gotten stuck somewhere. You can use it for this, just keep in mind that it works by brute force and will affect all entities present in the game.

I have a series of scripts that manipulate entities, for different purposes and that vary in the degree of arbitrary: some check by name, animation, remaining life, etc. Others don't.

For example, this is a variation of the same script, but it will only work with entities that have the same "alias" that you provide:

C-like:
void terminateAlias(char target_name)
{// kill any entity on the screen by the given name
//Douglas Baldan - 2021.06.17 - Really thanks for the fix, White Dragon
// Thanks Lagarto
  int i;
  for (i = 0; i < openborvariant("count_entities"); ++i)
  {
        void ent = getentity(i);
    if ( getentityproperty(ent, "exists") )
      {
            if ( getentityproperty(ent,"name") == target_name)
      {
        killentity(ent);
        continue;
      }
    } else continue;
  }
  return;
}

Therefore, if you have two entities named "joe" but one of them you gave the alias "max", the script will terminate only the one named "max" if you tell it to do it:

@cmd terminateAlias "Max"

And another thing to be aware of: scripts are case sensitive.
If you ask the script to end an entity called "Max", it will not work if its alias is "max", "MAX", etc.

Edit: If you have an entity with spawnbind, unless you configured the values wrong, it will not get stuck and will die if the conditions for this are met.
 
Thanks for all the suggestions.
I wanted to have an update demo ready for Halloween with that zombie mode, but life got in the way.
You know what? You don't have to use the terminate script, but try to use setlayer to an entity as if it were at Z.

setlayer {int}

  • This entity will be displayed as if it were at z position {int}, regardless of it's actual position.

Let's say you use setlayer 400 for that zombie, 800 for the black border, and 2000-3000 (or over like 8000, 9999, etc.) for the dialogue. Just play around with the value if you place any entity in the level. setlayer does its covering or uncovering. If you set it to a negative for like -1 or below, it will be behind existing entities and/or fglayers.

(Sorry I forgot about setlayer though.)
 
Last edited:
Yep, they are cute. Would it be easier to just touch map marker to access the location? unless you're going to add marker name feature. This feature will show marker's name when player is close to the marker and hide the name when player moves away from the marker.
 
They are looking hella cute on that map 😂

I like them! ^^
Perhaps the hand movement in these small version is a bit too wide.
Should have more subtle move of hands I think.
And not moving too much from idle to walk anim hand position.

Just my suggestion as a "visual" person ^^ lol
 
Yep, they are cute. Would it be easier to just touch map marker to access the location? unless you're going to add marker name feature. This feature will show marker's name when player is close to the marker and hide the name when player moves away from the marker.
I prefer to smash a button to access the stage actually, but I live the idea on showing the stage info with player close :) how can I apply that? I remember some of Pierwolf games using that feature.

@NED thanks, I’ll make a little change there :)

EDIT: @Bloodbane I got the script working. Now i need to edit the image and the names, so names of stages will display when you approach the mark on the map.
 
Last edited:
  • Like
Reactions: NED
Back
Top Bottom