技术:内存基址

内存基址

凡是未标注类型的,默认为4字节整型。

2026.8.19补充基址类+
2026.8.20补充指针类+
2026.8.21更新控件类,颜色等后面添加了**(比如Sexy::Slider**)
2026.8.28更新动画的东西
2026.9.19更新Sexy::DDImage**和一些指针(320+)
┌──69DA80僵尸部分常量(ZombieDefinition)(+1C下一个)
├──0//僵尸类型
├──4//动画部件类型
├──8//僵尸级别,影响出怪、掉落物品概率等	
├──C//首次出现的冒险模式关卡
├──10//最早允许出现的波数
├──14//基础出怪权重
└──18//[char]僵尸名称

┌──69F2B0植物部分常量(PlantDefinition)(+24下一个)
├──0//对应的植物卡片类型
├──4//PlantImage
├──8//动画部件类型	
├──C//PacketIndex
├──10//基础阳光消耗
├──14//基础冷却时间
├──18//植物的分类(为1则可以攻击)
├──1C//基础攻击间隔
└──20//[char]植物名称

┌6A9EC0基址(PDB补充:SexyAppBase成员(对象大小0x640))
├──8//[无符号长整数] 随机种子
├──C//std::basic_string<char,std::char_traits<char>,std::allocator<char> > 公司名称
├──28//std::basic_string<char,std::char_traits<char>,std::allocator<char> > 完整公司名称
├──44//std::basic_string<char,std::char_traits<char>,std::allocator<char> > 产品名称
├──60//std::basic_string<char,std::char_traits<char>,std::allocator<char> > 窗口标题
├──7C//std::basic_string<char,std::char_traits<char>,std::allocator<char> > 注册表路径
├──98//std::basic_string<char,std::char_traits<char>,std::allocator<char> > 游戏目录
├──B4//[整数] 更新积压计数
├──B8//[整数] 首选横坐标
├──BC//[整数] 首选纵坐标
├──C0//[整数] 窗口宽度
├──C4//[整数] 窗口高度
├──C8//[整数] 全屏设置
├──D0//[双浮点] 音乐音量
├──D8//[双浮点] 音效音量
├──E0//[双浮点] 演示音乐音量
├──E8//[双浮点] 演示音效音量
├──F0//[逻辑值] 无需声音
├──F1//[逻辑值] 使用FMod
├──F2//[逻辑值] 命令行已解析
├──F3//[逻辑值] 跳过签名检查
├──F4//[逻辑值] 标准自动换行
├──F5//[逻辑值] 允许扩展字符
├──F8//[指针] 互斥锁
├──FC//[逻辑值] 只允许运行一个实例
├──100//[无符号整数] 通知游戏消息
├──104//Sexy::CritSect 临界区
├──┬0 //_RTL_CRITICAL_SECTION mCriticalSection(24 字节)
├───┬0//调试信息指针:指向调试版本中使用的额外调试信息结构,用于检测死锁和所有权问题(零售版中通常为 null)
├───┬4//锁计数:初始值为 -1 表示未锁定;被锁定时,该值表示正在等待该锁的线程数
├───┬8//递归计数:同一线程多次进入临界区的次数,允许同一线程递归获取锁
├───┬C//拥有者线程:指向当前拥有该临界区的线程的句柄或 ID(实际上存储的是线程 ID 的指针形式)
├───┬10//锁信号量句柄:当锁被占用时,等待线程在此信号量上阻塞;系统自动创建的内核事件句柄
├───┬14//自旋计数:多核处理器上,线程在进入内核态等待之前循环检查锁的次数(性能优化参数)
├──┬0 //_RTL_CRITICAL_SECTION_DEBUG (32 字节)
├───┬0//类型标识:标识该结构体的类型,通常固定为 0
├───┬2//创建者回溯索引:调试堆中用于跟踪创建该临界区的代码位置(调用栈回溯索引)
├───┬4//反向指针:指向所属的 _RTL_CRITICAL_SECTION 结构体
├───┬8//进程锁链表:指向进程全局锁链表的双向链表节点,用于遍历进程中所有临界区
├───┬10//进入计数:累计进入该临界区的总次数(可用于调试统计)
├───┬14//竞争计数:累计发生锁竞争(被阻塞等待)的次数,高值可能暗示性能问题
├───┬18//unsigned long[2]保留字段:预留未使用的空间,供未来扩展
├──11C//[逻辑值] Beta验证//开启左下角文字
├──11D//[字节数组] 8位最大值表[512]
├──320//Sexy::WidgetManager* 控件管理器
├──324//std::map<int,Sexy::Dialog *,std::less<int>,std::allocator<std::pair<[整数] const ,Sexy::Dialog *> > > 对话框映射表
├──330//std::list<Sexy::Dialog *,std::allocator<Sexy::Dialog *> > 对话框列表
├──33C//[无符号长整数] 主线程ID
├──340//[逻辑值] SEH异常发生
├──341//[逻辑值] 正在关闭
├──342//[逻辑值] 退出到顶部
├──343//[逻辑值] 窗口化
├──344//[逻辑值] 实际窗口化
├──345//[逻辑值] 全屏窗口
├──346//[逻辑值] 强制全屏
├──347//[逻辑值] 强制窗口化
├──348//[逻辑值] 已初始化
├──349//[逻辑值] 计时器处理中
├──34C//[无符号长整数] 加载时间
├──350//HWND__* 窗口句柄
├──354//HWND__* 隐藏窗口句柄
├──358//[逻辑值] 屏幕保护程序
├──359//[逻辑值] 允许显示器省电
├──35C//std::list<tagMSG,std::allocator<tagMSG> > 延迟消息列表
├──368//[逻辑值] 不延迟消息
├──369//[逻辑值] 全屏页面翻转
├──36A//[逻辑值] TabletPC模式
├─┬36C//Sexy::DDInterface* DirectDraw接口
├───2C//[Sexy::SexyAppBase*]应用程序指针:指向主应用实例
├───30//[Sexy::D3DInterface*]D3D接口:Direct3D接口(用于3D加速)
├───34//[Sexy::D3DTester*]D3D测试器:用于检测D3D兼容性和性能
├───38//[逻辑值]是否3D模式:是否使用Direct3D渲染
├───3C//[Sexy::CritSect]临界区:线程同步锁,保护图形操作
├───54//[逻辑值]正在重绘中:标记当前是否处于重绘过程
├───58//[IDirectDraw*]DirectDraw接口:旧版DirectDraw接口(DirectX 7以下)
├───5C // [IDirectDraw7*] DirectDraw7接口:新版DirectDraw接口(DirectX 7)
├───60 // [IDirectDrawSurface*] 主表面:对应屏幕/窗口的显示表面
├───64 // [IDirectDrawSurface*] 后备表面:离屏渲染表面(双缓冲)
├───68 // [IDirectDrawSurface*] 绘图表面:当前实际绘制的表面
├───6C // [IDirectDrawSurface*[4]] 窗口缩放缓冲区:用于窗口缩放渲染的4个表面
├───7C //宽度:当前图形上下文宽度
├───80 //高度:当前图形上下文高度
├───84 // [Sexy::Ratio] 宽高比:当前上下文的比例
├───8C //桌面宽度:显示器桌面宽度
├───90 // 桌面高度:显示器桌面高度
├───94 // [Sexy::Ratio] 桌面宽高比:显示器的物理宽高比
├───9C // [逻辑值] 是否宽屏:标记是否为宽屏显示器
├───A0 // 显示宽度:实际显示的宽度
├───A4 //显示高度:实际显示的高度
├───A8 // [Sexy::Ratio] 显示宽高比:实际显示的比例
├───B0 // [Sexy::TRect<int>] 显示矩形:绘制区域在屏幕上的位置和大小
├───C0 // 全屏色深:全屏模式的颜色位数(16/32)
├───C4 // [unsigned long] 刷新率:显示器的刷新率(Hz)
├───C8 // [unsigned long] 每帧毫秒数:目标帧间隔(如1000/60≈16.67ms)
├───CC //扫描线失败计数:垂直同步失败次数统计
├───D0 // [int*] 红色附加表:红色通道的查找表(用于颜色转换)
├───D4 // [int*] 绿色附加表:绿色通道的查找表
├───D8 // [int*] 蓝色附加表:蓝色通道的查找表
├───DC // [unsigned long[256]] 红色转换表:8位→32位红色转换查找表
├───4DC // [unsigned long[256]] 绿色转换表:8位→32位绿色转换查找表
├───8DC // [unsigned long[256]] 蓝色转换表:8位→32位蓝色转换查找表
├───CDC // [逻辑值] 是否已初始化:标记图形系统是否初始化完成
├───CE0 // [HWND__*] 窗口句柄:主窗口的Windows句柄
├───CE4 // [逻辑值] 是否窗口模式
├───CE8 // [Sexy::DDImage*] 屏幕图像:当前屏幕内容的DDImage包装
├───CEC // [Sexy::DDImage*] 后备表面图像:后备表面的DDImage包装
├───CF0 // [std::set<Sexy::DDImage*>] DD图像集合:跟踪所有DDImage对象的集合
├───CFC // [逻辑值] 仅视频绘制:标记仅用于视频播放的绘制模式
├───D00 // [unsigned long] 初始化计数:记录初始化/重初始化次数
├───D04 //  光标宽度:自定义光标的宽度
├───D08 //  光标高度:自定义光标的高度
├───D0C //下一帧光标X:预更新的光标水平位置
├───D10 //下一帧光标Y:预更新的光标垂直位置
├───D14 // 当前光标X:当前帧光标水平位置
├───D18 // 当前光标Y:当前帧光标垂直位置
├───D1C // [Sexy::Image*] 光标图像:自定义光标使用的图像
├───D20 // [逻辑值] 是否有旧光标区域:标记是否保存了旧光标背景
├───D24 // [IDirectDrawSurface*] 旧光标区域表面:光标移动前背景表面
├───D28 // [IDirectDrawSurface*] 新光标区域表面:光标当前位置背景表面
├───D2C // [Sexy::DDImage*] 旧光标区域图像:旧光标背景的DDImage包装
├───D30 // [Sexy::DDImage*] 新光标区域图像:新光标背景的DDImage包装
└───D34 // [std::string] 错误字符串:记录最近的错误信息
├──370//[逻辑值] 禁用透明度
├──374//Sexy::MusicInterface* 音乐接口
├──378//[逻辑值] 从注册表读取
├──37C//std::basic_string<char,std::char_traits<char>,std::allocator<char> > 注册链接
├──398//std::basic_string<char,std::char_traits<char>,std::allocator<char> > 产品版本
├──3B4//Sexy::Image* 鼠标图像数组[13]
├──3E8//HICON__* 覆盖鼠标
├──3EC//[逻辑值] 正在打开URL
├──3ED//[逻辑值] 正在关闭OnURLOpen
├──3F0//std::basic_string<char,std::char_traits<char>,std::allocator<char> > 正在打开的URL
├──40C//[无符号长整数] 正在打开的URLTime
├──410//[无符号长整数] 上次计时器时间
├──414//[无符号长整数] 上次大延迟时间
├──418//[双浮点] 未静音音乐音量
├──420//[双浮点] 未静音音效音量
├──428//[整数] 静音计数
├──42C//[整数] 自动静音计数
├──430//[逻辑值] 演示静音
├──431//[逻辑值] 失去焦点时静音
├──434//内存图像集合
├──440//共享图像映射表
├──44C//[逻辑值] 清理共享图像
├──450//[整数] 非绘制计数
├──454//[整数] 帧时间
├──458//[逻辑值] 正在绘制
├──459//[逻辑值] 上次绘制为空
├──45A//[逻辑值] 有待处理绘制
├──460//[双浮点] 待处理更新累计
├──468//[双浮点] 更新浮点时间累计
├──470//[无符号长整数] 上次时间检查
├──474//[无符号长整数] 上次时间
├──478//[无符号长整数] 上次用户输入时间
├──47C//[整数] 休眠计数
├──480//[整数] 绘制计数
├──484//[整数] 更新计数
├──488//[整数] 应用更新状态
├──48C//[整数] 应用更新深度
├──490//[双浮点] 更新倍率
├──498//[逻辑值] 已暂停
├──49C//[整数] 快进到更新编号
├──4A0//[逻辑值] 快进到标记
├──4A1//[逻辑值] 快进步进
├──4A4//[无符号长整数] 上次绘制时间
├──4A8//[无符号长整数] 下次绘制时间
├──4AC//[整数] 步进模式
├──4B0//[整数] 鼠标编号
├──4B4//Sexy::SoundManager* 声音管理器
├──4B8//HICON__* 手形鼠标
├──4BC//HICON__* 拖拽鼠标
├──4C0//std::list<Sexy::WidgetSafeDeleteInfo,std::allocator<Sexy::WidgetSafeDeleteInfo> > 安全删除列表
├──4CC//[逻辑值] 鼠标在窗口内
├──4CD//[逻辑值] 正在运行
├──4CE//[逻辑值] 活动状态
├──4CF//[逻辑值] 最小化
├──4D0//[逻辑值] 实际最小化
├──4D1//[逻辑值] 已禁用
├──4D2//[逻辑值] 拥有焦点
├──4D4//[整数] 绘制时间
├──4D8//[无符号长整数] FPS起始时间
├──4DC//[整数] FPS翻转次数
├──4E0//[整数] FPS脏矩形次数
├──4E4//[整数] FPS时间
├──4E8//[整数] FPS计数
├──4EC//[逻辑值] 显示FPS
├──4F0//[整数] 显示FPSMode
├──4F4//[整数] 屏幕位块传送时间
├──4F8//[逻辑值] 自动启动加载线程
├──4F9//[逻辑值] 加载线程已启动
├──4FA//[逻辑值] 加载线程已完成
├──4FB//[逻辑值] 已加载
├──4FC//[逻辑值] 让出主线程
├──4FD//[逻辑值] 加载失败
├──4FE//[逻辑值] 鼠标线程运行中
├──4FF//[逻辑值] 系统鼠标
├──500//[逻辑值] 启用自定义鼠标
├──501//[逻辑值] 自定义鼠标需更新
├──502//[逻辑值] 上次正常关闭
├──503//[逻辑值] 宽屏窗口
├──504//[逻辑值] 写入Sexy缓存
├──505//[逻辑值] Sexy缓存缓冲区
├──508//[整数] 加载线程任务数
├──50C//[整数] 已完成加载任务数
├──510//[逻辑值] 正在录制演示缓冲区
├──511//[逻辑值] 正在播放演示缓冲区
├──512//[逻辑值] 手动关闭
├──514//std::basic_string<char,std::char_traits<char>,std::allocator<char> > 演示前缀
├──530//std::basic_string<char,std::char_traits<char>,std::allocator<char> > 演示文件名
├──54C//Sexy::Buffer 演示缓冲区
├──56C//[整数] 演示长度
├──570//[整数] 上次演示鼠标横坐标
├──574//[整数] 上次演示鼠标纵坐标
├──578//[整数] 上次演示更新计数
├──57C//[逻辑值] 演示需要命令
├──57D//[逻辑值] 演示为短命令
├──580//[整数] 演示命令编号
├──584//[整数] 演示命令顺序
├──588//[整数] 演示命令位位置
├──58C//[逻辑值] 演示加载完成
├──590//std::map<void *,int,std::less<void *>,std::allocator<std::pair<void * const,int> > > 句柄到整数映射
├──59C//[整数] 当前句柄编号
├──5A0//演示标记列表
├──5AC//[逻辑值] 启用调试按键
├──5AD//[逻辑值] 启用最大化按钮
├──5AE//[逻辑值] Ctrl键按下
├──5AF//[逻辑值] Alt键按下
├──5B0//[逻辑值] 允许Alt+Enter
├──5B4//[整数] 同步刷新率
├──5B8//[逻辑值] 垂直同步更新
├──5B9//[逻辑值] 垂直同步损坏
├──5BC//[整数] 垂直同步损坏Count
├──5C0//[无符号长整数] 垂直同步损坏TestStartTick
├──5C4//[无符号长整数] 垂直同步损坏TestUpdates
├──5C8//[逻辑值] 等待垂直同步
├──5C9//[逻辑值] 软件垂直同步等待
├──5CA//[逻辑值] 用户更改3D设置
├──5CB//[逻辑值] 自动启用3D
├──5CC//[逻辑值] 测试3D
├──5D0//[无符号长整数] 3D最小显存
├──5D4//[无符号长整数] 3D推荐显存
├──5D8//[逻辑值] 宽屏适配
├──5D9//[逻辑值] 宽屏坐标转换
├──5DC//Sexy::TRect<int> 屏幕边界
├──5EC//[逻辑值] 启用窗口比例
├──5F0//4      Sexy::Ratio 窗口比例4:3
├──5F4//3      Sexy::Ratio 窗口比例4:3
├──5F8//字符串属性
├──604// 布尔属性
├──610//整数属性
├──61C// 双精度属性
├──628//字符串数组属性
├──┬634//Sexy::ResourceManager* 资源管理器
├───04 // [std::set<std::string, StringLessNoCase>] 已加载资源组:记录当前已加载的所有资源组名称(不区分大小写)
├───10 // [std::map<std::string, BaseRes*>] 图像映射表:资源名称 → 图像资源的映射
├───1C // [std::map<std::string, BaseRes*>] 声音映射表:资源名称 → 声音资源的映射
├───28 // [std::map<std::string, BaseRes*>] 字体映射表:资源名称 → 字体资源的映射
├──┬34 // [Sexy::XMLParser*] XML解析器:用于解析资源定义文件(如 resources.xml)
├────20//[std::string]文件名:当前正在解析的XML文件路径
├────3C//[std::string]错误文本:解析出错时记录的详细错误信息
├────58//行号:当前解析到的行号(用于错误定位)
├────5C//[逻辑值]是否解析失败:标记解析过程中是否发生错误
├────5D//[逻辑值]允许注释:是否允许XML注释(<!-- ... -->)
└────60//[std::string]节段名称:当前正在解析的XML节段/元素名称
├───38 // [std::string] 错误信息:记录最近的资源加载错误描述
├───54 // [逻辑值] 是否加载失败:标记资源加载过程中是否发生过失败
├───58 // [Sexy::SexyAppBase*] 应用程序指针:指向主应用实例
├───5C // [std::string] 当前资源组:当前正在操作的资源组名称
├───78 // [std::string] 默认路径:资源文件的默认加载路径(如 "images/")
├───94 // [std::string] 默认ID前缀:资源ID的默认前缀(如 "IMAGE_")
├───B0 // [逻辑值] 允许缺失程序资源:是否允许程序资源缺失时继续运行
├───B1 // [逻辑值] 允许重复定义资源:是否允许资源重复定义
├───B2 // [逻辑值] 曾发生重复定义错误:标记是否发生过资源重复定义错误
├───B4 // [std::map<std::string, std::list<BaseRes*>, StringLessNoCase>] 资源组分映射表// 资源组名称 → 资源列表的映射,管理所有资源组及其包含的资源
├───C0 // [std::list<BaseRes*>*] 当前资源组列表指针:指向当前资源组的资源列表
└───C4 // [std::list::_Iterator<1>] 当前资源组列表迭代器:遍历当前资源组时使用的迭代器
└──638//long 旧窗口过程
├─┬320//鼠标和窗口-Sexy::WidgetManager* 控件管理器
│ ├──28//不断自增的值
│ ├──38//所有提示控件位置右边界范围
│ ├──38//所有提示控件位置下边界范围
│ ├──C4//窗口实际的点击右向偏移X
│ ├──C4//窗口实际的点击偏移Y
│ ├──D4//窗口实际的点击左向偏移X
│ ├──D8//窗口实际的点击偏移Y
│ ├──5C//[指针]基址
│ ├─┬60//指向 Sexy::DDImage 实例的指针
│ │ ├─24//贴图裁剪宽度
│ │ ├─28//贴图裁剪高度
│ ├──84//[逻辑值]游戏窗口获得焦点则为true
│ ├─┬88//[窗口]顶层窗口Sexy::Widget
│ ├───30//X坐标
│ ├───34//X坐标
│ ├───38//组件裁剪的宽度
│ ├───3C//组件裁剪的高度
│ ├───54//[逻辑值]是否可见:控制部件是否显示
│ ├───55//[逻辑值]鼠标可见:鼠标悬停时是否显示特殊状态
│ ├───56//[逻辑值]是否禁用:禁用后不响应任何输入事件
│ ├───57//[逻辑值]是否拥有焦点:当前是否持有键盘焦点
│ ├───58//[逻辑值]是否按下:鼠标/触摸是否在当前部件上按下
│ ├───59//[逻辑值]是否悬停:鼠标是否悬停在该部件上
│ ├───5A//[逻辑值]是否有透明区域:标记部件是否需要透明渲染
│ ├───5C//[std::vector<Sexy::Color>]颜色数组:存储部件在不同状态下的颜色(正常/悬停/按下/禁用等)
│ ├──┬6C//[Sexy::Insets]鼠标边距:鼠标交互区域的额外内边距(扩大可点击区域)
│ ├────00//左边距:左侧扩展/缩进的像素数
│ ├────04//左边距:左侧扩展/缩进的像素数
│ ├────08//左边距:左侧扩展/缩进的像素数
│ ├────0C//左边距:左侧扩展/缩进的像素数
│ ├───7C//[逻辑值]显示手指光标:触摸/平板模式下是否显示手指形光标
│ ├───7D//[逻辑值]是否想要焦点:该部件是否可接收焦点(Tab导航用)
│ ├───80//[Sexy::Widget*]上一个Tab焦点:Tab键导航的上一个焦点部件
│ ├───84//[Sexy::Widget*]下一个Tab焦点:Tab键导航的下一个焦点部件
│ ├───150//[LawnApp*]应用程序指针:指向主游戏应用实例(LawnApp)
│ ├───154//按钮延迟:按钮响应前的延迟时间(防止误触,通常以帧/毫秒计)
│ ├───158//[ReanimationWidget*]动画部件:对话框内的动画控件(用于动态装饰或反馈)
│ ├───15C//[逻辑值]绘制标准背景:是否使用默认对话框背景样式
│ ├──┬160//[LawnStoneButton*]"是"按钮:石质风格的确认按钮
│ ├───101//[逻辑值]0为显示“是”[模仿者界面]
│ ├───54 // [逻辑值] 是否可见:控制该按钮是否显示
│ ├───55 // [逻辑值] 鼠标可见:鼠标悬停时是否显示特殊状态
│ ├───56 // [逻辑值] 是否禁用:禁用后不响应任何输入事件
│ ├───57 // [逻辑值] 是否拥有焦点:当前是否持有键盘焦点
│ ├───58 // [逻辑值] 是否按下:鼠标是否在当前按钮上按下
│ ├───59 // [逻辑值] 是否悬停:鼠标是否悬停在该按钮上
│ ├───5A // [逻辑值] 是否有透明区域:标记按钮是否需要透明渲染
│ ├───5C // [std::vector<Sexy::Color>] 颜色数组:按钮各状态颜色
│ ├───6C // [Sexy::Insets] 鼠标边距:扩大按钮点击区域
│ ├───7C // [逻辑值] 显示手指光标:触摸模式下是否显示手指光标
│ ├───7D // [逻辑值] 是否想要焦点:按钮是否可接收Tab焦点
│ ├───80 // [Sexy::Widget*] 上一个Tab焦点:Tab导航前一个部件
│ └───84 // [Sexy::Widget*] 下一个Tab焦点:Tab导航下一个部件
│ ├──┬164//[LawnStoneButton*]"否"按钮:石质风格的取消按钮
│ ├───101[逻辑值]0为显示“否”[模仿者界面]
│ ├───54 // [逻辑值] 是否可见:控制该按钮是否显示
│ ├───55 // [逻辑值] 鼠标可见:鼠标悬停时是否显示特殊状态
│ ├───56 // [逻辑值] 是否禁用:禁用后不响应任何输入事件
│ ├───57 // [逻辑值] 是否拥有焦点:当前是否持有键盘焦点
│ ├───58 // [逻辑值] 是否按下:鼠标是否在当前按钮上按下
│ ├───59 // [逻辑值] 是否悬停:鼠标是否悬停在该按钮上
│ ├───5A // [逻辑值] 是否有透明区域:标记按钮是否需要透明渲染
│ ├───5C // [std::vector<Sexy::Color>] 颜色数组:按钮各状态颜色
│ ├───6C // [Sexy::Insets] 鼠标边距:扩大按钮点击区域
│ ├───7C // [逻辑值] 显示手指光标:触摸模式下是否显示手指光标
│ ├───7D // [逻辑值] 是否想要焦点:按钮是否可接收Tab焦点
│ ├───80 // [Sexy::Widget*] 上一个Tab焦点:Tab导航前一个部件
│ └───84 // [Sexy::Widget*] 下一个Tab焦点:Tab导航下一个部件
│ ├──┬174//图鉴索引按钮[图鉴界面]
│ ├───F9//[逻辑值]1显示按钮0不显示
│ ├──┬178//查看植物按钮[图鉴界面]
│ ├───F9//[逻辑值]0显示按钮1不显示
│ ├──┬17C//查看僵尸按钮[图鉴界面]
│ ├───F9//[逻辑值]0显示按钮1不显示
│ ├───169//[逻辑值]文本垂直居中:对话框中的文本是否在垂直方向上居中显示
│ ├──8C//[窗口]鼠标按住的窗口
│ ├──90//[窗口]鼠标所在的窗口
│ ├─┬94//[窗口]顶层模态对话框
│ │ ├──C//窗口类型(1图鉴,2暂停,3是否,4商店等,6用户管理,8菜单)
│ │ ├──28//窗口刷新次数
│ │ ├──30//横坐标
│ │ ├──34//纵坐标
│ │ ├──38//横向长度
│ │ ├──38//纵向高度
│ │ ├──54//[逻辑值]true则显示
│ │ ├─┬60//文字颜色
│ │ │ ├──0//[扩展色彩数组]标题颜色
│ │ │ └──10//[扩展色彩数组]内容颜色
│ │ ├──90//当窗口为按钮时,表示按钮文字内容
│ │ ├──A0//当窗口为按钮时,表示按钮文字长度
│ │ ├──A4//[中文版GB2312编码英文版ASCII码]标题文字,当窗口为按钮时,表示按钮文字长度上限
│ │ ├──B4//标题文字长度
│ │ ├──B8//标题文字长度上限
│ │ ├─┬DC//文本指针
│ │ │ └──0//[中文版GB2312编码英文版ASCII码]内容文字编码
│ │ ├──EC//内容文字长度
│ │ ├──F0//内容文字长度上限
│ │ ├──15C//子[窗口]+160,+164等均可以为子窗口
│ │ ├──164//当窗口为商店界面时,表示已进入商店的时间
│ │ ├──180//当窗口为图鉴界面时,表示图鉴内容(0索引,1植物,2僵尸)
│ │ ├──184//当窗口为商店界面时,表示商店提示消失倒计时
│ │ ├──18C//当窗口为商店界面时,表示商店新提示出现倒计时
│ │ ├──194//当窗口为图鉴或商店界面时,表示图鉴植物序号或商店当前页数
│ │ ├──198//当窗口为图鉴或商店界面时,表示图鉴僵尸序号或商店当前查看的物品
│ │ ├─┬19C//当窗口为图鉴界面时,表示图鉴当前显示的植物,当窗口为商店界面时,表示商店翻页完成倒计时
│ │ │ └─24//植物ID
│ │ └─┬1A0//当窗口为图鉴界面时,表示图鉴当前显示的僵尸
│ │   └─24//僵尸ID
│ ├──D4//窗口宽度
│ ├──D8//窗口高度
│ ├──DC//[逻辑值]鼠标在画面内则为true(暂停依然记录)
│ ├──E0//鼠标横坐标(暂停依然记录)
│ ├──E4//鼠标纵坐标(暂停依然记录)
│ ├──E8//鼠标按住(暂停依然记录,1为左键,2为右键,3为左右键,4为中键,5为左中键,6为右中键,7为左中右键)
│ ├──EC//同[E8]
│ └──F0//鼠标运动时值被改写为[28]的值
├──340//[逻辑值]鼠标是否不能操作
├──341//[逻辑值]鼠标是否响应
├──343//[逻辑值]是否窗口化
├──350//窗口句柄
├──354//Invis窗口句柄
├──36A//[逻辑值]是否为 TabletPC
├──454//每帧的时长(毫秒)
├──4AC//画面是否刷新
├──4B0//鼠标指针样式
├──4D0//游戏窗口状态
├──511//[逻辑值]无视线程消息队列
├─┬5AC//[逻辑值]调试按键是否开启(CTRL+ALT+D开启)
│ ├──F2//开启计时器
│ ├──F3//显示帧率鼠标坐标
│ ├──SHIFT+F3切换帧率鼠标坐标
│ ├──SHIFT+F8切换3d加速
│ ├──F8//显示内存信息
│ ├──F11//截图(保存在CProgramDataPopCap GamesPlantsVsZombies_screenshots)
│ └──SHIFT+F11导出内存图片(保存在CProgramDataPopCap GamesPlantsVsZombies_dump)
├──5B8//[逻辑值]垂直同步是否开启
├─┬768//[窗口]关卡界面窗口
│ ├──28//窗口刷新次数
│ ├──30//画面横坐标(向左递增,正常游戏时为0)
│ ├──34//画面纵坐标(向下递增,正常游戏时为0)
│ ├──38//可点击的横坐标范围
│ ├──3C//可点击的纵坐标范围
│ ├──54//[逻辑值]true则显示画面
│ ├──58//[逻辑值]鼠标按下则为true(暂停时为0并不再记录)
│ ├──59//[逻辑值]鼠标在画面内则为true(暂停时为0并不再记录)
│ ├──8C//[指针]=基址
│ ├─┬90//僵尸属性(+15C下一个)
│ │ ├──0//[指针]=基址
│ │ ├──4//[指针]=当前游戏信息和对象
│ │ ├──8//图像的横坐标
│ │ ├──C//图像的纵坐标
│ │ ├──10//受伤判定宽度基准
│ │ ├──14//受伤判定高度基准
│ │ ├──18//[逻辑值]为false时隐形
│ │ ├──1C//所在行数
│ │ ├──20//图像图层
│ │ ├──24//僵尸类型
│ │ ├──28//僵尸状态
│ │ ├──2C//[浮点]横坐标
│ │ ├──30//[浮点]纵坐标
│ │ ├──34//[浮点]相对速度僵尸水族馆中表示合速度
│ │ ├──38//不断增大直到大于[40][44]的值变回0
│ │ ├──3C//僵尸喊brians的倒计时初始值范围[500,1500)
│ │ ├──40//无动画抖动帧计时
│ │ ├──44//无动画抖动帧倒计时
│ │ ├──48//无动画抖动帧索引
│ │ ├──4C//上一个无动画抖动帧索引
│ │ ├──50//[逻辑值]是否有舌头
│ │ ├──51//[逻辑值]啃食时为true
│ │ ├──54//僵尸闪光倒计时
│ │ ├──58// 2类饰品发光倒计时
│ │ ├──5C// 2类饰品抖动倒计时
│ │ ├──60//僵尸已存在时间
│ │ ├──64//僵尸运动状态
│ │ ├──68//属性倒计时
│ │ ├──6C//出生波数(从0开始)站立状态,为-2、-3时静止,-4时向上(对于选卡界面的僵尸)
│ │ ├──700//时不掉落物品
│ │ ├──74//僵尸消失倒计时
│ │ ├──78//[逻辑值]冰车正在死亡则为 true(篮球有效吗?不明)
│ │ ├──7C//爬的梯子所在列
│ │ ├──80//蹦极僵尸所在列僵王最左侧蹦极所在列僵王砸车左上角格子所在列
│ │ ├──84//[浮点]纵向偏移(僵尸实际y等价于[纵坐标]-[纵向偏移])
│ │ ├──88//[逻辑值]蹦极是否被保护伞挡住
│ │ ├──8C//中弹判定的横坐标
│ │ ├──90//中弹判定的纵坐标
│ │ ├──94//中弹判定的横向宽度
│ │ ├──98//中弹判定的纵向高度
│ │ ├──9C//攻击判定的横坐标
│ │ ├──A0//攻击判定的纵坐标
│ │ ├──A4//攻击判定的横向宽度
│ │ ├──A8//攻击判定的纵向高度
│ │ ├──AC//减速倒计时
│ │ ├──B0//黄油固定倒计时
│ │ ├──B4//冻结倒计时
│ │ ├──B8//[逻辑值]被魅惑则为true
│ │ ├──B9//[逻辑值]被吹走则为true
│ │ ├──BA//[逻辑值]非濒死状态则为true
│ │ ├──BB//[逻辑值]没断手则为true
│ │ ├──BC//[逻辑值]存在手持物,雪人向左走则为true
│ │ ├──BD//[逻辑值]在水中则为true
│ │ ├──BE//[1字节]上梯子时的影子跟随
│ │ ├──BF//[逻辑值]吃到大蒜则为true
│ │ ├──C0//吃完大蒜倒计时
│ │ ├──C4// 1类饰品(0没有1路障2铁桶3橄榄球4矿工帽7雪橇车8坚果9高坚果)
│ │ ├──C8//当前本体血量
│ │ ├──CC//本体上限
│ │ ├──D0// 1类饰品当前血量
│ │ ├──D4// 1类饰品血量上限
│ │ ├──D8// 2类饰品
│ │ ├──DC// 2类饰品当前血量
│ │ ├──E0// 2类饰品血量上限
│ │ ├──E4//气球当前血量
│ │ ├──E8//气球血量上限
│ │ ├──EC//[逻辑值]消失则为true
│ │ ├──F0//雪橇队领头僵尸ID舞王ID
│ │ ├──F4//雪橇队第二只僵尸舞王第一只伴舞ID僵王第一只蹦极ID
│ │ ├──F8//雪橇队第三只僵尸舞王第二只伴舞ID僵王第二只蹦极ID
│ │ ├──FC//雪橇队第四只僵尸舞王第三只伴舞ID僵王第三只蹦极ID
│ │ ├──100//舞王第四只伴舞ID
│ │ ├──104//[逻辑值](是否正在播放音乐,舞王僵尸专用)
│ │ ├──108//粒子X坐标
│ │ ├──10C//粒子Y坐标
│ │ ├──110//受到子弹攻击的动画附件ID
│ │ ├──114//僵王放僵尸倒计时舞王召唤倒计时僵尸水族馆生产阳光倒计时篮球剩余数量
│ │ ├──118//僵尸本体动画ID
│ │ ├──11C//[浮点]大小
│ │ ├──120//[浮点][+84]变化量(僵尸纵向偏移速度)僵尸水族馆中表示角度(弧度制)
│ │ ├──124//僵王运动速度
│ │ ├──128//蹦极手里的植物
│ │ ├──12C//僵王根据损伤度判断是否放蹦极或砸车
│ │ ├──130//僵王放僵尸的行数僵王砸车左上角格子所在的行数僵王跺脚偏上行的行数
│ │ ├──134//僵王放蹦极或砸车倒计时
│ │ ├──138//僵王跺脚倒计时
│ │ ├──13C//僵王伸头倒计时
│ │ ├──140//僵王冰火球动画ID(没有冰火球时为0)
│ │ ├──144//植物僵尸头部动画ID旗帜僵尸旗帜动画ID
│ │ ├──148//僵王冰火球的行数
│ │ ├──14C//球的类型,冰球则为0
│ │ ├──150//被小推车碾压时动画ID
│ │ ├──154//上一次穿过传送门的X坐标
│ │ └──158//僵尸ID(结构为[序列号,编号],序列号与编号各占2字节)
│ ├──94//僵尸数组大小
│ ├──98//僵尸数量上限
│ ├──9C//下一个僵尸的编号
│ ├──A0//当前僵尸数
│ ├──A4//下一个僵尸的序列号
│ ├─┬A8//文本指针
│ │ └──0//zombies
│ ├─┬AC//植物属性(+14C下一个)
│ │ ├──0//[指针]=基址
│ │ ├──4//[指针]=当前游戏信息和对象
│ │ ├──8//植物横坐标
│ │ ├──C//植物纵坐标
│ │ ├──10//植物判定长度
│ │ ├──14//植物判定高度
│ │ ├──18//[逻辑值]为true时可见
│ │ ├──1C//所在行数
│ │ ├──20//图像图层
│ │ ├──24//植物类型(模仿植物此处为被模仿的植物类型)
│ │ ├──28//所在列数
│ │ ├──2C//无动画抖动时间
│ │ ├──30//无动画抖动帧索引
│ │ ├──34//无动画抖动帧时间
│ │ ├──38//无动画抖动帧计数
│ │ ├──3C//植物状态
│ │ ├──40//当前血量
│ │ ├──44//血值上限
│ │ ├──48//植物子类型
│ │ ├──4C//植物消失倒计时
│ │ ├──50//灰烬冰核三叶草生效倒计时
│ │ ├──54//属性倒计时
│ │ ├──58//触发发射生产物品倒计时
│ │ ├──5C//触发发射生产物品时间间隔
│ │ ├──60~6C//[废弃]植物矩形
│ │ ├──70~7C//[废弃]植物攻击矩形
│ │ ├──80//炮准心横坐标-47
│ │ ├──84//炮准心纵坐标
│ │ ├──88//所在行
│ │ ├──8C//粒子系统ID(大喷菇和忧郁菇喷雾,花园植物发光)
│ │ ├──90//子弹生成倒计时
│ │ ├──94//植物本体动画ID
│ │ ├──98//豌豆头的动画ID三线射手上方头的动画ID
│ │ ├──9C//三线射手中间头的动画ID
│ │ ├──A0//三线射手下方头的动画ID
│ │ ├──A4//眨眼动画ID
│ │ ├──A8//土豆雷闪灯动画ID
│ │ ├──AC//蘑菇睡觉时zzz动画ID
│ │ ├──B0//眨眼倒计时
│ │ ├──B4//被啃50cs倒计时
│ │ ├──B8//发光倒计时
│ │ ├──BC//闪光倒计时
│ │ ├──C0//[浮点]图像向右偏移坐标
│ │ ├──C4//[浮点]图像向下偏移坐标
│ │ ├──C8//[浮点]吸收物品横坐标
│ │ ├──CC//[浮点]吸收物品纵坐标
│ │ ├──D0//[浮点]吸收物品目标位置横向偏移
│ │ ├──D4//[浮点]吸收物品目标位置纵向偏移
│ │ ├──D8//磁力菇吸取物品类型,吸金磁吸收的第一个物品
│ │ ├──DC~128//吸金磁吸收的剩余4个物品
│ │ ├──12C//攻击目标僵尸ID
│ │ ├──130//蘑菇倒计时
│ │ ├──134//蹦极抓住的状态(0没被抓住,1被抓住,2抱走)
│ │ ├──138//是否为模仿植物模仿者模仿的植物类型(非模仿植物-1,模仿者变身时为对应植物,变身后48)
│ │ ├──13C//方向-1为右,1为左
│ │ ├──140//[1字节]0和1之间变换
│ │ ├──141//[逻辑值]true则植物消失
│ │ ├──142//[逻辑值]true则植物压扁
│ │ ├──143//[逻辑值]true则植物睡着
│ │ ├──144//[逻辑值]true则植物能发亮
│ │ ├──145//[逻辑值]true则植物发亮
│ │ └──148//植物ID(结构为[序列号,编号],序列号与编号各占2字节)
│ ├──B0//植物数组大小
│ ├──B4//植物数量上限
│ ├──B8//下一个植物的编号
│ ├──BC//当前植物数
│ ├──C0//下一个植物序列号
│ ├─┬C4//文本指针
│ │ └─0//plants
│ ├─┬C8//子弹属性(+94下一个)
│ │ ├──0//[指针]=基址
│ │ ├──4//[指针]=当前游戏信息和对象
│ │ ├──8//图像X坐标=取整[30]
│ │ ├──C//图像Y坐标=取整([34]+[38])
│ │ ├──10//击中判定宽度基准
│ │ ├──14//击中判定高度基准
│ │ ├──18//[逻辑值]true时显示子弹
│ │ ├──1C//所在行数
│ │ ├──20//图像图层
│ │ ├──24//子弹所在区域的纵向偏移
│ │ ├──28//无动画抖动帧时间
│ │ ├──2C//无动画抖动时间
│ │ ├──30//[浮点]影子X坐标(X)
│ │ ├──34//[浮点]子弹Y坐标(Y-Z)
│ │ ├──38//[浮点]子弹 ΔZ 坐标
│ │ ├──3C//[浮点][30]变化速率(v_X)
│ │ ├──40//[浮点][34],[4C]变化速率(v_Y)
│ │ ├──44//[浮点][38]变化速率(v_Z)
│ │ ├──48//[浮点][44]变化量(a_Z)
│ │ ├──4C//[浮点]影子Y坐标(Y)
│ │ ├──50//[逻辑值]子弹消失则为true
│ │ ├──54//无动画抖动帧倒计时
│ │ ├──58//运动方式
│ │ ├──5C//子弹类型
│ │ ├──60//存在计时
│ │ ├──64//自减倒计时
│ │ ├──68//[浮点]子弹旋转角度
│ │ ├──6C//[浮点]子弹旋转速度
│ │ ├──70//[逻辑值]true时影子下移
│ │ ├──74//子弹击中目标的条件
│ │ ├──78//上一次穿过火炬树桩的列数
│ │ ├──7C//子弹动画附件ID
│ │ ├──80//[浮点]炮下落横坐标初始值
│ │ ├──84//炮目标所在行
│ │ ├──88//香蒲刺的目标僵尸ID
│ │ ├──8C//上一次穿过传送门的X坐标
│ │ └──90//子弹ID(结构为[序列号,编号],序列号与编号各占2字节)
│ ├──CC//子弹数组大小
│ ├──D0//子弹数量上限
│ ├──D4//下一个子弹的编号
│ ├──D8//当前子弹数
│ ├──DC//下一个子弹的序列号
│ ├─┬E0//文本指针
│ │ └──0//projectile
│ ├─┬E4//物品属性(+D8下一个)
│ │ ├──0//[指针]=基址
│ │ ├──4//[指针]=当前游戏信息和对象
│ │ ├──8//图像X坐标变化量
│ │ ├──C//图像Y坐标变化量
│ │ ├──10//判定宽度
│ │ ├──14//判定高度
│ │ ├──18//[逻辑值]true则物品隐形
│ │ ├──1C//所在行数
│ │ ├──20//图层
│ │ ├──24//[浮点]X坐标
│ │ ├──28//[浮点]Y坐标
│ │ ├──2C//[浮点]X坐标变化量
│ │ ├──30//[浮点]Y坐标变化量
│ │ ├──34//[浮点]大小
│ │ ├──38//[逻辑值]true则物品消失
│ │ ├──3C//[逻辑值]true则物品消失
│ │ ├──40//收集后变为[24]
│ │ ├──44//收集后变为[28]
│ │ ├──48//物品要移动到的Y坐标
│ │ ├──4C//物品已存在时间
│ │ ├──50//[逻辑值]true则被收集
│ │ ├──54//消失计时
│ │ ├──58//物品类型
│ │ ├──5C//物品运动状态
│ │ ├──60//动画附件ID
│ │ ├──64//目标距离
│ │ ├──68//植物卡牌类型
│ │ ├──6C~C0//花园盆栽内容
│ │ ├──C8//[逻辑值]true则有光环
│ │ ├──C9//[逻辑值][C8]光环
│ │ ├──CA//[逻辑值]是否落地
│ │ ├──CC//落下时间
│ │ └──D4//物品ID(结构为[序列号,编号],序列号与编号各占2字节)
│ ├──E8//物品数组大小
│ ├──EC//物品数量上限
│ ├──F0//下一个物品的编号
│ ├──F4//当前物品数
│ ├──F8//下一个物品的序列号
│ ├─┬FC//文本指针
│ │ └──0c//oins
│ ├─┬100//小推车属性(+48下一个)
│ │ ├──0//[指针]=基址
│ │ ├──4//[指针]=当前游戏信息和对象
│ │ ├──8//[浮点]X坐标
│ │ ├──C//[浮点]X坐标
│ │ ├──10//图层
│ │ ├──14//所在行数
│ │ ├──1C//动画ID
│ │ ├──20//变慢计时
│ │ ├──24//准备计时
│ │ ├──28//消失倒计时
│ │ ├──2C//状态
│ │ ├──30//[逻辑值]消失则为true
│ │ ├──31//[逻辑值]false时隐形
│ │ ├──34//小推车类型
│ │ ├──38//[浮点]Y坐标偏移
│ │ ├──3C//影子变化
│ │ └──44//小推车ID(结构为[序列号,编号],序列号与编号各占2字节)
│ ├──104//小推车数组大小
│ ├──108//小推车数量上限
│ ├──10C//下一个小推车的编号
│ ├──110//当前小推车数
│ ├──114//下一个小推车的序列号
│ ├─┬118//文本指针
│ │ └──0//lawnmowers
│ ├─┬11C//场地物品属性(+EC下一个)
│ │ ├──0//[指针]=基址
│ │ ├──4//[指针]=当前游戏信息和对象
│ │ ├──8//类型
│ │ ├──C//罐子类型(3,4,5)、蜗牛状态
│ │ ├──10//所在列数
│ │ ├──14//所在行数
│ │ ├──18//墓碑冒出的量,弹坑消失倒计时,脑子血量,钉钯消失倒计时
│ │ ├──1C//图层
│ │ ├──20//[逻辑值]true则消失
│ │ ├──24//[浮点]蜗牛X坐标
│ │ ├──28//[浮点]蜗牛脑子Y坐标
│ │ ├──2C//[浮点]蜗牛到的X坐标
│ │ ├──30//[浮点]蜗牛到的Y坐标
│ │ ├──34//动画ID
│ │ ├──38//粒子系统ID
│ │ ├──3C//罐子存着僵尸的序号
│ │ ├──40//罐子存着植物卡牌的序号
│ │ ├──44//罐子内容类型(0,1,2,3)
│ │ ├──48//[逻辑值]发亮则为true
│ │ ├──4C//罐子透视倒计时,iz脑子亮度
│ │ ├──50//阳光数
│ │ ├──54~E0//[浮点]蜗牛吃巧克力后,3个一组,12组
│ │ ├──E4//蜗牛影子计时
│ │ └──E8//场地物品ID(结构为[序列号,编号],序列号与编号各占2字节)
│ ├──120//场地物品数组大小
│ ├──124//场地物品数量上限
│ ├──128//下一个场地物品的编号
│ ├──12C//当前场地物品数
│ ├──130//下一个场地物品的序列号
│ ├─┬134//文本指针
│ │ └──0//griditems
│ ├─┬138//鼠标相关属性
│ │ ├──0//[指针]=基址
│ │ ├──4//[指针]=当前游戏信息和对象
│ │ ├──8//X坐标
│ │ ├──C//Y坐标
│ │ ├──10//宽度判定基准(80)
│ │ ├──14//高度判定基准(80) 
│ │ ├──18//[逻辑值]鼠标在游戏界面内则为true
│ │ ├──1C//所在行数
│ │ ├──20//图像图层
│ │ ├──24//鼠标上的植物在卡槽的位置
│ │ ├──28//鼠标上的卡牌序号
│ │ ├──2C//模仿者卡牌序号
│ │ ├──30//手持的物品
│ │ ├──34//手持的掉落的卡牌序号
│ │ ├──38//手持的植物ID
│ │ ├──3C//手持的模仿者植物ID
│ │ ├──40//手持的加农炮的植物ID
│ │ ├──44//锤击计时
│ │ └──48//动画ID(结构为[序列号,编号],序列号与编号各占2字节)
│ ├─┬13C//鼠标额外属性
│ │ ├──0//[指针]=基址
│ │ ├──4//[指针]=当前游戏信息和对象
│ │ ├──8//鼠标上的植物横坐标
│ │ ├──C//鼠标上的植物纵坐标
│ │ ├──10//宽度判定基准
│ │ ├──14//高度判定基准
│ │ ├──18//[逻辑值]鼠标在游戏界面内则为true
│ │ ├──1C//所在行数
│ │ ├──20//图像图层
│ │ ├──24//鼠标所在列
│ │ └──28//鼠标所在行
│ ├─┬140//文字属性MessageWidget
│ │ ├──0x00(0)//LawnApp* 应用程序指针:指向主游戏应用实例
│ │ ├──0x04(4)//char[128] 消息文本:当前显示的消息内容(C风格字符串)
│ │ ├──0x84(132)//显示时间:当前消息已持续显示的时间(帧数/滴答数)
│ │ ├──0x88(136)// 持续时间:消息应持续显示的总时长
│ │ ├──0x8C(140)//MessageStyle 消息样式:当前消息的显示风格(位置、颜色、动画类型等)
0(0x00)//关闭:不显示消息
1(0x01)//关卡1教程:第一关教程提示消息
2(0x02)//关卡1教程-常驻:第一关教程提示消息(保持显示)
3(0x03)//关卡2教程:第二关教程提示消息
4(0x04)//后续教程:后续关卡教程提示消息
5(0x05)//后续教程-常驻:后续关卡教程提示消息(保持显示)
6(0x06)//提示-长时:普通提示消息(长持续时间)
7(0x07)//提示-快速:普通提示消息(短持续时间)
8(0x08)//提示-常驻:普通提示消息(保持显示)
9(0x09)//提示-高位置快速:高位提示消息(短持续时间)
10(0x0A)//提示-高位置10秒:高位提示消息(持续10秒)
11(0x0B)//提示-高位置8秒:高位提示消息(持续8秒)
12(0x0C)//提示-高位置长时:高位提示消息(长持续时间)
13(0x0D)//中部大字:屏幕中央大号文字
14(0x0E)//中部大字快速:屏幕中央大号文字(短持续时间)
15(0x0F)//房屋名称:显示关卡名称/房屋名
16(0x10)//大波来袭:"一大波僵尸即将来袭!"样式
17(0x11)//老虎机:老虎机小游戏专用样式
18(0x12)//禅境花园-长时:禅境花园提示(长持续时间)
│ │ ├──0x90(144)//ReanimationID[128] 文本动画ID数组:用于动画文本的 Reanimation ID 数组
│ │ ├──0x290(656)//动画类型:当前消息使用的 Reanimation 类型
│ │ ├──0x294(660)//滑出时间:消息滑出屏幕的动画时间
│ │ ├──0x298(664)//char[128] 下一条消息文本:用于预切换的下一条消息内容
│ │ └──0x318(792)//MessageStyle 下一条消息样式:与下一条消息配套的样式
│ ├─┬144//卡槽属性
│ │ ├──0//[指针]=基址
│ │ ├──4//[指针]=当前游戏信息和对象
│ │ ├──8//X坐标
│ │ ├──C//Y坐标
│ │ ├──10//横向判定
│ │ ├──14//纵向判定
│ │ ├──18//[逻辑值]false则卡槽隐形
│ │ ├──1C//所在行数
│ │ ├──20//图像图层
│ │ ├──24//格数
│ │ ├──28//以下为卡牌属性+50下一格
│ │ ├────0//[指针]=基址
│ │ ├────4//[指针]=当前游戏信息和对象
│ │ ├────8//卡牌X坐标
│ │ ├────C//卡牌Y坐标
│ │ ├────10//卡牌判定宽度
│ │ ├────14//卡牌判定高度
│ │ ├────18//[逻辑值]false则卡牌隐形
│ │ ├────24//已冷却时间(冷却完毕时为0)
│ │ ├────28//总冷却时间
│ │ ├────2C//卡牌序号
│ │ ├────30//传送带中卡牌位置
│ │ ├────34//卡槽内容(模仿植物此处为48)
│ │ ├────38//模仿者内容(非模仿植物此处为-1)
│ │ ├────3C//老虎机停止倒计时
│ │ ├────40//老虎机转出的内容
│ │ ├────44//[浮点]老虎机转动的位置
│ │ ├────48//[逻辑值]false则不可用
│ │ ├────49//[逻辑值]true则在选中时发亮
│ │ ├────4C//卡槽被使用次数
│ │ ├──0x348(840)//过场变暗:过场动画时的变暗效果计时器(值越大画面越暗)
│ │ └──0x34C(844)//传送带计数器:传送带模式中控制新种子包生成速度的计时器
│ ├─┬148//Menu[按钮]属性
│ │ ├──0(0)//mApp:LawnApp* 应用程序指针:指向主游戏应用实例
│ │ ├──4(4)//mParentWidget:Sexy::Widget* 父部件指针:按钮所在的父容器
│ │ ├──8(8)//X坐标:按钮左上角水平位置
│ │ ├──C(12)//Y坐标:按钮左上角垂直位置
│ │ ├──10(16)//宽度:按钮宽度(像素)
│ │ ├──14(20)//高度:按钮高度(像素)
│ │ ├──18(24)//[逻辑值]是否悬停:鼠标是否悬停在按钮上
│ │ ├──19(25)//[逻辑值]是否按下:鼠标是否在按钮上按下
│ │ ├──1A(26)//[逻辑值]是否禁用:禁用后不响应任何交互
│ │ ├──1C(28)//Sexy::Color[6] 颜色数组:按钮各状态的颜色集合
│ │ ├──7C(124)//按钮ID:唯一标识符,用于回调识别
│ │ ├──80(128)//std::string 标签文本:按钮上显示的文字
│ │ ├──9C(156)//文本对齐:文字在按钮中的对齐方式
│ │ ├──A0(160)//Sexy::Font* 字体指针:文本使用的字体
│ │ ├──A4(164)//Sexy::Image* 按钮图像:默认状态图像
│ │ ├──A8(168)//Sexy::Image* 悬停图像:鼠标悬停时显示的图像
│ │ ├──AC(172)//Sexy::Image* 按下图像:鼠标按下时显示的图像
│ │ ├──B0(176)//Sexy::Image* 禁用图像:禁用状态显示的图像
│ │ ├──B4(180)//Sexy::Image* 悬停覆盖图像:悬停时叠加显示的图像
│ │ ├──B8(184)//Sexy::TRect<int> 正常区域:默认状态显示区域
│ │ ├──C8(200)//Sexy::TRect<int> 悬停区域:悬停状态显示区域
│ │ ├──D8(216)//Sexy::TRect<int> 按下区域:按下状态显示区域
│ │ ├──E8(232)//Sexy::TRect<int> 禁用区域:禁用状态显示区域
│ │ ├──F8(248)//[逻辑值]是否反转:颜色/图像是否反转
│ │ ├──F9(249)//[逻辑值]按钮不绘制:不绘制按钮背景
│ │ ├──FA(250)//[逻辑值]边框不绘制:不绘制按钮边框
│ │ ├──100(256)//double 悬停透明度:当前悬停状态的透明度值
│ │ ├──108(264)//double 透明度变化速度:悬停透明度变化速率
│ │ ├──110(272)//double 淡入速度:悬停透明度淡入速率
│ │ ├──118(280)//[逻辑值]绘制石质按钮:是否使用石质风格绘制
│ │ ├──11C(284)//mTextOffsetX:int 文本X偏移:按钮文字水平偏移量
│ │ ├──120(288)//mTextOffsetY:int 文本Y偏移:按钮文字垂直偏移量
│ │ ├──124(292)//mButtonOffsetX:int 按钮X偏移:按钮整体水平偏移量
│ │ └──128(296)//mButtonOffsetY:int 按钮Y偏移:按钮整体垂直偏移量
│ ├─┬14C//展开攻击按钮,花园界面车钥匙按钮(Start Onslaught)GameButton
│ │ ├──0(0)//mApp:LawnApp* 应用程序指针:指向主游戏应用实例
│ │ ├──4(4)//mParentWidget:Sexy::Widget* 父部件指针:按钮所在的父容器
│ │ ├──8(8)//X坐标:按钮左上角水平位置
│ │ ├──C(12)//Y坐标:按钮左上角垂直位置
│ │ ├──10(16)//宽度:按钮宽度(像素)
│ │ ├──14(20)//高度:按钮高度(像素)
│ │ ├──18(24)//[逻辑值]是否悬停:鼠标是否悬停在按钮上
│ │ ├──19(25)//[逻辑值]是否按下:鼠标是否在按钮上按下
│ │ ├──1A(26)//[逻辑值]是否禁用:禁用后不响应任何交互
│ │ ├──1C(28)//Sexy::Color[6] 颜色数组:按钮各状态的颜色集合
│ │ ├──7C(124)//按钮ID:唯一标识符,用于回调识别
│ │ ├──80(128)//std::string 标签文本:按钮上显示的文字
│ │ ├──9C(156)//文本对齐:文字在按钮中的对齐方式
│ │ ├──A0(160)//Sexy::Font* 字体指针:文本使用的字体
│ │ ├──A4(164)//Sexy::Image* 按钮图像:默认状态图像
│ │ ├──A8(168)//Sexy::Image* 悬停图像:鼠标悬停时显示的图像
│ │ ├──AC(172)//Sexy::Image* 按下图像:鼠标按下时显示的图像
│ │ ├──B0(176)//Sexy::Image* 禁用图像:禁用状态显示的图像
│ │ ├──B4(180)//Sexy::Image* 悬停覆盖图像:悬停时叠加显示的图像
│ │ ├──B8(184)//Sexy::TRect<int> 正常区域:默认状态显示区域
│ │ ├──C8(200)//Sexy::TRect<int> 悬停区域:悬停状态显示区域
│ │ ├──D8(216)//Sexy::TRect<int> 按下区域:按下状态显示区域
│ │ ├──E8(232)//Sexy::TRect<int> 禁用区域:禁用状态显示区域
│ │ ├──F8(248)//[逻辑值]是否反转:颜色/图像是否反转
│ │ ├──F9(249)//[逻辑值]按钮不绘制:不绘制按钮背景
│ │ ├──FA(250)//[逻辑值]边框不绘制:不绘制按钮边框
│ │ ├──100(256)//double 悬停透明度:当前悬停状态的透明度值
│ │ ├──108(264)//double 透明度变化速度:悬停透明度变化速率
│ │ ├──110(272)//double 淡入速度:悬停透明度淡入速率
│ │ ├──118(280)//[逻辑值]绘制石质按钮:是否使用石质风格绘制
│ │ ├──11C(284)//mTextOffsetX:int 文本X偏移:按钮文字水平偏移量
│ │ ├──120(288)//mTextOffsetY:int 文本Y偏移:按钮文字垂直偏移量
│ │ ├──124(292)//mButtonOffsetX:int 按钮X偏移:按钮整体水平偏移量
│ │ └──128(296)//mButtonOffsetY:int 按钮Y偏移:按钮整体垂直偏移量
│ ├──150//[逻辑值]true则鼠标不显示手型
│ ├──154//鼠标悬浮标签属性
│ ├─┬15C//选卡界面属性(时间单位为 ms )CutScene 过场动画类
│ │ ├──0//[指针]=基址
│ │ ├──4//[指针]=当前游戏信息和对象
│ │ ├──8//关卡等待时间
│ │ ├──C//卷草坪延迟时长
│ │ ├──10//坟墓延迟时长
│ │ ├──14//准备安放植物延迟时长
│ │ ├──18//起雾延迟时长
│ │ ├──1C//僵王登场延迟时长
│ │ ├──20//疯狂戴夫延迟时长
│ │ ├──24//小推车延迟时长()
│ │ ├──28//疯狂戴夫倒计时
│ │ ├──2C//[逻辑值]true则选卡结束开始游戏(选择种子中:是否处于选卡阶段)
│ │ ├──30//ReanimationID 僵尸胜利动画ID:僵尸获胜时的动画标识
│ │ ├──34//[逻辑值]false则选卡界面隐形
│ │ ├──35//[逻辑值]true则生成选卡界面的僵尸
│ │ ├──36//[逻辑值]true则已放置草坪物品:开场草皮/墓碑是否已放置
│ │ └──48//[逻辑值]true则选卡界面暂停
│ ├─┬160//小游戏等属性
│ │ ├──0//[指针]=基址
│ │ ├──4//[指针]=当前游戏信息和对象
│ │ ├──8//[逻辑值]true则正在拖拽宝石迷阵的植物
│ │ ├──C//鼠标点击植物时的横坐标
│ │ ├──10//鼠标点击植物时的纵坐标
│ │ ├──14~49//[逻辑值]true则有弹坑
│ │ ├──4A//[逻辑值]true则升级为双发射手
│ │ ├──4B//[逻辑值]true则升级为大喷菇
│ │ ├──4C//[逻辑值]true则升级为高坚果
│ │ ├──50//一次拖拽后消除的次数
│ │ ├──54//关卡状态(挑战状态,ChallengeState枚举:进行/胜利/失败等)
ChallengeState 挑战模式状态枚举
0(0x00)//正常状态:常规游戏模式
1(0x01)//宝石迷阵-移动中:正在拖拽交换宝石
2(0x02)//宝石迷阵-下落中:交换后宝石正在下落填充
3(0x03)//宝石迷阵-无匹配:当前没有可匹配的组合
4(0x04)//老虎机-滚动中:老虎机转盘正在旋转
5(0x05)//暴风雨-闪烁1:暴风雨关卡第一次闪电闪烁
6(0x06)//暴风雨-闪烁2:暴风雨关卡第二次闪电闪烁
7(0x07)//暴风雨-闪烁3:暴风雨关卡第三次闪电闪烁
8(0x08)//禅境花园-淡出中:花园模式切换淡出动画
9(0x09)//砸罐子-锤击中:砸罐子小游戏锤子下落动画
10(0x0A)//谁笑到最后-进攻中:最终波次僵尸进攻阶段
11(0x0B)//智慧树-刚长高:智慧树刚生长完成的瞬间状态
12(0x0C)//智慧树-给予智慧:智慧树正在显示格言/提示
13(0x0D)//智慧树-等待胡言乱语:智慧树等待下一次随机说话
14(0x0E)//智慧树-胡言乱语中:智慧树正在随机说话
│ │ ├──58//各种倒计时(挑战状态计数器,控制结算动画时长)
│ │ ├──5C//传送带倒计时
│ │ ├──60//关卡进程(挑战分数,保龄球/宝石迷阵计分)
│ │ ├──64//[逻辑值]保龄球模式显示瞄准线
│ │ ├──68//传送带上一次选择的植物(即便卡槽已满也会选择,但不会生成卡片)(最后传送带种子类型,SeedType枚举)
│ │ ├──6C//已完成轮数(生存模式阶段,难度递增)
│ │ ├──70//老虎机使用次数
│ │ ├──74//挑战动画ID,ReanimationID,特殊效果动画
│ │ ├─┬78// mReanimCloud[6](云动画ID数组,6朵云)
│ │ │  └──每元素4字节,ReanimationID,天空云朵动画
│ │ ├─┬90//云计数器数组,6朵云的运动计时
│ │ ├──A8// 挑战格子X坐标,特定挑战的目标位置
│ │ ├──AC//挑战格子Y坐标
│ │ ├──B0//初始罐子数量
│ │ ├──B4//雨天计数器,雨天关卡的雨滴效果
│ │ └──B8//智慧树话语序号
│ ├──164//[逻辑值]true则游戏暂停
│ ├──168~23C//场景格子类型
│ ├──240~314//雾的形状墓碑形状
│ ├──318~4c4//墓碑的横、纵偏移
│ ├──4C8~5C0//雾的浓度
│ ├──5D0//[浮点]浓雾偏移,三叶草开雾距离
│ ├──5D4//浓雾倒计时
│ ├──5D8	mPlantRow[6]	PlantRowType[6]	行类型:每一行的地形类型
│ ├──5F0	mWaveRowGotLawnMowered[6]	int[6]	波次割草行:记录被割草机清除的行
│ ├──608	mBonusLawnMowersRemaining	int	额外割草机剩余:商店购买的额外小推车
│ ├──60C	//mIceMinX[6]int[6]结冰最小X:每行结冰的最左位置
│ ├──624	//mIceTimer[6]int[6]结冰计时器:每行结冰剩余时间
│ ├──63C	//mIceParticleID[6]ParticleSystemID[6]结冰粒子ID:结冰特效的粒子系统ID
│ ├──654	//mRowPickingArray[6]TodSmoothArray[6]行选择数组:用于平滑选择僵尸出现行
│ ├──6B4~54D0//出怪列表(容纳10面旗帜)-波次僵尸配置:最多50波,每波100种僵尸
│ ├──54D4~54F4//[逻辑值]僵尸允许标志:哪些僵尸类型允许出现
│ ├──5538//掉落阳光倒计时
│ ├──553C//掉落阳光计数
│ ├──5540//非0则画面立刻回到正常
│ ├──5544//画面横向震动的幅度
│ ├──5548//画面纵向震动的幅度
│ ├──554C//场景类型
│ ├──5550//(冒险模式)当前关卡
│ ├──5554//草皮位置(用于迷你游戏)
│ ├──5558//上一帧鼠标X位置
│ ├──555C//上一帧鼠标Y位置
│ ├──5560//阳光值
│ ├──5564//当前关卡总波数
│ ├──5568//游戏计时(不包括选卡停留的时间)
│ ├──556C//游戏计时(包括选卡停留的时间)
│ ├──5570//游戏计时(失去焦点则重新计时)
│ ├──5574//产生三人组倒计时
│ ├──5578//“阳光不足”提示计时器(阳光数量闪烁红字的)
│ ├──557C//当前所在波数
│ ├──5580//已刷新的波数
│ ├──5584//新手教程相关的闪烁提示[TutorialState]
TutorialState 教程状态枚举
0(0x00)//教程关闭:未激活任何教程
1(0x01)//关卡1-拾取豌豆射手:引导玩家拾取豌豆射手种子包
2(0x02)//关卡1-种植豌豆射手:引导玩家种植豌豆射手
3(0x03)//关卡1-刷新豌豆射手:引导玩家等待豌豆射手种子包刷新
4(0x04)//关卡1-完成:第一关教程完成
5(0x05)//关卡2-拾取向日葵:引导玩家拾取向日葵种子包
6(0x06)//关卡2-种植向日葵:引导玩家种植向日葵
7(0x07)//关卡2-刷新向日葵:引导玩家等待向日葵种子包刷新
8(0x08)//关卡2-完成:第二关教程完成
9(0x09)//更多阳光-拾取向日葵:引导玩家拾取向日葵种子包
10(0x0A)//更多阳光-种植向日葵:引导玩家种植向日葵
11(0x0B)//更多阳光-刷新向日葵:引导玩家等待向日葵种子包刷新
12(0x0C)//更多阳光-完成:更多阳光教程完成
13(0x0D)//老虎机-拉动:引导玩家拉动老虎机
14(0x0E)//老虎机-完成:老虎机教程完成
15(0x0F)//铲子-拾取:引导玩家拾取铲子
16(0x10)//铲子-挖掘:引导玩家使用铲子挖掘植物
17(0x11)//铲子-继续挖掘:引导玩家继续挖掘更多植物
18(0x12)//铲子-完成:铲子教程完成
19(0x13)//僵尸水族馆-购买呼吸管:引导玩家购买呼吸管
20(0x14)//僵尸水族馆-已购买呼吸管:确认玩家已购买呼吸管
21(0x15)//僵尸水族馆-点击奖杯:引导玩家点击奖杯
22(0x16)//禅境花园-拾取水壶:引导玩家拾取水壶
23(0x17)//禅境花园-浇灌植物:引导玩家为植物浇水
24(0x18)//禅境花园-继续浇灌:引导玩家继续浇灌更多植物
25(0x19)//禅境花园-访问商店:引导玩家访问商店
26(0x1A)//禅境花园-施肥:引导玩家为植物施肥
27(0x1B)//禅境花园-完成:禅境花园教程完成
28(0x1C)//锤僵尸-拾取种子前:引导玩家在拾取种子前观察
29(0x1D)//锤僵尸-拾取种子:引导玩家拾取种子
30(0x1E)//锤僵尸-完成:锤僵尸教程完成
│ ├──5588//教程粒子效果ID
│ ├──558C//教程计时器
│ ├──5590//上次出现蹦极僵尸的波次
│ ├──5594//达到刷新条件的血量
│ ├──5598//本波总血量
│ ├──559C//下一波僵尸倒计时
│ ├──55A0//下一波僵尸倒计时初始值
│ ├──55A4//大波僵尸刷新倒计时
│ ├──55A8//哪些帮助提示已显示[逻辑值65]
│ ├──55EC//当前帮助提示类型[AdviceType]
AdviceType 游戏提示类型枚举
95(0x5F)//无提示:不显示任何提示
0(0x00)//点击阳光:引导玩家点击收集阳光
1(0x01)//已点击阳光:确认玩家成功点击了阳光
2(0x02)//已点击金币:确认玩家成功点击了金币
3(0x03)//种子包刷新:提示种子包已刷新
4(0x04)//阳光不足:提示玩家阳光不够种植植物
5(0x05)//在墓碑上种植墓碑吞噬者:引导玩家在墓碑上种植墓碑吞噬者
6(0x06)//在水面上种植睡莲:引导玩家在水池中种植睡莲
7(0x07)//在水面上种植缠绕海草:引导玩家在水池中种植缠绕海草
8(0x08)//在水面上种植海兵菇:引导玩家在水池中种植海兵菇
9(0x09)//在睡莲上种植土豆雷:引导玩家在睡莲上种植土豆雷
10(0x0A)//种植了错误的艺术品类型:在错误的装饰物上种植
11(0x0B)//需要花盆:屋顶关卡需在花盆中种植
12(0x0C)//不能在墓碑上种植:该位置有墓碑
13(0x0D)//不能在弹坑上种植:该位置有爆炸弹坑
14(0x0E)//不能种植在此处:该位置无法种植
15(0x0F)//不能在水面上种植:陆地植物不能种在水里
16(0x10)//需要地面:必须种在普通地面上
17(0x11)//拖动进行三消:宝石迷阵模式引导
18(0x12)//三消成功:宝石迷阵模式匹配3个
19(0x13)//四消成功:宝石迷阵模式匹配4个
20(0x14)//保存阳光:宝石迷阵模式策略提示
21(0x15)//利用弹坑1:宝石迷阵模式特殊策略
22(0x16)//利用弹坑2:宝石迷阵模式特殊策略
23(0x17)//不能越过底线种植:不能种在最右侧底线之后
24(0x18)//只能在双发射手上种植:升级植物需要基础植物
25(0x19)//只能在西瓜投手上种植:升级植物需要基础植物
26(0x1A)//只能在向日葵上种植:升级植物需要基础植物
27(0x1B)//只能在地刺上种植:升级植物需要基础植物
28(0x1C)//只能在玉米投手上种植:升级植物需要基础植物
29(0x1D)//只能在磁力菇上种植:升级植物需要基础植物
30(0x1E)//只能在大喷菇上种植:升级植物需要基础植物
31(0x1F)//只能在睡莲上种植:升级植物需要基础植物
32(0x20)//需要双发射手:升级为机枪射手的前置条件
33(0x21)//需要西瓜投手:升级为冰瓜的前置条件
34(0x22)//需要向日葵:升级为双子向日葵的前置条件
35(0x23)//需要地刺:升级为地刺王的前置条件
36(0x24)//需要玉米投手:升级为玉米加农炮的前置条件
37(0x25)//需要磁力菇:升级为吸金磁的前置条件
38(0x26)//需要大喷菇:升级为忧郁蘑菇的前置条件
39(0x27)//需要睡莲:升级为猫尾草的前置条件
40(0x28)//拉老虎机:老虎机小游戏引导
41(0x29)//一大波僵尸即将来袭:僵尸大规模进攻预警
42(0x2A)//铲子已刷新:铲子冷却完成
43(0x2B)//传送门正在转移:传送门小游戏提示
44(0x2C)//收集阳光:老虎机模式提示
45(0x2D)//砸碎所有罐子过关:砸罐子小游戏目标提示
46(0x2E)//用铲子砸罐子:砸罐子小游戏操作提示
47(0x2F)//快完成了:鼓励性提示
48(0x30)//点击奖杯:僵尸水族馆模式引导
49(0x31)//收集阳光:僵尸水族馆模式提示
50(0x32)//点击喂食:僵尸水族馆模式引导
51(0x33)//购买呼吸管:僵尸水族馆模式引导
52(0x34)//植物不是真的:我是僵尸模式提示
53(0x35)//不能越过底线:我是僵尸模式提示
54(0x36)//底线左侧:我是僵尸模式提示
55(0x37)//再转一次:老虎机模式提示
56(0x38)//吃掉所有大脑:我是僵尸模式目标提示
57(0x39)//豌豆射手死了:植物被消灭提示
58(0x3A)//臭鼬在睡觉:禅境花园蜗牛提示
59(0x3B)//没有步数了:宝石迷阵模式提示
60(0x3C)//种植5个向日葵:特定任务提示
61(0x3D)//需要休眠:植物处于休眠状态
62(0x3E)//点击继续:过场/关卡过渡提示
63(0x3F)//生存旗帜:生存模式波次提示
64(0x40)//已解锁新模式:解锁新游戏模式提示
65(0x41)//提示类型总数:用于数组边界
│ ├──55F0//最终Boss是否被击败[逻辑值]
│ ├──55F1//[逻辑值]true时有铲子
│ ├──55F4//金钱显示倒计时
│ ├──55F8//调试文字显示模式[DebugTextMode]
DebugTextMode 调试文本模式枚举
0//不显示调试文本:关闭所有调试信息
1//显示僵尸生成信息:调试僵尸的生成位置、时间、类型等数据
2//显示音乐状态信息:调试当前播放的音乐、音量、状态等数据
3//显示内存使用信息:调试内存分配、使用率、泄漏等数据
4//显示碰撞检测信息:调试碰撞盒、碰撞事件等物理检测数据
│ ├──55FC//[逻辑值]true时退出关卡(关卡是否完成)
│ ├──5600//[逻辑值]true时为过关过程
│ ├──5604//退出关卡倒计时
│ ├──5608//奖励割草机倒计时
│ ├──560C//[逻辑值]true时为过关状态(关卡奖励是否已生成)
│ ├──5610//关卡进程的进度条
│ ├──5614//旗帜升起动画计时器
│ ├──5618//水面冻结倒计时
│ ├──561C//生存模式出怪种子,非生存模式为程序窗口打开时间
│ ├──5620//泳池闪光粒子系统ID[ParticleSystemID]
│ ├──5624~5740//辣椒火焰动画,每行12个动画,共6行
│ ├──5744//辣椒火焰倒计时
│ ├──5748//[逻辑值]true则画面变白 时间停止(暂停)
│ ├──574C//是否已掉落第一个金币[逻辑值]
│ ├──5750//减少到0产生音效(最终波次音效计时器)
│ ├──5754//点炮后30cs倒计时,倒计时期间点炮位置和准心距离不能小于100
│ ├──5758//点炮位置横坐标
│ ├──575C//点炮位置纵坐标
│ ├──5760//[逻辑值]是否击败雪人僵尸
│ ├──5761//[逻辑值]按下mustache则为true 胡子模式(彩蛋)
│ ├──5762//[逻辑值]按下trickedout则为true 超级割草机模式
│ ├──5763//[逻辑值]按下future则为true 未来模式(彩蛋)
│ ├──5764//[逻辑值]按下pinata则为true 皮纳塔模式(彩蛋)
│ ├──5765//[逻辑值]按下dance则为true 雏菊模式(彩蛋)
│ ├──5766//[逻辑值]按下daisies则为true 旁遮普模式(彩蛋)
│ ├──5767//[逻辑值]按下sukhbir则为true
│ ├──5768//上一局结果(BoardResult枚举:胜/负/放弃)
BoardResult枚举
0//无结果:初始状态,游戏尚未结束
1//胜利:玩家成功通关当前关卡
2//失败:僵尸突破了防线,游戏结束
3//重新开始:玩家主动选择重新开始当前关卡
4//退出:玩家主动退出当前关卡(返回菜单)
5//退出应用:玩家退出整个游戏程序
6//作弊:通过作弊方式结束关卡(可能用于调试/测试)
│ ├──576C//已触发的割草机数量
│ ├──5770//关卡活跃时间(毫秒)
│ ├──5774//关卡非活跃时间(暂停等)
│ ├──5778//单局最大阳光植物数
│ ├──577C//绘制开始时间
│ ├──5780//绘制间隔时间
│ ├──5784//绘制间隔计数起始
│ ├──5788//[浮点]最低FPS
│ ├──578C//预加载时间
│ ├──5790//游戏开始时间(距离1970-1-1 800的秒数) (游戏ID,多人/存档标识)
│ ├──5794//已清除墓碑数
│ ├──5798//被吃掉的植物数
│ ├──579C//被铲掉的植物数
│ ├──57A0//收取金币数
│ ├──57A4//收取钻石数
│ ├──57A8//收取花盆数
│ └──57AC//收取巧克力数
├─┬76C//[TitleScreen]加载界面窗口
│ ├─┬8C//Sexy::HyperlinkWidget* 开始按钮:标题屏幕上的"开始游戏"按钮(超链接样式)
│ │ ├──120//Sexy::Color 正常颜色:超链接文本的默认颜色(通常为蓝色)
│ │ ├──130//Sexy::Color 悬停颜色:鼠标悬停时超链接文本的颜色(通常为亮蓝/下划线)
│ │ ├──140//下划线大小:下划线的粗细/高度(像素)
│ │ └──144//下划线偏移:下划线相对于文本基线的垂直偏移量(像素)
│ ├──90//[浮点]当前进度条宽度:加载进度条的当前宽度
│ ├──94//[浮点]进度条总宽度:加载进度条的完整宽度
│ ├──98//[浮点] 进度条速度:进度条动画的移动速度
│ ├──9C//[逻辑值]已点击注册:标记玩家是否点击了注册按钮
│ ├──9D//[逻辑值]加载线程完成:后台资源加载是否已完成
│ ├──A0//标题存活时间:标题屏幕已显示的帧数/时间
│ ├──A4//Sexy::KeyCode 快速加载键:用于快速加载关卡的键盘按键(调试功能)
│ ├──A8//[逻辑值]需要注册:是否需要显示注册提示(未注册版本)
│ ├──A9//[逻辑值]需要显示注册框:是否需要弹出注册对话框
│ ├──AA//[逻辑值]已绘制:标记是否已完成首次绘制
│ ├──AB//[逻辑值]需要初始化:标记是否需要进行初始化
│ ├──AC//[浮点]上次加载百分比:上一帧的加载进度(用于动画平滑)
│ └──B0//mApp:LawnApp* 应用程序指针:指向主游戏应用实例
├─┬770//[GameSelector]主菜单窗口
│ ├──8C//LawnApp* 应用程序指针:指向主游戏应用实例
│ ├──90//Sexy::DialogButton* 冒险模式按钮:进入冒险模式
│ ├──94//Sexy::DialogButton* 小游戏按钮:进入小游戏模式
│ ├──98//Sexy::DialogButton* 解谜模式按钮:进入解谜模式
│ ├──9C//Sexy::DialogButton* 选项按钮:打开游戏设置
│ ├──A0//Sexy::DialogButton* 退出按钮:退出游戏
│ ├──A4//Sexy::DialogButton* 帮助按钮:显示游戏帮助/说明
│ ├──A8//Sexy::DialogButton* 商店按钮:进入疯狂戴夫的商店
│ ├──AC//Sexy::DialogButton* 图鉴按钮:打开植物/僵尸图鉴
│ ├──B0//Sexy::DialogButton* 禅境花园按钮:进入禅境花园
│ ├──B4//Sexy::DialogButton* 生存模式按钮:进入生存模式
│ ├──B8//Sexy::DialogButton* 切换用户按钮:切换玩家档案
│ ├──BC//Sexy::Widget* 叠加部件:顶层覆盖部件
│ ├──C0//[逻辑值] 正在启动游戏:标记是否正在进入关卡
│ ├──C4// 启动游戏计时器:进入关卡的过渡动画计时
│ ├──C8//[逻辑值] 小游戏锁定:小游戏是否未解锁
│ ├──C9//[逻辑值] 解谜模式锁定:解谜模式是否未解锁
│ ├──CA//[逻辑值] 生存模式锁定:生存模式是否未解锁
│ ├──CB//[逻辑值] 显示开始按钮:是否显示冒险模式的"开始"按钮
│ ├──CC//ParticleSystemID 奖杯粒子ID:奖杯闪烁/光芒粒子特效
│ ├──D0//ReanimationID 选择器动画ID:模式选择器背景动画
│ ├──D4//ReanimationID[6] 云朵动画ID数组:6朵云朵的动画
│ ├──EC//[6] 云朵计数器数组:每朵云的移动/闪烁计时
│ ├──104//ReanimationID[3] 花朵动画ID数组:3朵花的动画
│ ├──110//ReanimationID 叶子动画ID:装饰叶子的动画
│ ├──114//ReanimationID 手部动画ID:指向按钮的手部提示动画
│ ├──118// 叶子计数器:叶子动画的计时器
│ ├──11C//SelectorAnimState 选择器状态:当前选择器的动画状态
SelectorAnimState 选择器动画状态枚举
0//打开状态:选择器正在展开/打开动画
1//新用户状态:首次启动,显示新用户引导/欢迎界面
2//显示标志状态:显示游戏标题/标志的过渡动画
3//空闲状态:选择器完全展开,等待玩家操作
│ ├──120// 关卡编号:当前选中的关卡/进度
│ ├──124//[逻辑值] 正在加载:是否正在加载资源
│ ├─┬128//ToolTipWidget* 工具提示:悬浮提示部件
│ │ ├──0//std::string 标题文本:工具提示的标题(如植物名称),通常以粗体/大号显示
│ │ ├──1C//std::string 标签文本:工具提示的主体说明文字(如植物属性/描述)
│ │ ├──38//std::string 警告文本:红色/高亮警告信息(如阳光不足/冷却未完成)
│ │ ├──54// X坐标:提示框的左上角水平位置
│ │ ├──58// Y坐标:提示框的左上角垂直位置
│ │ ├──5C// 宽度:提示框的宽度(自动换行依据)
│ │ ├──60// 高度:提示框的高度
│ │ ├──64//[逻辑值] 是否可见:控制提示框的显示/隐藏
│ │ ├──65//[逻辑值] 是否居中:提示框是否在X轴上居中对齐
│ │ ├──68// 最小左侧边界:限制提示框不超出屏幕左侧的边界值
│ │ ├──6C// 最大底部边界:限制提示框不超出屏幕底部的边界值
│ │ ├──70// 文本行宽:获取文本行宽度的缓存值(用于排版)
│ │ └──74// 警告闪烁计数器:控制警告文本闪烁效果的计时器
├─┬774//[SeedChooserScreen]选卡界面窗口
│ ├──88//GameButton* 开始按钮:确认选择并开始关卡
│ ├──8C//GameButton* 随机按钮:随机选择种子包
│ ├──90//GameButton* 查看草坪按钮:预览关卡地形
│ ├──94//GameButton* 商店按钮:打开商店
│ ├──98//GameButton* 图鉴按钮:打开植物/僵尸图鉴
│ ├──9C//GameButton* 菜单按钮:返回主菜单
│ ├──A0//GameButton* 模仿者按钮:选择模仿者(如果已解锁)
│ ├──A4//ChosenSeed[53]+3C下一个(类似于A4+20+3C)
│ │ ├──0// X坐标:种子包当前的水平位置
│ │ ├──4// Y坐标:种子包当前的垂直位置
│ │ ├──8// 运动开始时间:种子包开始移动/动画的时间戳
│ │ ├──C// 运动结束时间:种子包停止移动的时间戳
│ │ ├──10// 起始X坐标:运动开始时的水平位置
│ │ ├──14// 起始Y坐标:运动开始时的垂直位置
│ │ ├──18// 目标X坐标:运动结束时的水平位置
│ │ ├──1C// 目标Y坐标:运动结束时的垂直位置
│ │ ├──20//SeedType 种子类型:该种子包对应的植物类型
│ │ ├──24//ChosenSeedState 种子状态:当前种子包的状态(未选择/已选择/飞行中等)
│ │ ├──28// 银行索引:该种子在种子银行/池中的索引位置
│ │ ├──2C//[逻辑值] 是否冷却中:标记种子包是否在冷却/刷新状态
│ │ ├──30// 冷却倒计时:距离冷却完成的剩余时间
│ │ ├──34//SeedType 模仿者类型:当该种子为模仿者时,记录其模仿的植物类型
│ │ ├──38//[逻辑值] 戴夫挑选:疯狂戴夫是否推荐/选择了这个种子(用于教程提示)
│ ├──D10//LawnApp* 应用程序指针:指向主游戏应用实例
│ ├──D14//Board* 游戏面板指针:当前关卡的游戏面板
│ ├──D18// 需选种子数:本关卡需要选择的植物数量(通常为7-10个)
│ ├──D1C// 选择器存活时间:选卡屏幕已显示的帧数/时间
│ ├──D20// 飞行中种子数:正在下落/飞入的种子包数量
│ ├──D24// 库存中种子数:当前可用种子池中的植物数量
│ ├──D28//ToolTipWidget* 工具提示:悬停种子包时显示详细信息
│ ├──D2C// 提示中的种子索引:当前显示提示的种子包索引
│ ├──D30// 上次鼠标X坐标:上一帧鼠标水平位置
│ ├──D34// 上次鼠标Y坐标:上一帧鼠标垂直位置
│ ├──D38//SeedChooserState 选择器状态:当前选卡屏幕的状态
│ └──D3C// 查看草坪时间:预览地形模式的计时器
├─┬778//[AwardScreen]过关信窗口
│ ├──88//GameButton* 开始按钮:继续下一关或进入下一个模式
│ ├──8C//GameButton* 菜单按钮:返回主菜单
│ ├──90//LawnApp* 应用程序指针:指向主游戏应用实例
│ ├──94// 淡入计数器:控制奖励屏幕淡入动画的计时器
│ └──98//AwardType 奖励类型:当前显示的奖励类型
AwardType 奖励类型枚举
0关卡奖励:通关普通关卡后显示的奖励(新植物、金钱、奖杯等)
1制作人员名单僵尸笔记:通关后显示的制作人员名单特殊彩蛋(僵尸笔记/僵尸信件)
├──77C//[CreditScreen]MV窗口0xf8
│ ├──8C//GameButton* 关闭按钮:关闭制作人员名单屏幕
│ ├──90//LawnApp* 应用程序指针:指向主游戏应用实例
│ ├──94//CreditsPhase 名单阶段:当前制作人员名单的播放阶段
CreditsPhase 制作人员名单阶段枚举
0主阶段1:制作人员名单的第一部分(开发人员、设计团队等)
1主阶段2:制作人员名单的第二部分(美术、音乐、音效等)
2主阶段3:制作人员名单的第三部分(测试、发行、特别鸣谢等)
3结束阶段:制作人员名单播放完毕,显示结束画面
│ ├──98// 阶段计时器:当前阶段的进度计时器
│ ├──9C//ReanimationID 名单动画ID:制作人员名单的动画标识
│ ├──A0//ParticleSystemID 迷雾粒子ID:背景迷雾粒子特效
│ ├──A4// 眨眼倒计时:僵尸眼睛眨动的倒计时
│ ├──A8//LawnStoneButton* 主菜单按钮:返回主菜单
│ ├──AC//NewLawnButton* 重播按钮0x148:重新播放制作人员名单
│ │ ├──138//Sexy::Font* 高亮字体:按钮悬停或激活时使用的字体(通常为加粗/不同颜色)
│ │ ├──13C// 按下文本X偏移:按钮按下时文本在水平方向上的额外偏移量(模拟按下的视觉反馈)
│ │ ├──140// 按下文本Y偏移:按钮按下时文本在垂直方向上的额外偏移量(模拟按下的视觉反馈)
│ ├──B0//Sexy::Widget* 叠加部件:顶层覆盖部件
│ ├──B4//[逻辑值] 绘制大脑:是否绘制僵尸大脑装饰
│ ├──B8//[浮点] 大脑X坐标:大脑装饰的水平位置
│ ├──BC//[浮点] 大脑Y坐标:大脑装饰的垂直位置
│ ├──C0// 更新计数:Update 调用次数统计
│ ├──C4// 绘制计数:Draw 调用次数统计
│ ├──C8//Sexy::PerfTimer 启动计时器:从屏幕启动到现在的计时器
Sexy::PerfTimer 性能计时器类
│ │ ├──0//_LARGE_INTEGER 起始计数:计时器启动时的高精度性能计数器值(QueryPerformanceCounter)
│ │ ├──8//[浮点] 持续时间:计时器从启动到停止/查询的持续时间(单位:秒)
│ │ ├──10//[逻辑值] 是否运行中:标记计时器当前是否处于运行状态
│ ├──E0//[逻辑值] 不同步:是否禁用同步更新
│ ├──E1//[逻辑值] 名单暂停:制作人员名单是否暂停滚动
│ ├──E8//[浮点] 原始音乐音量:进入名单前的音乐音量(用于恢复)
│ └──F0//[逻辑值] 已预加载:资源是否已预加载完成
├─┬780//[ChallengeScreen]小游戏界面窗口
│ ├──8C//NewLawnButton* 返回按钮:返回上级菜单
│ ├──90//Sexy::ButtonWidget*[4] 分页按钮数组:最多4个分页切换按钮
│ ├──A0//Sexy::ButtonWidget*[70] 挑战按钮数组:最多70个挑战/小游戏的入口按钮
│ ├──1B8//LawnApp* 应用程序指针:指向主游戏应用实例
│ ├──1BC//ToolTipWidget* 工具提示:悬停挑战按钮时显示详细信息
│ ├──1C0//ChallengePage 当前页面索引:当前显示的分页编号
ChallengePage 挑战分页枚举
0生存模式页:包含生存模式挑战(白天、黑夜、泳池、迷雾、屋顶及困难/无尽变体)
1小游戏页:包含小游戏挑战(植物僵尸、坚果保龄球、老虎机、宝石迷阵等)
2Limbo页:包含特殊/未分类挑战(可能是内测或特殊模式,如"超乎寻常的压力"等)
3解谜模式页:包含解谜挑战(破罐者、我是僵尸及其变体)
4最大页数:用于数组边界和循环控制(不是实际页面)
│ ├──1C4//[逻辑值] 作弊启用挑战:是否通过作弊解锁所有挑战
│ ├──1C8//UnlockingState 解锁状态:当前解锁动画/流程的阶段
UnlockingState 解锁状态枚举
0关闭:未进行任何解锁动画,处于静止状态
1震动中:锁定图标正在震动/抖动,提示玩家内容即将解锁
2淡出中:锁定图标正在淡出/消失,解锁动画正在进行
│ ├──1CC// 解锁状态计时器:解锁动画的进度计时
│ ├──1D0// 解锁挑战索引:当前正在解锁的挑战编号
│ ├──1D4//[浮点] 锁定震动X:锁定图标在水平方向的抖动幅度
│ └──1D8//[浮点] 锁定震动Y:锁定图标在垂直方向的抖动幅度
├──7F5//[逻辑值]为true时显示limbo page,点击屏幕跳过过场动画,选卡界面显示(Debug Play)按钮(点击后随机选卡开始游戏),按SHIFT花瓶透视,失去焦点不会暂停
├──7F8// mGameMode(游戏模式,GameMode枚举)
├──7FC// mGameScene(游戏场景,GameScenes枚举)
├──814//[逻辑值]true则开启免费种植模式
├──818//[指针]mPoolEffect(泳池效果)
      ┌──PoolEffect类(泳池效果,大小0x10)
      ├──0//[指针]mCausticGrayscaleImage(灰度图像数据,用于波纹计算)
      ├──4//[指针]mCausticImage(焦散图像,最终水面光影效果)
      ├──8//[指针]mApp(LawnApp实例,回指主应用)
      └──C// mPoolCounter(泳池计数器,驱动波纹动画)
