じ☆ve冰风 发表于 2026-7-12 15:09:08

DoubleX RMVXA Variable Pointers Tutorial

This topic aims to aid users understand how to fully utilize that script. It assumes you've:

1. Basic pointer, script call and game variable knowledge

2. Little scripting proficiency

But you still might gain something if you don't meet the above assumptions.

Symbols

Spoiler1. <|-|>

- Reads from/writes to(binary, left to right)

2. |>-|>

- Points to without chaining(binary, left to right)

3. |>=|>

- Points to with chaining(binary, left to right)

4. =|>

- Effectively means(binary, left to right)

5. <|=|>

- Is effectively the same as(binary, left to right)



Rules

Spoiler1. a |>=|> a <|=|> a |>-|> a

2. a |>=|> b <|-|> b <|=|> a |>-|> b =|> a <|-|> b

3. a |>=|> b |>-|> c =|>  a |>-|> c && b |>-|> c

4. (c must be different from a)  a |>=|> b |>=|> c =|> a |>=|> c && b |>=|> c

5. a |>=|> b |>=|> a =|> a |>=|> a && b |>=|> b



Theorems

Spoiler1. a |>=|> b |>=|> c |>=|> b =|> a <|-|> b && b <|-|> b && c <|-|> c

Proof:

a |>=|> b |>=|> c |>=|> b =|> a |>=|> b && b |>=|> c |>=|> b (Rule 4)

                                     =|> a |>=|> b && b |>=|> b && c |>=|> c (Rule 5)

                                     =|> a |>=|> b && b |>-|> b && c |>-|> c (Rule 1)

                                     =|> a |>-|> b && b |>-|> b && c |>-|> c (Rule 3)

                                     =|> a <|-|> b && b <|-|> b && c <|-|> c (Rule 2)



Applications

Spoiler1. Doubly circular linked list

From Theorem 1:

- a1 |>=|> a2 |>=|> a3 |>=|> ... |>=|> an |>=|> ai =|> a1 <|-|> ai

What a1 reads from/writes to can be controlled by controlling what an points to without changing any other pointer record, making implementing doubly circular linked lists feasible.

To be more effective, efficient and simple, always keep track of the ids of the variable being the 1st, last and currently pointed elements respectively(currently pointed means being actually read from/written to).

In the below setup, head_var_id, cur_var_id and tail_var_id keeps track of the ids of the variable being the 1st, last and currently pointed elements respectively.

a) Setting up the list

- Use this script call:

cur_var_id = head_var_id(list_length - 1).times { |index|$game_variables.var_pointers = , true]cur_var_id = $game_variables.var_pointers}tail_var_id = cur_var_id$game_variables.var_pointers =



b ) Accessing the currently pointed element

- Use this script call:

Spoiler$game_variables # Using $game_variables also works



c) Pointing to the next i element

- Use this script call:

Spoiler$game_variables.var_pointers = head_var_idi.times { cur_var_id = $game_variables.var_pointers }$game_variables.var_pointers = cur_var_id



d) Pointing to the previous i element

- Use this script call:

Spoiler$game_variables.var_pointers = head_var_idi.times { cur_var_id = $game_variables.var_pointers.index() }$game_variables.var_pointers = cur_var_id



e) Adding a new element as the next element of the currently pointed element

- Use this script call:

Spoilernext_var_id = $game_variables.var_pointers$game_variables.var_pointers = new_var_id$game_variables.var_pointers =



f) Removing the next element of the currently pointed element

- Use this script call:

Spoilerold_var_id = $game_variables.var_pointersnext_var_id = $game_variables.var_pointers$game_variables.var_pointers = next_var_id$game_variables.var_pointers = 0



g) Adding an element as the new 1st element of the list

- Use this script call:

Spoiler$game_variables.var_pointers = head_var_id = new_var_id$game_variables.var_pointers = head_var_id



h) Adding an element as the new last element of the list

- Use this script call:

Spoiler$game_variables.var_pointers = tail_var_id = new_var_id$game_variables.var_pointers = head_var_id



i) Removing the 1st element of the list

- Use this script call:

Spoilernew_head_var_id = $game_variables.var_pointers$game_variables.var_pointers = 0head_var_id = new_head_var_id$game_variables.var_pointers = head_var_id



j) Removing the last element of the list

- Use this script call:

Spoilernew_tail_var_id = $game_variables.var_pointers.index()$game_variables.var_pointers = 0tail_var_id = new_tail_var_id$game_variables.var_pointers = head_var_id



k) Shifting the 1st and last element of the list to their next i elements:

- Use this script call:

Spoiler$game_variables.var_pointers = head_var_idi.times { tail_var_id = $game_variables.var_pointers }head_var_id = $game_variables.var_pointers



l) Shifting the 1st and last element of the list to their previous i elements:

- Use this script call:

Spoiler                 Code:        
$game_variables.var_pointers = head_var_idi.times { tail_var_id = $game_variables.var_pointers.index() }head_var_id = $game_variables.var_pointers








本贴来自国际rpgmaker官方论坛作者:DoubleX处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/doublex-rmvxa-variable-pointers-tutorial.40730/
页: [1]
查看完整版本: DoubleX RMVXA Variable Pointers Tutorial