展鸿丶
展鸿丶
沙雕程序员。
关注数: 8
粉丝数: 1,091
发帖数: 6,290
关注贴吧数: 12
战略篇32 幕后事件还远远不会结束 继续挖坑,预定明天弄完。
战略篇31 幕后事件:迎击美利加王国作战 继续挖坑,天知道今天能不能弄完?
战略篇30 平凡的王也有野心 继续挖坑,今天应该能弄完吧?
战略篇29 某些事物已然改变 挖坑挖坑。不知道明天能不能填完。
战略篇28 谁才是敌对角色? 挖坑。不知道下午能不能搞完?感觉长句子挺多的。
战略篇27 平行线的两人 挖坑。 其实原版标题是 交わらない二人 直译就是不相交的两人。嗯,总觉得有什么不对是吧。
战略篇26 邻国的使者 嗯,坑先挖好。
战略篇25 返回邦德 挖坑。纯粹是因为难度较低。 顺便一提,上一话的坑我填上了
Visual Studio 2017 编译 MetaHook Plus 最近VS又更新了些奇怪的玩意导致之前的做法失效了,那么就来更新一下帖子。
大哥,高抬贵手
开坑? 有没有什么想了解的知识点呢? 注:仅限GoldSrc引擎和OpenGL有关的主题。 如果有看中的主题我会择个良辰吉日开坑
矩阵工具
这本小说有点意思···
【开坑】overview的使用方法
【开坑】雷达的写法
分享一块galgame硬盘 1楼防吞
101话 机翻√ 脑补√ 校对× 润色× 欢迎NTR
我来奶一口吧,下旬应该出101的
用高版本 Visual Studio 编译 MetaHook Plus 并正常运行(改) 这次介绍一个新方法,不用Hook引擎函数,也不用搞什么全局变量。 就非常皮。
球面线性插值
增加缓存数量(坑) 一楼不能放东西
如何在HL引擎中制作高清贴花? 一楼不能放东西
MetaHook Plugin - Flashbang Effect
GIF:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fi4.bvimg.com%2F504000%2F35ed1d4f4f781596.gif&urlrefer=88f9fbc8997b9fd51c0d15b047235a9a 这几天也是闲得**,更新了不少代码,就随便放个能截图的。 其它的 好像也没什么好看的,低调 低调
如何用高版本 Visual Studio 编译 MetaHook Plus 并正常运行? 其实我想BB一下原因和解决思路的,天都快亮了废话少说。 注意:这个方法比较临时工 注意:下面的 …… 表示原有的代码,不要动 打开 LoadBlob.cpp 找到 LoadBlobFile 这个函数,修改代码,如下: ………… for ( WORD j = 0; j <= pHeader->m_wSectionCount; j++ ) { DWORD dwProtect; VirtualProtect( (LPVOID)pSection[j].m_dwVirtualAddress, pSection[j].m_dwVirtualSize, PAGE_EXECUTE_READWRITE, &dwProtect ); ………… ………… } ………… 打开 metahook.cpp 在 #define CLIENTDLL_INIT_SIG_NEW (61行)下面加上: #define NLOADBLOBFILE_SIG "\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x54\x24\x04\x53\x56\x8B\x01\x57\x6A\x00\x68\x2A\x2A\x2A\x2A\x52\xFF\x50\x28\x8B\x0D" 接着找到 MH_LoadEngine 这个函数,修改代码,如下: ………… g_phClientDLL_Init = MH_InlineHook………… if ( g_bEngineIsBlob ) { void *pfnNLoadBlobFile = MH_SearchPattern( (void *)g_dwEngineBase, g_dwEngineSize, NLOADBLOBFILE_SIG, sizeof(NLOADBLOBFILE_SIG) - 1 ); if ( pfnNLoadBlobFile ) MH_InlineHook( pfnNLoadBlobFile, NLoadBlobFile, (void *&)pfnNLoadBlobFile ); } for ………… 然后编译出来的 MetaHook.exe 就可以跑3266版引擎了
今天回来一看,还是没有翻译,果断自己来。 渣翻,欢迎NTR。
教你用 PBO 做截图,做小屏幕 一楼不能放东西的
是时候科普一波PBO了 一楼不能放东西的
enginefuncs_t 中的函数详解 本文较为详细的为 enginefuncs_t 结构体中的函数做了注释。(即 AMXX 中的 EngFunc_ 系列函数) 如有错字、错误、或实际效果与注释有所出入、或需要补充的地方,请留言提出。
enginefuncs_t 中的函数详解 本文较为详细的为 enginefuncs_t 结构体中的函数做了注释。 如有错字、错误、或实际效果与注释有所出入、或需要补充的地方,请留言提出。
记 edict_t 实体的坑(2017-10-28) 这个坑十分隐蔽,Master Nagist 调试了一天才发现的,感谢 这里关系到 CBase**** 这些类,引擎创建实体的时候会 new CBase**** 来分配内存,因为重载过 new 操作符,所以实际上是引擎里的 Mem_Alloc 函数来分配内存,然后调用该类的构造函数。然而问题在于释放一个实体的时候(UTIL_Remove、RemoveEntity、FL_KILLME 等方法删除实体或引擎内部删除实体),引擎直接调用 Mem_Free 来释放 Mem_Alloc 分配的内存,并不会调用该类的析构函数,这意味着如果该类里有必须调用析构函数的成员对象(例如STL容器),那么该对象的析构函数将不会被调用,造成内存泄露。
groupinfo的基本用法 一楼不能放东西的
groupinfo的基本用法 如果你经常写AMXX,你应该会知道有个 pev->groupinfo 变量,但我猜大部分人都不会用这个变量,这个变量涉及很多实体处理功能,下面列举几个最常用的。 ① 玩家与非玩家实体之间的碰撞检测 ② 非玩家实体之间的碰撞检测 ③ Trace系列检测函数的目标过滤 下面我一个个介绍这些功能具体怎么实现和利用。 一、玩家与非玩家实体之间的碰撞检测(包括玩家与玩家) 玩家的移动处理是在pm_shared.c里PM_Move函数实现的(PM意为PlayerMove,HLSDK包含此文件),如果你走路撞上一些实体或者地图的墙体,你会无法前进,被挡住,这是因为 PM检查到你前方有障碍物,不让你继续前进。那么PM是怎么实现这个检查的呢?原来引擎为PM提供了一个专用的Trace函数,叫做PM_PlayerTrace,这个函数可以 模拟一个玩家大小的BOX朝指定位置移动,并返回途中碰到的实体,如果途中碰到了某个实体,这个实体正是“障碍物”,那么你将被这个障碍物阻挡,无法继续前进。
ShouldCollide函数(实体碰撞检查接口) ※ 简单说这个函数就可以控制两个实体是否可以产生碰撞 fakemeta也提供了这个接口的支持,使用方法如下: ------------------------------------------------------------------------------------ #define TRUE 1 #define FALSE 0 register_forward( FM_ShouldCollide, "OnShouldCollide" ); public OnShouldCollide( pentTouched, pentOther ) { forward_return( FMV_CELL, TRUE ); // 返回值在这里修改 //forward_return( FMV_CELL, FALSE ); return FMRES_SUPERCEDE; } ------------------------------------------------------------------------------------ 返回FALSE两个实体将不会产生碰撞 ※ 实际上这个接口是有点BUG的,具体情况自行体验
重写启动画面 效果:
94话 刚追到94话发现就没了,就很气,果断占个坑,垃圾脑补欢迎NTR
渲染其它视角下的场景 做镜子 摄像头 水面反射 什么的 就是这种操作 还可以渲染到一个CUBE纹理做成反射贴图,这样模型就能反射游戏场景了(虽然基本上没人这样做,因为开销很大) * 当然上述功能实际上没那么简单 代码:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fpan.baidu.com%2Fs%2F1cLbNHG&urlrefer=1b8de40d950f9f891af38db051c33b0c 例子(正后方视角):
MetaStudio 1.0 魔改MDL; ① 支持蒙皮动画; ② 支持关键帧动画; ③ 支持大量顶点和大量面数; ④ 支持硬件加速渲染; ⑤ 保留原版MDL必备特性; 不多BB,直接看代码吧; GIT.OSCHINA 上的项目; crsky/MetaStudio
教你怎么快速找到附件位置 首先打开模型SMD,选中附件跟随的那个关节。然后用关节工具创建一个新的关节; 这时候新的关节是基于刚才选中的关节的; 就会有一条线从刚才选中的关节连接到新创建的关节上;新关节创建出来后就调整一下位置; 这个位置就是你要做的附件的位置;记住新关节的名字,等下就要用;导出修改后的SMD为一个新文件,只是临时用的;用记事本打开导出的SMD,找到新创建的关节; 记住新关节的ID;往下看,从 time 0 开始往下找到新关节的ID的那一行; 这行数据记录了新关节的位置信息; 图中圈出来的3组小数就是新关节的坐标,而这个坐标是基于父关节的,这正是我们想要的附件坐标;打开QC,编写附件命令;编译QC文件,得到模型;
Meta Studio (水贴) MetaStudio是啥? 其实就是重写过的MDL文件结构、编译器以及渲染程序,姑且称为一种新的MDL模型格式 我知道你们对这些专业术语不感兴趣,那我就说点刺激的 此新格式支持如下特性: 可容纳大量顶点和模型面(可以过万,可以使用参数调整此上限) 动画数据仅保存关键帧(动画数量上限也是可以调整的) 可以外置的贴图文件,支持的图片格式视具体渲染程序而定,模型内部只保存贴图文件路径 顶点方面,支持蒙皮技术,每个顶点最多可以绑定4个关节(就是所谓的权重) 其它特性: 支持大部分原版MDL的功能,例如附件、Event、Hitbox等等必备功能 根据具体渲染程序的实现方法,可以利用shader使用显卡加速渲染,效率极高 (HL原版是用CPU计算模型顶点的,所以模型多了CPU会爆炸)我就水水,目前已经完成格式设计和基础的编译器,渲染程序也是拿HLMV改改出来给人看的 要应用到CS1.6里面,还需要MetaHook来搞定,
存有txt的快出来啦 前面很多话都被吞了
GIF: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fi4.bvimg.com%2F504000%2F49bce60823adf0d1.gif&urlrefer=be40aa852be8143d4a961930057669c2 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fi4.bvimg.com%2F504000%2F38acd9d17c51df8c.gif&urlrefer=481b5220ec0e7ae6838135f01f6f77ea http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fi4.bvimg.com%2F504000%2F2827539b1f665e54.gif&urlrefer=188f25b8d7674261444c1dda1747529c
【入门向】使用 MetaHook Plus 绘制HUD ! 请转到博客查看:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cnblogs.com%2Fcrsky%2Fp%2F6440832.html&urlrefer=69122d4776c9272dad7ed2bac943e84b (已更新完毕) 本教程(几乎)从零开始讲解如何编译、安装、运行 MetaHook Plus 以及插件。 本教程不需要玩家有多少C++功底,请放心食用。 如果你对C++代码部分不理解,建议去翻阅一点C++入门教程,理解之后就可以回来继续观看本教程。 本教程为了尽量简化说明步骤,忽略了很多细节,如果教程里有错误、错字或者误导的地方,请在帖子里留言或者博客里评论指出,谢谢。 博客上还有其它许多文章,大多是我探索HL这个引擎时的心得或者实用的代码,欢迎阅读~ http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cnblogs.com%2Fcrsky&urlrefer=e3b21f35526d43cb665b1372875a040b
CF Rez Explorer (以及有关的事情) CF Rez Explorer 乃本人原创程序,可用来预览CF的一些资源文件。 此软件在吾爱论坛首发,无任何收费,地址在此 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.52pojie.cn%2Fthread-473438-1-1.html&urlrefer=eff8c3c16ba517333033747cd9e5f10b 但今日有人联系我,有张截图表示有人拿这个免费程序(好像还包括了其它作者免费发布的工具)去卖钱,作为程序作者,对此事表示十分愤怒,希望吧友了解此事,请勿上了小人的当。 (证据的截图我就不放了,免得惹来键盘侠)
[386]【入门向】使用 MetaHook Plus 绘制 HUD 请转到博客查看:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cnblogs.com%2Fcrsky%2Fp%2F6440832.html&urlrefer=69122d4776c9272dad7ed2bac943e84b (尚未完坑,龟速更新中) 本教程(几乎)从零开始讲解如何编译、安装、运行 MetaHook Plus 以及插件。 本教程不需要玩家有多少C++功底,请放心食用。 如果你对C++代码部分不理解,建议去翻阅一点C++入门教程,理解之后就可以回来继续观看本教程。 本教程为了尽量简化说明步骤,忽略了很多细节,如果教程里有错误、错字或者误导的地方,请在帖子里留言或者博客里评论指出,谢谢。 为了让帖子没那麽寒酸,我就放一个可爱的男孩纸吧
动态的?影子 GIF1:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fi1.buimg.com%2F504000%2Fa529a1136c11e130.gif&urlrefer=4b37a7720c3bc539e8394d08cb0195b9 GIF2:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fi1.buimg.com%2F504000%2Fe73c11277dac2bfb.gif&urlrefer=a3253058b3851368fdb3f84a03e70ef1
看,这火眼好炫酷 GIF:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fi4.piimg.com%2F504000%2Fc471d8a2fd17bf15.gif&urlrefer=71a7a49baf0db595425cfa927b8a7d12
子弹计数器…?
发几张截图
不发点东西浑身难受
诶诶诶
[苟...]加载DDS文件(压缩纹理) 想必很多人都见过DDS这种文件,它是一个“图片文件”,如果你安装了某些看图软件,你可以直接双击打开它来进行预览。 那么,这种DDS文件和我们常见的TGA/PNG之类的文件有何不同呢? DDS和TGA/PNG/JPG之类的“图片文件” 一样,支持“压缩”,减少磁盘空间占用(把文件变小)。 通常我们要加载一个TGA或者PNG文件到OpenGL的时候,都要先把文件数据还原成RGB格式的像素数据,然后用glTexImage2D把像素数据传到显存。这个过程相当于“解压”,这通常非常消耗CPU资源,速度较慢。 但是DDS的压缩数据不需要“解压”就能直接传到显存,而且传到显存之后也不会解压,这极大减少了显存的使用量,并且提高了纹理加载速度,有绝对的优势。我们只需要读取好压缩数据,然后使用glCompressedTexImage2D(代替glTexImage2D)就可以直接把压缩数据传到显存,完成加载。 DDS可以保存许多种格式的像素数据,这里只讲最常用的3种(DXT1、DXT3、DXT5)。 * 当然DDS文件也能存储不压缩的像素数据。 为了在OpenGL中使用DDS压缩纹理(下文简称压缩纹理),我们需要一下2个OpenGL扩展: GL_ARB_texture_compression 提供函数 “glCompressedTexImage2D” GL_EXT_texture_compression_s3tc 提供以下格式的压缩纹理支持: GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 完整的加载过程代码(改改就能在MetaHook里用了): http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cnblogs.com%2Fcrsky%2Fp%2F6691611.html&urlrefer=41c83bc4a44c3e86ae908d8482c2ede4 关于如何制作一个DDS文件,可以使用Nvidia提供的DXT工具,下载地址: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fdeveloper.nvidia.com%2Flegacy-texture-tools&urlrefer=55db686f84b229db294118cf19a2251d http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1pKKRL3P&urlrefer=b0674c11aa74ab998700f8744e6fc55a 以下是文件大小对比:以下是图像质量对比: 原图(TGA,无压缩):DXT1(压缩比:1/8,无Alpha通道):DXT3(压缩包:1/4,Alpha通道还原较差):DXT5(压缩比:1/4,Alpha通道还原较好):
修复方块手插件 原帖地址:https://tieba.baidu.com/p/5015468534 为了体现效果,我特意做了一个方块手的模型; 可以看到手臂有明显的棱角,其实枪体也有,只是不明显;使用插件修复后,模型表现正常;插件下载地址:见原帖 顺便解释下会产生方块手现象的原因: 这是引擎的一个小BUG,引擎总是按照固定顺序绘制模型的每个Body,当有一个Body使用了一张Additive模式的贴图之后,那么它后面的Body就会全部产生“方块”效果,下面是我的测试模型的QC文件;“Plane”这个Body我使用了一张Additive模式的贴图,于是下面的“rhand”、“lhand”、“m4a1”这个几个模型都出现“方块”效果; 当枪体模型使用了Additive模式的贴图,手臂模型又排在枪体模型的后面,于是手臂模型就“方块”了; 这就是前辈们说的调整Body顺序来解决问题的原理; 炒这个冷饭的原因是今天一大早就有个老铁来问候我;
[苟...]修复模型方块手 为了体现效果,我特意做了一个方块手的模型; 可以看到手臂有明显的棱角,其实枪体也有,只是不明显;使用插件修复后,模型表现正常;插件下载地址:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1bprI3U3&urlrefer=de31e2aebbf054a33933e57b6bbe8d0c 顺便解释下会产生方块手现象的原因: 这是引擎的一个小BUG,引擎总是按照固定顺序绘制模型的每个Body,当有一个Body使用了一张Additive模式的贴图之后,那么它后面的Body就会全部产生“方块”效果,下面是我的测试模型的QC文件;“Plane”这个Body我使用了一张Additive模式的贴图,于是下面的“rhand”、“lhand”、“m4a1”这个几个模型都出现“方块”效果; 当枪体模型使用了Additive模式的贴图,手臂模型又排在枪体模型的后面,于是手臂模型就“方块”了; 这就是前辈们说的调整Body顺序来解决问题的原理; 炒这个冷饭的原因是今天一大早就有个老铁来问候我;
GIF:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fp1.bpimg.com%2F504000%2F8dea6a8751894e1a.gif&urlrefer=95641f64dd7eee7f7ba829c92c73fec2
某不科学的LTB导入插件 整理硬盘时发现的去年挖的坑,花了几个小时填了一下。 LTB导入插件,兹瓷(模型、UV、法线、骨架、权重、动画)导入,目前还不尽人意所以我就不发了。GIF LINK OUT http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fi1.piimg.com%2F504000%2F8a46ab09682ba485.gif&urlrefer=a45314d313d003e59b085def72a49108
HLMV 10 ① 增加切换左右手显示选项下载地址:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1skOiWvN&urlrefer=2c1e22f30ae2e863ccaeafb8806fe92d
看看守望先锋模型
[+1s]正确使用实体body属性 MDL可以由多个Part组成,例如:并且每个Part里还可以有多个Sub-model,例如:我们知道实体有一个body变量可以用来决定需要显示的Sub-model, 典型的例子就是武器模型多手臂,我们把实体的body设为0就会显示1号Sub-model了, ==================================== 我们有一个模型,它有2个Part, 这两个Part里分别有2个Sub-model, 假如我们要同时显示“1号Part的2号Sub-model”和“2号Part的1号Sub-model”, 但根据上文介绍,实体只有一个body变量,我们怎么决定每个Part的Sub-model呢? 观察一段绘制模型的代码:(看不懂可以跳过) +=======================+ index = currententity->curstate.body / pbodypart->base; index = index % pbodypart->nummodels; psubmodel = (mstudiomodel_t *)((byte *)pstudiohdr + pbodypart->modelindex) + index; +=======================+ 引擎使用特定的算法与实体的body属性运算得到每个Part需要绘制哪个Sub-model 因此我们只需要推算出body是多少,就可以完成上述需求。 人工计算太过繁琐,所以我编写了一个函数用来推算这个值: 代码:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fgit.oschina.net%2Fcrsky%2Fcodes%2F9rhgp13ta2cd5bvlsmn0o71&urlrefer=3aabfddfca1347543f269dec7fb3c827 函数返回值直接用作实体body属性即可。
[Model] Smoke Phoenix WeaponName: 凤舞云烟 PlayViewModel: PV-SGRENADE PlayViewModelFOV: 45.0 Rendering By MetaRenderer 1.5c ( With Normal mapping ) Models Download ( Models and Textures ) : http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1slIts2D&urlrefer=3c30504d56250022f9c1fdbb8fbc08f4
首页
1
2
下一页