├──81C//[指针]mZenGarden(禅境花园)
      ┌──ZenGarden类(禅境花园管理器)
      ├──0//[指针]mApp(LawnApp实例,回指主应用)
      ├──4//[指针]mBoard(Board实例,禅境花园关卡界面)
      └──8// mGardenType(花园类型,GardenType枚举)
            ├──0//(0)主花园,禅境花园主场景,草地风格
            ├──1//(1)蘑菇园,蘑菇专属花园,夜间/阴暗风格
            ├──2//(2)手推车,移动花园,临时存放植物
            └──3//(3)水族馆,水生植物花园,泳池风格
├─┬820//动画信息
│ ├─┬0
│ │ ├──0//粒子系统(+2C下一个)
│ │ ├──4//最多时粒子系统数量
│ │ ├──8//粒子系统数量上限
│ │ ├──C//下一个粒子系统的ID
│ │ ├──10//当前粒子系统数量
│ │ ├─┬18//文本指针
│ │ │ └──0//particle systems
│ │ ├─┬1C//发射源(+B0下一个)
│ │ │ ├──3C//[扩展色彩数组]粒子颜色
│ │ │ └──50//[单浮点]粒子大小
│ │ ├──20//最多时发射源数量
│ │ ├──24//发射源数量上限
│ │ ├──28//下一个发射源的ID
│ │ ├──2C//当前发射源数量
│ │ ├─┬34//文本指针
│ │ │ └──0e//mitters
│ │ ├──38//粒子(+A0下一个)
│ │ ├──3C//最多时粒子数量
│ │ ├──40//粒子数量上限
│ │ ├──44//下一个粒子的ID
│ │ ├──48//当前粒子数量
│ │ └─┬50//文本指针
│ │   └──0//particles
│ ├─┬4//轨迹信息(+EC下一个)
│ │ └─┬18//文本指针
│ │   └──0//trails
│ ├─┬8
│ │ ├─┬0//动画对象(+A0下一个)
│ │ │ ├──0//动画类型
│ │ │ ├──4//[浮点]动画进度
│ │ │ ├──8//[浮点]动画速度
│ │ │ ├──C//[指针]指向对应的reanim文件
│ │ │ ├──10//动画播放类型(0循环,3不循环,5眨眼)
│ │ │ ├──14//[逻辑值]true则消失
│ │ │ ├──18//从第几帧开始
│ │ │ ├──1C//关键帧数量
│ │ │ ├──24//[浮点]左右拉伸
│ │ │ ├──28//[浮点]左右倾斜
│ │ │ ├──2C//[浮点]横坐标偏移
│ │ │ ├──30//[浮点]上下倾斜
│ │ │ ├──34//[浮点]上下拉伸
│ │ │ ├──38//[浮点]纵坐标偏移
│ │ │ ├──48//[扩展色彩数组]对象颜色
│ │ │ ├──5C//动画循环次数
│ │ │ ├──7C//[逻辑值]true则高亮
│ │ │ ├──94//[浮点]上一帧的[4]
│ │ │ ├──98//着色方式-1,0,1,2
│ │ │ └──9C//动画对象ID(结构为[序列号,编号],序列号与编号各占2字节)
│ │ ├──4//动画对象数组大小
│ │ ├──8//动画对象数量上限
│ │ ├──C//下一个动画对象的编号
│ │ ├──10//当前动画对象数量
│ │ ├──14//下一个动画对象的序列号
│ │ └─┬18//文本指针
│ │   └──0//reanims
│ └─┬C
│   ├─┬0//动画附件(+30C下一个)
│   │ └──0//动画ID
│   ├──4//最多时动画附件数量
│   ├──8//动画附件数量上限
│   ├──C//下一个动画附件的编号
│   ├──10//当前动画附件数量
│   ├──14//下一个动画附件的序列号
│   └─┬18//文本指针
│     └──0a//ttachments
├─┬─824动画制取的临时贴图
    ├─┬0// Sexy::MemoryImages[53](植物图像数组,53种植物)
    │ └──每元素4字节,索引对应SeedType,预加载植物动画
    ├─┬D4// TodList<ReanimCacheImageVariation> mImageVariationList(图像变体列表)
    │ └──管理植物/僵尸的动画变体(如不同颜色/状态)
    ├─┬E4// Sexy::MemoryImage[4](割草机图像数组,4种)
    │ └──每元素4字节,割草机类型(普通/超级/皮纳塔等)
    ├─┬F4// Sexy::MemoryImage[33](僵尸图像数组,33种僵尸)
    │ └──每元素4字节,索引对应ZombieType,预加载僵尸动画
