设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2423|回复: 1
打印 上一主题 下一主题

[原创发布] 快速操作Table类的数据

[复制链接]

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

跳转到指定楼层
1
发表于 2020-6-7 21:04:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 guoxiaomi 于 2020-6-8 00:26 编辑

根据网上查到的资料,RM里的Table类其实是保存了8个Long型的整数:
  1. struct Table
  2. {
  3.     int32_t unknown0;
  4.     int32_t unknown1;
  5.     int32_t dimension;
  6.     int32_t xsize;
  7.     int32_t ysize;
  8.     int32_t zsize;
  9.     int32_t table_size;
  10.     int16_t *data_ptr;
  11. };
复制代码

前2个都是0,最后一个是Short型的指针,指向table内部存储的数据。内部数据的索引:
  1. index = i + j * xsize + k * xsize * ysize
复制代码
这样就可以写一个table.c / table.dll用来快速编辑table。代码很简单,想添啥功能都可以的。
table.zip (66.41 KB, 下载次数: 35)
使用方法,比如两个table相加保存在另一个table里:
  1. table_addition = Win32API.new("table.dll", "table_addition", "iii", "v")
  2. t, t1, t2 = Table.new(1,2,3), Table.new(1,2,3), Table.new(1,2,3)
  3. table_addition.call(t.object_id, t1.object_id, t2.object_id)
复制代码
反正出了下面的load/save_table之外的函数参数都是整数,所以设置win32api的时候,第3个参数有几个输入量就写几个i……
导出成数组稍微复杂一点:
  1. save_table = Win32API.new("table.dll", "save_table", "ip", "v")
  2. load_table = Win32API.new("table.dll", "load_table", "ip", "v")
  3. t = Table.new(1,2,3)
  4. # save table contents to array
  5. buffer = "\0\0" * 6
  6. save_table(t.object_id, buffer)
  7. a = buffer.unpack("S*")
  8. # load table contents from array
  9. buffer = a.pack("S*")
  10. load_table(t.object_id, buffer)
复制代码

为了让这个东西更有用一点,我把之前写的autotile生成也加进去了,你可以创建一个2维的table,用1表示这里有autotile用0表示这里没有,然后:
  1. map = $game_map.data
  2. autotile = Table.new(map.xsize, map.ysize)
  3. # ... processing with autotile
  4. fill_table_autotile = Win32API.new("table.dll", "fill_table_autotile", "iii", "v")
  5. fill_table_autotile.call(map.object_id, autotile.object_id, 48)
复制代码

这里48是autotile的起始ID,如果用的是XP,就是第1个自动元件图块。对于VA的A1也是可以用的。
其实我一开始只写了fill_table开头的前3个函数,后面的都是一时兴起加上去的……
下面是源码:
只学了1学期C语言程序设计的我也不知道要怎么写才有高效率,但据说无脑-O3就行了,反正肯定比在ruby里用for循环操作要快。
table.c

参考资料:
1. http://www.rpg-studio.org/scientia/RGSS/Table
2. http://www.hbgames.org/forums/viewtopic.php?f=11&t=49838
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *

Lv3.寻梦者

梦石
0
星屑
4135
在线时间
1893 小时
注册时间
2010-8-16
帖子
811

短篇八RM组季军

2
发表于 2020-7-29 13:32:48 | 只看该作者
打破零回复!
Steam页面:
http://store.steampowered.com/app/486850
https://store.steampowered.com/app/865180/
志同道合QQ&E-mail:[email protected]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-24 09:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表