#required libs: sudo aptitude install libghc-opengl-dev libghc-sdl-dev make hexedit gawk doom-wad-shareware prboom -y #get doom source code #http://sourceforge.net/projects/prboom/files/prboom%20stable/2.5.0/ wget "http://colocrossing.dl.sourceforge.net/project/prboom-plus/prboom-plus/2.5.1.3/prboom-plus-2.5.1.3.tar.gz" tar -xvf prboom-plus-2.5.1.3.tar.gz cd prboom-plus-2.5.1.3 ./configure make #move original compile mv src/prboom-plus src/doom1 #Change Player's default health and compile again vim +62 src/p_inter.c make #move new compile mv src/prboom-plus src/doom2 #compare the two files cmp -l src/doom1 src/doom2 | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}' 0000024D F3 D2 0000024E 69 D2 0000024F EE 3E 00000250 BD 0A 00000251 7B 1D 00000252 F8 D9 00000253 C3 76 00000254 3F ED 00000255 84 23 00000256 18 0B 00000257 57 1B 00000258 FD 6D 00000259 53 A6 0000025A B0 3D 0000025B C7 4F 0000025C EE 7F 0000025D CC 3B 0000025E 63 D7 0000025F E1 39 00000260 68 5F 00121849 64 E8 0012184A 00 03 #ignore all but last two line of output #open original binary in hexedit hexedit src/doom1 #press F4 and jump to 00121849 from above. #This position will very based on compiling. #so reference the command above. #make changes 64 to E8 and 00 to 03 #F2 to save and control-c to exit #other examples #max Ammo levels start a address 121800 #hex numbers #Hex to int perl -e "print unpack('v', pack('H*', '6400'));" #this will output 100 which is what health originally was perl -e "print unpack('v',pack('H*', 'e803'));" #This will output 1000 which is what we changed health to perl -e "print unpack('v',pack('H*', 'e802'));" #This is 744 because the second two digits move by intervals of 256 perl -e "print unpack('v',pack('H*', 'e80f'));" #4072 don't forget we are going from 0 to f perl -e "print unpack('v',pack('H*', '6300'));" #99 the first two digits get us the intervals from 0 to 255 perl -e "print unpack('v',pack('H*', 'ff00'));" #This is because 16*16=256 but we start at 0 perl -e "print unpack('v',pack('H*', 'E703'));" #This is 999 explained more below #The 'E' part. # 7 is 7. This column go to F which will be 15 - again because we start with 0 # 14*16=224 You multiply each value in this column by 16. F would be 16 but we start at 0 so F=15 and E=14 # 3*256=768 Everything in this column is multiplied by 256 # 0 is 0 but you would multiply everything in this column by 4096 because 256*16=4096 # So add it all together 14*16+7+3*256=999 #changing strings from the command line #626F6E75732E is hex for 'bonus' #6974656D2E20 is hex for 'item. ' - There is a space at the end to keep the strings the same length #hexdump converts the file to editable text #sed finds and replaces the strings in hexcode #xxd converts the editable text back into a binary file hexdump -ve '1/1 "%.2X"' ./src/doom2|sed "s/626F6E75732E/6974656D2E20/g"|xxd -r -p > src/doom3 chmod +x src/doom3