├─┬82C//存档信息PlayerInfo
│ ├──0//std::string 玩家名称:玩家档案的名字
│ ├──1C//unsigned long 使用序列号:存档使用序列号(可能用于版本/存档检测)
│ ├──20//unsigned long 玩家ID:玩家的唯一标识符
│ ├──24// 关卡进度:当前冒险模式到达的关卡编号
│ ├──28// 金币数量:玩家拥有的金币总数
│ ├──2C// 已通关冒险:冒险模式通关次数(0=未通关,1=通关一次等)
│ ├──30//[100] 挑战记录数组:100个挑战模式/小游戏的最高分/记录
│ ├──1C0//[80] 购买记录数组:80个商店物品的购买状态(0=未购买,1=已购买)
│ ├──300// 活跃游戏时间:玩家主动操作的游戏总时长(秒)
│ ├──304// 非活跃游戏时间:游戏在后台/暂停的总时长(秒)
│ ├──308// 是否使用过作弊码:标记玩家是否使用过作弊/彩蛋密码
│ ├──30C// 是否唤醒过臭鼬:是否触发过臭鼬彩蛋
│ ├──310// 未购买背包升级:标记玩家是否跳过了商店背包升级
│ ├──314//long 上次喂巧克力时间:最近一次给臭鼬喂巧克力的时间戳
│ ├──318// 臭鼬X坐标:臭鼬在禅境花园中的水平位置
│ ├──31C// 臭鼬Y坐标:臭鼬在禅境花园中的垂直位置
│ ├──320// 是否解锁小游戏模式
│ ├──324// 是否解锁解谜模式
│ ├──328// 是否有新小游戏:标记是否有新解锁的小游戏(显示"NEW"提示)
│ ├──32C// 是否有新砸罐子游戏:标记是否有新解锁的砸罐子关卡
│ ├──330// 是否有新我是僵尸游戏:标记是否有新解锁的我是僵尸关卡
│ ├──334// 是否有新生存模式:标记是否有新解锁的生存模式关卡
│ ├──338//[6] 占位统计数组:6个预留的统计字段(可能用于未来扩展)
│ ├──350// 盆栽植物数量:禅境花园中当前拥有的盆栽总数
│ └──358//PottedPlant[200] 盆栽植物数组0x58:200个盆栽植物的完整数据
PottedPlant 盆栽植物类
│ │ ├──0//SeedType 植物类型:该盆栽对应的植物种类(如向日葵、豌豆射手、金盏花等)
│ │ ├──4//GardenType 所属花园类型:植物所在的花园(禅境花园/水上花园/树屋花园)
│ │ ├──8// X坐标:植物在花园中的水平位置
│ │ ├──C// Y坐标:植物在花园中的垂直位置
│ │ ├──10// 朝向:植物面向的方向(角度或方向常量)
│ │ ├──18//long long 上次浇水时间:最近一次浇水的游戏时间戳
│ │ ├──20//DrawVariation 绘制变体:植物的外观变种(如金盏花的颜色、是否带花盆等)
DrawVariation 绘制变体/外观变种枚举
0	0x00	正常外观:植物的默认/标准外观
1	0x01	模仿者外观:使用模仿者(Imitater)的伪装效果
2	0x02	金盏花-白色:白色花朵变种
3	0x03	金盏花-洋红色:洋红色花朵变种
4	0x04	金盏花-橙色:橙色花朵变种
5	0x05	金盏花-粉红色:粉红色花朵变种
6	0x06	金盏花-浅蓝色:浅蓝色花朵变种
7	0x07	金盏花-红色:红色花朵变种
8	0x08	金盏花-蓝色:蓝色花朵变种
9	0x09	金盏花-紫罗兰色:紫罗兰色花朵变种
10	0x0A	金盏花-薰衣草色:薰衣草色花朵变种
11	0x0B	金盏花-黄色:黄色花朵变种
12	0x0C	金盏花-浅绿色:浅绿色花朵变种
13	0x0D	禅境花园模式:在禅境花园中显示的变体(带花盆等)
14	0x0E	禅境花园-水上模式:在水上花园中显示的变体
15	0x0F	幼苗无花:幼苗状态,还未开花
16	0x10	模仿者精简版:模仿者外观的简化版本
17	0x11	水族馆模式:在水族馆/鱼缸中显示的变体
│ │ ├──24//PottedPlantAge 植物年龄:当前生长阶段(幼苗/小型/中型/成熟)
0幼苗:植物刚发芽,处于生长初期,体型最小,尚未展现出完整形态
1小型:植物处于早期生长阶段,体型较小但已具备基本形态
2中型:植物生长中期,体型中等,接近成熟形态
3成熟:植物完全长成,达到最大体型,可产出奖励(金币/钻石/植物)
│ │ ├──28// 已施肥次数:该植物已被施肥的总次数
│ │ ├──2C// 每阶段所需施肥次数:生长到下一阶段所需的施肥次数
│ │ ├──30//PottedPlantNeed 当前需求:植物当前需要什么(浇水/施肥/杀虫/音乐/无)
PottedPlantNeed 盆栽植物需求类型枚举
0无需求:植物状态良好,当前不需要任何照料
1需要浇水:植物需要玩家使用喷壶(Watering Can)浇水
2需要施肥:植物需要玩家使用肥料(Fertilizer)促进生长
3需要杀虫:植物需要玩家使用杀虫剂(Bug Spray)清除害虫
4需要音乐:植物需要玩家播放留声机(Phonograph)音乐
│ │ ├──38//long long 上次满足需求时间:上一次满足植物需求的时间戳
│ │ ├──40//long long 上次施肥时间:最后一次施肥的时间戳(用于冷却计算)
│ │ ├──48//long long 上次喂巧克力时间:喂巧克力后的时间戳(巧克力可加速生长)
│ │ └──50//[1] 预留属性数组:为未来扩展预留的字段(大小1个int)
├──834//[逻辑型]关闭请求:标记游戏是否被请求关闭退出
├──838//舞王时钟
├──840//疯狂戴夫动画ID,ReanimationID
├──844//疯狂戴夫状态,CrazyDaveState枚举
├──848//疯狂戴夫眨眼计数器
├──84C//疯狂戴夫眨眼动画ID
├──850//疯狂戴夫消息索引
├─  854//疯狂戴夫消息文本,std::string
├─┬830//LevelStats 关卡统计指针
│ ├──0未使用的小推车数量:关卡结束时剩余/未使用的小推车数量
├─┬83C//Music音乐
│ ├──0//LawnApp* 应用程序指针:指向主游戏应用实例
│ ├──4//Sexy::MusicInterface* 音乐接口指针:底层音频播放接口(BASS/DirectSound)
│ ├──8//MusicTune 当前音乐曲调:当前播放的曲目枚举
│ ├──C//MusicFile 当前主音乐文件:主音轨文件引用
│ ├──10//MusicFile 当前鼓点音乐文件:鼓点音轨文件引用
│ ├──14//MusicFile 当前镲片音乐文件:镲片音轨文件引用
MusicFile 音乐文件类型枚举
14-0x0E无音乐文件:未加载任何音乐文件
1主音轨:音乐的主旋律/和声轨道
2鼓点音轨:音乐的打击乐/节奏轨道
3镲片音轨:音乐的高频打击乐/装饰轨道
4制作人员名单-你的草坪上的僵尸:制作名单专用歌曲(人声演唱)
5音乐文件总数:用于数组边界和循环控制
│ ├──18// 爆发覆盖标记:强制触发音乐爆发段落的标志
│ ├──1C// 基础节拍速度:音乐的基础BPM(每分钟节拍数)
│ ├──20// 基础模组速度:音乐模块的播放速度基准
│ ├──24//MusicBurstState 音乐爆发状态:当前爆发段落的状态(如僵尸进攻时的激昂部分)
MusicBurstState 音乐爆发状态枚举
0关闭:爆发模式未激活,播放正常音乐
1启动中:爆发模式正在启动/过渡,音乐逐渐变得激昂
2激活中:爆发模式已完全激活,播放激昂音乐
3结束中:爆发模式正在结束/过渡,音乐逐渐恢复平静
│ ├──28// 爆发状态计时器:爆发段落的持续时间计数
│ ├──2C//MusicDrumsState 鼓点音乐状态:当前鼓点音轨的状态
MusicDrumsState 音乐鼓点状态枚举
0关闭:鼓点音轨未播放,处于静音状态
1开启已排队:鼓点音轨已加入播放队列,准备启动
2开启:鼓点音轨正在播放,处于激活状态
3关闭已排队:鼓点音轨已加入停止队列,准备关闭
4淡出中:鼓点音轨正在淡出,音量逐渐降低
│ ├──30// 队列鼓点轨道顺序:排队的鼓点轨道播放顺序(压缩存储)
│ ├──34// 鼓点状态计时器:鼓点状态的持续时间计数
│ ├──38// 暂停偏移量(主音轨):暂停时主音轨的播放位置偏移
│ ├──3C// 暂停偏移量(鼓点音轨):暂停时鼓点音轨的播放位置偏移
│ ├──40//[逻辑值] 是否暂停:音乐是否处于暂停状态
│ ├──41//[逻辑值] 是否禁用音乐:音乐是否被完全禁用(静音)
│ ├──44// 淡出计数器:淡出效果的进度计数器
│ └──48// 淡出持续时间:淡出效果的总时长
├──870//应用随机种子:用于初始化游戏随机数生成器的种子值
├──874//HICON__* 大箭头光标:自定义大箭头光标句柄
├──878//PopDRMComm* DRM通信:数字版权管理通信接口
├──87C// 会话ID:当前游戏会话的唯一标识符
├──880// 活跃会话游戏时间:当前会话中玩家主动操作的游戏时间(秒)
├──884// 非活跃会话游戏时间:当前会话中游戏在后台/暂停的时间(秒)
├──888//BoardResult 游戏面板结果:最近一次游戏的结果
├──88C//[逻辑值] 已击杀雪人并重启:是否已触发并重置过雪人彩蛋
├──890//TypingCheck* 科乐美代码检测:↑↑↓↓←→←→BA
├──894//TypingCheck* 胡子密码检测:"mustache"
├──898//TypingCheck* 胡子密码检测(英式拼写):"moustache"
├──89C//TypingCheck* 超级割草机密码检测
├──8A0//TypingCheck* 超级割草机密码检测2
├──8A4//TypingCheck* 未来模式密码检测:"future"
├──8A8//TypingCheck* 皮纳塔模式密码检测:"pinata"
├──8AC//TypingCheck* 雏菊模式密码检测:"daisy"
├──8B0//TypingCheck* Sukhbir模式密码检测:"sukhbir"
├──8B4//[逻辑值] 胡子模式:僵尸是否显示胡子
├──8B5//[逻辑值] 超级割草机模式:小推车是否变成超级割草机
├──8B6//[逻辑值] 未来模式:僵尸是否戴未来眼镜
├──8B7//[逻辑值] 皮纳塔模式:僵尸死亡时是否爆出糖果
├──8B8//[逻辑值] 雏菊模式:僵尸死亡时是否长出雏菊
├──8B9//[逻辑值] Sukhbir模式:特殊彩蛋模式
├──8C0//是否为正版
├──8C5//[逻辑值]为true则禁用音效
├──BE0//=[780]
└──CE0//(563958)(ClientScreen)

