I've had this problem forever, and have yet to figure out how to fix it.
Say I have two walkable areas. Both areas use continuous scaling. The area in the foreground goes from 100% to 90%, and the second goes from 90% to 20%. The problem is, when the character walks onto the second second area, she doesn't smoothly move from 90% to 90% scaling, but makes a big jump to a smaller size. I don't have the two regions interlocking, so that she would accidently walk onto part of the second region that is at 70%...I think this should work but it doesn't.
Any thoughts?
I think it can depend on the size (height) of the areas.
The reason:
If area 2 is not very much taller than area 1, since the difference between the min and max scaling factors are so far away, you'll expect the scaling will be in a MUCH faster speed than that of area 1, that the min and max doesn't differ much (unless area 1 is VERY thin).
This is happening when the height of the second area is both much taller and much shorter than the first region. I see what your saying, but in both areas where i do this, there is plenty of room for the character to make a gradual shift in size, not a herky jerky jump in size.
You may try displaying the scale factor on screen and see if there're something wrong with the scaling.
Here're some handy code:
Top of script:
int scale, area, overid;
string tmpstr;
Enters room (before fadein):
overid=CreateTextOverlay(0,0,200,0,15, "blah");
repeatedly_execute() (put in "always" if you want the overlay to be updated also while blocking):
area = GetWalkableAreaAt (player.x, player.y);
scale = GetScalingAt (player.x, player.y);
StrFormat(tmpstr,"Area %d, Scale %d", area, scale);
SetTextOverlay(overid, 0,0 , 200,0,15 tmpstr);
If it's V2.7, change it to:
Top of script:
Overlay* overid;
int scale, area;
Enters room (before fadein):
overid=overid.CreateTextual(0,0,200,0,15, "blah");
repeatedly_execute() (put in "always" if you want the overlay to be updated also while blocking):
area = GetWalkableAreaAt (player.x, player.y);
scale = GetScalingAt (player.x, player.y);
overid.SetText(200,0,15, "Area %d, Scale %d", area, scale);
Edit: Updated V2.7 code so it actually works.
Edit2:Updated V2.6* code also, note also if there's a GUI covering the overlay you can change the position of the overlay.