[Ohrrpgce] SVN: james/5051 Load the hero hand position from the RSAV file if the node exists (which
Ralph Versteegen
teeemcee at gmail.com
Thu Feb 16 03:38:14 PST 2012
On 16 February 2012 22:11, Ralph Versteegen <teeemcee at gmail.com> wrote:
> On 16 February 2012 22:06, Ralph Versteegen <teeemcee at gmail.com> wrote:
>> On 16 February 2012 20:23, James Paige <Bob at hamsterrepublic.com> wrote:
>>> On Wed, Feb 15, 2012 at 11:12:44PM -0800, James Paige wrote:
>>>> On Wed, Feb 15, 2012 at 11:11:04PM -0800, subversion at HamsterRepublic.com wrote:
>>>> > james
>>>> > 2012-02-15 23:11:04 -0800 (Wed, 15 Feb 2012)
>>>> > 92
>>>> > Load the hero hand position from the RSAV file if the node exists (which it never does yet)
>>>> > ---
>>>> > U wip/savegame.rbas
>>>>
>>>> Ralph, would you mind double-checking my work here? I think I did it
>>>> right, and it compiles anbd runs, and the .default part of the nodespec
>>>> seems to be working, but I am still new to ReloadBasic and I feel like
>>>> my footing is a bit shakey.
>>>
>>> Actually, after testing properly on an .rsav instead of a game that only
>>> had a .sav, I see that I *definitely* did that wrong, and the .default
>>> is not actually working... I just don't understand what I did wrong :(
>>>
>>> ---
>>> James
>>
>> + READNODE slot."hand" as hand
>> + WITHNODE hand."frame" as fr
>> + j = GetInteger(fr)
>> + .hand_pos(j).x = fr."x".default(her.hand_pos(j).x)
>> + .hand_pos(j).y = fr."y".default(her.hand_pos(j).y)
>> + END WITHNODE
>> + END READNODE
>>
>> The defaults are only used if slot."hand"."frame" exists but
>> hand."frame"."x/y" do not. The only way to do what you want is to
>> pre-initialise with the default values at the beginning, like the
>> elemental resists are. Note that since this is inside a "READNODE
>> slot, default" block, the "READNODE slot."hand" as hand" will always
>> be processed, even if slot."hand" doesn't exist. If you tagged ",
>> default" onto the end of that, then the WITHNODE would also always be
>> processed even if there was no slot."hand"."frame". In that case fr
>> would be NULL, so j would be 0, and the second hand position wouldn't
>> be set.
>>
>> Because .hand_pos is a fixed length array, it could be possible to add
>> support for loading each of its elements with defaults automatically,
>> but currently that's only supported for arrays of ints.
>
> Well actually, it would be possible to use LOADARRAY if you wrote a
> separate function to load an XYPair (which would be quite a good idea,
> actually) ... I'll go implement that.
For interest, here's the implementation, but there's a LOADARRAY bug I
need to squash first...
FUNCTION ReadXYPair(byval node as NodePtr, byref default as XYPair) as XYPair
DIM ret as XYPair
READNODE node
ret.x = node."x".default(default.x)
ret.y = node."y".default(default.y)
END READNODE
RETURN ret
END FUNCTION
READNODE slot."hand" as hand, default
LOADARRAY .hand_pos($frame) =
ReadXYPair(hand."frame"[$frame].ptr, her.hand_pos($frame))
END READNODE
More information about the Ohrrpgce
mailing list