原创 用Scrapy爬動畫列表

數據來源: 番組計劃 動漫花園 爬動漫花園的話要設置ROBOTSTXT_OBEY = False items.py import scrapy class AnimeItem(scrapy.Item): name

原创 東方天空璋修改器相關地址

這裏的結果只適用於東方天空璋1.00a,以後出了新版本就要重新找地址了,不過思路一樣 相關變量地址 描述 地址 殘機數 4A57F4 bomb 4A5800 power 4A57E4 擦彈數 4A57C0

原创 C/C++的編碼轉換

本來以爲轉碼只能用第三方庫或者API的,沒想到標準庫也帶了轉碼的函數 C語言 用到wcstombs、mbstowcs,編碼要用setlocale設置,不過CRT增強版的_wcstombs_l和_mbstowcs_l可以設置局部的l

原创 Minecraft的世界生成過程(三)噪聲函數

接下來的地形生成代碼會接觸到噪聲函數,所以本篇內容就先逆向MC的噪聲函數吧 噪聲函數就是比較好看的隨機數,如果用純隨機數(白噪聲)不適合生成地形,但是噪聲函數就很適合 具體的噪聲介紹可以參考這篇文章,建議先閱讀一下,否則後面的算法

原创 Minecraft的世界生成過程(四)地表

本篇內容是生成起伏的地表和生物羣系,這部分應該是MC中的世界看上去變化多端的重點了 先回顧一下provideChunk: public Chunk provideChunk(int x, int z) {

原创 Minecraft的世界生成過程(六)村莊

本篇內容是生成村莊,生成其他建築的過程也差不多就不研究了(代碼太多也研究不完) 構造村莊組件數據 它的recursiveGenerate繼承自這裏,類名net.minecraft.world.gen.structure.MapGe

原创 Minecraft的爆炸算法

MC中的爆炸其實挺科學的,在空中爆炸衝擊波傳得遠,破壞範圍比較大;在地面爆炸破壞範圍小但是破壞深度較深 不科學的地方是它的爆炸範圍是正方體,只不過一般範圍小到看不出是正方體。至於爲什麼MOD裏的核彈爆炸範圍是球體,那是別人重新實現

原创 Minecraft的世界生成過程(五)洞穴

有了地形接下來該生成結構和建築了,由於這部分代碼很長,本篇只研究生成洞穴 完整的provideChunk: public Chunk provideChunk(int x, int z) { thi

原创 Minecraft的世界生成過程(七)礦物和樹

目前的世界是不是還少了點什麼——沒有樹、礦石怎麼致富! 本篇應該是最後一篇了,研究下樹和礦石之類的點綴的生成 populate函數 上一篇提到的,在provideChunk之後調用 /** * Populates

原创 手動加載DLL(PE文件)

以前學重載內核時學到了手動加載一個PE文件,想在Ring3層也實現一遍,不過在GitHub上看到有現成的源碼了就不自己寫了。本篇文章就分析一下這個mmLoader,看看怎麼實現手動加載PE文件 閱讀前需要了解PE文件結構,還不瞭解

原创 C++11實現生產者消費者模式

併發編程中,數據產生和數據處理在不同的線程,這些線程傳遞數據常用的就是生產者消費者模式 以下是模仿Java的BlockingQueue實現的生產者消費者模式: #pragma once #include <queue> #incl

原创 東方文花帖無敵修改器製作思路

有人問到像文花帖這樣沒有殘機數,一死就重置的遊戲怎麼做無敵功能,我想了下好像沒有什麼好辦法,不過憑着前作的經驗可以先找到玩家指針,然後找到玩家邏輯函數,看出玩家狀態偏移量,就可以找到miss函數了 首先找玩家指針,我想到了從自機

原创 C++模板實現單例模式

單例模式的代碼重複率太高,所以我就用模板來實現,提高了代碼複用率 單例模式的實現要點: 1. 構造函數私有 2. 暴露一個函數來獲取實例 可以用模板實現保存和獲取實例,子類只要繼承模板類就可以了 這裏有個問題就是子類的構造函數

原创 C++11實現觀察者模式

C++11中的std::function可以接受函數指針、std::bind、lambda表達式等函數,可以達到很鬆的耦合,簡直就是爲事件機制設計的。但是不能簡單判斷兩個std::function是不是同一函數,所以下面我用ID來

原创 遊戲修改器製作教程四:用API讀寫內存

本教程面向有C\C++基礎的人,最好還要懂一些Windows編程知識 代碼一律用Visual Studio 2013編譯,如果你還在用VC6請趁早丟掉它... 寫這個教程只是爲了讓玩家更好地體驗所愛的單機遊戲,順便學到些逆向知識,我不會用