┌─6A9EE8reanim文件(+10下一个)
└─┬─┬─┬─0[指针]动画附件(+0C下一个)
  │ │ └─0//[字符串指针]动画附件名称
  │ ├─┬─4动画附件参数(+2C下一个)
  │ │ ├─0//[浮点数]x
  │ │ ├─4//[浮点数]y
  │ │ ├─8//[浮点数]kx
  │ │ ├─c//[浮点数]ky
  │ │ ├─10//[浮点数]sx
  │ │ └─14//[浮点数]sy
  │ └─8//关键帧数量
  ├─4//动画附件数量
  ├─8//[浮点数]
  └─C//[指针]

┌6A9FF0背景音乐相关函数
├─4//[指针]bass.dll的基址
├─C//[函数]BASS_GetVersion**获取版本号**:同上(可能为备用指针)
├─14//[函数]BASS_Init**初始化音频设备**
├─18//[函数]BASS_Free**释放音频设备**
├─1C//[函数]BASS_Stop**停止音频设备**
├─20//[函数]BASS_Start**启动音频设备**
├─28//[函数]BASS_SetVolume**设置全局音量**
├─2C//[函数]BASS_GetVolume**获取全局音量**
├─30//[函数]BASS_GetInfo**获取音频设备信息**
├─34//[函数]BASS_SetConfig**设置全局配置**
├─38//[函数]BASS_GetConfig**获取全局配置**
├─3C//[函数]BASS_ChannelStop**停止通道播放**
├─40//[函数]BASS_ChannelPlay**播放通道**
├─44//[函数]BASS_ChannelPause**暂停通道**
├─48//[函数]BASS_ChannelSetAttributes**设置通道属性**
├─4C//[函数]BASS_ChannelGetAttributes**获取通道属性**
├─50//[函数]BASS_ChannelSetPosition**设置通道播放位置**
├─54//[函数]BASS_ChannelGetPosition**获取通道播放位置**
├─58//[函数]BASS_ChannelSetFlags**设置通道标志**
├─5C//[函数]BASS_ChannelIsActive**查询通道活动状态**
├─60//[函数]BASS_ChannelSlideAttributes**渐变调整通道属性**
├─64//[函数]BASS_ChannelIsSliding**查询通道是否正在渐变**
├─68//[函数]BASS_ChannelGetLevel**获取通道电平**
├─6C//[函数]BASS_ChannelSetFX**添加通道音效**
├─70//[函数]BASS_ChannelRemoveFX**移除通道音效**
├─74//[函数]BASS_ChannelGetLength**获取通道长度**
├─78//[函数]BASS_ChannelGetData**获取通道数据**
├─7C//[函数]BASS_ChannelPreBuf**预缓冲通道数据**
├─80//[函数]BASS_ChannelSetSync**设置通道同步回调**
├─84//[函数]BASS_ChannelRemoveSync**移除通道同步回调**
├─8C//[函数]BASS_MusicLoad**加载音乐文件**
├─90//[函数]BASS_MusicFree**释放音乐资源**
├─94//[函数]BASS_StreamCreateFile**从文件创建音频流**
├─98//[函数]BASS_StreamFree**释放音频流**
├─9C//[函数]BASS_FXSetParameters**设置音效参数**
├─A0//[函数]BASS_FXGetParameters**获取音效参数**
├─A4//[函数]BASS_MusicGetAttribute**获取音乐属性**
├─A8//[函数]BASS_MusicSetAttribute**设置音乐属性**
├─AC//[函数]BASS_MusicGetOrders**获取音乐乐章数量**
├─B0//[函数]BASS_MusicGetOrderPosition**获取当前乐章位置**
├─B4//[函数]BASS_PluginLoad**加载音频插件**
├─B8//[函数]BASS_SampleLoad**加载采样文件**
├─BC//[函数]BASS_SampleFree**释放采样资源**
├─C0//[函数]BASS_SampleSetInfo**设置采样信息**
├─C4//[函数]BASS_SampleGetInfo**获取采样信息**
├─C8//[函数]BASS_SampleGetChannel**获取采样播放通道**
├─CC//[函数]BASS_SampleStop**停止采样播放**
└─D0//[函数]BASS_ErrorGetCode**获取最近错误代码**
Sexy::DialogButton** 对话框按钮类
│ ├──120//Sexy::Image* 组件图像:按钮使用的背景/组件图像,通常包含多帧(正常/悬停/按下状态)
│ ├──124// X平移量:按钮在水平方向上的额外偏移量,用于布局微调
│ ├──128// Y平移量:按钮在垂直方向上的额外偏移量,用于布局微调
│ ├──12C// 文本X偏移:按钮文本相对于按钮中心的水平偏移量
│ ├──130// 文本Y偏移:按钮文本相对于按钮中心的垂直偏移量
Sexy::Image** 图像类
│ ├──4//[逻辑值] 是否已绘制:标记该图像是否已被绘制过(用于性能统计或资源管理)
│ ├──8//std::string 文件路径:图像文件的磁盘路径(如 "images/plants/peashooter.png")
│ ├──24// 宽度:图像的宽度(像素)
│ ├──28// 高度:图像的高度(像素)
│ ├──2C// 行数:图像中动画帧的行数(用于精灵表/贴图集)
│ ├──30// 列数:图像中动画帧的列数(用于精灵表/贴图集)
│ ├──34//Sexy::AnimInfo* 动画信息指针:指向动画元数据(如每帧持续时间、循环方式等)
Sexy::AnimInfo** 动画信息结构体
│ ├──0//Sexy::AnimType 动画类型:枚举,定义动画播放模式(如循环、单次、往返等)
│ ├──4// 帧延迟:每帧的基础延迟时间(毫秒/滴答数),用于统一帧速
│ ├──8// 帧总数:动画中包含的帧数/单元数(Cels)
│ ├──C//std::vector<int> 每帧延迟数组:每帧独立的延迟时间(覆盖 mFrameDelay)
│ ├──1C//std::vector<int> 帧映射数组:播放顺序映射(如 [2,1,0,3] 自定义顺序播放)
│ ├──2C// 总动画时间:单次循环的总时长(毫秒/滴答数)
Sexy::AnimType** 动画类型枚举
│ ├──0//无动画:不播放任何动画,仅显示静态图像
│ ├──1//单次播放:从第一帧播放到最后一帧后停止(常用于爆炸/消失等一次性特效)
│ ├──2//往返播放:0→1→2→3→2→1→0→... 来回循环(常用于呼吸/摇摆动画)
│ ├──3//循环播放:0→1→2→3→0→1→2→3→... 从头到尾反复循环(常用于行走/攻击循环)
GameButton** 游戏按钮类
│ ├──0//LawnApp* 应用程序指针:指向主游戏应用实例
│ ├──4//Sexy::Widget* 父部件指针:按钮所在的父容器
│ ├──8// X坐标:按钮左上角水平位置
│ ├──C// Y坐标:按钮左上角垂直位置
│ ├──10// 宽度:按钮宽度(像素)
│ ├──14// 高度:按钮高度(像素)
│ ├──18//[逻辑值] 是否悬停:鼠标是否悬停在按钮上
│ ├──19//[逻辑值] 是否按下:鼠标是否在按钮上按下
│ ├──1A//[逻辑值] 是否禁用:禁用后不响应任何交互
│ ├──1C//Sexy::Color[6] 颜色数组:按钮各状态的颜色集合
│ ├──7C// 按钮ID:唯一标识符,用于回调识别
│ ├──80//std::string 标签文本:按钮上显示的文字
│ ├──9C// 文本对齐:文字在按钮中的对齐方式
│ ├──A0//Sexy::Font* 字体指针:文本使用的字体
│ ├──A4//Sexy::Image* 按钮图像:默认状态图像
│ ├──A8//Sexy::Image* 悬停图像:鼠标悬停时显示的图像
│ ├──AC//Sexy::Image* 按下图像:鼠标按下时显示的图像
│ ├──B0//Sexy::Image* 禁用图像:禁用状态显示的图像
│ ├──B4//Sexy::Image* 悬停覆盖图像:悬停时叠加显示的图像
│ ├──B8//Sexy::TRect<int> 正常区域:默认状态显示区域
│ ├──C8//Sexy::TRect<int> 悬停区域:悬停状态显示区域
│ ├──D8//Sexy::TRect<int> 按下区域:按下状态显示区域
│ ├──E8//Sexy::TRect<int> 禁用区域:禁用状态显示区域
│ ├──F8//[逻辑值] 是否反转:颜色/图像是否反转
│ ├──F9//[逻辑值] 按钮不绘制:不绘制按钮背景
│ ├──FA//[逻辑值] 边框不绘制:不绘制按钮边框
│ ├──100//[浮点] 悬停透明度:当前悬停状态的透明度值
│ ├──108//[浮点] 透明度变化速度:悬停透明度变化速率
│ ├──110//[浮点] 淡入速度:悬停透明度淡入速率
│ ├──118//[逻辑值] 绘制石质按钮:是否使用石质风格绘制
│ ├──11C// 文本X偏移:按钮文字水平偏移量
│ ├──120// 文本Y偏移:按钮文字垂直偏移量
│ ├──124// 按钮X偏移:按钮整体水平偏移量
│ ├──128// 按钮Y偏移:按钮整体垂直偏移量
NewLawnButton** 新草坪按钮类
│ ├──138//Sexy::Font* 高亮字体:按钮悬停或激活时使用的字体(通常为加粗/不同颜色)
│ ├──13C// 按下文本X偏移:按钮按下时文本在水平方向上的额外偏移量
│ ├──140// 按下文本Y偏移:按钮按下时文本在垂直方向上的额外偏移量
Sexy::MemoryImage** 内存图像类
│ ├──38//unsigned long* 像素数据指针:指向图像像素数据(32位ARGB格式)
│ ├──3C// 像素修改计数:记录像素数据被修改的次数(用于脏标记/缓存验证)
│ ├──40//void* D3D数据指针:Direct3D纹理数据指针(若使用硬件加速)
│ ├──44//unsigned long D3D标志:Direct3D纹理标志(如使用模式、过滤方式等)
│ ├──48//unsigned long* 颜色表指针:调色板颜色表(用于8位索引色图像)
│ ├──4C//unsigned char* 颜色索引指针:8位像素的调色板索引数据
│ ├──50//[逻辑值] 强制模式:是否强制使用特定颜色格式/渲染模式
│ ├──51//[逻辑值] 是否有透明:图像是否包含透明像素(非Alpha通道)
│ ├──52//[逻辑值] 是否有Alpha通道:图像是否包含Alpha通道(每像素透明度)
│ ├──53//[逻辑值] 是否易失:图像数据是否可能在不可预知时被丢弃/重建
│ ├──54//[逻辑值] 是否清除像素:是否允许在不需要时清除像素数据以节省内存
│ ├──55//[逻辑值] 是否需要调色板:图像是否使用8位调色板模式
│ ├──58//unsigned long* 原生Alpha数据指针:预计算的原生格式Alpha数据(用于快速Alpha混合)
│ ├──5C//unsigned char* RL Alpha数据指针:游程编码(Run-Length)压缩的Alpha数据
│ ├──60//unsigned char* RL加法数据指针:游程编码压缩的加法混合数据
│ ├──64//[逻辑值] 像素已修改:标记像素数据是否已被修改(用于性能优化)
│ ├──68//Sexy::SexyAppBase* 应用程序指针:指向主游戏应用实例
Sexy::ButtonWidget** 按钮部件基类
│ ├──88// 按钮ID:唯一标识符,用于事件回调识别
│ ├──8C//std::string 标签文本:按钮上显示的文字
│ ├──A8// 文本对齐:文字在按钮中的对齐方式(左/中/右)
│ ├──AC//Sexy::Font* 字体指针:标签文本使用的字体
│ ├──B0//Sexy::Image* 按钮图像:默认/正常状态的图像
│ ├──B4//Sexy::Image* 悬停图像:鼠标悬停时显示的图像
│ ├──B8//Sexy::Image* 按下图像:鼠标按下时显示的图像
│ ├──BC//Sexy::Image* 禁用图像:禁用状态显示的图像
│ ├──C0//Sexy::TRect<int> 正常区域:正常状态时从图像中截取的区域
│ ├──D0//Sexy::TRect<int> 悬停区域:悬停状态时从图像中截取的区域
│ ├──E0//Sexy::TRect<int> 按下区域:按下状态时从图像中截取的区域
│ ├──F0//Sexy::TRect<int> 禁用区域:禁用状态时从图像中截取的区域
│ ├──100//[逻辑值] 是否反转:颜色/图像是否反转显示
│ ├──101//[逻辑值] 按钮不绘制:不绘制按钮背景图像
│ ├──102//[逻辑值] 边框不绘制:不绘制按钮边框
│ ├──104//Sexy::ButtonListener* 按钮监听器:接收按钮事件(点击、悬停等)的回调接口
│ ├──108//[浮点] 悬停透明度:当前悬停状态下的透明度值(0.0~1.0)
│ ├──110//[浮点] 透明度变化速度:透明度变化的速率
│ ├──118//[浮点] 淡入速度:透明度淡入的速率
ToolTipWidget** 工具提示部件类
│ ├──0//std::string 标题文本:工具提示的标题(如植物名称),通常以粗体/大号显示
│ ├──1C//std::string 标签文本:工具提示的主体说明文字(如植物属性/描述)
│ ├──38//std::string 警告文本:红色/高亮警告信息(如阳光不足/冷却未完成)
│ ├──54// X坐标:提示框的左上角水平位置
│ ├──58// Y坐标:提示框的左上角垂直位置
│ ├──5C// 宽度:提示框的宽度(自动换行依据)
│ ├──60// 高度:提示框的高度
│ ├──64//[逻辑值] 是否可见:控制提示框的显示/隐藏
│ ├──65//[逻辑值] 是否居中:提示框是否在X轴上居中对齐
│ ├──68// 最小左侧边界:限制提示框不超出屏幕左侧的边界值
│ ├──6C// 最大底部边界:限制提示框不超出屏幕底部的边界值
│ ├──70// 文本行宽:获取文本行宽度的缓存值(用于排版)
│ ├──74// 警告闪烁计数器:控制警告文本闪烁效果的计时器
Sexy::EditWidget** 文本编辑框部件类
│ ├──88// 控件ID:唯一标识符,用于事件回调识别
│ ├──8C//std::string 文本内容:编辑框中当前显示的文本
│ ├──A8//std::string 密码显示字符串:密码模式下用于显示的掩码字符(如 "****")
│ ├──C4//Sexy::Font* 字体指针:文本使用的字体
│ ├──C8//std::list<WidthCheck> 宽度检查列表:用于动态调整编辑框宽度的检查列表
│ ├──D4//Sexy::EditListener* 编辑监听器:接收编辑事件(文本改变、回车等)的回调接口
│ ├──D8//[逻辑值] 显示光标:是否显示文本光标
│ ├──D9//[逻辑值] 绘制选择覆盖:是否覆盖默认的选择绘制
│ ├──DA//[逻辑值] 双击标记:标记是否发生了双击事件
│ ├──DC// 光标位置:当前光标在文本中的字符索引
│ ├──E0// 高亮位置:文本选择的另一端位置(与光标位置配合形成选择范围)
│ ├──E4// 闪烁累计:光标闪烁的累计计时器
│ ├──E8// 闪烁延迟:光标闪烁的间隔时间(帧数/毫秒)
│ ├──EC// 左偏移:编辑框滚动时的水平偏移量(像素)
│ ├──F0// 最大字符数:可输入的最大字符数限制
│ ├──F4// 最大像素宽度:文本可占用的最大像素宽度
│ ├──F8//char 密码字符:密码模式下用于替换每个字符的符号(通常为 *)
│ ├──FC//std::string 撤销字符串:撤销操作时恢复的文本内容
│ ├──118// 撤销光标位置:撤销操作时恢复的光标位置
│ ├──11C// 撤销高亮位置:撤销操作时恢复的高亮位置
│ ├──120// 最后修改索引:上次修改的位置索引(用于撤销合并)
LawnDialog** 对话框扩展成员
│ ├──150//LawnApp* 应用程序指针:指向主游戏应用实例
│ ├──154// 按钮延迟:按钮响应前的延迟时间(防止误触,通常以帧/毫秒计)
│ ├──158//ReanimationWidget* 动画部件:对话框内的动画控件(用于动态装饰或反馈)
│ ├──15C//[逻辑值] 绘制标准背景:是否使用默认对话框背景样式
│ ├──160//LawnStoneButton* "是"按钮:石质风格的确认按钮
│ ├──164//LawnStoneButton* "否"按钮:石质风格的取消按钮
│ ├──168//[逻辑值] 底部加高:对话框底部是否加高(用于容纳更多按钮或内容)
│ ├──169//[逻辑值] 文本垂直居中:对话框中的文本是否在垂直方向上居中显示
ReanimationWidget** 动画部件类
│ ├──88//LawnApp* 应用程序指针:指向主游戏应用实例
│ ├──8C//Reanimation* 动画对象指针:指向实际执行的动画实例
│ ├──90//LawnDialog* 父对话框指针:指向所属的对话框(用于回调/通知)
│ ├──94//[浮点] X位置:动画在控件内的水平偏移
│ ├──98//[浮点] Y位置:动画在控件内的垂直偏移
Sexy::WidgetManager** 窗口管理器类
│ ├──54//Sexy::Widget* 默认Tab键目标:Tab键切换焦点的默认部件
│ ├──58//Sexy::Graphics* 当前图形上下文:指向当前正在使用的Graphics对象
│ ├──5C//Sexy::SexyAppBase* 应用程序指针:指向主应用程序实例
│ ├──60//Sexy::MemoryImage* 图像缓冲区:主渲染图像缓冲区
│ ├──64//Sexy::MemoryImage* 瞬态图像缓冲区:临时渲染图像(用于叠加层)
│ ├──68//[逻辑值] 上次是否有瞬态层:标记上一帧是否有瞬态内容
│ ├──6C//Sexy::Widget* 弹窗命令部件:当前弹出菜单的命令发起者
│ ├──70//std::vector<pair<Widget*,int>> 延迟叠加部件列表:存储需要延后绘制的覆盖层部件及其优先级
│ ├──80// 最小延迟覆盖优先级:延迟覆盖层的最小优先级阈值
│ ├──84//[逻辑值] 是否拥有焦点:窗口管理器是否持有输入焦点
│ ├──88//Sexy::Widget* 当前焦点部件:当前拥有键盘焦点的部件
│ ├──8C//Sexy::Widget* 上次按下部件:最后发生鼠标按下的部件
│ ├──90//Sexy::Widget* 悬停部件:当前鼠标悬停的部件
│ ├──94//Sexy::Widget* 基础模态部件:当前模态对话框的基础部件
│ ├──98//Sexy::FlagsMod 失去焦点标志修饰:焦点丢失时应用的标志修饰
│ ├──A0//Sexy::FlagsMod 模态下方标志修饰:被模态遮盖的部件应用的标志修饰
│ ├──A8//Sexy::FlagsMod 默认模态下方标志修饰:被模态遮盖的部件默认标志修饰
│ ├──B0//std::list<PreModalInfo> 模态前信息列表:模态窗口弹出前的状态信息列表(用于恢复)
│ ├──BC//Sexy::TRect<int> 鼠标目标矩形:鼠标光标的目标区域(用于自定义光标)
│ ├──CC//Sexy::TRect<int> 鼠标源矩形:鼠标光标图像的源矩形
│ ├──DC//[逻辑值] 鼠标是否在窗口内:标记鼠标是否位于管理器窗口区域内
│ ├──E0// 上次鼠标X坐标:记录上一帧的鼠标水平位置
│ ├──E4// 上次鼠标Y坐标:记录上一帧的鼠标垂直位置
│ ├──E8// 按下的按钮:当前按下的鼠标按钮状态(位掩码)
│ ├──EC// 实际按下的按钮:未经处理的原始鼠标按钮状态
│ ├──F0// 上次输入更新计数:记录上次处理输入时的更新计数
│ ├──F4//[255][逻辑值] 按键状态数组:255个键的按下状态(按虚拟键码索引)
│ ├──1F4// 上次按下的按钮ID:最后按下的鼠标按钮标识
│ ├──1F8// 部件标志:窗口部件的标志位集合
Sexy::FlagsMod** 标志修饰器结构体
0//添加标志:需要添加到目标上的标志位(按位或操作)
4//移除标志:需要从目标上移除的标志位(按位与反操作)
Sexy::Widget** 部件基类成员变量(最终整理)
│ ├──54//[逻辑值] 是否可见:控制部件是否显示
│ ├──55//[逻辑值] 鼠标可见:鼠标悬停时是否显示特殊状态
│ ├──56//[逻辑值] 是否禁用:禁用后不响应任何输入事件
│ ├──57//[逻辑值] 是否拥有焦点:当前是否持有键盘焦点
│ ├──58//[逻辑值] 是否按下:鼠标/触摸是否在当前部件上按下
│ ├──59//[逻辑值] 是否悬停:鼠标是否悬停在该部件上
│ ├──5A//[逻辑值] 是否有透明区域:标记部件是否需要透明渲染
│ ├──5C//std::vector<Sexy::Color> 颜色数组:存储部件在不同状态下的颜色(正常/悬停/按下/禁用等)
│ ├──6C//Sexy::Insets 鼠标边距:鼠标交互区域的额外内边距(扩大可点击区域)
│ ├──7C//[逻辑值] 显示手指光标:触摸/平板模式下是否显示手指形光标
│ ├──7D//[逻辑值] 是否想要焦点:该部件是否可接收焦点(Tab导航用)
│ ├──80//Sexy::Widget* 上一个Tab焦点:Tab键导航的上一个焦点部件
│ ├──84//Sexy::Widget* 下一个Tab焦点:Tab键导航的下一个焦点部件
Sexy::Graphics** 图形绘制类(扩展成员)
│ ├──0//Sexy::TPoint<int>* 点阵数据指针:指向多边形顶点数据(用于多边形填充)
│ ├──50//Sexy::Edge* 活动边缘列表指针:指向当前活动边缘列表(用于多边形填充/扫描线算法)
│ ├──54// 活动边缘数量:当前活动边缘列表中的边缘数量
│ ├──58// 顶点数量:当前多边形顶点的数量
│ ├──5C//std::list<Sexy::GraphicsState> 状态栈:存储图形状态的栈,用于 push/pop 操作
Sexy::Edge** 边缘结构体
│ ├──0//[浮点] 当前X坐标:当前扫描线位置处,边与扫描线的交点的X坐标(浮点数)
│ ├──8//[浮点] X增量:从当前扫描线到下一条扫描线时,交点的X坐标变化量(即 Δx / Δy,斜率的倒数)
│ ├──10// 顶点索引/边标识:边的编号或顶点索引(用于标识和排序)
│ ├──18//[浮点] 权重/混合值:边缘的权重或插值系数(用于颜色渐变、纹理映射等)
Sexy::GraphicsState 图形状态类
│ ├──0//Sexy::Image* 目标图像指针:指向当前绘制目标的图像对象(与 mStaticImage 共用偏移)
│ ├──4//[浮点] X轴平移:绘制时的水平偏移量
│ ├──8//[浮点] Y轴平移:绘制时的垂直偏移量
│ ├──C//[浮点] X轴缩放:水平缩放系数(1.0为原大小)
│ ├──10//[浮点] Y轴缩放:垂直缩放系数(1.0为原大小)
│ ├──14//[浮点] 缩放原点X:缩放中心点的X坐标
│ ├──18//[浮点] 缩放原点Y:缩放中心点的Y坐标
│ ├──1C//Sexy::TRect<int> 裁剪矩形:绘制区域的裁剪边界(只有矩形内的内容会被绘制)
│ ├──2C//Sexy::Color 颜色:当前绘制颜色(RGBA,用于着色/混合)
│ ├──3C//Sexy::Font* 字体指针:当前使用的字体对象
│ ├──40// 绘制模式:控制混合/绘制方式(如普通、叠加、乘法等)
│ ├──44//[逻辑值] 是否对图像着色:启用时,mColor 会与图像颜色混合
│ ├──45//[逻辑值] 快速拉伸:启用快速但低质量的图像拉伸算法
│ ├──46//[逻辑值] 写入彩色字符串:启用彩色文本绘制
│ ├──47//[逻辑值] 线性混合:启用线性插值混合模式
│ ├──48//[逻辑值] 是否为3D模式:标记当前是否处于3D渲染上下文
Sexy::TPoint** 二维点结构体
0//X坐标:点的水平位置
4//Y坐标:点的垂直位置
LawnEditWidget** 游戏文本编辑框类
│ ├──124//Sexy::Dialog* 对话框指针:指向包含该编辑框的父对话框
│ ├──128//[逻辑值] 自动首字母大写:是否自动将输入的第一个字母转换为大写
Sexy::Dialog** 对话框类
│ ├──8C//Sexy::DialogListener* 对话框监听器:接收对话框事件(按钮点击、关闭等)的回调接口
│ ├──90//Sexy::Image* 组件图像:对话框的背景图片(如边框、标题栏背景)
│ ├──94//Sexy::DialogButton* "是"按钮:确认/肯定按钮(通常为第一个按钮)
│ ├──98//Sexy::DialogButton* "否"按钮:取消/否定按钮(通常为第二个按钮)
│ ├──9C// 按钮数量:对话框中按钮的总数(0~3)
│ ├──A0//std::string 对话框标题:标题栏显示的文本
│ ├──BC//std::string 对话框底部文本:显示在按钮下方的说明文字
│ ├──D8//std::string 对话框内容行:主体显示的多行文本(支持换行符\n分隔)
│ ├──F4// 按钮模式:控制显示哪些按钮(仅确定/确定取消/是否等)
│ ├──F8//Sexy::Font* 标题字体:标题栏使用的字体
│ ├──FC//Sexy::Font* 内容字体:主体文本使用的字体
│ ├──100// 文本对齐方式:控制文本在对话框中的对齐(左/中/右)
│ ├──104// 行间距偏移:行与行之间的额外间距(像素)
│ ├──108// 按钮高度:所有按钮的统一高度
│ ├──10C//Sexy::Insets 背景边距:背景图片相对于对话框边框的内边距
│ ├──11C//Sexy::Insets 内容边距:文本内容相对于背景的内边距
│ ├──12C// 标题后间距:标题栏与主体内容之间的额外间距
│ ├──130//[逻辑值] 是否拖动中:标记用户是否正在拖动标题栏移动对话框
│ ├──134// 拖动起始鼠标X:开始拖动时鼠标相对于对话框的X偏移
│ ├──138// 拖动起始鼠标Y:开始拖动时鼠标相对于对话框的Y偏移
│ ├──13C// 对话框ID:唯一标识符,用于识别不同对话框
│ ├──140//[逻辑值] 是否模态:是否为模态对话框(阻塞下层交互)
│ ├──144// 结果值:对话框关闭时返回的结果(如按钮ID)
│ ├──148// 按钮水平间距:按钮之间的水平像素距离
│ ├──14C// 按钮侧边距:按钮距离对话框左右边缘的边距
Sexy::Font** 字体类(部分成员)
│ ├──4// 基线上升高度:从字体基线到字符顶部的距离(像素),用于垂直定位文本
│ ├──8// 基线上升边距:在基线上升高度之上添加的额外边距
│ ├──C// 字体高度:字符的总高度(从顶部到底部),通常等于 mAscent + mDescent
│ ├──10// 行间距偏移:多行文本时,行与行之间的额外间距(可正可负)
Sexy::Checkbox** 复选框部件类
│ ├──88//Sexy::CheckboxListener* 复选框监听器:接收复选框状态变化事件(选中/取消选中)的回调接口
│ ├──8C// 控件ID:唯一标识符,用于事件回调识别
│ ├──90//[逻辑值] 是否选中:复选框的当前选中状态
│ ├──94//Sexy::Image* 未选中图像:复选框在未选中状态时显示的图像
│ ├──98//Sexy::Image* 选中图像:复选框在选中状态时显示的图像
│ ├──9C//Sexy::TRect<int> 选中图像区域:从 mCheckedImage 中截取显示的矩形区域
│ ├──AC//Sexy::TRect<int> 未选中图像区域:从 mUncheckedImage 中截取显示的矩形区域
│ ├──BC//Sexy::Color 边框颜色:复选框边框的颜色
│ ├──CC//Sexy::Color 背景颜色:复选框背景的颜色
│ ├──DC//Sexy::Color 勾选颜色:复选框内部勾选标记的颜色
Sexy::Color** 颜色类
│ ├──0// 红色通道:颜色中的红色分量,取值范围 0-255
│ ├──4// 绿色通道:颜色中的绿色分量,取值范围 0-255
│ ├──8// 蓝色通道:颜色中的蓝色分量,取值范围 0-255
│ ├──C// Alpha通道:透明度分量,0(完全透明)~255(完全不透明)
OptionsDialog** 选项对话框类(扩展成员)
│ ├──158//LawnApp* 应用程序指针:指向主游戏应用实例
│ ├──15C//Sexy::Slider* 音乐音量滑块:控制背景音乐音量的滑块控件
│ ├──160//Sexy::Slider* 音效音量滑块:控制游戏音效音量的滑块控件
│ ├──164//Sexy::Checkbox* 全屏复选框:切换全屏/窗口模式的复选框
│ ├──168//Sexy::Checkbox* 硬件加速复选框:切换硬件加速(Direct3D)的复选框
│ ├──16C//LawnStoneButton* 图鉴按钮:打开植物/僵尸图鉴
│ ├──170//LawnStoneButton* 返回主菜单按钮:返回主菜单
│ ├──174//LawnStoneButton* 重新开始按钮:重新开始当前关卡
│ ├──178//NewLawnButton* 返回游戏按钮:关闭选项对话框,返回游戏
│ ├──17C//[逻辑值] 来自游戏选择器:标记选项对话框是从主菜单还是游戏内打开的
Sexy::Slider** 滑块控件类
│ ├──88//Sexy::SliderListener* 滑块监听器:接收滑块值变化事件(拖动/点击)的回调接口
│ ├──90//[浮点] 当前值:滑块的当前值,范围 0.0 ~ 1.0
│ ├──98// 控件ID:唯一标识符,用于事件回调识别
│ ├──9C//Sexy::Image* 轨道图像:滑块轨道的背景图像
│ ├──A0//Sexy::Image* 拇指图像:滑块可拖动的滑块头图像
│ ├──A4//[逻辑值] 是否拖动中:标记用户是否正在拖动滑块
│ ├──A8// 相对X坐标:鼠标点击/拖动时相对于滑块左边缘的X偏移
│ ├──AC// 相对Y坐标:鼠标点击/拖动时相对于滑块顶边缘的Y偏移
│ ├──B0//[逻辑值] 水平方向:滑块是否为水平方向(false 为垂直方向)
TodParticleHolder** 粒子系统持有器类
│ ├──0//DataArray<TodParticleSystem> 粒子系统数组:存储所有正在运行的粒子系统实例(如爆炸、火花、烟雾等完整特效)
│ ├──1C//DataArray<TodParticleEmitter> 粒子发射器数组:存储所有粒子发射器(负责生成粒子的源点,如持续喷发的火焰)
│ ├──38//DataArray<TodParticle> 粒子实例数组:存储所有独立粒子的数据(每个粒子是发射器生成的最小单元)
│ ├──54//TodAllocator 粒子链表节点分配器:为粒子链表节点管理内存分配
│ ├──68//TodAllocator 发射器链表节点分配器:为发射器链表节点管理内存分配
TodParticleEmitter** 粒子发射器类
│ ├──0//TodEmitterDefinition* 发射器定义指针:指向发射器的配置定义(粒子类型、生成速率、速度、颜色等)
│ ├──4//TodParticleSystem* 所属粒子系统指针:指向包含该发射器的父粒子系统
│ ├──8//TodList<enum ParticleID> 粒子列表:存储该发射器生成的所有粒子ID
│ ├──18//[浮点] 生成累积器:累积时间以控制粒子生成速率(达到阈值时生成一个粒子)
│ ├──1C//Sexy::SexyVector2 系统中心:发射器在场景中的中心位置
│ ├──24// 已生成粒子数:该发射器已生成的粒子总数
│ ├──28// 系统年龄:发射器已存活的帧数
│ ├──2C// 系统持续时间:发射器的最大存活时间(帧数)
│ ├──30//[浮点] 系统时间值:当前生命周期的归一化值(0.0~1.0)
│ ├──34//[浮点] 上次时间值:上一帧的时间值,用于插值计算
│ ├──38//[逻辑值] 是否死亡:标记发射器是否已失效
│ ├──3C//Sexy::Color 颜色覆盖:强制覆盖粒子的颜色
│ ├──4C//[逻辑值] 额外加法绘制覆盖:是否启用加法混合绘制
│ ├──50//[浮点] 缩放覆盖:强制覆盖粒子的缩放大小
│ ├──54//Sexy::Image* 图像覆盖:强制覆盖粒子使用的图像
│ ├──58//ParticleEmitterID 交叉淡变发射器ID:用于发射器间过渡的目标发射器ID
│ ├──5C// 发射器交叉淡变倒计时:淡变效果的剩余时间
│ ├──60// 帧覆盖:强制覆盖粒子显示的帧索引
│ ├──64//[10][浮点] 轨道插值数组:存储发射器轨道属性的插值数据
│ ├──8C//[2][4][浮点] 系统场插值数组:用于系统级效果的二维插值数据
TodParticle** 粒子实例类
│ ├──0//TodParticleEmitter* 所属发射器指针:指向生成该粒子的发射器
│ ├──4// 粒子持续时间:粒子的最大存活时间(帧数)
│ ├──8// 粒子年龄:粒子已存活的帧数(从0开始递增)
│ ├──C//[浮点] 粒子时间值:当前时间归一化值(0.0~1.0),用于控制粒子生命周期的进度
│ ├──10//[浮点] 上次时间值:上一帧的时间值,用于插值计算
│ ├──14//[浮点] 动画时间值:用于控制粒子动画播放的时间参数
│ ├──18//Sexy::SexyVector2 速度向量:粒子的当前速度(X/Y方向),决定运动轨迹
│ ├──20//Sexy::SexyVector2 位置向量:粒子的当前坐标(X/Y)
│ ├──28// 图像帧:粒子当前显示的图像帧索引(用于动画精灵表)
│ ├──2C//[浮点] 旋转角度:粒子的当前旋转角度(弧度)
│ ├──30//[浮点] 旋转速度:粒子每帧的旋转增量(弧度/帧)
│ ├──34//ParticleID 交叉淡变粒子ID:用于粒子间过渡/淡变的目标粒子ID
│ ├──38// 交叉淡变持续时间:淡变效果的持续时间(帧数)
│ ├──3C//[16][浮点] 粒子插值数组:存储粒子的颜色、大小、透明度等属性的插值数据
│ ├──7C//[2][4][浮点] 粒子场插值数组:用于粒子场效果的二维插值数据
ReanimLoopType** 动画循环类型枚举
0//循环播放:播放完最后一帧后回到第一帧继续循环,不保留最后一帧的持续时间
1//循环播放-保留最后一帧时长:循环播放,但最后一帧会完整显示其设定时长后再跳回第一帧
2//单次播放:从第一帧播放到最后一帧后停止,动画结束时不保留最后一帧
3//单次播放并保持:从第一帧播放到最后一帧后停止,并保持最后一帧的显示状态
4//单次播放-保留最后一帧时长:播放一次,最后一帧会完整显示其设定时长后停止(不保持)
5//单次播放-保留最后一帧时长并保持:播放一次,最后一帧完整显示其设定时长后停止,并保持最后一帧
Sexy::SexyMatrix3** 3x3矩阵类
│ ├──0//[3][3][浮点] 矩阵数组:3x3矩阵的二维数组表示
│ ├──0//[浮点] 矩阵元素 (0,0):缩放/旋转的X分量
│ ├──4//[浮点] 矩阵元素 (0,1):旋转的Y分量
│ ├──8//[浮点] 矩阵元素 (0,2):X方向的平移量
│ ├──C//[浮点] 矩阵元素 (1,0):旋转的X分量
│ ├──10//[浮点] 矩阵元素 (1,1):缩放/旋转的Y分量
│ ├──14//[浮点] 矩阵元素 (1,2):Y方向的平移量
│ ├──18//[浮点] 矩阵元素 (2,0):齐次坐标行,通常为0
│ ├──1C//[浮点] 矩阵元素 (2,1):齐次坐标行,通常为0
│ ├──20//[浮点] 矩阵元素 (2,2):齐次坐标行,通常为1
Reanimation** 动画实例类
│ ├──0//ReanimationType 动画类型:标识当前播放的动画(如行走、攻击、死亡等)
│ ├──4//[浮点] 当前动画时间:从动画开始到当前的播放进度(单位:秒)
│ ├──8//[浮点] 播放速率:速度倍率(1.0为正常,负值可倒放)
│ ├──C//ReanimatorDefinition* 动画定义指针:指向骨骼、关键帧、轨道等动画资源数据
│ ├──10//ReanimLoopType 循环方式:控制动画结束后的行为(不循环/循环/往返等)
│ ├──14//[逻辑值] 是否已终结:标记该动画是否已被销毁或完成播放
│ ├──18// 起始帧索引:动画从定义中的第几帧开始播放
│ ├──1C// 帧总数:该动画包含的有效帧数
│ ├──20// 基础姿势帧:用于骨骼混合的基础帧索引(如待机姿势)
│ ├──24//Sexy::SexyTransform2D 叠加变换矩阵:对整个动画施加额外的2D变换(位移/旋转/缩放)
│ ├──48//Sexy::Color 颜色覆盖:强制替换原动画的颜色(RGBA)
│ ├──58//ReanimatorTrackInstance* 轨道实例数组:每个骨骼/部件的独立动画数据(位置/旋转/缩放关键帧)
│ ├──5C// 已循环次数:记录该动画已重复播放的次数
│ ├──60//ReanimationHolder* 动画宿主指针:指向管理该动画的容器对象
│ ├──64//[逻辑值] 是否为子级动画:标记该动画是否附属于另一个动画对象
│ ├──68// 渲染层级:数值越大,绘制时越靠前(用于遮挡顺序)
│ ├──6C//Sexy::Color 加法混合颜色:用于发光/高亮效果的附加颜色(RGB叠加)
│ ├──7C//[逻辑值] 启用加法混合:是否开启发光/高亮的加法绘制效果
│ ├──80//Sexy::Color 覆盖混合颜色:用于染色/阴影效果的附加颜色(RGBA覆盖)
│ ├──90//[逻辑值] 启用覆盖混合:是否开启染色/阴影的覆盖绘制效果
│ ├──94//[浮点] 上一帧时间戳:记录上一帧的动画时间,用于计算帧增量
│ ├──98//FilterEffect 滤镜效果:当前应用的后期处理特效(如模糊、发光等)
ReanimatorDefinition** 动画定义类
│ ├──0//ReanimatorTrack* 轨道数组指针:指向动画轨道的数组,每个轨道控制一个骨骼/部件的动画
│ ├──4// 轨道数量:动画中轨道的总数
│ ├──8//[浮点] 帧率:动画的播放帧率(帧/秒),控制动画播放速度
│ ├──C//ReanimAtlas* 图集指针:指向包含动画所有图像的纹理图集
ReanimatorTrack** 动画轨道类
│ ├──0//char* 轨道名称:轨道的名称标识(如 "head"、"arm_left"、"body" 等)
│ ├──4//ReanimatorTransform* 变换数组指针:指向该轨道的变换关键帧数组
│ ├──8// 变换数量:该轨道中关键帧的总数
ReanimatorTransform** 动画变换关键帧结构体
│ ├──0//[浮点] X位置:骨骼/部件的水平位置偏移
│ ├──4//[浮点] Y位置:骨骼/部件的垂直位置偏移
│ ├──8//[浮点] X倾斜:水平方向的倾斜/错切角度(弧度)
│ ├──C//[浮点] Y倾斜:垂直方向的倾斜/错切角度(弧度)
│ ├──10//[浮点] X缩放:水平方向的缩放系数(1.0为原大小)
│ ├──14//[浮点] Y缩放:垂直方向的缩放系数(1.0为原大小)
│ ├──18//[浮点] 帧索引:当前关键帧对应的图像帧索引(支持浮点插值)
│ ├──1C//[浮点] 透明度:骨骼/部件的透明度值(0.0=完全透明,1.0=完全不透明)
│ ├──20//Sexy::Image* 图像指针:该关键帧使用的图像资源
│ ├──24//Sexy::Font* 字体指针:用于文本渲染的字体资源
│ ├──28//char* 文本字符串:该关键帧显示的文本内容(用于文字动画)
ReanimatorTrackInstance** 动画轨道实例类
│ ├──0// 混合计数器:混合动画的进度计数器(帧数)
│ ├──4// 混合时间:混合动画的总持续时间(帧数)
│ ├──8//ReanimatorTransform 混合变换:目标混合变换值,用于平滑过渡到指定状态
│ ├──34//[浮点] 抖动覆盖:抖动的强度覆盖值(0.0=无抖动)
│ ├──38//[浮点] 抖动X:当前帧的水平抖动幅度
│ ├──3C//[浮点] 抖动Y:当前帧的垂直抖动幅度
│ ├──40//AttachmentID 附着物ID:附着在该轨道上的子对象ID
│ ├──44//Sexy::Image* 图像覆盖:强制覆盖该轨道使用的图像
│ ├──48// 渲染组:该轨道所属的渲染分组(用于分层绘制)
│ ├──4C//Sexy::Color 轨道颜色:该轨道的颜色覆盖值
│ ├──5C//[逻辑值] 忽略裁剪矩形:是否忽略全局裁剪区域
│ ├──5D//[逻辑值] 截断消失帧:是否截断正在消失的帧(优化渲染)
Sexy::DDImage**
│ ├──6C//Sexy::DDInterface* DirectDraw接口指针:指向管理该图像的DDInterface实例
│ ├──70//IDirectDrawSurface* DirectDraw表面指针:实际的硬件表面对象
│ ├──74//[逻辑值] 表面已设置:标记表面是否已成功创建/绑定
│ ├──75//[逻辑值] 禁止锁定:是否禁止锁定表面(锁定用于像素访问)
│ ├──76//[逻辑值] 显存标志:图像是否存储在显存中(而非系统内存)
│ ├──77//[逻辑值] 首像素透明:是否使用第一个像素作为透明色键
│ ├──78//[逻辑值] 需要DD表面:是否请求创建DirectDraw表面
│ ├──79//[逻辑值] 绘制到位图:是否直接绘制到像素位图(绕过表面)
│ ├──7C// 锁定计数:表面被锁定的次数(嵌套锁定)
│ ├──80//_DDSURFACEDESC 锁定表面描述:锁定表面时获取的描述信息(大小约108字节)

