Created the catsplosion utility
							parent
							
								
									4287abbc94
								
							
						
					
					
						commit
						c4f1c3d212
					
				| @ -1,83 +1,88 @@ | ||||
| # don't use this file directly. use the one in the root folder of the project | ||||
| 
 | ||||
| # this is required to ensure we use the right configuration for the system. | ||||
| IF(UNIX) | ||||
| add_definitions(-DLINUX_BUILD) | ||||
| ENDIF(UNIX) | ||||
| 
 | ||||
| # attachtest - 100x attach/detach, suspend/resume | ||||
| ADD_EXECUTABLE(dfattachtest attachtest.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfattachtest dfhack) | ||||
| 
 | ||||
| # a benchmark program, reads the map 1000x | ||||
| ADD_EXECUTABLE(dfexpbench expbench.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfexpbench dfhack) | ||||
| 
 | ||||
| # creaturedump - basic creature dump - a test of the creature related exports | ||||
| ADD_EXECUTABLE(dfcreaturedump creaturedump.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfcreaturedump dfhack) | ||||
| 
 | ||||
| # buildingsdump - dump buildings and their raw data filtered by type | ||||
| ADD_EXECUTABLE(dfbuildingsdump buildingsdump.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfbuildingsdump dfhack) | ||||
| 
 | ||||
| # materialtest - just list the first material of each type | ||||
| ADD_EXECUTABLE(dfmaterialtest materialtest.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfmaterialtest dfhack) | ||||
| 
 | ||||
| # position - check the DF window and cursor parameters | ||||
| ADD_EXECUTABLE(dfposition position.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfposition dfhack) | ||||
| 
 | ||||
| # suspendtest - test if suspend works. df should stop responding when suspended by dfhack | ||||
| ADD_EXECUTABLE(dfsuspend suspendtest.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfsuspend dfhack) | ||||
| 
 | ||||
| # itemdump - dump the item under the cursor | ||||
| ADD_EXECUTABLE(dfitemdump dfitemdump.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfitemdump dfhack) | ||||
| 
 | ||||
| # hotkeynotedump - dumps the hotkeys and notes for the loaded map | ||||
| # Author: belal | ||||
| ADD_EXECUTABLE(dfhotkeynotedump hotkeynotedump.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfhotkeynotedump dfhack) | ||||
| 
 | ||||
| # findnameindexes | ||||
| # Author: belal | ||||
| ADD_EXECUTABLE(dffindnameindexes findnameindexes.cpp) | ||||
| TARGET_LINK_LIBRARIES(dffindnameindexes dfhack) | ||||
| 
 | ||||
| # settlementdump - dumps the settlements on the loaded map | ||||
| # Author: belal | ||||
| ADD_EXECUTABLE(dfsettlementdump settlementdump.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfsettlementdump dfhack) | ||||
| 
 | ||||
| # veccheck - read vector values at address | ||||
| ADD_EXECUTABLE(dfvecc veccheck.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfvecc dfhack) | ||||
| 
 | ||||
| IF(UNIX) | ||||
|     # veinlook - look at the map... sort of | ||||
|     ADD_EXECUTABLE(dfveinlook veinlook.cpp) | ||||
|     TARGET_LINK_LIBRARIES(dfveinlook dfhack ncursesw) | ||||
| ENDIF(UNIX) | ||||
| 
 | ||||
| # renamer - change the custom names and professions of creatures, sends keys to df directly | ||||
| ADD_EXECUTABLE(dfrenamer renamer.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfrenamer dfhack) | ||||
| 
 | ||||
| IF(UNIX) | ||||
| install(TARGETS | ||||
| dfattachtest | ||||
| dfbuildingsdump | ||||
| dfcreaturedump | ||||
| dfitemdump | ||||
| dfexpbench | ||||
| dfmaterialtest | ||||
| dfposition | ||||
| dfrenamer | ||||
| dfsuspend | ||||
| dfveinlook | ||||
| RUNTIME DESTINATION bin | ||||
| ) | ||||
| ENDIF(UNIX) | ||||
| # don't use this file directly. use the one in the root folder of the project | ||||
| 
 | ||||
| # this is required to ensure we use the right configuration for the system. | ||||
| IF(UNIX) | ||||
| add_definitions(-DLINUX_BUILD) | ||||
| ENDIF(UNIX) | ||||
| 
 | ||||
| # attachtest - 100x attach/detach, suspend/resume | ||||
| ADD_EXECUTABLE(dfattachtest attachtest.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfattachtest dfhack) | ||||
| 
 | ||||
| # a benchmark program, reads the map 1000x | ||||
| ADD_EXECUTABLE(dfexpbench expbench.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfexpbench dfhack) | ||||
| 
 | ||||
| # creaturedump - basic creature dump - a test of the creature related exports | ||||
| ADD_EXECUTABLE(dfcreaturedump creaturedump.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfcreaturedump dfhack) | ||||
| 
 | ||||
| # buildingsdump - dump buildings and their raw data filtered by type | ||||
| ADD_EXECUTABLE(dfbuildingsdump buildingsdump.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfbuildingsdump dfhack) | ||||
| 
 | ||||
| # materialtest - just list the first material of each type | ||||
| ADD_EXECUTABLE(dfmaterialtest materialtest.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfmaterialtest dfhack) | ||||
| 
 | ||||
| # position - check the DF window and cursor parameters | ||||
| ADD_EXECUTABLE(dfposition position.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfposition dfhack) | ||||
| 
 | ||||
| # suspendtest - test if suspend works. df should stop responding when suspended by dfhack | ||||
| ADD_EXECUTABLE(dfsuspend suspendtest.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfsuspend dfhack) | ||||
| 
 | ||||
