On 9 June 2011 03:19, James Paige <b...@hamsterrepublic.com> wrote:
> On Wed, Jun 08, 2011 at 01:15:54PM +1200, Ralph Versteegen wrote:
>> On 8 June 2011 13:06, James Paige <b...@hamsterrepublic.com> wrote:
>> > On Wed, Jun 08, 2011 at 12:53:56PM +1200, Ralph Versteegen wrote:
>> >> On 8 June 2011 12:48, Mike Caron <caron.m...@gmail.com> wrote:
>> >> > On 6/7/2011 20:46, James Paige wrote:
>> >> >>
>> >> >> On Wed, Jun 08, 2011 at 12:43:12PM +1200, Ralph Versteegen wrote:
>> >> >>>
>> >> >>> On 8 June 2011 11:52, Mike Caron<caron.m...@gmail.com>  wrote:
>> >> >>>>
>> >> >>>> On 6/7/2011 19:49, Ralph Versteegen wrote:
>> >> >>>>>
>> >> >>>>> On 8 June 2011 07:34, Mike Caron<caron.m...@gmail.com>    wrote:
>> >> >>>>>>
>> >> >>>>>> On 07/06/2011 10:44 AM, James Paige wrote:
>> >> >>>>>>>
>> >> >>>>>>> Well, solved in the sense that I can add six more rows and 10 more
>> >> >>>>>>> columns to my background layer and it will look okay, but I still
>> >> >>>>>>> really
>> >> >>>>>>> want to understand the math needed to make the parallax work with 
>> >> >>>>>>> the
>> >> >>>>>>> 1/3 size layer, since that is the same math that will be required
>> >> >>>>>>> when
>> >> >>>>>>> parallax scrolling is a built-in feature on different-sized map
>> >> >>>>>>> layers
>> >> >>>>>>> in the future.
>> >> >>>>>
>> >> >>>>> I meant solved in the sense that Mike (Willis) already gave the
>> >> >>>>> formula for that.
>> >> >>>>>
>> >> >>>>>> First, let us suppose a few things:
>> >> >>>>>>
>> >> >>>>>> MapWidth := 3000
>> >> >>>>>> LayerWidth := 1000
>> >> >>>>>> ScreenWidth := 320
>> >> >>>>>>
>> >> >>>>>> You want the layer to butt up against the left side of the map when
>> >> >>>>>> the
>> >> >>>>>> camera is at X = 0, and to butt up against the right side of the 
>> >> >>>>>> map
>> >> >>>>>> when
>> >> >>>>>> the camera is as X = (MapWidth - ScreenWidth).
>> >> >>>>>>
>> >> >>>>>> When on the left side of the map, the camera's X, the map's X and 
>> >> >>>>>> the
>> >> >>>>>> layer's X are all 0. This case is easy.
>> >> >>>>>>
>> >> >>>>>> On the right side of the map, however, it's not so easy. The camera
>> >> >>>>>> stop
>> >> >>>>>> at
>> >> >>>>>> 2680 (MapWidth - ScreenWidth), while the layer needs to stop at 
>> >> >>>>>> 2000
>> >> >>>>>> (MapWidth - LayerWidth).
>> >> >>>>>
>> >> >>>>> You mean the layer needs to stop at LayerWidth - ScreenWidth = 680.
>> >> >>>>> You get marks for correcting working-through, but this makes the 
>> >> >>>>> rest
>> >> >>>>> of your post wrong.
>> >> >>>>
>> >> >>>> Huh? If the layer stops at 680, that means its right edge is at 1680,
>> >> >>>> which
>> >> >>>> puts it squarely off the screen. I thought the idea was to have the
>> >> >>>> right
>> >> >>>> edge stop at 3000, like the other right edges.
>> >> >>>
>> >> >>> It looks like we were talking about completely different things: I was
>> >> >>> talking about the camera position on the parallax map layer, and you
>> >> >>> about the offset of the parallax map layer to the map root slice.
>> >> >>
>> >> >> Either way, I am still completely confused. My attempt to use Mike's
>> >> >> suggested formula resulted in the parallax layer being correctly placed
>> >> >> at the bottom and right edges of the map, and being at 0,0 for
>> >> >> all other camera positions :(
>> >> >>
>> >> >> set slice x(sl, (camera pixel x / (mapw -- screenw)) * (mapw -- 
>> >> >> layerw))
>> >> >> set slice y(sl, (camera pixel y / (maph -- screenh)) * (maph -- 
>> >> >> layerh))
>> >>
>> >> No no!
>> >>
>> >> set slice x(sl, (camera pixel x  * (mapw -- layerw) / (mapw -- screenw))
>> >> set slice y(sl, (camera pixel y  * (maph -- layerh) / (maph -- screenh))
>> >
>> > Yay! That works! Thank you!
>> >
>> > I'll spend some time messing with it and try to mentally internalize it.
>> >
>> > Another problem is that the movement is jerky when you start and stop
>> > walking. This problem is (as far as I know) common to all attempts to
>> > manually position slices relative to the map using a timer that repeats
>> > once per tick.
>>
>> Oh no!
>>
>> There are lots of different scripted effects which suffer this
>> problem. We should consider allowing scripts to run at one of two
>> different points each tick: at the current point before anything else
>> happens, and also immediately before drawing the screen (specifically,
>> after the walkabout and map layer slice positions are updated, which
>> is currently at the beginning of displayall). Each script thread could
>> select when it is run (having a global flag to toggle between the two
>> would be terrible). This could potentially fit into the plans for
>> script thread scheduling management quite well. I wouldn't want to add
>> an approximation of this feature before we get script "threads",
>> though.
>
> So basically, scripts could be marked as "before update" or "before
> draw"
>
> Makes good sense to me.
>
> ---
> James

Oh, wait. Scripts run immediately before drawing should definitely be
each-frame, while other scripts may only be each-tick (if we were to
end up with ticks not being the same as frames). In which case it
wouldn't be just like normal script scheduling. I can't remember the
conclusions
of the last discussion on customisable framerate, but I'll review that
before I start. I'm thinking of working on it next month.
_______________________________________________
Ohrrpgce mailing list
ohrrpgce@lists.motherhamster.org
http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org

Reply via email to