文本对齐方式
0(左对齐) | 1(右对齐) | 2(居中对齐) | 3(左对齐,垂直居中) | 4(右对齐,垂直居中) | 5(完全居中)

物品类型
┌──CoinType枚举(掉落物品类型,int型)
├──0//(0)无,空类型
├──1//(1)银币,价值10
├──2//(2)金币,价值50
├──3//(3)钻石,价值高,禅境花园/关卡奖励
├──4//(4)普通阳光,价值25,向日葵产出
├──5//(5)小阳光,价值15,蘑菇类产出
├──6//(6)大阳光,价值50,阳光菇成熟/双子向日葵产出
├──7//(7)最终种子包,关卡末尾奖励的植物卡片
├──8//(8)奖杯,通关奖励
├──9//(9)铲子,解锁铲子道具
├──A//(10)图鉴,解锁图鉴功能
├──B//(11)车钥匙,剧情道具,疯狂戴夫的车
├──C//(12)花瓶,花瓶破碎者模式核心物品
├──D//(13)浇水壶,禅境花园道具
├──E//(14)玉米卷,剧情道具,疯狂戴夫要的玉米卷
├──F//(15)便条,剧情便条
├──10//(16)可用种子包,关卡内可拾取使用的种子
├──11//(17)盆栽植物礼物,禅境花园植物
├──12//(18)奖励金钱袋,关卡结算奖励
├──13//(19)奖励礼物
├──14//(20)钻石袋奖励
├──15//(21)银向日葵奖,冒险模式通关奖励
├──16//(22)金向日葵奖,全模式通关奖励
├──17//(23)巧克力,禅境花园喂蜗牛/加速植物成长
├──18//(24)奖励巧克力
├──19//(25)小游戏解锁礼物
└──1A//(26)解谜模式解锁礼物