| # itemdump - dump the item under the cursor | ||||
| ADD_EXECUTABLE(dfitemdump dfitemdump.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfitemdump dfhack) | ||||
| 
 | ||||
| # hotkeynotedump - dumps the hotkeys and notes for the loaded map | ||||
| # Author: belal | ||||
| ADD_EXECUTABLE(dfhotkeynotedump hotkeynotedump.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfhotkeynotedump dfhack) | ||||
| 
 | ||||
| # findnameindexes | ||||
| # Author: belal | ||||
| ADD_EXECUTABLE(dffindnameindexes findnameindexes.cpp) | ||||
| TARGET_LINK_LIBRARIES(dffindnameindexes dfhack) | ||||
| 
 | ||||
| # settlementdump - dumps the settlements on the loaded map | ||||
| # Author: belal | ||||
| ADD_EXECUTABLE(dfsettlementdump settlementdump.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfsettlementdump dfhack) | ||||
| 
 | ||||
| # veccheck - read vector values at address | ||||
| ADD_EXECUTABLE(dfvecc veccheck.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfvecc dfhack) | ||||
| 
 | ||||
| # catsplosion - Makes every cat pregnant, and almost due... | ||||
| # Author: Zhentar | ||||
| ADD_EXECUTABLE(dfcatsplosion catsplosion.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfcatsplosion dfhack) | ||||
| 
 | ||||
| IF(UNIX) | ||||
|     # veinlook - look at the map... sort of | ||||
|     ADD_EXECUTABLE(dfveinlook veinlook.cpp) | ||||
|     TARGET_LINK_LIBRARIES(dfveinlook dfhack ncursesw) | ||||
| ENDIF(UNIX) | ||||
| 
 | ||||
| # renamer - change the custom names and professions of creatures, sends keys to df directly | ||||
| ADD_EXECUTABLE(dfrenamer renamer.cpp) | ||||
| TARGET_LINK_LIBRARIES(dfrenamer dfhack) | ||||
| 
 | ||||
| IF(UNIX) | ||||
| install(TARGETS | ||||
| dfattachtest | ||||
| dfbuildingsdump | ||||
| dfcreaturedump | ||||
| dfitemdump | ||||
| dfexpbench | ||||
| dfmaterialtest | ||||
| dfposition | ||||
| dfrenamer | ||||
| dfsuspend | ||||
| dfveinlook | ||||
| RUNTIME DESTINATION bin | ||||
| ) | ||||
| ENDIF(UNIX) | ||||
|  | ||||
| @ -0,0 +1,79 @@ | ||||
| // Catsplosion
 | ||||
| // By Zhentar
 | ||||
| // This work of evil makes every cat, male or female, grown or kitten, pregnant and due within 2 in-game hours...
 | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include <climits> | ||||
| #include <integers.h> | ||||
| #include <vector> | ||||
| using namespace std; | ||||
| 
 | ||||
| #include <DFTypes.h> | ||||
| #include <DFHackAPI.h> | ||||
| #include <DFMemInfo.h> | ||||
| #include <DFProcess.h> | ||||
| 
 | ||||
| 
 | ||||
| vector<DFHack::t_matgloss> creaturestypes; | ||||
| DFHack::memory_info *mem; | ||||
| DFHack::Process *proc; | ||||
| uint32_t creature_pregnancy_offset; | ||||
| 
 | ||||
| 
 | ||||
| int fertilizeCat(DFHack::API & DF, const DFHack::t_creature & creature) | ||||
| { | ||||
| 	if(string(creaturestypes[creature.type].id) == "CAT") | ||||
| 	{ | ||||
| 		proc->writeDWord(creature.origin + creature_pregnancy_offset, rand() % 100 + 1); | ||||
| 		return 1; | ||||
|     } | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main (void) | ||||
| { | ||||
|     DFHack::API DF("Memory.xml"); | ||||
|     if(!DF.Attach()) | ||||
|     { | ||||
|         cerr << "DF not found" << endl; | ||||
|         return 1; | ||||
|     }     | ||||
| 
 | ||||
| 
 | ||||
|     proc = DF.getProcess(); | ||||
|     mem = DF.getMemoryInfo(); | ||||
| 	creature_pregnancy_offset = mem->getOffset("creature_pregnancy"); | ||||
| 
 | ||||
|     if(!DF.ReadCreatureMatgloss(creaturestypes)) | ||||
|     { | ||||
|         cerr << "Can't get the creature types." << endl; | ||||
|         return 1;  | ||||
|     } | ||||
| 	 | ||||
|     uint32_t numCreatures; | ||||
|     if(!DF.InitReadCreatures(numCreatures)) | ||||
|     { | ||||
|         cerr << "Can't get creatures" << endl; | ||||
|         return 1; | ||||
|     } | ||||
| 
 | ||||
| 	int cats=0; | ||||
| 
 | ||||
|     for(uint32_t i = 0; i < numCreatures; i++) | ||||
|     { | ||||
|         DFHack::t_creature temp; | ||||
|         DF.ReadCreature(i,temp); | ||||
|         cats+=fertilizeCat(DF,temp); | ||||
|     } | ||||
| 
 | ||||
| 	cout << cats << " cats impregnated." << endl; | ||||
| 
 | ||||
|     DF.FinishReadCreatures(); | ||||
|     DF.Detach(); | ||||
|     #ifndef LINUX_BUILD | ||||
|     cout << "Done. Press any key to continue" << endl; | ||||
|     cin.ignore(); | ||||
|     #endif | ||||
|     return 0; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue