Log In  

Cart #kagiventure-0 | 2023-03-29 | Code ▽ | Embed ▽ | No License

Thanks to some great and kind advices, I could fix the problem.
And then I added many things prepared. I'm going to work more, so this is for-now form.

← and → ... Move left or right
↑........... Enter the door (Move to next stage)
↓........... Activate switch
〇........... Jump(on the ground), Air dash(in the air)
×........... Nothing for now.

*The title "Kagiventure" comes from "鍵(Kagi, key in Japanese)" and "adventure".

Cart #kagitobira-0 | 2023-03-28 | Code ▽ | Embed ▽ | No License

Now I'm making a new platformer which uses some gimmicks.
And then I got a problem.

I divided each levels with their level's start, end, top and bottom.
They mean level's left end, right end, up end and down end.
And the gimmicks such as key and key door should work only in the level where you are(= curst, CURrent STage).
But it seems the gimmicks work in all levels. If you get a key in level 1, then all door will open...
I want to fix it, but can't get how. If anyone knows the solution, please tell me how.
Thanks in advance.

EDIT: The problem was solved. Thank you so much for teaching!

*I learned the code about gimmicks from "mea's castle", a pico-8 metroidvania.

P#127700 2023-03-28 08:12 ( Edited 2023-03-29 15:35)

ok I might be wrong, but I'm going to have a guess at this one. in this section:

function stage_update()
 local map_start=split("0,0,257,897")
 local    map_end=split("256,256,384,1024")
 local    map_top=split("0,129,0,0")
 local    map_bottom=split("128,256,256,384")

 for x=map_start[curst],map_end[curst] do
  for y=map_top[curst],map_bottom[curst] do
    v=mget(x,y)
    if v==65 then
     if key then
       mset(x,y,66)
     end

It looks like you're looping through each pixel in the for loops. But with v=mget(x,y) you're looking at the tile on the map (which is the same as 8x8 pixels).
so where you're thinking you're going over the first say 200 pixels, you're actually checking the first 200 tiles which is way bigger than the stage, and you might be changing all the doors throughout the entire map.

I think the solution is to make the for loops smaller, maybe go from x=map_start[curst]/8 to map_end[curst]/8 (and the same for the y's).
Maybe you could put a counter in that loops and print the counter to screen later and see how many times it goes through the loops to check.

I hope that's helpful. If it's not I'll try testing it out on my end.

EDIT: sorry I only just realised I can download the game and run it on my own machine (what a great feature)
yeah if you change the loops in stage_update() to this:

 for x=map_start[curst]/8,map_end[curst]/8 do
  for y=map_top[curst]/8,map_bottom[curst]/8 do

then that fixes everything.

P#127704 2023-03-28 09:59 ( Edited 2023-03-28 10:18)

@Godmil
Thank you so much!!!!!! You saved my life!!!!

P#127710 2023-03-28 13:23

[Please log in to post a comment]

Follow Lexaloffle:          
Generated 2024-04-19 18:06:04 | 0.021s | Q:20