掉落物品运动类型
┌──CoinMotion枚举(掉落物品运动类型,int型)
├──0//(0)从天空掉落,正常速度下落(阳光天降/关卡奖励掉落)
├──1//(1)从天空缓慢掉落,减速下落(夜间阳光天降,避免过快堆积)
├──2//(2)从植物产出,向日葵/阳光菇产阳光的弹出动画
├──3//(3)金币运动,金币/银币/钻石的标准掉落弹跳
├──4//(4)割草机掉落金币,割草机触发后沿途撒金币
├──5//(5)从礼物盒产出,打开礼物时的弹出动画
└──6//(6)从BOSS产出,击败BOSS后的掉落动画

僵尸动画
┌──ZombiePhase枚举(僵尸行为阶段,int型)
│
│ 【通用状态】
├──0//(0)正常行走,标准移动状态
├──1//(1)死亡动画,播放倒地死亡
├──2//(2)被烧死,火爆辣椒/樱桃炸弹击杀
├──3//(3)被割草机碾过,触发割草机秒杀
│
│ 【蹦极僵尸】
├──4//(4)俯冲下降,从天空俯冲
├──5//(5)尖叫俯冲,俯冲时尖叫
├──6//(6)到达底部,俯冲到底
├──7//(7)抓取植物,抓起目标植物
├──8//(8)上升离开,带着植物飞走
├──9//(9)撞到仙人掌,被仙人掌刺破
├──A//(10)过场动画,剧情演出
│
│ 【撑杆跳僵尸】
├──B//(11)跳跃前,撑杆准备跳跃
├──C//(12)跳跃中,空中跳跃
├──D//(13)跳跃后,跳跃落地继续行走
│
│ 【墓碑爬出】
├──E//(14)从墓碑爬出,夜间关卡墓碑生成僵尸
│
│ 【小丑僵尸】
├──F//(15)玩盒子跑动,带着盒子奔跑
├──10//(16)盒子弹开,盒子突然打开
│
│ 【雪橇车僵尸】
├──11//(17)滑行,雪橇车滑行
├──12//(18)上车,骑上雪橇车
├──13//(19)撞毁,雪橇车撞毁
│
│ 【跳跳僵尸】
├──14//(20)弹跳,正常弹跳前进
├──15//(21)高弹跳1,被磁力菇吸走弹簧后的弹跳序列
├──16//(22)高弹跳2
├──17//(23)高弹跳3
├──18//(24)高弹跳4
├──19//(25)高弹跳5
├──1A//(26)高弹跳6
├──1B//(27)向前弹跳2
├──1C//(28)向前弹跳7
│
│ 【读报僵尸】
├──1D//(29)阅读报纸,正常行走时读报
├──1E//(30)报纸被毁发狂,报纸被打掉后进入狂暴
├──1F//(31)发狂状态,狂暴行走
│
│ 【矿工僵尸】
├──20//(32)地下挖掘,挖掘前进
├──21//(33)从地下升起,挖到终点后升起
├──22//(34)无镐暂停挖掘,镐被磁力菇吸走后暂停
├──23//(35)无镐升起,没有镐的状态升起
├──24//(36)被眩晕,被麻醉菇冰冻
├──25//(37)行走,正常行走
├──26//(38)无镐行走,失去镐后行走
├──27//(39)过场动画,剧情演出
│
│ 【舞王僵尸】
├──28//(40)舞步进场,跳舞进场
├──29//(41)打响指,打响指召唤
├──2A//(42)打响指发光,打响指时发光特效
├──2B//(43)打响指保持,响指动作保持
├──2C//(44)舞步向左,向左舞步移动
├──2D//(45)行走准备召唤,走到召唤位置
├──2E//(46)左抬手召唤1,召唤伴舞僵尸
├──2F//(47)右抬手召唤1
├──30//(48)左抬手召唤2
├──31//(49)右抬手召唤2
├──32//(50)升起,从地下升起(伴舞僵尸)
│
│ 【海豚骑手僵尸】
├──33//(51)行走,陆地行走
├──34//(52)进入泳池,跳入水中
├──35//(53)骑乘海豚,骑海豚游泳
├──36//(54)跳跃中,跳过植物
├──37//(55)泳池中行走,游泳状态
├──38//(56)无海豚行走,海豚被摧毁后行走
│
│ 【潜水僵尸】
├──39//(57)行走,陆地行走
├──3A//(58)进入泳池,潜入水中
├──3B//(59)泳池中行走,水下潜游
├──3C//(60)上浮吃植物,上浮攻击
├──3D//(61)水下吃植物,水下啃食
├──3E//(62)下潜归位,吃完后下潜
│
│ 【僵尸水族馆】(小游戏专用)
├──3F//(63)加速游动
├──40//(64)漂移游动
├──41//(65)来回游动
├──42//(66)咬合攻击
│
│ 【投篮车僵尸】
├──43//(67)发射篮球,投掷篮球攻击
├──44//(68)重新装弹,装填篮球
│
│ 【巨人僵尸】
├──45//(69)投掷小鬼,投掷小鬼僵尸
├──46//(70)砸击,用电缆杆砸植物
│
│ 【小鬼僵尸】
├──47//(71)被投掷,被巨人扔出
├──48//(72)落地,落地后行走
│
│ 【气球僵尸】
├──49//(73)飞行,空中飘浮
├──4A//(74)气球爆炸,被针刺/飞针戳破
├──4B//(75)落地行走,气球破后行走
│
│ 【梯子僵尸】
├──4C//(76)携带梯子,背着梯子行走
├──4D//(77)放置梯子,将梯子架在坚果上
│
│ 【BOSS僵尸博士】
├──4E//(78)入场,BOSS进场
├──4F//(79)待机,待机状态
├──50//(80)生成僵尸,召唤僵尸
├──51//(81)践踏,用脚踩踏
├──52//(82)蹦极僵尸进场,召唤蹦极僵尸
├──53//(83)蹦极僵尸投放,蹦极投放僵尸
├──54//(84)蹦极僵尸离开,蹦极飞走
├──55//(85)投放房车,投放RV房车砸玩家
├──56//(86)头部进场,头部攻击进场
├──57//(87)头部吐息前待机
├──58//(88)头部吐息后待机
├──59//(89)头部吐息,喷吐火球/冰球
├──5A//(90)头部离开
│
│ 【雪人僵尸】
├──5B//(91)逃跑,被发现后逃跑
│
│ 【南瓜头僵尸】(未使用?可能是早期设计)
├──5C//(92)预跳跃,起跳准备
├──5D//(93)升空,跳起升空
├──5E//(94)下落,从空中落下
├──5F//(95)落地完成,落地结束
├──0x78// 僵亡出场
├──0x79// 僵亡站立
├──0x80// 僵亡放僵尸
├──0x81// 僵亡跺脚
├──0x83// 僵亡放蹦极
├──0x85 //僵亡砸车
├──0x86 //僵亡下头
├──0x87 //僵亡下头闲置
├──0x89 //僵亡吐球
├──0x90 //僵亡起身

僵尸高度状态
┌──ZombieHeight枚举(僵尸高度状态,int型)
├──0//(0)正常高度,地面行走状态
├──1//(1)进入泳池,从地面跳入水中
├──2//(2)离开泳池,从水中跳到地面
├──3//(3)被拖入水下,被海藻拖住下沉
├──4//(4)上高台,爬上屋顶高台
├──5//(5)下高台,从屋顶高台落下
├──6//(6)爬梯子,沿梯子上升
├──7//(7)下落,空中下落状态
├──8//(8)进入烟囱,屋顶关卡进入烟囱
├──9//(9)被蹦极投放,被蹦极僵尸放下
└──A//(10)僵尸水族馆,水族馆小游戏专用高度

僵尸渲染层级偏移
┌──ZombieRenderLayerOffset枚举(僵尸渲染层级偏移,int型)
├──0//(0)雪橇队员4,雪橇车最后方队员(绘制在最前)
├──1//(1)雪橇队员3
├──2//(2)雪橇队员2
├──3//(3)雪橇队员1,雪橇车最前方队员(绘制在最后)
├──4//(4)正常层级,标准渲染顺序
├──5//(5)遛狗人,遛狗僵尸(舞王僵尸?)
├──6//(6)狗,被遛的狗(伴舞僵尸?)
├──7//(7)矿工僵尸,地下挖掘时渲染层级调整
└──8//(8)雪橇车,冰车僵尸本体渲染层级

僵尸攻击类型
┌──ZombieAttackType枚举(僵尸攻击类型,int型)
├──0//(0)啃食,标准啃食攻击,逐步消耗植物血量
├──1//(1)碾过,开车碾过植物,秒杀判定(割草机/冰车)
├──2//(2)撑杆跳,跳跃越过植物,不造成伤害但跳过一格
└──3//(3)梯子,放置梯子在坚果上,允许其他僵尸翻越

戴夫状态ID
0x0 (0)	关闭/隐藏:疯狂戴夫不在场景中,完全不可见
0x1 (1)	进入中:疯狂戴夫正在从屏幕外进入场景(入场动画)
0x2 (2)	离开中:疯狂戴夫正在从场景中离开(退场动画)
0x3 (3)	空闲待机:疯狂戴夫在场景中站立,没有进行其他活动
0x4 (4)	对话中:疯狂戴夫正在与玩家对话(有对话气泡/文字)
0x5 (5)	递送物品并对话中:疯狂戴夫正在递送物品(如植物、道具)同时说话
0x6 (6)	递送物品并空闲中:疯狂戴夫递送完物品后,在等待玩家接收的状态
请先登录后发表评论 (・ω・)
  • 最后更改: 5周前
  • 由 113.123.193.229 修改